// Extracted from newOS4 index.html — DynamicPromptsModule
class DynamicPromptsModule {
constructor() {
this.commands = {}; this.terminal = null;
this.prompts = this.loadPrompts(); this.variables = {};
}
getHelpInfo() {
return {
'prompt': 'prompt [additional-text] — Use a saved prompt template',
'prompt-save': 'prompt-save — Save a new prompt template',
'prompt-list': 'prompt-list — List all saved prompt templates',
'prompt-delete': 'prompt-delete — Delete a saved prompt',
'prompt-var': 'prompt-var — Set a template variable',
'prompt-vars': 'prompt-vars — List all template variables'
};
}
loadPrompts() {
try {
const saved = localStorage.getItem('webx11_prompts');
return saved ? JSON.parse(saved) : {};
} catch (e) { return {}; }
}
savePrompts() {
localStorage.setItem('webx11_prompts', JSON.stringify(this.prompts));
}
registerCommands() {
this.commands['prompt'] = (args) => this.usePrompt(args);
this.commands['prompt-save'] = (args) => this.savePrompt(args);
this.commands['prompt-list'] = () => this.listPrompts();
this.commands['prompt-delete'] = (args) => this.deletePrompt(args);
this.commands['prompt-var'] = (args) => this.setVariable(args);
this.commands['prompt-vars'] = () => this.listVariables();
}
usePrompt(args) {
if (!args[0]) {
this.terminal.print("Usage: prompt [additional-text]", "warning"); return;
}
const name = args[0], additional = args.slice(1).join(' ');
if (!this.prompts[name]) {
this.terminal.print(`Prompt '${name}' not found`, "error"); return;
}
let template = this.prompts[name].template;
Object.entries(this.variables).forEach(([k, v]) => {
template = template.replace(new RegExp(`\\{${k}\\}`, 'g'), v);
});
const finalPrompt = additional ? `${template} ${additional}` : template;
this.terminal.print("=== Generated Prompt ===", "info");
this.terminal.printHTML(`
${finalPrompt}
`);
this.terminal.print("\nUse with: ai ", "info");
}
savePrompt(args) {
if (args.length < 2) {
this.terminal.print("Usage: prompt-save ", "warning"); return;
}
const name = args[0], template = args.slice(1).join(' ');
this.prompts[name] = { template, created: new Date().toISOString() };
this.savePrompts();
this.terminal.print(`Prompt '${name}' saved`, "success");
}
listPrompts() {
const names = Object.keys(this.prompts);
if (names.length === 0) {
this.terminal.print("No saved prompts", "info"); return;
}
this.terminal.print("=== Saved Prompts ===", "info");
names.forEach(name => {
const p = this.prompts[name];
this.terminal.print(`📝 ${name}: ${p.template.substring(0, 50)}...`);
});
}
deletePrompt(args) {
if (!args[0]) {
this.terminal.print("Usage: prompt-delete ", "warning"); return;
}
if (this.prompts[args[0]]) {
delete this.prompts[args[0]];
this.savePrompts();
this.terminal.print(`Prompt '${args[0]}' deleted`, "success");
} else {
this.terminal.print(`Prompt '${args[0]}' not found`, "error");
}
}
setVariable(args) {
if (args.length < 2) {
this.terminal.print("Usage: prompt-var ", "warning"); return;
}
const name = args[0], value = args.slice(1).join(' ');
this.variables[name] = value;
this.terminal.print(`Variable set: ${name} = ${value}`, "success");
}
listVariables() {
const names = Object.keys(this.variables);
if (names.length === 0) {
this.terminal.print("No variables set", "info"); return;
}
this.terminal.print("=== Variables ===", "info");
names.forEach(name => { this.terminal.print(`${name}: ${this.variables[name]}`); });
}
}