@context-forge/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +70 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/node.d.ts +6 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +10 -0
- package/dist/node.js.map +1 -0
- package/dist/services/ContextGenerator.d.ts +19 -0
- package/dist/services/ContextGenerator.d.ts.map +1 -0
- package/dist/services/ContextGenerator.js +66 -0
- package/dist/services/ContextGenerator.js.map +1 -0
- package/dist/services/ContextIntegrator.d.ts +84 -0
- package/dist/services/ContextIntegrator.d.ts.map +1 -0
- package/dist/services/ContextIntegrator.js +211 -0
- package/dist/services/ContextIntegrator.js.map +1 -0
- package/dist/services/ContextTemplateEngine.d.ts +65 -0
- package/dist/services/ContextTemplateEngine.d.ts.map +1 -0
- package/dist/services/ContextTemplateEngine.js +239 -0
- package/dist/services/ContextTemplateEngine.js.map +1 -0
- package/dist/services/CoreServiceFactory.d.ts +14 -0
- package/dist/services/CoreServiceFactory.d.ts.map +1 -0
- package/dist/services/CoreServiceFactory.js +23 -0
- package/dist/services/CoreServiceFactory.js.map +1 -0
- package/dist/services/ProjectPathService.d.ts +14 -0
- package/dist/services/ProjectPathService.d.ts.map +1 -0
- package/dist/services/ProjectPathService.js +142 -0
- package/dist/services/ProjectPathService.js.map +1 -0
- package/dist/services/SectionBuilder.d.ts +70 -0
- package/dist/services/SectionBuilder.d.ts.map +1 -0
- package/dist/services/SectionBuilder.js +303 -0
- package/dist/services/SectionBuilder.js.map +1 -0
- package/dist/services/StatementManager.d.ts +44 -0
- package/dist/services/StatementManager.d.ts.map +1 -0
- package/dist/services/StatementManager.js +216 -0
- package/dist/services/StatementManager.js.map +1 -0
- package/dist/services/SystemPromptParser.d.ts +72 -0
- package/dist/services/SystemPromptParser.d.ts.map +1 -0
- package/dist/services/SystemPromptParser.js +271 -0
- package/dist/services/SystemPromptParser.js.map +1 -0
- package/dist/services/TemplateProcessor.d.ts +35 -0
- package/dist/services/TemplateProcessor.d.ts.map +1 -0
- package/dist/services/TemplateProcessor.js +150 -0
- package/dist/services/TemplateProcessor.js.map +1 -0
- package/dist/services/constants.d.ts +8 -0
- package/dist/services/constants.d.ts.map +1 -0
- package/dist/services/constants.js +62 -0
- package/dist/services/constants.js.map +1 -0
- package/dist/services/index.d.ts +8 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +12 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/interfaces.d.ts +21 -0
- package/dist/services/interfaces.d.ts.map +1 -0
- package/dist/services/interfaces.js +2 -0
- package/dist/services/interfaces.js.map +1 -0
- package/dist/storage/FileProjectStore.d.ts +24 -0
- package/dist/storage/FileProjectStore.d.ts.map +1 -0
- package/dist/storage/FileProjectStore.js +141 -0
- package/dist/storage/FileProjectStore.js.map +1 -0
- package/dist/storage/FileStorageService.d.ts +14 -0
- package/dist/storage/FileStorageService.d.ts.map +1 -0
- package/dist/storage/FileStorageService.js +114 -0
- package/dist/storage/FileStorageService.js.map +1 -0
- package/dist/storage/backupService.d.ts +28 -0
- package/dist/storage/backupService.d.ts.map +1 -0
- package/dist/storage/backupService.js +84 -0
- package/dist/storage/backupService.js.map +1 -0
- package/dist/storage/index.d.ts +6 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +7 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/interfaces.d.ts +23 -0
- package/dist/storage/interfaces.d.ts.map +1 -0
- package/dist/storage/interfaces.js +2 -0
- package/dist/storage/interfaces.js.map +1 -0
- package/dist/storage/storagePaths.d.ts +9 -0
- package/dist/storage/storagePaths.d.ts.map +1 -0
- package/dist/storage/storagePaths.js +20 -0
- package/dist/storage/storagePaths.js.map +1 -0
- package/dist/types/context.d.ts +36 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +2 -0
- package/dist/types/context.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/paths.d.ts +18 -0
- package/dist/types/paths.d.ts.map +1 -0
- package/dist/types/paths.js +2 -0
- package/dist/types/paths.js.map +1 -0
- package/dist/types/project.d.ts +48 -0
- package/dist/types/project.d.ts.map +1 -0
- package/dist/types/project.js +2 -0
- package/dist/types/project.js.map +1 -0
- package/dist/types/prompts.d.ts +49 -0
- package/dist/types/prompts.d.ts.map +1 -0
- package/dist/types/prompts.js +10 -0
- package/dist/types/prompts.js.map +1 -0
- package/dist/types/sections.d.ts +64 -0
- package/dist/types/sections.d.ts.map +1 -0
- package/dist/types/sections.js +13 -0
- package/dist/types/sections.js.map +1 -0
- package/dist/types/statements.d.ts +40 -0
- package/dist/types/statements.d.ts.map +1 -0
- package/dist/types/statements.js +2 -0
- package/dist/types/statements.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import { TemplateProcessor } from './TemplateProcessor.js';
|
|
2
|
+
/**
|
|
3
|
+
* Service for building individual context sections
|
|
4
|
+
* Handles conditional logic, template processing, and section assembly
|
|
5
|
+
*/
|
|
6
|
+
export class SectionBuilder {
|
|
7
|
+
statementManager;
|
|
8
|
+
promptParser;
|
|
9
|
+
templateProcessor;
|
|
10
|
+
config;
|
|
11
|
+
constructor(statementManager, promptParser, config) {
|
|
12
|
+
this.statementManager = statementManager;
|
|
13
|
+
this.promptParser = promptParser;
|
|
14
|
+
this.templateProcessor = new TemplateProcessor();
|
|
15
|
+
this.config = {
|
|
16
|
+
includeEmptySections: false,
|
|
17
|
+
includeTitles: true,
|
|
18
|
+
sectionSeparator: '\n\n',
|
|
19
|
+
...config
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Build the tools and MCP section
|
|
24
|
+
*/
|
|
25
|
+
async buildToolsSection(data) {
|
|
26
|
+
try {
|
|
27
|
+
const toolIntro = this.statementManager.getStatement('tool-intro-statement');
|
|
28
|
+
const toolPrompt = await this.promptParser.getToolUsePrompt();
|
|
29
|
+
const mcpInfo = this.detectMCPAvailability(data);
|
|
30
|
+
const sections = [];
|
|
31
|
+
// Add intro statement
|
|
32
|
+
if (toolIntro) {
|
|
33
|
+
sections.push(toolIntro);
|
|
34
|
+
}
|
|
35
|
+
// Add available tools and MCP servers at the top
|
|
36
|
+
const toolsList = [];
|
|
37
|
+
// Add user-specified tools
|
|
38
|
+
if (data.customData?.availableTools && data.customData.availableTools.trim()) {
|
|
39
|
+
toolsList.push(`Tools: ${data.customData.availableTools}`);
|
|
40
|
+
}
|
|
41
|
+
// Add MCP servers (mcpInfo already includes "Available MCP servers:" prefix)
|
|
42
|
+
if (mcpInfo) {
|
|
43
|
+
toolsList.push(mcpInfo);
|
|
44
|
+
}
|
|
45
|
+
if (toolsList.length > 0) {
|
|
46
|
+
sections.push(toolsList.join('\n'));
|
|
47
|
+
}
|
|
48
|
+
// Add tool prompt if available
|
|
49
|
+
if (toolPrompt) {
|
|
50
|
+
const processedPrompt = this.templateProcessor.processTemplate(toolPrompt.content, data);
|
|
51
|
+
sections.push(processedPrompt);
|
|
52
|
+
}
|
|
53
|
+
// If no tools available, use fallback statement
|
|
54
|
+
if (sections.length === 0 || (!data.availableTools?.length && !data.mcpServers?.length)) {
|
|
55
|
+
const noToolsStatement = this.statementManager.getStatement('no-tools-statement');
|
|
56
|
+
return noToolsStatement || 'No additional tools or MCP servers detected.';
|
|
57
|
+
}
|
|
58
|
+
return sections.join('\n\n');
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.error('Error building tools section:', error);
|
|
62
|
+
return '';
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Build the monorepo-specific section
|
|
67
|
+
*/
|
|
68
|
+
buildMonorepoSection(data) {
|
|
69
|
+
try {
|
|
70
|
+
const monorepoStatement = this.statementManager.getStatement('monorepo-statement');
|
|
71
|
+
let baseStatement;
|
|
72
|
+
if (!monorepoStatement) {
|
|
73
|
+
baseStatement = `Project is configured as a monorepo. Working in package: ${data.template}, Slice: ${data.slice}`;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
baseStatement = this.templateProcessor.processTemplate(monorepoStatement, data);
|
|
77
|
+
}
|
|
78
|
+
// Append custom monorepo note if provided
|
|
79
|
+
const customNote = data.customData?.monorepoNote;
|
|
80
|
+
if (customNote && customNote.trim()) {
|
|
81
|
+
return `${baseStatement}\n\n${customNote.trim()}`;
|
|
82
|
+
}
|
|
83
|
+
return baseStatement;
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
console.error('Error building monorepo section:', error);
|
|
87
|
+
return '';
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Build the instruction section with appropriate system prompt
|
|
92
|
+
*/
|
|
93
|
+
async buildInstructionSection(data) {
|
|
94
|
+
try {
|
|
95
|
+
const intro = this.statementManager.getStatement('instruction-intro-statement');
|
|
96
|
+
const prompt = await this.promptParser.getPromptForInstruction(data.instruction);
|
|
97
|
+
const sections = [];
|
|
98
|
+
// Add intro if available
|
|
99
|
+
if (intro) {
|
|
100
|
+
sections.push(intro);
|
|
101
|
+
}
|
|
102
|
+
// Add instruction prompt
|
|
103
|
+
if (prompt) {
|
|
104
|
+
const processedPrompt = this.templateProcessor.processTemplate(prompt.content, data);
|
|
105
|
+
sections.push(processedPrompt);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
// Fallback for custom or unknown instructions
|
|
109
|
+
const customStatement = this.statementManager.getStatement('custom-instruction-statement');
|
|
110
|
+
if (customStatement) {
|
|
111
|
+
const processed = this.templateProcessor.processTemplate(customStatement, data);
|
|
112
|
+
sections.push(processed);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
sections.push(`Custom instruction: ${data.instruction}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return sections.join('\n\n');
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
console.error('Error building instruction section:', error);
|
|
122
|
+
return `Instruction: ${data.instruction}`;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Build the project information object section
|
|
127
|
+
*/
|
|
128
|
+
async buildProjectInfoSection(data) {
|
|
129
|
+
try {
|
|
130
|
+
const infoLines = [];
|
|
131
|
+
// Always include project name
|
|
132
|
+
infoLines.push(` project: ${data.projectName}`);
|
|
133
|
+
// Include template only for monorepo projects
|
|
134
|
+
if (data.isMonorepo && data.template && data.template !== 'default') {
|
|
135
|
+
infoLines.push(` template: ${data.template}`);
|
|
136
|
+
}
|
|
137
|
+
// Include current date if present (helps AI understand today's date)
|
|
138
|
+
if (data.projectDate) {
|
|
139
|
+
infoLines.push(` currentDate: ${data.projectDate}`);
|
|
140
|
+
}
|
|
141
|
+
// Include slice if present, or null if empty
|
|
142
|
+
if (data.slice && data.slice.trim()) {
|
|
143
|
+
infoLines.push(` slice: ${data.slice}`);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
infoLines.push(` slice: null`);
|
|
147
|
+
}
|
|
148
|
+
// Include task file if present
|
|
149
|
+
if (data.taskFile && data.taskFile.trim()) {
|
|
150
|
+
infoLines.push(` taskFile: ${data.taskFile}`);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
infoLines.push(` taskFile: null`);
|
|
154
|
+
}
|
|
155
|
+
// Include development phase if present
|
|
156
|
+
if (data.developmentPhase) {
|
|
157
|
+
infoLines.push(` phase: ${data.developmentPhase}`);
|
|
158
|
+
}
|
|
159
|
+
// Always include monorepo status
|
|
160
|
+
infoLines.push(` monorepo: ${data.isMonorepo}`);
|
|
161
|
+
return `### Current Work Context\n[\n${infoLines.join(',\n')}\n]`;
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
console.error('Error building project info section:', error);
|
|
165
|
+
return `### Current Work Context\n[\n project: ${data.projectName || 'unknown'}\n]`;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Build a generic section with content
|
|
170
|
+
*/
|
|
171
|
+
buildSection(section, data) {
|
|
172
|
+
try {
|
|
173
|
+
// Check conditional
|
|
174
|
+
if (section.conditional && section.condition) {
|
|
175
|
+
if (!section.condition(data)) {
|
|
176
|
+
return '';
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// Process content with template variables
|
|
180
|
+
const processedContent = this.templateProcessor.processTemplate(section.content, data);
|
|
181
|
+
// Skip empty sections if configured
|
|
182
|
+
if (!this.config.includeEmptySections && !processedContent.trim()) {
|
|
183
|
+
return '';
|
|
184
|
+
}
|
|
185
|
+
// Add title if configured and available
|
|
186
|
+
const parts = [];
|
|
187
|
+
if (this.config.includeTitles && section.title) {
|
|
188
|
+
parts.push(section.title);
|
|
189
|
+
}
|
|
190
|
+
if (processedContent) {
|
|
191
|
+
parts.push(processedContent);
|
|
192
|
+
}
|
|
193
|
+
return parts.join('\n\n');
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
console.error(`Error building section ${section.key}:`, error);
|
|
197
|
+
return '';
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Build current events section
|
|
202
|
+
*/
|
|
203
|
+
buildCurrentEventsSection(data) {
|
|
204
|
+
try {
|
|
205
|
+
const header = this.statementManager.getStatement('current-events-header');
|
|
206
|
+
const content = data.recentEvents;
|
|
207
|
+
if (!content || !content.trim()) {
|
|
208
|
+
return '';
|
|
209
|
+
}
|
|
210
|
+
const parts = [];
|
|
211
|
+
if (header) {
|
|
212
|
+
parts.push(header);
|
|
213
|
+
}
|
|
214
|
+
parts.push(content);
|
|
215
|
+
return parts.join('\n\n');
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
console.error('Error building current events section:', error);
|
|
219
|
+
return '';
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Build additional notes section
|
|
224
|
+
*/
|
|
225
|
+
buildAdditionalNotesSection(data) {
|
|
226
|
+
try {
|
|
227
|
+
const header = this.statementManager.getStatement('additional-notes-header');
|
|
228
|
+
const content = data.additionalNotes;
|
|
229
|
+
if (!content || !content.trim()) {
|
|
230
|
+
return '';
|
|
231
|
+
}
|
|
232
|
+
const parts = [];
|
|
233
|
+
if (header) {
|
|
234
|
+
parts.push(header);
|
|
235
|
+
}
|
|
236
|
+
parts.push(content);
|
|
237
|
+
return parts.join('\n\n');
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
console.error('Error building additional notes section:', error);
|
|
241
|
+
return '';
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Detect available MCP servers and return info
|
|
246
|
+
*/
|
|
247
|
+
detectMCPAvailability(data) {
|
|
248
|
+
// Placeholder implementation - will be enhanced later
|
|
249
|
+
if (!data.mcpServers || data.mcpServers.length === 0) {
|
|
250
|
+
return '';
|
|
251
|
+
}
|
|
252
|
+
return `Available MCP servers: ${data.mcpServers.join(', ')}`;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Detect available tools and return info
|
|
256
|
+
*/
|
|
257
|
+
detectAvailableTools(data) {
|
|
258
|
+
// Placeholder implementation - will be enhanced later
|
|
259
|
+
const defaultTools = [];
|
|
260
|
+
if (data.availableTools && data.availableTools.length > 0) {
|
|
261
|
+
return data.availableTools;
|
|
262
|
+
}
|
|
263
|
+
return defaultTools;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Check if tools or MCP are available
|
|
267
|
+
*/
|
|
268
|
+
hasToolsOrMCP(data) {
|
|
269
|
+
return !!((data.availableTools && data.availableTools.length > 0) ||
|
|
270
|
+
(data.mcpServers && data.mcpServers.length > 0));
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Validate section structure
|
|
274
|
+
*/
|
|
275
|
+
validateSection(section) {
|
|
276
|
+
const errors = [];
|
|
277
|
+
if (!section.key) {
|
|
278
|
+
errors.push('Section must have a key');
|
|
279
|
+
}
|
|
280
|
+
if (typeof section.order !== 'number') {
|
|
281
|
+
errors.push('Section must have a numeric order');
|
|
282
|
+
}
|
|
283
|
+
if (section.conditional && !section.condition) {
|
|
284
|
+
errors.push('Conditional section must have a condition function');
|
|
285
|
+
}
|
|
286
|
+
return {
|
|
287
|
+
isValid: errors.length === 0,
|
|
288
|
+
errors
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Create a section object
|
|
293
|
+
*/
|
|
294
|
+
createSection(key, content, order, options) {
|
|
295
|
+
return {
|
|
296
|
+
key,
|
|
297
|
+
content,
|
|
298
|
+
order,
|
|
299
|
+
...options
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=SectionBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SectionBuilder.js","sourceRoot":"","sources":["../../src/services/SectionBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { TemplateStatement } from '../types/statements.js';
|
|
2
|
+
/**
|
|
3
|
+
* Service for managing configurable template statements
|
|
4
|
+
* Loads statements from markdown files and provides CRUD operations
|
|
5
|
+
*/
|
|
6
|
+
export declare class StatementManager {
|
|
7
|
+
private statements;
|
|
8
|
+
private filePath;
|
|
9
|
+
private isLoaded;
|
|
10
|
+
constructor(filePath?: string);
|
|
11
|
+
/**
|
|
12
|
+
* Parse markdown file to extract statements from HTML comments
|
|
13
|
+
*/
|
|
14
|
+
private parseMarkdownStatements;
|
|
15
|
+
/**
|
|
16
|
+
* Load statements from markdown file
|
|
17
|
+
*/
|
|
18
|
+
loadStatements(): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Save statements back to markdown file
|
|
21
|
+
*/
|
|
22
|
+
saveStatements(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Get a specific statement by key
|
|
25
|
+
*/
|
|
26
|
+
getStatement(key: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Update a statement's content
|
|
29
|
+
*/
|
|
30
|
+
updateStatement(key: string, content: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* Get all statements
|
|
33
|
+
*/
|
|
34
|
+
getAllStatements(): Record<string, TemplateStatement>;
|
|
35
|
+
/**
|
|
36
|
+
* Set a new file path and reset loaded state
|
|
37
|
+
*/
|
|
38
|
+
setFilePath(path: string): void;
|
|
39
|
+
/**
|
|
40
|
+
* Reset statements to defaults
|
|
41
|
+
*/
|
|
42
|
+
resetToDefaults(): void;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=StatementManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatementManager.d.ts","sourceRoot":"","sources":["../../src/services/StatementManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,wBAAwB,CAAC;AAGjF;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAyC;IAC3D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,QAAQ,CAAC,EAAE,MAAM;IAU7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAyC/B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAuDrC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCrC;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAqBjC;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAsBnD;;OAEG;IACH,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IASrD;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM/B;;OAEG;IACH,eAAe,IAAI,IAAI;CAQxB"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { DEFAULT_STATEMENTS } from './constants.js';
|
|
4
|
+
/**
|
|
5
|
+
* Service for managing configurable template statements
|
|
6
|
+
* Loads statements from markdown files and provides CRUD operations
|
|
7
|
+
*/
|
|
8
|
+
export class StatementManager {
|
|
9
|
+
statements = {};
|
|
10
|
+
filePath;
|
|
11
|
+
isLoaded = false;
|
|
12
|
+
constructor(filePath) {
|
|
13
|
+
if (!filePath) {
|
|
14
|
+
throw new Error('StatementManager requires an explicit file path. ' +
|
|
15
|
+
'Configure a project path in the UI to resolve statement files.');
|
|
16
|
+
}
|
|
17
|
+
this.filePath = filePath;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Parse markdown file to extract statements from HTML comments
|
|
21
|
+
*/
|
|
22
|
+
parseMarkdownStatements(content) {
|
|
23
|
+
const statements = [];
|
|
24
|
+
// Split content into sections by headers
|
|
25
|
+
const sections = content.split(/^## /m).filter(section => section.trim());
|
|
26
|
+
// Pattern to extract metadata from HTML comments
|
|
27
|
+
const commentPattern = /<!--\s*key:\s*([^,]+),\s*editable:\s*(true|false)\s*-->/;
|
|
28
|
+
for (const section of sections) {
|
|
29
|
+
const lines = section.split('\n');
|
|
30
|
+
// Look for comment metadata
|
|
31
|
+
const commentMatch = lines.find(line => commentPattern.test(line));
|
|
32
|
+
if (commentMatch) {
|
|
33
|
+
const match = commentMatch.match(commentPattern);
|
|
34
|
+
if (match) {
|
|
35
|
+
const key = match[1].trim();
|
|
36
|
+
const editable = match[2] === 'true';
|
|
37
|
+
// Extract content after comment (everything after the comment line)
|
|
38
|
+
const commentIndex = lines.indexOf(commentMatch);
|
|
39
|
+
const contentLines = lines.slice(commentIndex + 1)
|
|
40
|
+
.filter(line => !line.match(/^##\s/)) // Stop at next section (## followed by space, not ###)
|
|
41
|
+
.join('\n')
|
|
42
|
+
.trim();
|
|
43
|
+
if (contentLines) {
|
|
44
|
+
statements.push({
|
|
45
|
+
key,
|
|
46
|
+
content: contentLines,
|
|
47
|
+
editable
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return statements;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Load statements from markdown file
|
|
57
|
+
*/
|
|
58
|
+
async loadStatements() {
|
|
59
|
+
try {
|
|
60
|
+
// Check if file exists
|
|
61
|
+
if (!fs.existsSync(this.filePath)) {
|
|
62
|
+
console.warn(`Statement file not found at ${this.filePath}, using defaults`);
|
|
63
|
+
// Deep copy defaults to avoid reference issues
|
|
64
|
+
this.statements = {};
|
|
65
|
+
for (const [key, statement] of Object.entries(DEFAULT_STATEMENTS)) {
|
|
66
|
+
this.statements[key] = { ...statement };
|
|
67
|
+
}
|
|
68
|
+
this.isLoaded = true;
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
// Read file content
|
|
72
|
+
const fileContent = fs.readFileSync(this.filePath, 'utf-8');
|
|
73
|
+
// Parse statements from markdown
|
|
74
|
+
const parsedStatements = this.parseMarkdownStatements(fileContent);
|
|
75
|
+
// Convert to statement objects
|
|
76
|
+
this.statements = {};
|
|
77
|
+
for (const parsed of parsedStatements) {
|
|
78
|
+
// Find description from defaults or create one
|
|
79
|
+
const defaultStatement = DEFAULT_STATEMENTS[parsed.key];
|
|
80
|
+
const description = defaultStatement?.description || `Statement: ${parsed.key}`;
|
|
81
|
+
this.statements[parsed.key] = {
|
|
82
|
+
key: parsed.key,
|
|
83
|
+
content: parsed.content,
|
|
84
|
+
description,
|
|
85
|
+
editable: parsed.editable
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
// Add any missing default statements
|
|
89
|
+
for (const [key, defaultStatement] of Object.entries(DEFAULT_STATEMENTS)) {
|
|
90
|
+
if (!this.statements[key]) {
|
|
91
|
+
console.warn(`Statement '${key}' not found in file, using default`);
|
|
92
|
+
this.statements[key] = { ...defaultStatement };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
this.isLoaded = true;
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
console.error('Error loading statements:', error);
|
|
99
|
+
// Fall back to defaults on any error (deep copy)
|
|
100
|
+
this.statements = {};
|
|
101
|
+
for (const [key, statement] of Object.entries(DEFAULT_STATEMENTS)) {
|
|
102
|
+
this.statements[key] = { ...statement };
|
|
103
|
+
}
|
|
104
|
+
this.isLoaded = true;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Save statements back to markdown file
|
|
109
|
+
*/
|
|
110
|
+
async saveStatements() {
|
|
111
|
+
try {
|
|
112
|
+
// Ensure directory exists
|
|
113
|
+
const dir = path.dirname(this.filePath);
|
|
114
|
+
if (!fs.existsSync(dir)) {
|
|
115
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
116
|
+
}
|
|
117
|
+
// Build markdown content
|
|
118
|
+
let content = `---
|
|
119
|
+
version: "1.0.0"
|
|
120
|
+
lastUpdated: "${new Date().toISOString().split('T')[0]}"
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
`;
|
|
124
|
+
// Add each statement as a section
|
|
125
|
+
for (const statement of Object.values(this.statements)) {
|
|
126
|
+
// Create header from key (convert kebab-case to Title Case)
|
|
127
|
+
const header = statement.key
|
|
128
|
+
.split('-')
|
|
129
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
|
130
|
+
.join(' ');
|
|
131
|
+
content += `## ${header}\n`;
|
|
132
|
+
content += `<!-- key: ${statement.key}, editable: ${statement.editable} -->\n\n`;
|
|
133
|
+
content += `${statement.content}\n\n`;
|
|
134
|
+
}
|
|
135
|
+
// Write atomically using temp file
|
|
136
|
+
const tempPath = `${this.filePath}.tmp`;
|
|
137
|
+
fs.writeFileSync(tempPath, content, 'utf-8');
|
|
138
|
+
fs.renameSync(tempPath, this.filePath);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
console.error('Error saving statements:', error);
|
|
142
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
143
|
+
throw new Error(`Failed to save statements: ${message}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get a specific statement by key
|
|
148
|
+
*/
|
|
149
|
+
getStatement(key) {
|
|
150
|
+
if (!this.isLoaded) {
|
|
151
|
+
throw new Error('Statements not loaded. Call loadStatements() first.');
|
|
152
|
+
}
|
|
153
|
+
const statement = this.statements[key];
|
|
154
|
+
if (!statement) {
|
|
155
|
+
// Try to find in defaults
|
|
156
|
+
const defaultStatement = DEFAULT_STATEMENTS[key];
|
|
157
|
+
if (defaultStatement) {
|
|
158
|
+
console.warn(`Statement '${key}' not found, using default`);
|
|
159
|
+
return defaultStatement.content;
|
|
160
|
+
}
|
|
161
|
+
console.warn(`Statement '${key}' not found, returning empty string`);
|
|
162
|
+
return '';
|
|
163
|
+
}
|
|
164
|
+
return statement.content;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Update a statement's content
|
|
168
|
+
*/
|
|
169
|
+
updateStatement(key, content) {
|
|
170
|
+
if (!this.isLoaded) {
|
|
171
|
+
throw new Error('Statements not loaded. Call loadStatements() first.');
|
|
172
|
+
}
|
|
173
|
+
const statement = this.statements[key];
|
|
174
|
+
if (!statement) {
|
|
175
|
+
throw new Error(`Statement '${key}' not found`);
|
|
176
|
+
}
|
|
177
|
+
if (!statement.editable) {
|
|
178
|
+
throw new Error(`Statement '${key}' is not editable`);
|
|
179
|
+
}
|
|
180
|
+
// Validate content
|
|
181
|
+
if (!content || content.trim().length === 0) {
|
|
182
|
+
throw new Error('Statement content cannot be empty');
|
|
183
|
+
}
|
|
184
|
+
statement.content = content;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get all statements
|
|
188
|
+
*/
|
|
189
|
+
getAllStatements() {
|
|
190
|
+
if (!this.isLoaded) {
|
|
191
|
+
throw new Error('Statements not loaded. Call loadStatements() first.');
|
|
192
|
+
}
|
|
193
|
+
// Return a copy to prevent external modifications
|
|
194
|
+
return { ...this.statements };
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Set a new file path and reset loaded state
|
|
198
|
+
*/
|
|
199
|
+
setFilePath(path) {
|
|
200
|
+
this.filePath = path;
|
|
201
|
+
this.isLoaded = false;
|
|
202
|
+
this.statements = {};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Reset statements to defaults
|
|
206
|
+
*/
|
|
207
|
+
resetToDefaults() {
|
|
208
|
+
// Create deep copy of defaults to avoid reference issues
|
|
209
|
+
this.statements = {};
|
|
210
|
+
for (const [key, statement] of Object.entries(DEFAULT_STATEMENTS)) {
|
|
211
|
+
this.statements[key] = { ...statement };
|
|
212
|
+
}
|
|
213
|
+
this.isLoaded = true;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=StatementManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatementManager.js","sourceRoot":"","sources":["../../src/services/StatementManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type SystemPrompt, type ParsedPromptFile } from '../types/prompts.js';
|
|
2
|
+
/**
|
|
3
|
+
* Service for parsing system prompts from the prompt.ai-project.system.md file
|
|
4
|
+
* Handles markdown section parsing, instruction mapping, and caching
|
|
5
|
+
*/
|
|
6
|
+
export declare class SystemPromptParser {
|
|
7
|
+
private promptsCache;
|
|
8
|
+
private filePath;
|
|
9
|
+
private static readonly CACHE_TTL_MS;
|
|
10
|
+
constructor(filePath?: string);
|
|
11
|
+
/**
|
|
12
|
+
* Parse the entire prompt file and extract all sections
|
|
13
|
+
*/
|
|
14
|
+
parsePromptFile(): Promise<ParsedPromptFile>;
|
|
15
|
+
/**
|
|
16
|
+
* Parse markdown sections using ##### headers
|
|
17
|
+
*/
|
|
18
|
+
private parseMarkdownSections;
|
|
19
|
+
/**
|
|
20
|
+
* Extract prompt content from section, handling markdown code blocks
|
|
21
|
+
*/
|
|
22
|
+
private extractPromptContent;
|
|
23
|
+
/**
|
|
24
|
+
* Generate a key from section header
|
|
25
|
+
*/
|
|
26
|
+
private generateKeyFromHeader;
|
|
27
|
+
/**
|
|
28
|
+
* Extract parameters from prompt content
|
|
29
|
+
*/
|
|
30
|
+
private extractParameters;
|
|
31
|
+
/**
|
|
32
|
+
* Get context initialization prompt (Model Change or Context Refresh)
|
|
33
|
+
* @param isMonorepo - If true, returns monorepo-specific version; otherwise returns regular version
|
|
34
|
+
*/
|
|
35
|
+
getContextInitializationPrompt(isMonorepo?: boolean): Promise<SystemPrompt | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Get tool use prompt (Use 3rd Party Tool)
|
|
38
|
+
*/
|
|
39
|
+
getToolUsePrompt(): Promise<SystemPrompt | null>;
|
|
40
|
+
/**
|
|
41
|
+
* Get prompt for specific instruction type
|
|
42
|
+
*/
|
|
43
|
+
getPromptForInstruction(instruction: string): Promise<SystemPrompt | null>;
|
|
44
|
+
/**
|
|
45
|
+
* Get all available prompts
|
|
46
|
+
*/
|
|
47
|
+
getAllPrompts(): Promise<SystemPrompt[]>;
|
|
48
|
+
/**
|
|
49
|
+
* Check cached prompts and return if valid
|
|
50
|
+
*/
|
|
51
|
+
private getCachedPrompts;
|
|
52
|
+
/**
|
|
53
|
+
* Cache parsed prompts with file modification time
|
|
54
|
+
*/
|
|
55
|
+
private cachePrompts;
|
|
56
|
+
/**
|
|
57
|
+
* Set a new file path and invalidate the cache
|
|
58
|
+
*/
|
|
59
|
+
setFilePath(path: string): void;
|
|
60
|
+
/**
|
|
61
|
+
* Clear cache (useful for testing or forced refresh)
|
|
62
|
+
*/
|
|
63
|
+
clearCache(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Validate prompt file structure
|
|
66
|
+
*/
|
|
67
|
+
validatePromptFile(): Promise<{
|
|
68
|
+
isValid: boolean;
|
|
69
|
+
errors: string[];
|
|
70
|
+
}>;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=SystemPromptParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SystemPromptParser.d.ts","sourceRoot":"","sources":["../../src/services/SystemPromptParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAyB,MAAM,qBAAqB,CAAC;AAEzH;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAiB;gBAEzC,QAAQ,CAAC,EAAE,MAAM;IAU7B;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC;IA4BlD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiC7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA6B5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAS7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;;OAGG;IACG,8BAA8B,CAAC,UAAU,GAAE,OAAe,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAyB/F;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAStD;;OAEG;IACG,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAehF;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAK9C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA0BxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAsBpB;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK/B;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAsC5E"}
|