@springbrand/message-panel 0.1.3-alpha.32 → 0.1.3-alpha.34

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.
@@ -51,8 +51,6 @@
51
51
  --color-kumo-success: oklch(72.3% 0.219 149.579);
52
52
  --color-kumo-success-tint: oklch(92% 0.08 150);
53
53
 
54
- --color-operation-base: #ffffff;
55
-
56
54
  --color-kumo-tip-shadow: #14111014;
57
55
  --color-kumo-tip-stroke: transparent;
58
56
 
@@ -75,10 +73,6 @@
75
73
  --color-cos-status-live: oklch(72.3% 0.219 149.579);
76
74
  --color-cos-status-draft: oklch(68.1% 0.162 75.834);
77
75
  --color-cos-status-building: oklch(62.3% 0.214 259.815);
78
- --text-color-cos-work-description: rgba(0, 0, 0, 0.5);
79
- --text-color-cos-work-description-subtle: rgba(0, 0, 0, 0.7);
80
- --text-color-cos-tool-group: rgba(0, 0, 0, 0.5);
81
- --text-color-cos-output: #000000b3;
82
76
  }
83
77
 
84
78
  /* ── 作用域根:通用 token 只在 cloud-os 子树内生效 ─────────────────────────── */
@@ -158,8 +152,6 @@
158
152
  --color-kumo-success: oklch(52.7% 0.154 150.069);
159
153
  --color-kumo-success-tint: oklch(0.25 0.06 150.069);
160
154
 
161
- --color-operation-base: var(--color-kumo-base);
162
-
163
155
  --color-kumo-tip-shadow: #00000066;
164
156
  --color-kumo-tip-stroke: oklch(0.34 0.022 285);
165
157
 
@@ -180,10 +172,6 @@
180
172
  --color-cos-status-live: oklch(79.2% 0.209 151.711);
181
173
  --color-cos-status-draft: oklch(82.8% 0.189 84.429);
182
174
  --color-cos-status-building: oklch(74% 0.16 250);
183
- --text-color-cos-work-description: var(--text-color-kumo-subtle);
184
- --text-color-cos-work-description-subtle: var(--text-color-kumo-subtle);
185
- --text-color-cos-tool-group: var(--text-color-kumo-inactive);
186
- --text-color-cos-output: var(--text-color-kumo-subtle);
187
175
 
188
176
  --color-selection-bg: color-mix(in srgb, var(--color-kumo-brand) 28%, transparent);
189
177
  --color-selection-text: oklch(0.97 0.006 285);
@@ -18,7 +18,6 @@ export interface ComposerCommandLike {
18
18
  }
19
19
  const demoCompletedAt = Date.now() - 1_000;
20
20
  const demoTurnStartedAt = demoCompletedAt - 18_000;
21
- const demoTurnId = "camel-demo-research-turn";
22
21
  export const defaultPrompt =
23
22
  "请调研 2026 年 AI Agent 产品的交互趋势,并给出可落地的消息 UI 建议。";
