(event)
| 779 | const normalized = String(command || "compact").replace(/^\/+/, "").trim().toLowerCase(); |
| 780 | if (normalized === "compact" || normalized === "summarize") |
| 781 | return "session_compact"; |
| 782 | return; |
| 783 | } |
| 784 | async function readRecentSessionMessages(client, sessionID, directory, limit = 20) { |
| 785 | if (!client?.session?.messages) |
| 786 | return; |
| 787 | const query = { limit }; |
| 788 | if (directory) |
| 789 | query.directory = directory; |
| 790 | try { |
| 791 | const messages = await sdkCall(client.session.messages.bind(client.session), { path: { id: sessionID }, query }, { path: { sessionID }, query }, { sessionID, ...query }); |
| 792 | return Array.isArray(messages) ? messages : undefined; |
| 793 | } catch { |
| 794 | return; |
| 795 | } |
| 796 | } |
| 797 | function orderedSessionMessages(messages) { |
| 798 | return (messages || []).map((message, index) => { |
| 799 | const info = message?.info || message || {}; |
| 800 | const created = Number(info?.time?.created || 0); |
| 801 | return { message, index, created: Number.isFinite(created) ? created : 0 }; |
| 802 | }).sort((a, b) => a.created - b.created || a.index - b.index).map((entry) => entry.message); |
no test coverage detected