@agent-link/agent 0.1.253 → 0.1.254

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,10 @@
1
+ import { marked, Parser } from 'marked';
1
2
  const FORMATTERS = {
2
3
  markdown: formatMarkdown,
3
4
  html: formatHtml,
4
5
  };
5
6
  const EXPORT_FOOTER = 'Powered by msclaude.ai';
7
+ const MARKED_CDN_URL = 'https://cdn.jsdelivr.net/npm/marked@17.0.6/marked.min.js';
6
8
  export function isSessionExportFormat(value) {
7
9
  return typeof value === 'string' && value in FORMATTERS;
8
10
  }
@@ -94,48 +96,242 @@ function escapeMarkdownTable(value) {
94
96
  return value.replace(/\|/g, '\\|').replace(/\r?\n/g, ' ');
95
97
  }
96
98
  function formatHtml(metadata, messages) {
99
+ const counts = getMessageCounts(messages);
97
100
  const sections = messages.map((message, index) => renderHtmlMessage(message, index)).join('\n');
101
+ const toc = renderHtmlToc(messages);
98
102
  const content = `<!doctype html>
99
103
  <html lang="en">
100
104
  <head>
101
105
  <meta charset="utf-8">
102
106
  <meta name="viewport" content="width=device-width, initial-scale=1">
103
- <meta http-equiv="Content-Security-Policy" content="default-src 'none'; style-src 'unsafe-inline'; img-src data:;">
107
+ <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline' https://cdn.jsdelivr.net; style-src 'unsafe-inline'; img-src data: https:; base-uri 'none'; form-action 'none';">
104
108
  <title>${escapeHtml(metadata.title)}</title>
105
109
  <style>
106
- :root { color-scheme: light dark; --bg: #0f172a; --panel: #111827; --text: #e5e7eb; --muted: #94a3b8; --border: #334155; --accent: #60a5fa; }
107
- @media (prefers-color-scheme: light) { :root { --bg: #f8fafc; --panel: #ffffff; --text: #0f172a; --muted: #64748b; --border: #dbe3ef; --accent: #2563eb; } }
108
- body { margin: 0; background: var(--bg); color: var(--text); font: 14px/1.55 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
109
- main { max-width: 960px; margin: 0 auto; padding: 40px 20px 64px; }
110
- header { margin-bottom: 24px; }
111
- h1 { margin: 0 0 12px; font-size: 28px; line-height: 1.2; }
112
- .meta { display: grid; grid-template-columns: max-content 1fr; gap: 6px 14px; color: var(--muted); font-size: 12px; }
113
- .meta code { color: var(--text); }
114
- .message { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 16px; margin: 14px 0; box-shadow: 0 6px 24px rgba(15, 23, 42, 0.08); }
115
- .message h2 { margin: 0 0 10px; font-size: 13px; letter-spacing: .04em; text-transform: uppercase; color: var(--accent); }
116
- .content, pre { white-space: pre-wrap; word-break: break-word; }
110
+ :root {
111
+ color-scheme: light dark;
112
+ --bg: #0f172a;
113
+ --surface: #111827;
114
+ --surface-2: #172033;
115
+ --panel: #111827;
116
+ --text: #e5e7eb;
117
+ --muted: #94a3b8;
118
+ --border: #334155;
119
+ --accent: #60a5fa;
120
+ --accent-soft: rgba(96, 165, 250, .14);
121
+ --user-bg: rgba(59, 130, 246, .16);
122
+ --assistant-bg: #111827;
123
+ --tool-bg: rgba(148, 163, 184, .09);
124
+ --shadow: 0 18px 44px rgba(2, 6, 23, .25);
125
+ }
126
+ @media (prefers-color-scheme: light) {
127
+ :root {
128
+ --bg: #f4f7fb;
129
+ --surface: #ffffff;
130
+ --surface-2: #f8fafc;
131
+ --panel: #ffffff;
132
+ --text: #0f172a;
133
+ --muted: #64748b;
134
+ --border: #dbe3ef;
135
+ --accent: #2563eb;
136
+ --accent-soft: rgba(37, 99, 235, .1);
137
+ --user-bg: #eff6ff;
138
+ --assistant-bg: #ffffff;
139
+ --tool-bg: #f8fafc;
140
+ --shadow: 0 16px 38px rgba(15, 23, 42, .08);
141
+ }
142
+ }
143
+ * { box-sizing: border-box; }
144
+ html { scroll-behavior: smooth; }
145
+ body { margin: 0; background: radial-gradient(circle at top left, var(--accent-soft), transparent 32rem), var(--bg); color: var(--text); font: 14px/1.62 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
146
+ a { color: var(--accent); }
147
+ .page-shell { display: grid; grid-template-columns: minmax(220px, 280px) minmax(0, 960px); gap: 24px; max-width: 1280px; margin: 0 auto; padding: 32px 20px 64px; }
148
+ main { min-width: 0; }
149
+ .toc { position: sticky; top: 18px; align-self: start; max-height: calc(100vh - 36px); overflow: auto; padding: 16px; border: 1px solid var(--border); border-radius: 16px; background: color-mix(in srgb, var(--surface) 88%, transparent); box-shadow: var(--shadow); }
150
+ .toc h2 { margin: 0 0 10px; font-size: 12px; letter-spacing: .12em; text-transform: uppercase; color: var(--muted); }
151
+ .toc ol { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
152
+ .toc a { display: grid; grid-template-columns: auto 1fr; gap: 7px; padding: 8px; border-radius: 10px; color: var(--text); text-decoration: none; }
153
+ .toc a:hover { background: var(--accent-soft); }
154
+ .toc .toc-index { color: var(--muted); font-variant-numeric: tabular-nums; }
155
+ .toc .toc-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
156
+ .toc .toc-summary { grid-column: 2; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--muted); font-size: 12px; }
157
+ .export-header { margin-bottom: 22px; padding: 28px; border: 1px solid var(--border); border-radius: 20px; background: linear-gradient(180deg, color-mix(in srgb, var(--surface) 95%, transparent), var(--surface)); box-shadow: var(--shadow); }
158
+ .eyebrow { margin: 0 0 8px; color: var(--muted); font-size: 12px; letter-spacing: .13em; text-transform: uppercase; }
159
+ h1 { margin: 0; font-size: clamp(28px, 4vw, 42px); line-height: 1.12; letter-spacing: -.03em; }
160
+ .subtitle { margin: 12px 0 0; color: var(--muted); }
161
+ .stats { display: flex; flex-wrap: wrap; gap: 8px; margin: 18px 0 0; }
162
+ .stat { padding: 7px 10px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface-2); color: var(--muted); font-size: 12px; }
163
+ .header-actions { display: flex; flex-wrap: wrap; gap: 8px; margin: 18px 0 0; }
164
+ button.export-action { border: 1px solid var(--border); border-radius: 10px; padding: 7px 10px; background: var(--panel); color: var(--text); font: inherit; cursor: pointer; }
165
+ button.export-action:hover { border-color: var(--accent); color: var(--accent); }
166
+ .meta-details { margin-top: 16px; color: var(--muted); }
167
+ .meta-details summary { cursor: pointer; color: var(--muted); font-weight: 600; }
168
+ .meta { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 6px 14px; margin-top: 10px; font-size: 12px; }
169
+ .meta code { color: var(--text); overflow-wrap: anywhere; }
170
+ .message { border: 1px solid var(--border); border-radius: 16px; padding: 18px; margin: 16px 0; background: var(--panel); box-shadow: 0 6px 22px rgba(15, 23, 42, 0.07); scroll-margin-top: 18px; }
171
+ .message-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 10px; }
172
+ .message h2 { margin: 0; font-size: 12px; letter-spacing: .09em; text-transform: uppercase; color: var(--accent); }
173
+ .message-time { color: var(--muted); font-size: 12px; white-space: nowrap; }
174
+ .message-user { margin-left: auto; max-width: 86%; background: var(--user-bg); }
175
+ .message-assistant { background: var(--assistant-bg); }
176
+ .message-tool { background: var(--tool-bg); box-shadow: none; }
177
+ .message-tool h2 { color: var(--muted); }
178
+ .plain-content, pre { white-space: pre-wrap; word-break: break-word; }
179
+ .content { word-break: break-word; }
180
+ .markdown-body > :first-child { margin-top: 0; }
181
+ .markdown-body > :last-child { margin-bottom: 0; }
182
+ .markdown-body p, .markdown-body ul, .markdown-body ol, .markdown-body blockquote, .markdown-body pre, .markdown-body table { margin: 0 0 12px; }
183
+ .markdown-body h1, .markdown-body h2, .markdown-body h3 { margin: 20px 0 10px; line-height: 1.25; letter-spacing: -.02em; text-transform: none; color: var(--text); }
184
+ .markdown-body h1 { font-size: 1.65rem; }
185
+ .markdown-body h2 { font-size: 1.35rem; }
186
+ .markdown-body h3 { font-size: 1.12rem; }
187
+ .markdown-body ul, .markdown-body ol { padding-left: 24px; }
188
+ .markdown-body blockquote { border-left: 3px solid var(--border); padding-left: 12px; color: var(--muted); }
189
+ .markdown-body code { padding: 1px 4px; border-radius: 4px; background: rgba(148, 163, 184, 0.16); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
190
+ .markdown-body pre code { padding: 0; background: transparent; }
191
+ .markdown-body table { border-collapse: collapse; width: 100%; overflow: auto; display: block; }
192
+ .markdown-body th, .markdown-body td { border: 1px solid var(--border); padding: 6px 8px; }
193
+ .markdown-body a { color: var(--accent); }
117
194
  pre { margin: 10px 0 0; padding: 12px; border-radius: 8px; background: rgba(148, 163, 184, 0.14); overflow-x: auto; }
195
+ .code-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 12px; padding: 6px 8px; border: 1px solid var(--border); border-bottom: 0; border-radius: 8px 8px 0 0; color: var(--muted); background: rgba(148, 163, 184, 0.08); font-size: 12px; }
196
+ .code-toolbar + pre { margin-top: 0; border-top-left-radius: 0; border-top-right-radius: 0; }
197
+ .code-copy { border: 0; background: transparent; color: var(--muted); cursor: pointer; font: inherit; }
198
+ .code-copy:hover { color: var(--accent); }
118
199
  details { margin-top: 8px; }
119
200
  summary { cursor: pointer; color: var(--accent); font-weight: 600; }
201
+ .tool-summary { margin: 0; color: var(--muted); }
202
+ .tool-details { border: 1px solid var(--border); border-radius: 10px; padding: 8px 10px; background: color-mix(in srgb, var(--surface-2) 70%, transparent); }
203
+ .tool-details summary { color: var(--muted); }
120
204
  .empty { color: var(--muted); font-style: italic; }
121
205
  footer { margin-top: 28px; padding-top: 14px; border-top: 1px solid var(--border); color: var(--muted); font-size: 12px; text-align: center; opacity: .7; }
206
+ @media (max-width: 920px) {
207
+ .page-shell { display: block; padding: 16px 12px 48px; }
208
+ .toc { position: static; max-height: 260px; margin-bottom: 16px; }
209
+ .message-user { max-width: none; margin-left: 0; }
210
+ }
211
+ @media print {
212
+ :root { color-scheme: light; --bg: #fff; --surface: #fff; --surface-2: #fff; --panel: #fff; --text: #111827; --muted: #4b5563; --border: #d1d5db; --accent: #1d4ed8; --shadow: none; }
213
+ body { background: #fff; }
214
+ .page-shell { display: block; max-width: none; padding: 0; }
215
+ .toc { position: static; max-height: none; box-shadow: none; break-after: page; }
216
+ .export-header, .message { box-shadow: none; break-inside: avoid; }
217
+ .header-actions, .code-copy { display: none !important; }
218
+ details.tool-details:not([open]) > :not(summary) { display: none !important; }
219
+ a { color: #1d4ed8; text-decoration: none; }
220
+ }
122
221
  </style>
123
222
  </head>
124
223
  <body>
125
- <main>
126
- <header>
224
+ <div class="page-shell">
225
+ ${toc}
226
+ <main>
227
+ <header class="export-header">
228
+ <p class="eyebrow">AgentLink session export</p>
127
229
  <h1>${escapeHtml(metadata.title)}</h1>
128
- <div class="meta">
129
- <span>Session ID</span><code>${escapeHtml(metadata.sessionId)}</code>
130
- <span>Backend</span><span>${escapeHtml(metadata.backend)}</span>
131
- <span>Workdir</span><code>${metadata.workDir ? escapeHtml(metadata.workDir) : '-'}</code>
132
- <span>Last modified</span><span>${metadata.lastModified ? escapeHtml(formatDate(metadata.lastModified)) : '-'}</span>
133
- <span>Exported at</span><span>${escapeHtml(formatDate(metadata.exportedAt))}</span>
230
+ <p class="subtitle">Shared conversation transcript exported ${escapeHtml(formatDate(metadata.exportedAt))}.</p>
231
+ <div class="stats">
232
+ <span class="stat">${counts.total} messages</span>
233
+ <span class="stat">${counts.user} user</span>
234
+ <span class="stat">${counts.assistant} assistant</span>
235
+ <span class="stat">${counts.tool} tools collapsed</span>
236
+ <span class="stat">${escapeHtml(metadata.backend)}</span>
237
+ </div>
238
+ <div class="header-actions">
239
+ <button type="button" class="export-action" data-action="expand-tools">Expand all tools</button>
240
+ <button type="button" class="export-action" data-action="collapse-tools">Collapse all tools</button>
241
+ <button type="button" class="export-action" data-action="print">Print / Save PDF</button>
134
242
  </div>
243
+ <details class="meta-details">
244
+ <summary>Technical metadata</summary>
245
+ <div class="meta">
246
+ <span>Session ID</span><code>${escapeHtml(metadata.sessionId)}</code>
247
+ <span>Backend</span><span>${escapeHtml(metadata.backend)}</span>
248
+ <span>Workdir</span><code>${metadata.workDir ? escapeHtml(metadata.workDir) : '-'}</code>
249
+ <span>Last modified</span><span>${metadata.lastModified ? escapeHtml(formatDate(metadata.lastModified)) : '-'}</span>
250
+ <span>Exported at</span><span>${escapeHtml(formatDate(metadata.exportedAt))}</span>
251
+ </div>
252
+ </details>
135
253
  </header>
136
254
  ${sections}
137
255
  <footer>${escapeHtml(EXPORT_FOOTER)}</footer>
138
256
  </main>
257
+ </div>
258
+ <script src="${MARKED_CDN_URL}"></script>
259
+ <script>
260
+ (() => {
261
+ const markedLib = window.marked;
262
+
263
+ const escapeHtml = (value) => String(value)
264
+ .replace(/&/g, '&amp;')
265
+ .replace(/</g, '&lt;')
266
+ .replace(/>/g, '&gt;')
267
+ .replace(/"/g, '&quot;')
268
+ .replace(/'/g, '&#39;');
269
+ const isSafeHref = (href) => {
270
+ const trimmed = String(href || '').trim();
271
+ if (!trimmed) return false;
272
+ if (trimmed.startsWith('#')) return true;
273
+ try {
274
+ const url = new URL(trimmed, 'https://msclaude.ai');
275
+ return url.protocol === 'http:' || url.protocol === 'https:' || url.protocol === 'mailto:';
276
+ } catch {
277
+ return false;
278
+ }
279
+ };
280
+
281
+ if (markedLib) {
282
+ const renderer = new markedLib.Renderer();
283
+ renderer.html = ({ text }) => escapeHtml(text);
284
+ renderer.link = ({ href, title, tokens }) => {
285
+ const text = markedLib.Parser.parseInline(tokens, { renderer });
286
+ if (!isSafeHref(href)) return text;
287
+ const titleAttr = title ? \` title="\${escapeHtml(title)}"\` : '';
288
+ return \`<a href="\${escapeHtml(href)}"\${titleAttr} target="_blank" rel="noopener noreferrer">\${text}</a>\`;
289
+ };
290
+ renderer.image = ({ text }) => escapeHtml(text);
291
+
292
+ document.querySelectorAll('script.markdown-source').forEach((sourceEl) => {
293
+ const target = sourceEl.nextElementSibling;
294
+ if (!target || !target.classList.contains('markdown-body')) return;
295
+ try {
296
+ const markdown = JSON.parse(sourceEl.textContent || '""');
297
+ target.innerHTML = markedLib.parse(markdown, { async: false, breaks: true, gfm: true, renderer });
298
+ } catch {
299
+ target.classList.add('markdown-render-failed');
300
+ }
301
+ });
302
+ }
303
+
304
+ const setToolOpen = (open) => {
305
+ document.querySelectorAll('details.tool-details').forEach((detail) => { detail.open = open; });
306
+ };
307
+ document.querySelector('[data-action="expand-tools"]')?.addEventListener('click', () => setToolOpen(true));
308
+ document.querySelector('[data-action="collapse-tools"]')?.addEventListener('click', () => setToolOpen(false));
309
+ document.querySelector('[data-action="print"]')?.addEventListener('click', () => window.print());
310
+
311
+ document.querySelectorAll('.markdown-body pre').forEach((pre) => {
312
+ if (pre.previousElementSibling?.classList.contains('code-toolbar')) return;
313
+ const code = pre.querySelector('code');
314
+ const language = Array.from(code?.classList || [])
315
+ .find((name) => name.startsWith('language-'))
316
+ ?.replace('language-', '') || 'code';
317
+ const toolbar = document.createElement('div');
318
+ toolbar.className = 'code-toolbar';
319
+ toolbar.innerHTML = \`<span>\${escapeHtml(language)}</span><button type="button" class="code-copy">Copy</button>\`;
320
+ toolbar.querySelector('button')?.addEventListener('click', async (event) => {
321
+ const button = event.currentTarget;
322
+ try {
323
+ await navigator.clipboard.writeText(code?.textContent || pre.textContent || '');
324
+ button.textContent = 'Copied';
325
+ setTimeout(() => { button.textContent = 'Copy'; }, 1600);
326
+ } catch {
327
+ button.textContent = 'Copy failed';
328
+ setTimeout(() => { button.textContent = 'Copy'; }, 1600);
329
+ }
330
+ });
331
+ pre.parentNode?.insertBefore(toolbar, pre);
332
+ });
333
+ })();
334
+ </script>
139
335
  </body>
140
336
  </html>
141
337
  `;
@@ -145,22 +341,157 @@ function formatHtml(metadata, messages) {
145
341
  content,
146
342
  };
147
343
  }
