aboutsummaryrefslogtreecommitdiff
path: root/modules/core/module-dynamicprompts.js
diff options
context:
space:
mode:
Diffstat (limited to 'modules/core/module-dynamicprompts.js')
-rw-r--r--modules/core/module-dynamicprompts.js102
1 files changed, 102 insertions, 0 deletions
diff --git a/modules/core/module-dynamicprompts.js b/modules/core/module-dynamicprompts.js
new file mode 100644
index 0000000..ff8c5ea
--- /dev/null
+++ b/modules/core/module-dynamicprompts.js
@@ -0,0 +1,102 @@
+// Extracted from newOS4 index.html — DynamicPromptsModule
+ class DynamicPromptsModule {
+ constructor() {
+ this.commands = {}; this.terminal = null;
+ this.prompts = this.loadPrompts(); this.variables = {};
+ }
+ getHelpInfo() {
+ return {
+ 'prompt': 'prompt <name> [additional-text] — Use a saved prompt template',
+ 'prompt-save': 'prompt-save <name> <template> — Save a new prompt template',
+ 'prompt-list': 'prompt-list — List all saved prompt templates',
+ 'prompt-delete': 'prompt-delete <name> — Delete a saved prompt',
+ 'prompt-var': 'prompt-var <name> <value> — 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 <name> [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(`<div class="output-line ollama" style="margin-top: 5px;">
+ <button class="copy-btn" onclick="navigator.clipboard.writeText(this.parentElement.innerText.replace('Copy','').trim())">Copy</button>
+ ${finalPrompt}
+ </div>`);
+ this.terminal.print("\nUse with: ai <generated-prompt>", "info");
+ }
+ savePrompt(args) {
+ if (args.length < 2) {
+ this.terminal.print("Usage: prompt-save <name> <template>", "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 <name>", "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 <name> <value>", "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]}`); });
+ }
+ }