clarify template-only AI memory context

This commit is contained in:
Daniel 2026-05-08 07:38:27 +02:00
parent 20fc6798a9
commit 03ee07f92f
6 changed files with 15 additions and 12 deletions

View file

@ -151,7 +151,7 @@
<!-- My Templates / Memories --> <!-- My Templates / Memories -->
<div class="settings-section card"> <div class="settings-section card">
<h3><i class="fas fa-book-medical"></i> My Templates</h3> <h3><i class="fas fa-book-medical"></i> My Templates</h3>
<p style="font-size:13px;color:var(--g600);">Save reusable templates for physical exam, ROS, encounter format, etc. The AI will use these when generating notes. You can reference them by saying "use my normal physical exam" in dictation.</p> <p style="font-size:13px;color:var(--g600);">Save reusable templates for physical exam, ROS, encounter format, etc. Only template categories are sent to AI when generating notes. You can reference them by saying "use my normal physical exam" in dictation.</p>
<div style="margin-bottom:10px;display:flex;gap:8px;flex-wrap:wrap;align-items:center;"> <div style="margin-bottom:10px;display:flex;gap:8px;flex-wrap:wrap;align-items:center;">
<select id="mem-category" style="font-size:13px;padding:5px 8px;border:1px solid var(--g300);border-radius:6px;"> <select id="mem-category" style="font-size:13px;padding:5px 8px;border:1px solid var(--g300);border-radius:6px;">
<option value="physical_exam">Physical Exam Template</option> <option value="physical_exam">Physical Exam Template</option>
@ -164,7 +164,6 @@
<option value="template_wellvisit">Well Visit Template</option> <option value="template_wellvisit">Well Visit Template</option>
<option value="template_sickvisit">Sick Visit Template</option> <option value="template_sickvisit">Sick Visit Template</option>
<option value="template_ed">ED Template</option> <option value="template_ed">ED Template</option>
<option value="custom">Custom</option>
</select> </select>
<input type="text" id="mem-name" style="font-size:13px;padding:5px 8px;border:1px solid var(--g300);border-radius:6px;flex:1;min-width:150px;" placeholder="Template name (e.g. Normal PE)"> <input type="text" id="mem-name" style="font-size:13px;padding:5px 8px;border:1px solid var(--g300);border-radius:6px;flex:1;min-width:150px;" placeholder="Template name (e.g. Normal PE)">
</div> </div>

View file

@ -491,7 +491,7 @@
<script type="module" src="/js/soap.js"></script> <script type="module" src="/js/soap.js"></script>
<script type="module" src="/js/milestones.js"></script> <script type="module" src="/js/milestones.js"></script>
<script defer src="/js/peGuide.js"></script> <script defer src="/js/peGuide.js"></script>
<script defer src="/js/extensions.js"></script> <script type="module" src="/js/extensions.js"></script>
<script type="module" src="/js/notes.js"></script> <script type="module" src="/js/notes.js"></script>
<script type="module" src="/js/diagrams.js"></script> <script type="module" src="/js/diagrams.js"></script>
<script type="module" src="/js/clinicalAssistant.js"></script> <script type="module" src="/js/clinicalAssistant.js"></script>
@ -501,7 +501,7 @@
<script type="module" src="/js/sickVisit.js"></script> <script type="module" src="/js/sickVisit.js"></script>
<script type="module" src="/js/ed-encounters.js"></script> <script type="module" src="/js/ed-encounters.js"></script>
<script defer src="/js/encounters.js"></script> <script defer src="/js/encounters.js"></script>
<script defer src="/js/memories.js"></script> <script type="module" src="/js/memories.js"></script>
<script defer src="/js/admin-docs.js"></script> <script defer src="/js/admin-docs.js"></script>
<script type="module" src="/js/documents.js"></script> <script type="module" src="/js/documents.js"></script>
<script defer src="/js/calc-math.js"></script> <script defer src="/js/calc-math.js"></script>

View file

@ -1,7 +1,6 @@
// ============================================================ // ============================================================
// PAGERS & EXTENSIONS — personal directory with async search + soft delete // PAGERS & EXTENSIONS — personal directory with async search + soft delete
// ============================================================ // ============================================================
(function () {
var _inited = false; var _inited = false;
var _items = []; var _items = [];
var _mode = 'active'; // 'active' | 'trash' var _mode = 'active'; // 'active' | 'trash'
@ -352,5 +351,3 @@
if (s == null) return ''; if (s == null) return '';
return String(s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;'); return String(s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
} }
})();

View file

@ -2,8 +2,6 @@
// MEMORIES.JS — User template/memory storage + settings UI // MEMORIES.JS — User template/memory storage + settings UI
// ============================================================ // ============================================================
(function() {
var _memories = []; var _memories = [];
var _editingId = null; var _editingId = null;
@ -18,7 +16,7 @@
template_wellvisit: 'Well Visit Template', template_wellvisit: 'Well Visit Template',
template_sickvisit: 'Sick Visit Template', template_sickvisit: 'Sick Visit Template',
template_ed: 'ED Template', template_ed: 'ED Template',
custom: 'Custom' custom: 'Custom (not used by AI)'
}; };
// ── Load memories ──────────────────────────────────────────────────────── // ── Load memories ────────────────────────────────────────────────────────
@ -176,5 +174,3 @@
} }
console.log('✅ Memories module loaded'); console.log('✅ Memories module loaded');
})();

View file

@ -10,7 +10,9 @@ const moduleEntrypoints = [
'public/js/admin.js', 'public/js/admin.js',
'public/js/diagrams.js', 'public/js/diagrams.js',
'public/js/ed-encounters.js', 'public/js/ed-encounters.js',
'public/js/extensions.js',
'public/js/hospitalCourse.js', 'public/js/hospitalCourse.js',
'public/js/memories.js',
'public/js/milestones.js', 'public/js/milestones.js',
'public/js/nextcloud.js', 'public/js/nextcloud.js',
'public/js/notes.js', 'public/js/notes.js',

View file

@ -18,6 +18,15 @@ test('AI memory context is limited to saved template categories', () => {
assert.doesNotMatch(route.match(/var AI_CONTEXT_CATEGORIES = \[[\s\S]*?\];/)[0], /'custom'/); assert.doesNotMatch(route.match(/var AI_CONTEXT_CATEGORIES = \[[\s\S]*?\];/)[0], /'custom'/);
}); });
test('template settings do not offer new custom AI memories', () => {
const settings = read('public/components/settings.html');
const memories = read('public/js/memories.js');
assert.doesNotMatch(settings, /<option value="custom">/);
assert.match(settings, /Only template categories are sent to AI/);
assert.match(memories, /custom: 'Custom \(not used by AI\)'/);
assert.match(memories, /window\.getUserMemoryContext = function\(\)/);
});
test('browser Whisper is removed from public runtime and user settings', () => { test('browser Whisper is removed from public runtime and user settings', () => {
assert.equal(fs.existsSync(path.join(root, 'public/js/browserWhisper.js')), false); assert.equal(fs.existsSync(path.join(root, 'public/js/browserWhisper.js')), false);
const publicRuntimeFiles = [ const publicRuntimeFiles = [