344
+ function getMessageCounts(messages) {
345
+ let user = 0;
346
+ let tool = 0;
347
+ let assistant = 0;
348
+ for (const message of messages) {
349
+ if (message.role === 'user' && !message.isCommandOutput)
350
+ user++;
351
+ else if (message.role === 'tool')
352
+ tool++;
353
+ else
354
+ assistant++;
355
+ }
356
+ return { total: messages.length, user, assistant, tool };
357
+ }
358
+ function renderHtmlToc(messages) {
359
+ const visibleMessages = messages
360
+ .map((message, index) => ({ message, index }))
361
+ .filter(({ message }) => message.role !== 'tool');
362
+ if (visibleMessages.length === 0)
363
+ return '<nav class="toc" aria-label="Conversation outline"><h2>Contents</h2><p class="empty">No non-tool messages</p></nav>';
364
+ const items = visibleMessages.map(({ message, index }) => {
365
+ const label = messageLabel(message);
366
+ const summary = summarizeMessage(message);
367
+ return `<li><a class="toc-link" href="#${messageId(index)}"><span class="toc-index">${index + 1}</span><span class="toc-title">${escapeHtml(label)}</span><span class="toc-summary">${escapeHtml(summary)}</span></a></li>`;
368
+ }).join('\n');
369
+ return `<nav class="toc" aria-label="Conversation outline"><h2>Contents</h2><ol>${items}</ol></nav>`;
370
+ }
371
+ function messageId(index) {
372
+ return `message-${index + 1}`;
373
+ }
374
+ function messageLabel(message) {
375
+ if (message.role === 'tool')
376
+ return `Tool: ${message.toolName || 'Unknown'}`;
377
+ if (message.isThinking)
378
+ return 'Assistant thinking';
379
+ if (message.isCommandOutput)
380
+ return 'Command output';
381
+ if (message.role === 'user')
382
+ return 'User';
383
+ if (message.role === 'skill-context')
384
+ return `Skill context${message.skillName ? `: ${message.skillName}` : ''}`;
385
+ return 'Assistant';
386
+ }
387
+ function messageRoleClass(message) {
388
+ if (message.role === 'user' && !message.isCommandOutput)
389
+ return 'message-user';
390
+ if (message.role === 'tool')
391
+ return 'message-tool';
392
+ return 'message-assistant';
393
+ }
394
+ function summarizeMessage(message) {
395
+ if (message.role === 'tool')
396
+ return getToolSummaryForExport(message);
397
+ const text = stringifyContent(message.content).replace(/\s+/g, ' ').trim();
398
+ if (!text)
399
+ return 'No content';
400
+ return text.length > 88 ? `${text.slice(0, 85)}...` : text;
401
+ }
402
+ function getToolSummaryForExport(message) {
403
+ const name = message.toolName || 'Tool';
404
+ const input = parseMaybeJson(message.toolInput);
405
+ if (input && typeof input === 'object' && !Array.isArray(input)) {
406
+ const obj = input;
407
+ const file = firstString(obj, ['file_path', 'filePath', 'path']);
408
+ if (file)
409
+ return `${name} ${file}`;
410
+ const command = firstString(obj, ['command', 'cmd']);
411
+ if (command)
412
+ return `${name}: ${command.length > 88 ? `${command.slice(0, 85)}...` : command}`;
413
+ const pattern = firstString(obj, ['pattern', 'query', 'searchText']);
414
+ if (pattern)
415
+ return `${name}: ${pattern}`;
416
+ }
417
+ return message.toolOutput ? `${name} completed` : name;
418
+ }
419
+ function firstString(obj, keys) {
420
+ for (const key of keys) {
421
+ const value = obj[key];
422
+ if (typeof value === 'string' && value.trim())
423
+ return value.trim();
424
+ }
425
+ return '';
426
+ }
427
+ function parseMaybeJson(value) {
428
+ const text = stringifyContent(value);
429
+ if (!text)
430
+ return null;
431
+ try {
432
+ return JSON.parse(text);
433
+ }
434
+ catch {
435
+ return null;
436
+ }
437
+ }
148
438
  function renderHtmlMessage(message, index) {
149
- const title = markdownHeadingForMessage(message, index).replace(/^\d+\.\s*/, '');
439
+ const title = messageLabel(message);
440
+ const id = messageId(index);
441
+ const roleClass = messageRoleClass(message);
442
+ const timestamp = message.timestamp ? `<span class="message-time">${escapeHtml(formatDate(message.timestamp))}</span>` : '';
150
443
  if (message.role === 'tool') {
444
+ const summary = summarizeMessage(message);
151
445
  const input = message.toolInput
152
- ? `<details open><summary>Input</summary><pre>${escapeHtml(prettyJson(message.toolInput))}</pre></details>`
446
+ ? `<details class="tool-details"><summary>Input</summary><pre>${escapeHtml(prettyJson(message.toolInput))}</pre></details>`
153
447
  : '';
154
448
  const output = message.toolOutput
155
- ? `<details><summary>Output</summary><pre>${escapeHtml(message.toolOutput)}</pre></details>`
449
+ ? `<details class="tool-details"><summary>Output</summary><pre>${escapeHtml(message.toolOutput)}</pre></details>`
156
450
  : '';
157
451
  const empty = !input && !output ? '<p class="empty">No input or output captured.</p>' : '';
158
- return `<section class="message tool"><h2>${escapeHtml(title)}</h2>${input}${output}${empty}</section>`;
452
+ return `<section id="${id}" class="message ${roleClass}"><div class="message-header"><h2>${escapeHtml(title)}</h2>${timestamp}</div><p class="tool-summary">${escapeHtml(summary)}</p>${input}${output}${empty}</section>`;
453
+ }
454
+ const content = message.content && shouldRenderMarkdown(message)
455
+ ? `<script type="application/json" class="markdown-source">${jsonScriptContent(message.content)}</script><div class="content markdown-body">${renderSafeMarkdown(message.content)}</div>`
456
+ : message.content
457
+ ? `<div class="content plain-content">${escapeHtml(message.content)}</div>`
458
+ : '<p class="empty">No content</p>';
459
+ return `<section id="${id}" class="message ${roleClass}"><div class="message-header"><h2>${escapeHtml(title)}</h2>${timestamp}</div>${content}</section>`;
460
+ }
461
+ function shouldRenderMarkdown(message) {
462
+ return (message.role !== 'user' && message.role !== 'tool') || !!message.isCommandOutput;
463
+ }
464
+ function renderSafeMarkdown(content) {
465
+ const renderer = new marked.Renderer();
466
+ renderer.html = ({ text }) => escapeHtml(text);
467
+ renderer.link = ({ href, title, tokens }) => {
468
+ const text = Parser.parseInline(tokens, { renderer });
469
+ if (!isSafeHref(href))
470
+ return text;
471
+ const titleAttr = title ? ` title="${escapeHtml(title)}"` : '';
472
+ return `<a href="${escapeHtml(href)}"${titleAttr} target="_blank" rel="noopener noreferrer">${text}</a>`;
473
+ };
474
+ renderer.image = ({ text }) => escapeHtml(text);
475
+ return marked.parse(content, {
476
+ async: false,
477
+ breaks: true,
478
+ gfm: true,
479
+ renderer,
480
+ });
481
+ }
482
+ function isSafeHref(href) {
483
+ const trimmed = href.trim();
484
+ if (!trimmed)
485
+ return false;
486
+ if (trimmed.startsWith('#'))
487
+ return true;
488
+ try {
489
+ const url = new URL(trimmed, 'https://msclaude.ai');
490
+ return url.protocol === 'http:' || url.protocol === 'https:' || url.protocol === 'mailto:';
491
+ }
492
+ catch {
493
+ return false;
159
494
  }
160
- const content = message.content
161
- ? `<div class="content">${escapeHtml(message.content)}</div>`
162
- : '<p class="empty">No content</p>';
163
- return `<section class="message ${escapeHtml(message.role)}"><h2>${escapeHtml(title)}</h2>${content}</section>`;
164
495
  }
