@gendive/chatllm 0.17.27 → 0.17.29

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.
@@ -35,6 +35,8 @@ __export(index_exports, {
35
35
  ChatSidebar: () => ChatSidebar,
36
36
  ChatUI: () => ChatUI,
37
37
  ChecklistCard: () => ChecklistCard,
38
+ ChecklistMiniIndicator: () => ChecklistMiniIndicator,
39
+ ChecklistPanel: () => ChecklistPanel,
38
40
  ContentPartRenderer: () => ContentPartRenderer,
39
41
  DEFAULT_PROJECT_ID: () => DEFAULT_PROJECT_ID,
40
42
  DEFAULT_PROJECT_TITLE: () => DEFAULT_PROJECT_TITLE,
@@ -1751,6 +1753,8 @@ var useChatUI = (options) => {
1751
1753
  deepResearch,
1752
1754
  // Poll options
1753
1755
  enablePoll = true,
1756
+ // Checklist options
1757
+ enableChecklist = true,
1754
1758
  // Skills options
1755
1759
  skills,
1756
1760
  // Tool options
@@ -2116,9 +2120,40 @@ ${projectMemoryContext}`);
2116
2120
  - \uAC01 \uC9C8\uBB38\uC740 \uC11C\uB85C \uB2E4\uB978 \uB0B4\uC6A9
2117
2121
  - \uC635\uC158\uB9C8\uB2E4 \uC9E7\uC740 \uC124\uBA85 \uD3EC\uD568
2118
2122
  - \uC0AC\uC6A9\uC790\uAC00 \uBAA8\uB450 \uC120\uD0DD \uD6C4 \uC9C4\uD589`);
2123
+ }
2124
+ if (enableChecklist) {
2125
+ parts.push("");
2126
+ parts.push(`## \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uC790\uB3D9 \uC2E4\uD589 \uAE30\uB2A5
2127
+
2128
+ \uBCF5\uD569 \uC791\uC5C5(\uC870\uC0AC, \uBE44\uAD50 \uBD84\uC11D, \uB2E4\uB2E8\uACC4 \uC791\uC5C5)\uC744 \uC694\uCCAD\uBC1B\uC73C\uBA74 <checklist> \uD0DC\uADF8\uB85C \uC2E4\uD589 \uACC4\uD68D\uC744 \uC791\uC131\uD558\uC138\uC694.
2129
+ \uC2DC\uC2A4\uD15C\uC774 \uAC01 \uB2E8\uACC4\uB97C \uC790\uB3D9\uC73C\uB85C \uD558\uB098\uC529 \uC2E4\uD589\uD569\uB2C8\uB2E4.
2130
+
2131
+ **\uD615\uC2DD:**
2132
+ <checklist>
2133
+ <step>1\uB2E8\uACC4 \uC81C\uBAA9</step>
2134
+ <step>2\uB2E8\uACC4 \uC81C\uBAA9</step>
2135
+ <step>3\uB2E8\uACC4 \uC81C\uBAA9</step>
2136
+ </checklist>
2137
+
2138
+ **\uC608\uC2DC - "A\uC0AC\uC640 B\uC0AC \uBE44\uAD50 \uBD84\uC11D\uD574\uC918":**
2139
+ \uB124, \uBE44\uAD50 \uBD84\uC11D\uC744 \uC9C4\uD589\uD558\uACA0\uC2B5\uB2C8\uB2E4.
2140
+
2141
+ <checklist>
2142
+ <step>A\uC0AC \uC815\uBCF4 \uC870\uC0AC</step>
2143
+ <step>B\uC0AC \uC815\uBCF4 \uC870\uC0AC</step>
2144
+ <step>\uB450 \uD68C\uC0AC \uBE44\uAD50 \uBD84\uC11D\uD45C \uC791\uC131</step>
2145
+ <step>\uC885\uD569 \uACB0\uB860 \uBC0F \uCD94\uCC9C</step>
2146
+ </checklist>
2147
+
2148
+ **\uADDC\uCE59:**
2149
+ - 2~8\uB2E8\uACC4\uAC00 \uC801\uC808 (\uB108\uBB34 \uC801\uAC70\uB098 \uB9CE\uC73C\uBA74 \uC548 \uB428)
2150
+ - \uAC01 \uB2E8\uACC4\uB294 \uAD6C\uCCB4\uC801\uC774\uACE0 \uC2E4\uD589 \uAC00\uB2A5\uD55C \uC791\uC5C5
2151
+ - \uB2E8\uC21C \uC9C8\uBB38\uC774\uB098 \uD55C \uBC88\uC5D0 \uB2F5\uD560 \uC218 \uC788\uB294 \uC694\uCCAD\uC5D0\uB294 \uC0AC\uC6A9 \uAE08\uC9C0
2152
+ - <checklist> \uD0DC\uADF8 \uC55E\uC5D0 \uC9E7\uC740 \uC548\uB0B4 \uBA54\uC2DC\uC9C0\uB97C \uD3EC\uD568
2153
+ - \uAC80\uC0C9/\uC870\uC0AC, \uBE44\uAD50 \uBD84\uC11D, \uBCF4\uACE0\uC11C \uC791\uC131, \uB2E4\uB2E8\uACC4 \uC791\uC5C5\uC5D0 \uC801\uADF9 \uC0AC\uC6A9`);
2119
2154
  }
2120
2155
  return parts.length > 0 ? parts.join("\n") : "";
2121
- }, [personalization, globalMemory, useGlobalMemoryEnabled, enablePoll, buildSkillsPrompt, enableProjects, projectHook.currentProject, projectMemory]);
2156
+ }, [personalization, globalMemory, useGlobalMemoryEnabled, enablePoll, enableChecklist, buildSkillsPrompt, enableProjects, projectHook.currentProject, projectMemory]);
2122
2157
  const compressContext = (0, import_react5.useCallback)(async (messagesToCompress, model) => {
2123
2158
  const conversationText = messagesToCompress.map((m) => `${m.role === "user" ? "\uC0AC\uC6A9\uC790" : "AI"}: ${m.content}`).join("\n\n");
2124
2159
  const summaryPrompt = `\uB2E4\uC74C \uB300\uD654 \uB0B4\uC6A9\uC744 \uD575\uC2EC \uC815\uBCF4\uB9CC \uC720\uC9C0\uD558\uBA74\uC11C \uAC04\uACB0\uD558\uAC8C \uC694\uC57D\uD574\uC8FC\uC138\uC694.
@@ -4146,7 +4181,13 @@ ${result.content}
4146
4181
  /** @Todo vibecode - 체크리스트 error 항목 재시도 */
4147
4182
  handleChecklistRetry,
4148
4183
  /** @Todo vibecode - 체크리스트 pending 항목 건너뛰기 */
4149
- handleChecklistSkip
4184
+ handleChecklistSkip,
4185
+ /** @Todo vibecode - 활성 체크리스트가 포함된 메시지 (패널 자동 열기 트리거용) */
4186
+ activeChecklistMessage: messages.find(
4187
+ (m) => m.checklistBlock && !m.checklistBlock.completed
4188
+ ) || messages.find(
4189
+ (m) => m.checklistBlock?.completed
4190
+ ) || null
4150
4191
  };
4151
4192
  };
4152
4193
 
@@ -8944,6 +8985,80 @@ var ChecklistCard = ({
8944
8985
  }
8945
8986
  );
8946
8987
  };
8988
+ var ChecklistMiniIndicator = ({
8989
+ items,
8990
+ completed
8991
+ }) => {
8992
+ const doneCount = items.filter((it) => it.status === "done").length;
8993
+ const isRunning = items.some((it) => it.status === "in_progress");
8994
+ const hasError = items.some((it) => it.status === "error");
8995
+ const progressPercent = doneCount / items.length * 100;
8996
+ const statusText = completed ? "\uBAA8\uB4E0 \uB2E8\uACC4 \uC644\uB8CC" : hasError ? "\uC791\uC5C5 \uC911\uB2E8\uB428" : isRunning ? `\uC791\uC5C5 \uC9C4\uD589 \uC911 \xB7 ${doneCount}/${items.length}` : `\uB300\uAE30 \uC911 \xB7 ${doneCount}/${items.length}`;
8997
+ const statusColor = completed ? "var(--chatllm-success, #22c55e)" : hasError ? "var(--chatllm-error, #ef4444)" : "var(--chatllm-primary, #3584FA)";
8998
+ const barColor = completed ? "var(--chatllm-success, #22c55e)" : "var(--chatllm-primary, #3584FA)";
8999
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
9000
+ "div",
9001
+ {
9002
+ style: {
9003
+ display: "flex",
9004
+ alignItems: "center",
9005
+ gap: "10px",
9006
+ padding: "10px 14px",
9007
+ border: "1px solid var(--chatllm-border, #e5e7eb)",
9008
+ borderRadius: "10px",
9009
+ backgroundColor: "var(--chatllm-content-bg, #fff)",
9010
+ marginTop: "8px"
9011
+ },
9012
+ children: [
9013
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
9014
+ IconSvg,
9015
+ {
9016
+ name: completed ? "checkbox-circle-line" : "list-check",
9017
+ size: 16,
9018
+ color: statusColor
9019
+ }
9020
+ ),
9021
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
9022
+ "span",
9023
+ {
9024
+ style: {
9025
+ fontSize: "13px",
9026
+ fontWeight: 500,
9027
+ color: statusColor,
9028
+ whiteSpace: "nowrap"
9029
+ },
9030
+ children: statusText
9031
+ }
9032
+ ),
9033
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
9034
+ "div",
9035
+ {
9036
+ style: {
9037
+ flex: 1,
9038
+ height: "3px",
9039
+ backgroundColor: "var(--chatllm-bg-secondary, #f1f5f9)",
9040
+ borderRadius: "2px",
9041
+ overflow: "hidden",
9042
+ minWidth: "60px"
9043
+ },
9044
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
9045
+ "div",
9046
+ {
9047
+ style: {
9048
+ height: "100%",
9049
+ width: `${progressPercent}%`,
9050
+ backgroundColor: barColor,
9051
+ borderRadius: "2px",
9052
+ transition: "width 0.6s cubic-bezier(0.25, 1, 0.5, 1)"
9053
+ }
9054
+ }
9055
+ )
9056
+ }
9057
+ )
9058
+ ]
9059
+ }
9060
+ );
9061
+ };
8947
9062
 
8948
9063
  // src/react/components/MessageBubble.tsx
8949
9064
  var import_jsx_runtime16 = require("react/jsx-runtime");
@@ -9301,14 +9416,10 @@ var MessageBubble = ({
9301
9416
  }
9302
9417
  ),
9303
9418
  message.checklistBlock && message.checklistBlock.items.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
9304
- ChecklistCard,
9419
+ ChecklistMiniIndicator,
9305
9420
  {
9306
9421
  items: message.checklistBlock.items,
9307
- currentStep: message.checklistBlock.currentStep,
9308
- completed: message.checklistBlock.completed,
9309
- onAbort: onChecklistAbort,
9310
- onRetryStep: onChecklistRetry,
9311
- onSkipStep: onChecklistSkip
9422
+ completed: message.checklistBlock.completed
9312
9423
  }
9313
9424
  ),
9314
9425
  !isLoading && !displayContent && !message.pollBlock && !message.checklistBlock && !message.contentParts?.length && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
@@ -11126,8 +11237,169 @@ var DisclaimerModal = ({ isOpen, onClose }) => {
11126
11237
  );
11127
11238
  };
11128
11239
 
11129
- // src/react/ChatUI.tsx
11240
+ // src/react/components/ChecklistPanel.tsx
11130
11241
  var import_jsx_runtime21 = require("react/jsx-runtime");
11242
+ var ChecklistPanel = ({
11243
+ message,
11244
+ isOpen,
11245
+ onClose,
11246
+ onAbort,
11247
+ onRetry,
11248
+ onSkip,
11249
+ width = 360,
11250
+ isMobileOverlay = false
11251
+ }) => {
11252
+ const block = message?.checklistBlock;
11253
+ if (isMobileOverlay) {
11254
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [
11255
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
11256
+ "div",
11257
+ {
11258
+ onClick: onClose,
11259
+ style: {
11260
+ position: "fixed",
11261
+ inset: 0,
11262
+ backgroundColor: "rgba(0, 0, 0, 0.4)",
11263
+ zIndex: 999,
11264
+ opacity: isOpen ? 1 : 0,
11265
+ pointerEvents: isOpen ? "auto" : "none",
11266
+ transition: "opacity 0.3s ease"
11267
+ }
11268
+ }
11269
+ ),
11270
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
11271
+ "aside",
11272
+ {
11273
+ style: {
11274
+ position: "fixed",
11275
+ top: 0,
11276
+ right: 0,
11277
+ bottom: 0,
11278
+ width: "85vw",
11279
+ maxWidth: "400px",
11280
+ backgroundColor: "var(--chatllm-bg, #F5F5F5)",
11281
+ zIndex: 1e3,
11282
+ transform: isOpen ? "translateX(0)" : "translateX(100%)",
11283
+ transition: "transform 0.3s cubic-bezier(0.4, 0, 0.2, 1)",
11284
+ display: "flex",
11285
+ flexDirection: "column",
11286
+ boxShadow: isOpen ? "-4px 0 20px rgba(0, 0, 0, 0.1)" : "none"
11287
+ },
11288
+ children: renderPanelContent()
11289
+ }
11290
+ )
11291
+ ] });
11292
+ }
11293
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
11294
+ "aside",
11295
+ {
11296
+ style: {
11297
+ width: isOpen ? typeof width === "number" ? `${width}px` : width : "0px",
11298
+ minWidth: 0,
11299
+ overflow: "hidden",
11300
+ transition: "width 0.3s cubic-bezier(0.4, 0, 0.2, 1)",
11301
+ borderLeft: isOpen ? "1px solid var(--chatllm-border, #e2e8f0)" : "none",
11302
+ backgroundColor: "var(--chatllm-bg, #F5F5F5)",
11303
+ display: "flex",
11304
+ flexDirection: "column",
11305
+ flexShrink: 0
11306
+ },
11307
+ children: isOpen && renderPanelContent()
11308
+ }
11309
+ );
11310
+ function renderPanelContent() {
11311
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [
11312
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
11313
+ "div",
11314
+ {
11315
+ style: {
11316
+ display: "flex",
11317
+ alignItems: "center",
11318
+ justifyContent: "space-between",
11319
+ padding: "16px",
11320
+ borderBottom: "1px solid var(--chatllm-border, #e2e8f0)",
11321
+ flexShrink: 0
11322
+ },
11323
+ children: [
11324
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
11325
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(IconSvg, { name: "list-check", size: 18, color: "var(--chatllm-primary, #3584FA)" }),
11326
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
11327
+ "span",
11328
+ {
11329
+ style: {
11330
+ fontSize: "14px",
11331
+ fontWeight: 600,
11332
+ color: "var(--chatllm-text, #1e293b)"
11333
+ },
11334
+ children: "\uCCB4\uD06C\uB9AC\uC2A4\uD2B8"
11335
+ }
11336
+ )
11337
+ ] }),
11338
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
11339
+ "button",
11340
+ {
11341
+ onClick: onClose,
11342
+ "aria-label": "\uD328\uB110 \uB2EB\uAE30",
11343
+ style: {
11344
+ width: "28px",
11345
+ height: "28px",
11346
+ display: "flex",
11347
+ alignItems: "center",
11348
+ justifyContent: "center",
11349
+ borderRadius: "6px",
11350
+ border: "none",
11351
+ backgroundColor: "transparent",
11352
+ cursor: "pointer",
11353
+ color: "var(--chatllm-text-muted, #94a3b8)",
11354
+ transition: "background-color 0.15s ease"
11355
+ },
11356
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(IconSvg, { name: "close-line", size: 18, color: "currentColor" })
11357
+ }
11358
+ )
11359
+ ]
11360
+ }
11361
+ ),
11362
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
11363
+ "div",
11364
+ {
11365
+ className: "chatllm-scrollbar",
11366
+ style: {
11367
+ flex: 1,
11368
+ overflowY: "auto",
11369
+ padding: "16px"
11370
+ },
11371
+ children: block && block.items.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
11372
+ ChecklistCard,
11373
+ {
11374
+ items: block.items,
11375
+ currentStep: block.currentStep,
11376
+ completed: block.completed,
11377
+ onAbort,
11378
+ onRetryStep: onRetry,
11379
+ onSkipStep: onSkip
11380
+ }
11381
+ ) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
11382
+ "div",
11383
+ {
11384
+ style: {
11385
+ display: "flex",
11386
+ alignItems: "center",
11387
+ justifyContent: "center",
11388
+ height: "100%",
11389
+ color: "var(--chatllm-text-muted, #94a3b8)",
11390
+ fontSize: "13px"
11391
+ },
11392
+ children: "\uCCB4\uD06C\uB9AC\uC2A4\uD2B8\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4"
11393
+ }
11394
+ )
11395
+ }
11396
+ )
11397
+ ] });
11398
+ }
11399
+ };
11400
+
11401
+ // src/react/ChatUI.tsx
11402
+ var import_jsx_runtime22 = require("react/jsx-runtime");
11131
11403
  var DEFAULT_ACTIONS = [];
11132
11404
  var DEFAULT_TEMPLATES = [];
11133
11405
  var DEFAULT_MODELS = [
@@ -11466,9 +11738,33 @@ var ChatUIView = ({
11466
11738
  // Checklist
11467
11739
  handleChecklistAbort,
11468
11740
  handleChecklistRetry,
11469
- handleChecklistSkip
11741
+ handleChecklistSkip,
11742
+ activeChecklistMessage
11470
11743
  } = state;
11471
11744
  const [disclaimerOpen, setDisclaimerOpen] = import_react21.default.useState(false);
11745
+ const [isMobile, setIsMobile] = import_react21.default.useState(false);
11746
+ import_react21.default.useEffect(() => {
11747
+ if (typeof window === "undefined") return;
11748
+ const check = () => setIsMobile(window.innerWidth < 768);
11749
+ check();
11750
+ window.addEventListener("resize", check);
11751
+ return () => window.removeEventListener("resize", check);
11752
+ }, []);
11753
+ const [checklistPanelDismissed, setChecklistPanelDismissed] = import_react21.default.useState(false);
11754
+ const isChecklistPanelOpen = !!activeChecklistMessage && !checklistPanelDismissed;
11755
+ const prevChecklistIdRef = import_react21.default.useRef(void 0);
11756
+ import_react21.default.useEffect(() => {
11757
+ const currentId = activeChecklistMessage?.checklistBlock?.id;
11758
+ if (currentId && currentId !== prevChecklistIdRef.current && !activeChecklistMessage?.checklistBlock?.completed) {
11759
+ setChecklistPanelDismissed(false);
11760
+ }
11761
+ prevChecklistIdRef.current = currentId;
11762
+ }, [activeChecklistMessage?.checklistBlock?.id, activeChecklistMessage?.checklistBlock?.completed]);
11763
+ import_react21.default.useEffect(() => {
11764
+ if (!activeChecklistMessage?.checklistBlock?.completed) return;
11765
+ const timer = setTimeout(() => setChecklistPanelDismissed(true), 2e3);
11766
+ return () => clearTimeout(timer);
11767
+ }, [activeChecklistMessage?.checklistBlock?.completed]);
11472
11768
  const [welcomeExiting, setWelcomeExiting] = import_react21.default.useState(false);
11473
11769
  const prevMessageCountRef = import_react21.default.useRef(messages.length);
11474
11770
  import_react21.default.useEffect(() => {
@@ -11524,7 +11820,7 @@ var ChatUIView = ({
11524
11820
  return items;
11525
11821
  }, [projectMemory?.state.entries]);
11526
11822
  const themeClass = theme?.mode === "dark" ? "chatllm-dark" : "";
11527
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
11823
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
11528
11824
  "div",
11529
11825
  {
11530
11826
  className: `chatllm-root ${themeClass} ${className}`,
@@ -11537,7 +11833,7 @@ var ChatUIView = ({
11537
11833
  position: "relative"
11538
11834
  },
11539
11835
  children: [
11540
- showSidebar && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
11836
+ showSidebar && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
11541
11837
  ChatSidebar,
11542
11838
  {
11543
11839
  sessions,
@@ -11569,7 +11865,7 @@ var ChatUIView = ({
11569
11865
  isLoading: isSessionsLoading
11570
11866
  }
11571
11867
  ),
11572
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
11868
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
11573
11869
  "main",
11574
11870
  {
11575
11871
  style: {
@@ -11581,7 +11877,7 @@ var ChatUIView = ({
11581
11877
  minWidth: 0
11582
11878
  },
11583
11879
  children: [
11584
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
11880
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
11585
11881
  ChatHeader,
11586
11882
  {
11587
11883
  title: currentSession?.title || "\uC0C8 \uB300\uD654",
@@ -11595,7 +11891,7 @@ var ChatUIView = ({
11595
11891
  showSettings
11596
11892
  }
11597
11893
  ),
11598
- (messages.length === 0 || welcomeExiting) && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
11894
+ (messages.length === 0 || welcomeExiting) && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
11599
11895
  "div",
11600
11896
  {
11601
11897
  style: {
@@ -11610,7 +11906,7 @@ var ChatUIView = ({
11610
11906
  pointerEvents: welcomeExiting ? "none" : "auto"
11611
11907
  },
11612
11908
  children: [
11613
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
11909
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
11614
11910
  "h1",
11615
11911
  {
11616
11912
  style: {
@@ -11624,7 +11920,7 @@ var ChatUIView = ({
11624
11920
  children: greeting ? `${greeting} \u273A` : "\u273A \uBB34\uC5C7\uC744 \uC0DD\uAC01\uD574 \uBCFC\uAE4C\uC694?"
11625
11921
  }
11626
11922
  ),
11627
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { style: { width: "100%", maxWidth: "680px" }, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
11923
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { style: { width: "100%", maxWidth: "680px" }, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
11628
11924
  ChatInput,
11629
11925
  {
11630
11926
  value: input,
@@ -11652,7 +11948,7 @@ var ChatUIView = ({
11652
11948
  inline: true
11653
11949
  }
11654
11950
  ) }),
11655
- suggestedPrompts && suggestedPrompts.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
11951
+ suggestedPrompts && suggestedPrompts.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
11656
11952
  "div",
11657
11953
  {
11658
11954
  style: {
@@ -11662,7 +11958,7 @@ var ChatUIView = ({
11662
11958
  justifyContent: "center",
11663
11959
  maxWidth: "680px"
11664
11960
  },
11665
- children: suggestedPrompts.map((sp) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
11961
+ children: suggestedPrompts.map((sp) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
11666
11962
  "button",
11667
11963
  {
11668
11964
  onClick: () => setInput(sp.prompt),
@@ -11681,7 +11977,7 @@ var ChatUIView = ({
11681
11977
  transition: "all 0.2s"
11682
11978
  },
11683
11979
  children: [
11684
- sp.icon && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(IconSvg, { name: sp.icon, size: 16, color: "var(--chatllm-text-muted)" }),
11980
+ sp.icon && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(IconSvg, { name: sp.icon, size: 16, color: "var(--chatllm-text-muted)" }),
11685
11981
  sp.label
11686
11982
  ]
11687
11983
  },
@@ -11692,8 +11988,8 @@ var ChatUIView = ({
11692
11988
  ]
11693
11989
  }
11694
11990
  ),
11695
- messages.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [
11696
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
11991
+ messages.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
11992
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
11697
11993
  MessageList,
11698
11994
  {
11699
11995
  messages,
@@ -11718,7 +12014,7 @@ var ChatUIView = ({
11718
12014
  onChecklistSkip: handleChecklistSkip
11719
12015
  }
11720
12016
  ),
11721
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
12017
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
11722
12018
  ChatInput,
11723
12019
  {
11724
12020
  value: input,
@@ -11749,7 +12045,19 @@ var ChatUIView = ({
11749
12045
  ]
11750
12046
  }
11751
12047
  ),
11752
- showSettings && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
12048
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
12049
+ ChecklistPanel,
12050
+ {
12051
+ message: activeChecklistMessage,
12052
+ isOpen: isChecklistPanelOpen,
12053
+ onClose: () => setChecklistPanelDismissed(true),
12054
+ onAbort: handleChecklistAbort,
12055
+ onRetry: activeChecklistMessage ? (stepIndex) => handleChecklistRetry(activeChecklistMessage.id, stepIndex) : void 0,
12056
+ onSkip: activeChecklistMessage ? (stepIndex) => handleChecklistSkip(activeChecklistMessage.id, stepIndex) : void 0,
12057
+ isMobileOverlay: isMobile
12058
+ }
12059
+ ),
12060
+ showSettings && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
11753
12061
  SettingsModal,
11754
12062
  {
11755
12063
  isOpen: settingsOpen,
@@ -11776,7 +12084,7 @@ var ChatUIView = ({
11776
12084
  currentProjectTitle: currentProject?.title
11777
12085
  }
11778
12086
  ),
11779
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
12087
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
11780
12088
  ProjectSettingsModal,
11781
12089
  {
11782
12090
  isOpen: projectSettingsOpen,
@@ -11788,7 +12096,7 @@ var ChatUIView = ({
11788
12096
  onDeleteProject: deleteProject
11789
12097
  }
11790
12098
  ),
11791
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(DisclaimerModal, { isOpen: disclaimerOpen, onClose: () => setDisclaimerOpen(false) })
12099
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DisclaimerModal, { isOpen: disclaimerOpen, onClose: () => setDisclaimerOpen(false) })
11792
12100
  ]
11793
12101
  }
11794
12102
  );
@@ -11891,7 +12199,7 @@ var ChatUIWithHook = ({
11891
12199
  onDeleteProjectFile
11892
12200
  };
11893
12201
  const state = useChatUI(hookOptions);
11894
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
12202
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
11895
12203
  ChatUIView,
11896
12204
  {
11897
12205
  state,
@@ -11939,7 +12247,7 @@ var ChatUI = (props) => {
11939
12247
  deepResearch,
11940
12248
  suggestedPrompts: chatStateSuggestedPrompts
11941
12249
  } = props;
11942
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
12250
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
11943
12251
  ChatUIView,
11944
12252
  {
11945
12253
  state: props.chatState,
@@ -11964,7 +12272,7 @@ var ChatUI = (props) => {
11964
12272
  }
11965
12273
  );
11966
12274
  }
11967
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ChatUIWithHook, { ...props });
12275
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ChatUIWithHook, { ...props });
11968
12276
  };
11969
12277
 
11970
12278
  // src/react/hooks/useDeepResearch.ts
@@ -12282,7 +12590,7 @@ var useDeepResearch = (options) => {
12282
12590
  };
12283
12591
 
12284
12592
  // src/react/components/EmptyState.tsx
12285
- var import_jsx_runtime22 = require("react/jsx-runtime");
12593
+ var import_jsx_runtime23 = require("react/jsx-runtime");
12286
12594
  var EmptyState = ({
12287
12595
  greeting,
12288
12596
  templates = [],
@@ -12300,7 +12608,7 @@ var EmptyState = ({
12300
12608
  return iconMap[icon] || "sparkling-line";
12301
12609
  };
12302
12610
  const hasContent = actions.length > 0 || templates.length > 0;
12303
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
12611
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
12304
12612
  "div",
12305
12613
  {
12306
12614
  className: "chatllm-empty-state",
@@ -12315,7 +12623,7 @@ var EmptyState = ({
12315
12623
  textAlign: "center"
12316
12624
  },
12317
12625
  children: [
12318
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
12626
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
12319
12627
  "div",
12320
12628
  {
12321
12629
  className: "chatllm-sheet",
@@ -12329,10 +12637,10 @@ var EmptyState = ({
12329
12637
  marginBottom: "32px",
12330
12638
  color: "var(--chatllm-primary)"
12331
12639
  },
12332
- children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(IconSvg, { name: "chat-1-line", size: 40 })
12640
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(IconSvg, { name: "chat-1-line", size: 40 })
12333
12641
  }
12334
12642
  ),
12335
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
12643
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
12336
12644
  "h1",
12337
12645
  {
12338
12646
  style: {
@@ -12345,7 +12653,7 @@ var EmptyState = ({
12345
12653
  children: "How can I help you today?"
12346
12654
  }
12347
12655
  ),
12348
- (actions.length > 0 || templates.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
12656
+ (actions.length > 0 || templates.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
12349
12657
  "div",
12350
12658
  {
12351
12659
  style: {
@@ -12357,7 +12665,7 @@ var EmptyState = ({
12357
12665
  marginBottom: "48px"
12358
12666
  },
12359
12667
  children: [
12360
- actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
12668
+ actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
12361
12669
  "button",
12362
12670
  {
12363
12671
  onClick: () => onActionSelect?.(action),
@@ -12371,7 +12679,7 @@ var EmptyState = ({
12371
12679
  fontWeight: 500
12372
12680
  },
12373
12681
  children: [
12374
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
12682
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
12375
12683
  IconSvg,
12376
12684
  {
12377
12685
  name: getActionIcon(action.icon),
@@ -12384,7 +12692,7 @@ var EmptyState = ({
12384
12692
  },
12385
12693
  action.id
12386
12694
  )),
12387
- templates.slice(0, 4).map((template) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
12695
+ templates.slice(0, 4).map((template) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
12388
12696
  "button",
12389
12697
  {
12390
12698
  onClick: () => onTemplateClick(template),
@@ -12398,7 +12706,7 @@ var EmptyState = ({
12398
12706
  fontWeight: 500
12399
12707
  },
12400
12708
  children: [
12401
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
12709
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
12402
12710
  IconSvg,
12403
12711
  {
12404
12712
  name: "sparkling-line",
@@ -12421,7 +12729,7 @@ var EmptyState = ({
12421
12729
 
12422
12730
  // src/react/components/MemoryPanel.tsx
12423
12731
  var import_react23 = require("react");
12424
- var import_jsx_runtime23 = require("react/jsx-runtime");
12732
+ var import_jsx_runtime24 = require("react/jsx-runtime");
12425
12733
  var categoryLabels = {
12426
12734
  fact: "\uC0AC\uC6A9\uC790 \uC815\uBCF4",
12427
12735
  skill: "\uC804\uBB38 \uBD84\uC57C/\uAE30\uC220",
@@ -12453,7 +12761,7 @@ var MemoryPanel = ({
12453
12761
  });
12454
12762
  };
12455
12763
  if (!isOpen) {
12456
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
12764
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
12457
12765
  "button",
12458
12766
  {
12459
12767
  onClick: onToggle,
@@ -12473,11 +12781,11 @@ var MemoryPanel = ({
12473
12781
  justifyContent: "center",
12474
12782
  zIndex: 100
12475
12783
  },
12476
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(IconSvg, { name: "robot-line", size: 24, color: "#ffffff" })
12784
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(IconSvg, { name: "robot-line", size: 24, color: "#ffffff" })
12477
12785
  }
12478
12786
  );
12479
12787
  }
12480
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
12788
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
12481
12789
  "div",
12482
12790
  {
12483
12791
  className: "chatllm-memory-panel",
@@ -12497,7 +12805,7 @@ var MemoryPanel = ({
12497
12805
  zIndex: 100
12498
12806
  },
12499
12807
  children: [
12500
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
12808
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
12501
12809
  "div",
12502
12810
  {
12503
12811
  style: {
@@ -12508,8 +12816,8 @@ var MemoryPanel = ({
12508
12816
  borderBottom: "1px solid var(--chatllm-border, #e5e7eb)"
12509
12817
  },
12510
12818
  children: [
12511
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "10px" }, children: [
12512
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
12819
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "10px" }, children: [
12820
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
12513
12821
  "div",
12514
12822
  {
12515
12823
  style: {
@@ -12521,19 +12829,19 @@ var MemoryPanel = ({
12521
12829
  alignItems: "center",
12522
12830
  justifyContent: "center"
12523
12831
  },
12524
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(IconSvg, { name: "robot-line", size: 18, color: "var(--chatllm-primary, #3584FA)" })
12832
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(IconSvg, { name: "robot-line", size: 18, color: "var(--chatllm-primary, #3584FA)" })
12525
12833
  }
12526
12834
  ),
12527
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { children: [
12528
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { style: { fontSize: "15px", fontWeight: 600, color: "var(--chatllm-text, #1f2937)" }, children: "AI \uBA54\uBAA8\uB9AC" }),
12529
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { style: { fontSize: "12px", color: "var(--chatllm-text-muted, #9ca3af)" }, children: [
12835
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { children: [
12836
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { style: { fontSize: "15px", fontWeight: 600, color: "var(--chatllm-text, #1f2937)" }, children: "AI \uBA54\uBAA8\uB9AC" }),
12837
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { style: { fontSize: "12px", color: "var(--chatllm-text-muted, #9ca3af)" }, children: [
12530
12838
  items.length,
12531
12839
  "\uAC1C \uD56D\uBAA9"
12532
12840
  ] })
12533
12841
  ] })
12534
12842
  ] }),
12535
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { style: { display: "flex", gap: "4px" }, children: [
12536
- onClearAll && items.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
12843
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { style: { display: "flex", gap: "4px" }, children: [
12844
+ onClearAll && items.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
12537
12845
  "button",
12538
12846
  {
12539
12847
  onClick: onClearAll,
@@ -12545,10 +12853,10 @@ var MemoryPanel = ({
12545
12853
  cursor: "pointer"
12546
12854
  },
12547
12855
  title: "\uC804\uCCB4 \uC0AD\uC81C",
12548
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(IconSvg, { name: "delete-bin-line", size: 18, color: "var(--chatllm-text-muted, #9ca3af)" })
12856
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(IconSvg, { name: "delete-bin-line", size: 18, color: "var(--chatllm-text-muted, #9ca3af)" })
12549
12857
  }
12550
12858
  ),
12551
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
12859
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
12552
12860
  "button",
12553
12861
  {
12554
12862
  onClick: onToggle,
@@ -12559,14 +12867,14 @@ var MemoryPanel = ({
12559
12867
  borderRadius: "8px",
12560
12868
  cursor: "pointer"
12561
12869
  },
12562
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(IconSvg, { name: "close-line", size: 18, color: "var(--chatllm-text-muted, #9ca3af)" })
12870
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(IconSvg, { name: "close-line", size: 18, color: "var(--chatllm-text-muted, #9ca3af)" })
12563
12871
  }
12564
12872
  )
12565
12873
  ] })
12566
12874
  ]
12567
12875
  }
12568
12876
  ),
12569
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
12877
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
12570
12878
  "div",
12571
12879
  {
12572
12880
  style: {
@@ -12576,7 +12884,7 @@ var MemoryPanel = ({
12576
12884
  borderBottom: "1px solid var(--chatllm-border-light, #f3f4f6)",
12577
12885
  overflowX: "auto"
12578
12886
  },
12579
- children: ["all", "fact", "skill", "preference"].map((tab) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
12887
+ children: ["all", "fact", "skill", "preference"].map((tab) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
12580
12888
  "button",
12581
12889
  {
12582
12890
  onClick: () => setActiveTab(tab),
@@ -12597,8 +12905,8 @@ var MemoryPanel = ({
12597
12905
  ))
12598
12906
  }
12599
12907
  ),
12600
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { style: { flex: 1, overflow: "auto", padding: "12px" }, children: [
12601
- contextSummary && activeTab === "all" && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
12908
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { style: { flex: 1, overflow: "auto", padding: "12px" }, children: [
12909
+ contextSummary && activeTab === "all" && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
12602
12910
  "div",
12603
12911
  {
12604
12912
  style: {
@@ -12609,7 +12917,7 @@ var MemoryPanel = ({
12609
12917
  borderLeft: "3px solid var(--chatllm-primary, #3584FA)"
12610
12918
  },
12611
12919
  children: [
12612
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
12920
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
12613
12921
  "div",
12614
12922
  {
12615
12923
  style: {
@@ -12619,12 +12927,12 @@ var MemoryPanel = ({
12619
12927
  marginBottom: "8px"
12620
12928
  },
12621
12929
  children: [
12622
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(IconSvg, { name: "file-text-line", size: 14, color: "var(--chatllm-primary, #3584FA)" }),
12623
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { style: { fontSize: "12px", fontWeight: 500, color: "var(--chatllm-primary, #3584FA)" }, children: "\uB300\uD654 \uC694\uC57D" })
12930
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(IconSvg, { name: "file-text-line", size: 14, color: "var(--chatllm-primary, #3584FA)" }),
12931
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { style: { fontSize: "12px", fontWeight: 500, color: "var(--chatllm-primary, #3584FA)" }, children: "\uB300\uD654 \uC694\uC57D" })
12624
12932
  ]
12625
12933
  }
12626
12934
  ),
12627
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
12935
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
12628
12936
  "p",
12629
12937
  {
12630
12938
  style: {
@@ -12639,7 +12947,7 @@ var MemoryPanel = ({
12639
12947
  ]
12640
12948
  }
12641
12949
  ),
12642
- filteredItems.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
12950
+ filteredItems.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
12643
12951
  "div",
12644
12952
  {
12645
12953
  style: {
@@ -12648,11 +12956,11 @@ var MemoryPanel = ({
12648
12956
  color: "var(--chatllm-text-muted, #9ca3af)"
12649
12957
  },
12650
12958
  children: [
12651
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(IconSvg, { name: "robot-line", size: 32, color: "var(--chatllm-text-muted, #d1d5db)" }),
12652
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { style: { fontSize: "14px", marginTop: "12px" }, children: "\uC800\uC7A5\uB41C \uBA54\uBAA8\uB9AC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4" })
12959
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(IconSvg, { name: "robot-line", size: 32, color: "var(--chatllm-text-muted, #d1d5db)" }),
12960
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { style: { fontSize: "14px", marginTop: "12px" }, children: "\uC800\uC7A5\uB41C \uBA54\uBAA8\uB9AC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4" })
12653
12961
  ]
12654
12962
  }
12655
- ) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { style: { display: "flex", flexDirection: "column", gap: "8px" }, children: filteredItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
12963
+ ) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { style: { display: "flex", flexDirection: "column", gap: "8px" }, children: filteredItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
12656
12964
  "div",
12657
12965
  {
12658
12966
  style: {
@@ -12665,10 +12973,10 @@ var MemoryPanel = ({
12665
12973
  },
12666
12974
  onClick: () => setExpandedId(expandedId === item.id ? null : item.id),
12667
12975
  children: [
12668
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { style: { display: "flex", alignItems: "flex-start", justifyContent: "space-between" }, children: [
12669
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
12670
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginBottom: "4px" }, children: [
12671
- item.category && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
12976
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { style: { display: "flex", alignItems: "flex-start", justifyContent: "space-between" }, children: [
12977
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
12978
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginBottom: "4px" }, children: [
12979
+ item.category && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
12672
12980
  "span",
12673
12981
  {
12674
12982
  style: {
@@ -12682,9 +12990,9 @@ var MemoryPanel = ({
12682
12990
  children: categoryLabels[item.category]
12683
12991
  }
12684
12992
  ),
12685
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { style: { fontSize: "11px", color: "var(--chatllm-text-muted, #9ca3af)" }, children: formatDate(item.timestamp) })
12993
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { style: { fontSize: "11px", color: "var(--chatllm-text-muted, #9ca3af)" }, children: formatDate(item.timestamp) })
12686
12994
  ] }),
12687
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
12995
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
12688
12996
  "div",
12689
12997
  {
12690
12998
  style: {
@@ -12696,8 +13004,8 @@ var MemoryPanel = ({
12696
13004
  }
12697
13005
  )
12698
13006
  ] }),
12699
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "4px" }, children: [
12700
- onDelete && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
13007
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "4px" }, children: [
13008
+ onDelete && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
12701
13009
  "button",
12702
13010
  {
12703
13011
  onClick: (e) => {
@@ -12712,10 +13020,10 @@ var MemoryPanel = ({
12712
13020
  cursor: "pointer",
12713
13021
  opacity: 0.5
12714
13022
  },
12715
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(IconSvg, { name: "delete-bin-line", size: 14, color: "var(--chatllm-text-muted, #9ca3af)" })
13023
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(IconSvg, { name: "delete-bin-line", size: 14, color: "var(--chatllm-text-muted, #9ca3af)" })
12716
13024
  }
12717
13025
  ),
12718
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
13026
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
12719
13027
  IconSvg,
12720
13028
  {
12721
13029
  name: expandedId === item.id ? "arrow-up-s-line" : "arrow-down-s-line",
@@ -12725,7 +13033,7 @@ var MemoryPanel = ({
12725
13033
  )
12726
13034
  ] })
12727
13035
  ] }),
12728
- expandedId === item.id && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
13036
+ expandedId === item.id && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
12729
13037
  "div",
12730
13038
  {
12731
13039
  style: {
@@ -12733,7 +13041,7 @@ var MemoryPanel = ({
12733
13041
  paddingTop: "12px",
12734
13042
  borderTop: "1px solid var(--chatllm-border-light, #f3f4f6)"
12735
13043
  },
12736
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
13044
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
12737
13045
  "p",
12738
13046
  {
12739
13047
  style: {
@@ -12764,6 +13072,8 @@ var MemoryPanel = ({
12764
13072
  ChatSidebar,
12765
13073
  ChatUI,
12766
13074
  ChecklistCard,
13075
+ ChecklistMiniIndicator,
13076
+ ChecklistPanel,
12767
13077
  ContentPartRenderer,
12768
13078
  DEFAULT_PROJECT_ID,
12769
13079
  DEFAULT_PROJECT_TITLE,