iris-chatbot 5.0.2 → 5.0.3
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.
- package/package.json +1 -1
- package/template/package-lock.json +2 -2
- package/template/package.json +1 -1
- package/template/public/site.webmanifest +21 -0
- package/template/public/web-app-manifest-192x192.png +0 -0
- package/template/public/web-app-manifest-512x512.png +0 -0
- package/template/src/app/api/generate-title/route.ts +196 -0
- package/template/src/app/apple-icon.png +0 -0
- package/template/src/app/favicon-96x96.png +0 -0
- package/template/src/app/favicon.ico +0 -0
- package/template/src/app/favicon.svg +1 -0
- package/template/src/app/layout.tsx +1 -0
- package/template/src/components/ChatView.tsx +43 -4
- package/template/src/lib/data.ts +2 -2
- package/template/src/lib/utils.ts +22 -0
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iris",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.3",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "iris",
|
|
9
|
-
"version": "5.0.
|
|
9
|
+
"version": "5.0.3",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@anthropic-ai/sdk": "^0.72.1",
|
|
12
12
|
"clsx": "^2.1.1",
|
package/template/package.json
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Iris",
|
|
3
|
+
"short_name": "Iris",
|
|
4
|
+
"icons": [
|
|
5
|
+
{
|
|
6
|
+
"src": "/web-app-manifest-192x192.png",
|
|
7
|
+
"sizes": "192x192",
|
|
8
|
+
"type": "image/png",
|
|
9
|
+
"purpose": "maskable"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"src": "/web-app-manifest-512x512.png",
|
|
13
|
+
"sizes": "512x512",
|
|
14
|
+
"type": "image/png",
|
|
15
|
+
"purpose": "maskable"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"theme_color": "#ffffff",
|
|
19
|
+
"background_color": "#ffffff",
|
|
20
|
+
"display": "standalone"
|
|
21
|
+
}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import OpenAI from "openai";
|
|
2
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
3
|
+
import type { ChatConnectionPayload, ChatMessageInput } from "../../../lib/types";
|
|
4
|
+
import { GEMINI_OPENAI_BASE_URL } from "../../../lib/connections";
|
|
5
|
+
|
|
6
|
+
export const runtime = "nodejs";
|
|
7
|
+
export const dynamic = "force-dynamic";
|
|
8
|
+
|
|
9
|
+
const TITLE_SYSTEM_PROMPT =
|
|
10
|
+
"You are a title generator. Given the user's message (or a short user-assistant conversation), " +
|
|
11
|
+
"generate a concise, descriptive title (2–5 words) that reflects the main topic or request. " +
|
|
12
|
+
"Do NOT use quotes or punctuation around the title. " +
|
|
13
|
+
"Do NOT start with verbs like 'Discussing' or 'Asking about'. " +
|
|
14
|
+
"Use title case. Examples: \"Midterm Study Guide\", \"Probability Practice Problems\", \"Apple Calendar Integration\". " +
|
|
15
|
+
"If the message is only a greeting (e.g. hi, hello) or has no clear topic, respond with nothing. " +
|
|
16
|
+
"Respond with ONLY the title, nothing else.";
|
|
17
|
+
|
|
18
|
+
type RuntimeConnection = {
|
|
19
|
+
kind: "builtin" | "openai_compatible" | "ollama";
|
|
20
|
+
provider?: "openai" | "anthropic" | "google";
|
|
21
|
+
baseUrl?: string;
|
|
22
|
+
apiKey?: string;
|
|
23
|
+
headers?: Array<{ key: string; value: string }>;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
function headersToRecord(
|
|
27
|
+
headers: Array<{ key: string; value: string }> | undefined,
|
|
28
|
+
): Record<string, string> | undefined {
|
|
29
|
+
if (!Array.isArray(headers) || headers.length === 0) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const out: Record<string, string> = {};
|
|
33
|
+
for (const h of headers) {
|
|
34
|
+
if (h?.key?.trim()) {
|
|
35
|
+
out[h.key.trim()] = typeof h.value === "string" ? h.value : "";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return Object.keys(out).length > 0 ? out : undefined;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function resolveConnection(connection: ChatConnectionPayload): RuntimeConnection {
|
|
42
|
+
const kind =
|
|
43
|
+
connection.kind === "builtin" ||
|
|
44
|
+
connection.kind === "openai_compatible" ||
|
|
45
|
+
connection.kind === "ollama"
|
|
46
|
+
? connection.kind
|
|
47
|
+
: "openai_compatible";
|
|
48
|
+
const provider =
|
|
49
|
+
kind === "builtin" &&
|
|
50
|
+
(connection.provider === "openai" ||
|
|
51
|
+
connection.provider === "anthropic" ||
|
|
52
|
+
connection.provider === "google")
|
|
53
|
+
? connection.provider
|
|
54
|
+
: undefined;
|
|
55
|
+
const baseUrl =
|
|
56
|
+
typeof connection.baseUrl === "string" && connection.baseUrl.trim()
|
|
57
|
+
? connection.baseUrl.trim()
|
|
58
|
+
: kind === "builtin" && provider === "google"
|
|
59
|
+
? GEMINI_OPENAI_BASE_URL
|
|
60
|
+
: kind === "ollama"
|
|
61
|
+
? "http://localhost:11434"
|
|
62
|
+
: undefined;
|
|
63
|
+
const apiKey =
|
|
64
|
+
typeof connection.apiKey === "string" && connection.apiKey.trim()
|
|
65
|
+
? connection.apiKey.trim()
|
|
66
|
+
: undefined;
|
|
67
|
+
return {
|
|
68
|
+
kind,
|
|
69
|
+
provider,
|
|
70
|
+
baseUrl,
|
|
71
|
+
apiKey,
|
|
72
|
+
headers: Array.isArray(connection.headers)
|
|
73
|
+
? connection.headers.filter(
|
|
74
|
+
(h): h is { key: string; value: string } =>
|
|
75
|
+
Boolean(h) && typeof h.key === "string" && typeof h.value === "string",
|
|
76
|
+
)
|
|
77
|
+
: [],
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async function generateTitleWithOpenAI(params: {
|
|
82
|
+
apiKey?: string;
|
|
83
|
+
baseURL?: string;
|
|
84
|
+
model: string;
|
|
85
|
+
messages: ChatMessageInput[];
|
|
86
|
+
headers?: Record<string, string>;
|
|
87
|
+
}): Promise<string> {
|
|
88
|
+
const client = new OpenAI({
|
|
89
|
+
apiKey: params.apiKey ?? "no-key-required",
|
|
90
|
+
baseURL: params.baseURL,
|
|
91
|
+
defaultHeaders: params.headers,
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// Use a small, fast model if available; fall back to whatever is configured
|
|
95
|
+
const response = await client.chat.completions.create({
|
|
96
|
+
model: params.model,
|
|
97
|
+
messages: [
|
|
98
|
+
{ role: "system", content: TITLE_SYSTEM_PROMPT },
|
|
99
|
+
...params.messages.slice(0, 4).map((m) => ({
|
|
100
|
+
role: m.role as "user" | "assistant" | "system",
|
|
101
|
+
content: m.content.slice(0, 500),
|
|
102
|
+
})),
|
|
103
|
+
],
|
|
104
|
+
max_completion_tokens: 30,
|
|
105
|
+
temperature: 0.3,
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
return response.choices?.[0]?.message?.content?.trim() ?? "";
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
async function generateTitleWithAnthropic(params: {
|
|
112
|
+
apiKey: string;
|
|
113
|
+
model: string;
|
|
114
|
+
messages: ChatMessageInput[];
|
|
115
|
+
}): Promise<string> {
|
|
116
|
+
const client = new Anthropic({ apiKey: params.apiKey });
|
|
117
|
+
const response = await client.messages.create({
|
|
118
|
+
model: params.model,
|
|
119
|
+
max_tokens: 30,
|
|
120
|
+
system: TITLE_SYSTEM_PROMPT,
|
|
121
|
+
messages: params.messages.slice(0, 4).map((m) => ({
|
|
122
|
+
role: m.role === "assistant" ? "assistant" as const : "user" as const,
|
|
123
|
+
content: m.content.slice(0, 500),
|
|
124
|
+
})),
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
const block = response.content?.[0];
|
|
128
|
+
return block && "text" in block ? block.text.trim() : "";
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export async function POST(request: Request) {
|
|
132
|
+
try {
|
|
133
|
+
const body = await request.json();
|
|
134
|
+
const {
|
|
135
|
+
connection: rawConnection,
|
|
136
|
+
model,
|
|
137
|
+
messages,
|
|
138
|
+
} = body as {
|
|
139
|
+
connection?: ChatConnectionPayload;
|
|
140
|
+
model?: string;
|
|
141
|
+
messages?: ChatMessageInput[];
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
if (!rawConnection || !model || !Array.isArray(messages) || messages.length === 0) {
|
|
145
|
+
return Response.json({ title: "" }, { status: 400 });
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const connection = resolveConnection(rawConnection);
|
|
149
|
+
let title = "";
|
|
150
|
+
|
|
151
|
+
if (connection.kind === "builtin" && connection.provider === "anthropic") {
|
|
152
|
+
if (!connection.apiKey) {
|
|
153
|
+
return Response.json({ title: "" }, { status: 400 });
|
|
154
|
+
}
|
|
155
|
+
title = await generateTitleWithAnthropic({
|
|
156
|
+
apiKey: connection.apiKey,
|
|
157
|
+
model,
|
|
158
|
+
messages,
|
|
159
|
+
});
|
|
160
|
+
} else {
|
|
161
|
+
// OpenAI, Gemini, OpenAI-compatible, Ollama — all use OpenAI-compatible API
|
|
162
|
+
const baseURL =
|
|
163
|
+
connection.kind === "ollama"
|
|
164
|
+
? `${connection.baseUrl ?? "http://localhost:11434"}/v1`
|
|
165
|
+
: connection.kind === "openai_compatible"
|
|
166
|
+
? connection.baseUrl
|
|
167
|
+
: connection.kind === "builtin" && connection.provider === "google"
|
|
168
|
+
? connection.baseUrl ?? GEMINI_OPENAI_BASE_URL
|
|
169
|
+
: undefined;
|
|
170
|
+
|
|
171
|
+
title = await generateTitleWithOpenAI({
|
|
172
|
+
apiKey: connection.apiKey,
|
|
173
|
+
baseURL,
|
|
174
|
+
model,
|
|
175
|
+
messages,
|
|
176
|
+
headers: headersToRecord(connection.headers),
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Clean up: remove surrounding quotes, limit length
|
|
181
|
+
title = title
|
|
182
|
+
.replace(/^["'"'\s]+|["'"'\s]+$/g, "")
|
|
183
|
+
.replace(/\.+$/, "")
|
|
184
|
+
.trim();
|
|
185
|
+
|
|
186
|
+
// Enforce max length
|
|
187
|
+
if (title.length > 50) {
|
|
188
|
+
title = title.slice(0, 47) + "...";
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
return Response.json({ title });
|
|
192
|
+
} catch (error) {
|
|
193
|
+
console.error("[generate-title] Error:", error);
|
|
194
|
+
return Response.json({ title: "" }, { status: 500 });
|
|
195
|
+
}
|
|
196
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000" height="1000"><g clip-path="url(#SvgjsClipPath1085)"><rect width="1000" height="1000" fill="#ffffff"></rect><g transform="matrix(0.87890625,0,0,0.87890625,50,50)"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="1024" height="1024" viewBox="0 0 1024 1024"><image width="1024" height="1024" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAIAAADwf7zUAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFUGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLyc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpBdHRyaWI9J2h0dHA6Ly9ucy5hdHRyaWJ1dGlvbi5jb20vYWRzLzEuMC8nPgogIDxBdHRyaWI6QWRzPgogICA8cmRmOlNlcT4KICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0nUmVzb3VyY2UnPgogICAgIDxBdHRyaWI6Q3JlYXRlZD4yMDI2LTAyLTEwPC9BdHRyaWI6Q3JlYXRlZD4KICAgICA8QXR0cmliOkRhdGE+eyZxdW90O2RvYyZxdW90OzomcXVvdDtEQUhBT3VoekRfSSZxdW90OywmcXVvdDt1c2VyJnF1b3Q7OiZxdW90O1VBRkkxc1kyVFFRJnF1b3Q7LCZxdW90O2JyYW5kJnF1b3Q7OiZxdW90O0JBRkkxdUJtVWhvJnF1b3Q7fTwvQXR0cmliOkRhdGE+CiAgICAgPEF0dHJpYjpFeHRJZD4zNjM1MmQxYy1lZmUxLTQ5ZmMtODY0ZS1jYjk5YTM4MzkzN2E8L0F0dHJpYjpFeHRJZD4KICAgICA8QXR0cmliOkZiSWQ+NTI1MjY1OTE0MTc5NTgwPC9BdHRyaWI6RmJJZD4KICAgICA8QXR0cmliOlRvdWNoVHlwZT4yPC9BdHRyaWI6VG91Y2hUeXBlPgogICAgPC9yZGY6bGk+CiAgIDwvcmRmOlNlcT4KICA8L0F0dHJpYjpBZHM+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0nJwogIHhtbG5zOmRjPSdodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4x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AABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgIAAP//7deBAAAAAIAgf+tBLosEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGBAAAAEYEAAAARgQAAABGAnOXaC1QecgoAAAAAElFTkSuQmCC"></image></svg></g></g><defs><clipPath id="SvgjsClipPath1085"><rect width="1000" height="1000" x="0" y="0" rx="350" ry="350"></rect></clipPath></defs></svg>
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
createThreadFromMessage,
|
|
18
18
|
deleteThread as deleteThreadById,
|
|
19
19
|
} from "../lib/data";
|
|
20
|
-
import { buildPath, embedSourcesInContent, splitContentAndSources } from "../lib/utils";
|
|
20
|
+
import { buildPath, embedSourcesInContent, isLikelyGreeting, splitContentAndSources } from "../lib/utils";
|
|
21
21
|
import { db } from "../lib/db";
|
|
22
22
|
import {
|
|
23
23
|
buildMemoryContextForPrompt,
|
|
@@ -378,10 +378,9 @@ export default function ChatView({
|
|
|
378
378
|
setShowJumpToBottom(!isNearBottom);
|
|
379
379
|
}, []);
|
|
380
380
|
|
|
381
|
+
const NEAR_BOTTOM_PX = 48;
|
|
382
|
+
|
|
381
383
|
const maybeAutoScrollToBottom = useCallback(() => {
|
|
382
|
-
if (!shouldStickToBottomRef.current) {
|
|
383
|
-
return;
|
|
384
|
-
}
|
|
385
384
|
if (followScrollRafRef.current !== null) {
|
|
386
385
|
return;
|
|
387
386
|
}
|
|
@@ -397,6 +396,14 @@ export default function ChatView({
|
|
|
397
396
|
}
|
|
398
397
|
const distanceFromBottom =
|
|
399
398
|
container.scrollHeight - container.scrollTop - container.clientHeight;
|
|
399
|
+
if (distanceFromBottom > NEAR_BOTTOM_PX) {
|
|
400
|
+
shouldStickToBottomRef.current = false;
|
|
401
|
+
setShowJumpToBottom(true);
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
if (!shouldStickToBottomRef.current) {
|
|
405
|
+
return;
|
|
406
|
+
}
|
|
400
407
|
if (distanceFromBottom <= 2) {
|
|
401
408
|
return;
|
|
402
409
|
}
|
|
@@ -1007,12 +1014,44 @@ export default function ChatView({
|
|
|
1007
1014
|
: `Explain this: "${capturedQuotedContext}"`
|
|
1008
1015
|
: trimmed;
|
|
1009
1016
|
|
|
1017
|
+
const isFirstMessage = resolvedThread.title === "New chat";
|
|
1018
|
+
|
|
1010
1019
|
const { userMessage, assistantMessage } = await appendUserAndAssistant({
|
|
1011
1020
|
thread: resolvedThread,
|
|
1012
1021
|
content: contentToSend,
|
|
1013
1022
|
provider: connection.kind === "builtin" ? connection.provider ?? connection.id : connection.id,
|
|
1014
1023
|
model,
|
|
1015
1024
|
});
|
|
1025
|
+
|
|
1026
|
+
if (isFirstMessage) {
|
|
1027
|
+
if (isLikelyGreeting(trimmed)) {
|
|
1028
|
+
await db.threads.update(resolvedThread.id, { title: "New chat" });
|
|
1029
|
+
} else {
|
|
1030
|
+
void (async () => {
|
|
1031
|
+
try {
|
|
1032
|
+
const resp = await fetch("/api/generate-title", {
|
|
1033
|
+
method: "POST",
|
|
1034
|
+
headers: { "Content-Type": "application/json" },
|
|
1035
|
+
body: JSON.stringify({
|
|
1036
|
+
connection: connectionPayload,
|
|
1037
|
+
model,
|
|
1038
|
+
messages: [{ role: "user" as const, content: contentToSend }],
|
|
1039
|
+
}),
|
|
1040
|
+
});
|
|
1041
|
+
if (resp.ok) {
|
|
1042
|
+
const { title: aiTitle } = (await resp.json()) as { title?: string };
|
|
1043
|
+
const title = aiTitle?.trim() || "New chat";
|
|
1044
|
+
await db.threads.update(resolvedThread.id, { title });
|
|
1045
|
+
} else {
|
|
1046
|
+
await db.threads.update(resolvedThread.id, { title: "New chat" });
|
|
1047
|
+
}
|
|
1048
|
+
} catch {
|
|
1049
|
+
await db.threads.update(resolvedThread.id, { title: "New chat" });
|
|
1050
|
+
}
|
|
1051
|
+
})();
|
|
1052
|
+
}
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1016
1055
|
const lastAssistantMessage = userMessage.parentId
|
|
1017
1056
|
? messageMap.get(userMessage.parentId)
|
|
1018
1057
|
: undefined;
|
package/template/src/lib/data.ts
CHANGED
|
@@ -8,7 +8,6 @@ import type {
|
|
|
8
8
|
Thread,
|
|
9
9
|
} from "./types";
|
|
10
10
|
import { DEFAULT_LOCAL_TOOLS_SETTINGS, DEFAULT_MEMORY_SETTINGS } from "./types";
|
|
11
|
-
import { deriveTitle } from "./utils";
|
|
12
11
|
import { BUILTIN_CONNECTION_IDS, migrateLegacyConnections } from "./connections";
|
|
13
12
|
|
|
14
13
|
const DEFAULT_SETTINGS: Settings = {
|
|
@@ -318,7 +317,8 @@ export async function appendUserAndAssistant(params: {
|
|
|
318
317
|
|
|
319
318
|
await db.messages.bulkAdd([userMessage, assistantMessage]);
|
|
320
319
|
|
|
321
|
-
const title =
|
|
320
|
+
const title =
|
|
321
|
+
thread.title === "New chat" ? "New chat" : thread.title;
|
|
322
322
|
await db.threads.update(thread.id, {
|
|
323
323
|
headMessageId: assistantId,
|
|
324
324
|
updatedAt: Date.now(),
|
|
@@ -83,6 +83,28 @@ export function deriveTitle(text: string) {
|
|
|
83
83
|
return clean.length > 42 ? `${clean.slice(0, 42)}...` : clean;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
const GREETING_PATTERNS = [
|
|
87
|
+
/^hi\s*!?\s*$/i,
|
|
88
|
+
/^hello\s*!?\s*$/i,
|
|
89
|
+
/^hey\s*!?\s*$/i,
|
|
90
|
+
/^how are you\s*\.?\s*$/i,
|
|
91
|
+
/^good morning\s*\.?\s*$/i,
|
|
92
|
+
/^good afternoon\s*\.?\s*$/i,
|
|
93
|
+
/^good evening\s*\.?\s*$/i,
|
|
94
|
+
/^what'?s up\s*\.?\s*$/i,
|
|
95
|
+
/^yo\s*$/i,
|
|
96
|
+
/^hi there\s*!?\s*$/i,
|
|
97
|
+
/^hello there\s*!?\s*$/i,
|
|
98
|
+
];
|
|
99
|
+
|
|
100
|
+
/** True when the message is likely only a greeting (no substantive request). */
|
|
101
|
+
export function isLikelyGreeting(text: string): boolean {
|
|
102
|
+
const clean = text.replace(/\s+/g, " ").trim();
|
|
103
|
+
if (clean.length > 40) return false;
|
|
104
|
+
const lower = clean.toLowerCase();
|
|
105
|
+
return GREETING_PATTERNS.some((re) => re.test(lower));
|
|
106
|
+
}
|
|
107
|
+
|
|
86
108
|
export function buildPath(headId: string | null, map: Map<string, MessageNode>) {
|
|
87
109
|
const path: MessageNode[] = [];
|
|
88
110
|
let currentId = headId;
|