personal memory agent
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

convey: load app.js in <head> to fix AppServices-undefined on /app/settings

Regression from d7f5b18a (convey: promote escapeHtml + renderMarkdown
to AppServices): per-app workspace inlines run
`const escapeHtml = window.AppServices.escapeHtml;` at top level, but
`app.js` was loaded from the body — after the workspace include — so
AppServices was undefined when those inlines parsed. The TypeError
aborted the rest of the inline, most visibly breaking the settings
nav. Moving the single `<script src=".../app.js">` tag into `<head>`
right after `api.js` defeats the parse-order bug for all 9 affected
apps (settings, sol, graph, search, import, activities, speakers,
transcripts, tokens) without touching any workspace template.

The api.js `getEscapeHtml()` fallback stays as belt-and-suspenders.
marked and dompurify remain in the body immediately before the
chat-bar IIFE; they're only needed by AppServices.renderMarkdown,
not at app.js parse time.

make ci + make verify-browser (19 scenarios incl. settings/smoke)
both green.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

+2 -2
+2 -2
convey/templates/app.html
··· 19 19 <!-- WebSocket connection for Callosum events --> 20 20 <script src="{{ url_for('root.static', filename='websocket.js') }}"></script> 21 21 <script src="{{ url_for('root.static', filename='api.js') }}"></script> 22 + <!-- App JavaScript (includes AppServices framework) --> 23 + <script src="{{ url_for('root.static', filename='app.js') }}"></script> 22 24 23 25 <!-- Apply facet theme immediately to prevent flash --> 24 26 {% if selected_facet and app_registry.apps[app].facets_enabled() %} ··· 96 98 {% include app_registry.apps[app].get_workspace_template() %} 97 99 </main> 98 100 99 - <!-- App JavaScript (includes AppServices framework) --> 100 - <script src="{{ url_for('root.static', filename='app.js') }}"></script> 101 101 <script src="{{ vendor_lib('marked') }}"></script> 102 102 <script src="{{ vendor_lib('dompurify') }}"></script> 103 103