24
23
  export const demoModels = [
@@ -745,7 +744,7 @@ const commandMessages = [
745
744
  const runningWork = {
746
745
  id: "camel-demo-running-work",
747
746
  role: "assistant",
748
- metadata: { turnId: demoTurnId, turnStartedAt: demoTurnStartedAt },
747
+ metadata: { turnStartedAt: demoTurnStartedAt },
749
748
  parts: [
750
749
  {
751
750
  type: "reasoning",
@@ -772,7 +771,7 @@ const runningWork = {
772
771
  const completedResearch = {
773
772
  id: "camel-demo-completed-research",
774
773
  role: "assistant",
775
- metadata: { turnId: demoTurnId, turnStartedAt: demoTurnStartedAt },
774
+ metadata: { turnStartedAt: demoTurnStartedAt },
776
775
  parts: [
777
776
  {
778
777
  type: "reasoning",
@@ -807,7 +806,6 @@ const completedResearch = {
807
806
  const completedSynthesis = {
808
807
  id: "camel-demo-completed-synthesis",
809
808
  role: "assistant",
810
- metadata: { turnId: demoTurnId },
811
809
  parts: [
812
810
  {
813
811
  type: "tool-update_plan",
@@ -839,7 +837,6 @@ const completedSynthesis = {
839
837
  const approvalRequest = {
840
838
  id: "camel-demo-approval-request",
841
839
  role: "assistant",
842
- metadata: { turnId: demoTurnId },
843
840
  parts: [
844
841
  {
845
842
  type: "tool-write_file",
@@ -855,7 +852,6 @@ const approvalRequest = {
855
852
  const collectedAnswer = {
856
853
  id: "camel-demo-collected-answer",
857
854
  role: "assistant",
858
- metadata: { turnId: demoTurnId },
859
855
  parts: [
860
856
  {
861
857
  type: "text",
@@ -872,7 +868,6 @@ const finalAnswer = {
872
868
  id: "camel-demo-final-answer",
873
869
  role: "assistant",
874
870
  metadata: {
875
- turnId: demoTurnId,
876
871
  createdAt: demoCompletedAt,
877
872
  completedAt: demoCompletedAt,
878
873
  turnDurationMs: 18_000,
@@ -941,7 +936,6 @@ const interruptedByUser = {
941
936
  id: "camel-demo-interrupted",
942
937
  role: "assistant",
943
938
  metadata: {
944
- turnId: demoTurnId,
945
939
  createdAt: demoCompletedAt,
946
940
  completedAt: demoCompletedAt + 2_000,
947
941
  turnDurationMs: 2_000,
@@ -971,7 +965,7 @@ const compactSummary = {
971
965
  const failedWork = {
972
966
  id: "camel-demo-failed-work",
973
967
  role: "assistant",
974
- metadata: { turnId: demoTurnId, turnStartedAt: demoTurnStartedAt },
968
+ metadata: { turnStartedAt: demoTurnStartedAt },
975
969
  parts: [
976
970
  ...completedResearch.parts,
977
971
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@springbrand/message-panel",
3
- "version": "0.1.3-alpha.32",
3
+ "version": "0.1.3-alpha.34",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "src",
@@ -1,9 +0,0 @@
1
- <svg preserveAspectRatio="none" overflow="visible" width="12.2369" height="12.2369" viewBox="0 0 12.2369 12.2369" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M5.18061 0.652963C5.50276 -0.217655 6.73415 -0.217654 7.05631 0.652964L7.64089 2.23277C8.04603 3.32764 8.90927 4.19089 10.0042 4.59603L11.584 5.18061C12.4546 5.50276 12.4546 6.73415 11.584 7.05631L10.0041 7.64089C8.90927 8.04603 8.04603 8.90927 7.64089 10.0042L7.05631 11.584C6.73415 12.4546 5.50276 12.4546 5.18061 11.584L4.59603 10.0041C4.19089 8.90927 3.32764 8.04603 2.23277 7.64089L0.652963 7.05631C-0.217655 6.73415 -0.217654 5.50276 0.652964 5.18061L2.23277 4.59603C3.32764 4.19089 4.19089 3.32764 4.59603 2.23277L5.18061 0.652963Z" fill="url(#thinking-spark-gradient)"/>
3
- <defs>
4
- <radialGradient id="thinking-spark-gradient" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(6.11846 2.11846) rotate(90) scale(12)">
5
- <stop stop-color="#FF9938"/>
6
- <stop offset="1" stop-color="#FFE46C"/>
7
- </radialGradient>
8
- </defs>
9
- </svg>
@@ -1,65 +0,0 @@
1
- import { useCallback, useEffect, useRef, useState } from "react";
2
-
3
- export type DisclosurePolicy = "always-open" | "lifecycle";
4
-
5
- export const DISCLOSURE_POLICY: DisclosurePolicy = "lifecycle";
6
-
7
- export function reconcileExpandedWithAutoOpen(
8
- expanded: ReadonlySet<string>,
9
- previousAutoOpenKeys: ReadonlySet<string>,
10
- autoOpenKeys: ReadonlySet<string>,
11
- ): ReadonlySet<string> {
12
- const next = new Set(expanded);
13
- for (const key of previousAutoOpenKeys) {
14
- if (!autoOpenKeys.has(key)) next.delete(key);
15
- }
16
- for (const key of autoOpenKeys) {
17
- if (!previousAutoOpenKeys.has(key)) next.add(key);
18
- }
19
- if (next.size !== expanded.size) return next;
20
- return [...next].every((key) => expanded.has(key)) ? expanded : next;
21
- }
22
-
23
- export function useDisclosureExpandedKeys(
24
- disclosureKeys: ReadonlySet<string>,
25
- runningKeys: ReadonlySet<string>,
26
- ) {
27
- const autoOpenKeys =
28
- DISCLOSURE_POLICY === "always-open" ? disclosureKeys : runningKeys;
29
- const [expanded, setExpanded] = useState<ReadonlySet<string>>(autoOpenKeys);
30
- const previousAutoOpenKeys = useRef(autoOpenKeys);
31
-
32
- useEffect(() => {
33
- const previous = previousAutoOpenKeys.current;
34
- previousAutoOpenKeys.current = autoOpenKeys;
35
- setExpanded((current) =>
36
- reconcileExpandedWithAutoOpen(current, previous, autoOpenKeys),
37
- );
38
- }, [autoOpenKeys]);
39
-
40
- const toggle = useCallback((key: string) => {
41
- setExpanded((current) => {
42
- const next = new Set(current);
43
- if (next.has(key)) next.delete(key);
44
- else next.add(key);
45
- return next;
46
- });
47
- }, []);
48
-
49
- return [expanded, toggle] as const;
50
- }
51
-
52
- /** User choice persists while the policy-derived automatic state is unchanged. */
53
- export function useLifecycleDisclosure(running: boolean) {
54
- const autoOpen = DISCLOSURE_POLICY === "always-open" || running;
55
- const [state, setState] = useState(() => ({ autoOpen, open: autoOpen }));
56
- const open = state.autoOpen === autoOpen ? state.open : autoOpen;
57
-
58
- useEffect(() => {
59
- setState((current) =>
60
- current.autoOpen === autoOpen ? current : { autoOpen, open: autoOpen }
61
- );
62
- }, [autoOpen]);
63
-
64
- return [open, () => setState({ autoOpen, open: !open })] as const;
65
- }