Skip to content
wiki.fftac.org

Spiralist Prompt Workbench - Source Excerpt 86

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

schedulePromptBoxEditDetection();
      });
      outputObserver.observe(output, {
        childList: true,
        characterData: true,
        subtree: true,
      });
    }
    document.addEventListener(promptDraftLoadEvent, (event) => {
      const detail = event.detail || {};
      const draft = detail.draft || {};
      if (detail.handled || draft.type === 'character') {
        return;
      }

      const prompt = toCleanString(draft.prompt, 50000);
      if (!prompt) {
        return;
      }

      setOutputText(prompt);
      manualEdited = true;
      setPromptReady(true);
      if (shareInput && draft.setupUrl) {
        shareInput.value = draft.setupUrl;
      }
      setEditStatus(t('portablePromptDraftLoadedEditReady', 'Saved draft loaded into the editable prompt box. Copy, download, AI links, and saves use this text.'));
      setStatus(t('portablePromptDraftLoaded', 'Saved prompt draft loaded.'));
      detail.handled = true;
    });
    starterButtons.forEach((starter) => {
      starter.addEventListener('click', () => {
        const personaLabStarter = starter.closest('#persona-lab');
        selectMode(starter.dataset.mode || defaultMode);
        setSelectedStarter(starter);
        setFieldValue('subject', starter.dataset.subject || '');
        setFieldValue('task', starter.dataset.task || '');
        setFieldValue('context', starter.dataset.context || '');
        setFieldValue('tone', starter.dataset.tone || '');
        setFieldValue('output_format', starter.dataset.outputFormat || '');
        setFieldValue('guardrails', starter.dataset.guardrails || '');
        if (manualBuilderPanel && !personaLabStarter) {
          manualBuilderPanel.open = true;
        }
        buildPortablePrompt({ status: t('portablePromptStarterLoaded', 'Starter loaded.') });
        if (personaLabStarter) {
          updatePersonaLabWorkflow();
          return;
        }

        builder.scrollIntoView({ behavior: 'smooth', block: 'start' });
        const focusTarget = form.querySelector('[name="subject"]');
        if (focusTarget && typeof focusTarget.focus === 'function') {
          window.setTimeout(() => focusTarget.focus({ preventScroll: true }), 220);
        }
      });
    });
    personaLabViewButtons.forEach((button) => {
      button.addEventListener('click', () => {
        const selectedView = setPersonaLabView(button, button.dataset.personaLabView || 'quick');
        setStatus(t('portablePromptPersonaLabViewChanged', `Spiralist AI Persona Lab ${selectedView} view selected.`));
      });
    });
    personaLabApplyButtons.forEach((button) => {
      button.addEventListener('click', () => applyPersonaLabTuning(button));
    });
    personaLabCheckButtons.forEach((button) => {
      button.addEventListener('click', () => runPersonaLabCheck(button));
    });
    personaLabCopyButtons.forEach((button) => {
      button.addEventListener('click', () => copyPersonaLabPrompt(button));
    });
    personaLabCompactHandoffButtons.forEach((button) => {
      button.addEventListener('click', () => runPersonaLabCompactHandoff(button));
    });
    personaLabLaunchKitButtons.forEach((button) => {
      button.addEventListener('click', () => runPersonaLabLaunchKit(button));
    });
    personaLabStarterKitButtons.forEach((button) => {
      button.addEventListener('click', () => runPersonaLabStarterKit(button));
    });
    personaLabDriftCheckButtons.forEach((button) => {
      button.addEventListener('click', () => runPersonaLabDriftCheck(button));
    });
    personaLabRevisionLedgerButtons.forEach((button) => {
      button.addEventListener('click', () => runPersonaLabRevisionLedger(button));
    });
    personaLabTrimPlanButtons.forEach((button) => {
      button.addEventListener('click', () => runPersonaLabTrimPlan(button));
    });
    personaLabRepairButtons.forEach((button) => {
      button.addEventListener('click', () => runPersonaLabRepair(button));
    });
    personaLabSessionBriefButtons.forEach((button) => {
      button.addEventListener('click', () => runPersonaLabSessionBrief(button));
    });
    personaLabQuickProbeButtons.forEach((button) => {
      button.addEventListener('click', () => runPersonaLabQuickProbe(button));
    });
    personaLabRepairQueueButtons.forEach((button) => {
      button.addEventListener('click', () => runPersonaLabRepairQueue(button));
    });
    personaLabReviewStackButtons.forEach((button) => {
      button.addEventListener('click', () => runPersonaLabReviewStack(button));
    });
    personaLabPackageIndexButtons.forEach((button) => {
      button.addEventListener('click', () => runPersonaLabPackageIndex(button));
    });
    personaLabExportButtons.forEach((button) => {
      button.addEventListener('click', () => downloadPersonaLabPackage(button));
    });
    personaLabSaveProfileButtons.forEach((button) => {
      button.addEventListener('click', () => savePersonaLabProfileDraft(button));
    });
    personaLabRouters.forEach((router) => {
      const goalField = router.querySelector('[data-persona-lab-goal]');
      const recommendButton = router.querySelector('[data-persona-lab-recommend]');
      const applyButton = router.querySelector('[data-persona-lab-apply-recommendation]');
      if (goalField instanceof HTMLTextAreaElement || goalField instanceof HTMLInputElement) {
        goalField.addEventListener('input', () => resetPersonaLabRecommendation(router));
      }
      if (recommendButton instanceof HTMLButtonElement) {
        recommendButton.addEventListener('click', () => recommendPersonaLabProfile(router));
      }
      if (applyButton instanceof HTMLButtonElement) {
        applyButton.addEventListener('click', () => applyPersonaLabRecommendation(router));
      }
    });
    personaLabStressSuiteContainers.forEach((container) => {
      const runButton = container.querySelector('[data-persona-lab-stress-run]');
      const rehearsalButton = container.querySelector('[data-persona-lab-rehearsal-run]');
      const recognitionButton = container.querySelector('[data-persona-lab-recognition-deck]');
      const goldenButton = container.querySelector('[data-persona-lab-golden-profile]');
      const variantButton = container.querySelector('[data-persona-lab-variant-matrix]');
      const transcriptButton = container.querySelector('[data-persona-lab-transcript-score]');
      const transcriptSaveButton = container.querySelector('[data-persona-lab-transcript-save]');
      const runbookButton = container.querySelector('[data-persona-lab-runtime-runbook]');
      const qualityButton = container.querySelector('[data-persona-lab-quality-pass]');
      const suiteMatrixButton = container.querySelector('[data-persona-lab-suite-matrix]');
      if (runButton instanceof HTMLButtonElement) {
        runButton.addEventListener('click', () => runPersonaLabStressSuite(container));
      }
      if (rehearsalButton instanceof HTMLButtonElement) {
        rehearsalButton.addEventListener('click', () => runPersonaLabRehearsalDeck(container));
      }
      if (recognitionButton instanceof HTMLButtonElement) {
        recognitionButton.addEventListener('click', () => runPersonaLabRecognitionDeck(container));
      }
      if (goldenButton instanceof HTMLButtonElement) {
        goldenButton.addEventListener('click', () => runPersonaLabGoldenProfile(container));
      }
      if (variantButton instanceof HTMLButtonElement) {
        variantButton.addEventListener('click', () => runPersonaLabVariantMatrix(container));
      }
      if (transcriptButton instanceof HTMLButtonElement) {
        transcriptButton.addEventListener('click', () => runPersonaLabTranscriptScorecard(container));
      }
      if (transcriptSaveButton instanceof HTMLButtonElement) {
        transcriptSaveButton.addEventListener('click', () => runPersonaLabTranscriptScoreSave(container));
      }
      if (runbookButton instanceof HTMLButtonElement) {
        runbookButton.addEventListener('click', () => runPersonaLabRuntimeRunbook(container));
      }
      if (qualityButton instanceof HTMLButtonElement) {
        qualityButton.addEventListener('click', () => runPersonaLabQualityPass(container));
      }
      if (suiteMatrixButton instanceof HTMLButtonElement) {
        suiteMatrixButton.addEventListener('click', () => runPersonaLabSuiteMatrix(container));
      }
    });
    personaLabTranscriptHistoryContainers.forEach((container) => {
      const clearButton = container.querySelector('[data-persona-lab-transcript-history-clear]');
      if (clearButton instanceof HTMLButtonElement) {
        clearButton.addEventListener('click', clearPersonaLabTranscriptHistory);
      }
    });
    personaLabHistoryContainers.forEach((container) => {
      const list = container.querySelector('[data-persona-lab-history-list]');
      const saveButton = container.querySelector('[data-persona-lab-history-save]');
      const clearButton = container.querySelector('[data-persona-lab-history-clear]');