165
496
  function prettyJson(value) {
166
497
  const text = stringifyContent(value);
@@ -179,6 +510,14 @@ function escapeHtml(value) {
179
510
  .replace(/"/g, '&quot;')
180
511
  .replace(/'/g, '&#39;');
181
512
  }
513
+ function jsonScriptContent(value) {
514
+ return JSON.stringify(value)
515
+ .replace(/</g, '\\u003c')
516
+ .replace(/>/g, '\\u003e')
517
+ .replace(/&/g, '\\u0026')
518
+ .replace(/\u2028/g, '\\u2028')
519
+ .replace(/\u2029/g, '\\u2029');
520
+ }
182
521
  function stringifyContent(value) {
183
522
  if (typeof value === 'string')
184
523
  return value;
@@ -1 +1 @@
1
- {"version":3,"file":"session-export.js","sourceRoot":"","sources":["../src/session-export.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-export.js","sourceRoot":"","sources":["../src/session-export.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-link/agent",
3
- "version": "0.1.253",
3
+ "version": "0.1.254",
4
4
  "description": "AgentLink local agent CLI",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -43,6 +43,7 @@
43
43
  "commander": "^12.0.0",
44
44
  "cron-parser": "^5.5.0",
45
45
  "js-yaml": "^4.1.1",
46
+ "marked": "^17.0.6",
46
47
  "node-cron": "^4.2.1",
47
48
  "node-pty": "^1.1.0",
48
49
  "qrcode-terminal": "^0.12.0",