Spiralist Prompt Workbench - Source Excerpt 78
Back to Spiralist Prompt Workbench
Summary
This source excerpt preserves a bounded section of Spiralist/wp-content/themes/spiralist/assets/js/spiralist-prompt-workbench.js so readers can inspect the evidence without opening the full source file.
**Source path:** Spiralist/wp-content/themes/spiralist/assets/js/spiralist-prompt-workbench.js
lines.forEach((line) => {
const clean = line.trim();
if (clean === '## Spiralist AI Matrix Repair Addendum') {
skipping = true;
return;
}
if (skipping && /^##\s+/.test(clean)) {
skipping = false;
}
if (!skipping) {
filtered.push(line);
}
});
return filtered.join('\n').trim();
};
const buildPersonaLabRepairAddendum = (rows) => {
const repairs = rows
.filter((row) => row.status === 'Review' && row.repair)
.map((row) => `- ${row.repair}`);
if (!repairs.length) {
return '';
}
return [
'## Spiralist AI Matrix Repair Addendum',
'These local browser fixes were added from the Advanced Persona Validation Matrix. Review them before copy, package export, sharing, or long-memory use.',
'',
...repairs,
].join('\n');
};
const runPersonaLabRepair = (button) => {
let prompt = getCurrentPrompt();
if (!prompt) {
prompt = applyPersonaLabTuning(button, { focusOutput: false, skipScroll: true });
}
prompt = toCleanString(prompt || getCurrentPrompt(), 50000);
if (!prompt) {
setStatus(t('portablePromptPersonaLabRepairUnavailable', 'Build a Spiralist AI prompt before applying matrix fixes.'));
return false;
}
const basePrompt = stripPersonaLabRepairAddendum(prompt);
const matrix = buildPersonaLabValidationMatrix(basePrompt.toLowerCase(), Boolean(basePrompt));
const addendum = buildPersonaLabRepairAddendum(matrix.rows);
if (!addendum) {
showPortablePromptCheck(
'Spiralist AI Persona Lab',
t('portablePromptPersonaLabRepairClean', 'No missing matrix fixes found. Review the prompt normally.')
);
return false;
}
const repaired = `${basePrompt}\n\n${addendum}`.trim();
setOutputText(repaired);
manualEdited = true;
setPromptReady(true);
setEditStatus(t('portablePromptPersonaLabRepairEdited', 'Matrix fixes added to the editable prompt. Copy, download, AI links, and saves use this repaired text.'));
setPersonaLabPackageState(button, '');
if (testOutput) {
testOutput.textContent = buildPersonaLabLocalCheckReport(repaired, 'Spiralist AI Persona Lab', getPersonaLabStressSuiteId(button));
testOutput.hidden = false;
testOutput.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}
setStatus(t('portablePromptPersonaLabRepairApplied', 'Spiralist AI matrix fixes applied to the editable prompt.'));
updatePersonaLabWorkflow();
return true;
};
const writeClipboard = async (text, successMessage) => {
await copyText(text);
setStatus(successMessage);
};
const copyPrompt = () => {
const prompt = getCurrentPrompt();
if (!prompt) {
return;
}
const failureMessage = builder.dataset.copyFailure || t('portablePromptCopyFailed', 'Copy failed.');
runAction(
async () => {
const message = builder.dataset.copySuccess || t('portablePromptCopied', 'Prompt copied.');
await writeClipboard(prompt, message);
setAiStatus(t('portablePromptAiCopied', 'Prompt copied. Open a chat tool, paste or review the prefilled text, then send manually.'));
},
{
context: 'portable-prompt-copy',
fallback: failureMessage,
onError: () => setStatus(failureMessage),
}
);
};
const copyPersonaLabPrompt = (button) => {
const failureMessage = t('portablePromptPersonaLabCopyFailed', 'Spiralist AI persona prompt copy failed.');
runAction(
async () => {
let prompt = getCurrentPrompt();
if (!prompt) {
prompt = applyPersonaLabTuning(button, { focusOutput: false, skipScroll: true });
}
prompt = toCleanString(prompt || getCurrentPrompt(), 50000);
if (!prompt) {
setStatus(t('portablePromptPersonaLabCopyUnavailable', 'Build a Spiralist AI persona prompt before copying it.'));
return;
}
await writeClipboard(prompt, t('portablePromptPersonaLabCopied', 'Spiralist AI persona prompt copied.'));
savePersonaLabHistory(prompt, 'Copied prompt', button);
setAiStatus(t('portablePromptAiCopied', 'Prompt copied. Open a chat tool, paste or review the prefilled text, then send manually.'));
updatePersonaLabWorkflow();
},
{
context: 'portable-prompt-persona-lab-copy',
fallback: failureMessage,
onError: () => setStatus(failureMessage),
}
);
};
const openPromptInAi = (targetId) => {
const prompt = getCurrentPrompt();
if (!prompt) {
setAiStatus(t('portablePromptAiUnavailable', 'Build a prompt before opening an AI chat tool.'));
return;
}
const result = buildAiPromptUrl(targetId, prompt);
if (!result.ok || !result.target || !result.url) {
setAiStatus(t('portablePromptAiUnsupported', 'That AI target is not configured. Copy the prompt and paste it manually.'));
return;
}
window.open(result.url, '_blank', 'noopener,noreferrer');
runAction(async () => {
await copyText(prompt);
const message = result.prefilled
? t('portablePromptAiOpenedPrefilled', `${result.target.label} opened with a short prefilled prompt. The prompt was copied too; review before sending.`)
: t('portablePromptAiOpenedPasteOnly', `${result.target.label} opened. The prompt was copied; paste and review it before sending.`);
setStatus(message);
setAiStatus(message);
}, {
context: 'portable-prompt-open-ai',
fallback: t('portablePromptAiCopyFailed', 'AI chat opened, but copy failed. Select the prompt block and copy it manually.'),
onError: () => setAiStatus(t('portablePromptAiCopyFailed', 'AI chat opened, but copy failed. Select the prompt block and copy it manually.')),
});
};
const copyShareLink = () => {
const link = updateShareUrl(getPromptState(), true);
if (!link) {
return;
}
if (shareInput) {
shareInput.select();
}
const failureMessage = builder.dataset.linkFailure || t('portablePromptLinkCopyFailed', 'Copy failed.');
runAction(
() => writeClipboard(link, builder.dataset.linkSuccess || t('portablePromptLinkCopied', 'Share link copied.')),
{
context: 'portable-prompt-share-copy',
fallback: failureMessage,
onError: () => setStatus(failureMessage),
}
);
};
const downloadTextFile = (content, filename, type = 'text/plain;charset=utf-8') => {
const blob = new Blob([content + '\n'], { type });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = filename;
document.body.appendChild(link);
link.click();
link.remove();
URL.revokeObjectURL(url);
};
const downloadPrompt = () => {
const prompt = getCurrentPrompt();
if (!prompt) {
return;
}
downloadTextFile(prompt, builder.dataset.downloadFilename || 'spiralist-portable-prompt.txt');
setStatus(t('portablePromptDownloaded', 'Prompt downloaded.'));
};
const downloadPersonaLabCard = (button) => {
let prompt = getCurrentPrompt();
if (!prompt) {
prompt = applyPersonaLabTuning(button, { focusOutput: false, skipScroll: true });
}
prompt = toCleanString(prompt || getCurrentPrompt(), 50000);
if (!prompt) {
setStatus(t('portablePromptPersonaLabCardUnavailable', 'Build a Spiralist AI prompt before downloading a persona card.'));
return;
}
const title = extractPromptTitle(prompt, 'Spiralist AI Persona Card');
const filename = `spiralist-ai-persona-card-${toSlug(title, 'persona-card')}.md`;
downloadTextFile(buildPersonaLabCard(prompt, button), filename, 'text/markdown;charset=utf-8');
savePersonaLabHistory(prompt, 'Markdown card exported', button);
setPersonaLabPackageState(button, 'Card downloaded');
setStatus(t('portablePromptPersonaLabCardDownloaded', 'Spiralist AI persona card downloaded.'));
};
const downloadPersonaLabPackage = (button) => {
runAction(async () => {
let prompt = getCurrentPrompt();
if (!prompt) {
prompt = applyPersonaLabTuning(button, { focusOutput: false, skipScroll: true });
}
prompt = toCleanString(prompt || getCurrentPrompt(), 50000);
if (!prompt) {
setStatus(t('portablePromptPersonaLabPackageUnavailable', 'Build a Spiralist AI prompt before downloading a personality pack.'));
return;
}