@seed-ship/mcp-ui-solid 4.0.5 → 4.1.0
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/dist/components/AgentCard.cjs +122 -0
- package/dist/components/AgentCard.cjs.map +1 -0
- package/dist/components/AgentCard.d.ts +20 -0
- package/dist/components/AgentCard.d.ts.map +1 -0
- package/dist/components/AgentCard.js +122 -0
- package/dist/components/AgentCard.js.map +1 -0
- package/dist/components/AgentHandoff.cjs +49 -0
- package/dist/components/AgentHandoff.cjs.map +1 -0
- package/dist/components/AgentHandoff.d.ts +12 -0
- package/dist/components/AgentHandoff.d.ts.map +1 -0
- package/dist/components/AgentHandoff.js +49 -0
- package/dist/components/AgentHandoff.js.map +1 -0
- package/dist/components/BriefingDiff.cjs +165 -0
- package/dist/components/BriefingDiff.cjs.map +1 -0
- package/dist/components/BriefingDiff.d.ts +12 -0
- package/dist/components/BriefingDiff.d.ts.map +1 -0
- package/dist/components/BriefingDiff.js +165 -0
- package/dist/components/BriefingDiff.js.map +1 -0
- package/dist/components/ScratchpadPanel.cjs +618 -411
- package/dist/components/ScratchpadPanel.cjs.map +1 -1
- package/dist/components/ScratchpadPanel.d.ts.map +1 -1
- package/dist/components/ScratchpadPanel.js +619 -412
- package/dist/components/ScratchpadPanel.js.map +1 -1
- package/dist/components/SplitStepper.cjs +121 -0
- package/dist/components/SplitStepper.cjs.map +1 -0
- package/dist/components/SplitStepper.d.ts +12 -0
- package/dist/components/SplitStepper.d.ts.map +1 -0
- package/dist/components/SplitStepper.js +121 -0
- package/dist/components/SplitStepper.js.map +1 -0
- package/dist/components/UIResourceRenderer.cjs +1 -2
- package/dist/components/UIResourceRenderer.cjs.map +1 -1
- package/dist/components/UIResourceRenderer.js +2 -3
- package/dist/components/UIResourceRenderer.js.map +1 -1
- package/dist/components/index.d.ts +8 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components.cjs +9 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.cts +8 -0
- package/dist/components.d.ts +8 -0
- package/dist/components.js +9 -0
- package/dist/components.js.map +1 -1
- package/dist/index.cjs +9 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/types/chat-bus.d.ts +81 -1
- package/dist/types/chat-bus.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/AgentCard.tsx +109 -0
- package/src/components/AgentHandoff.tsx +64 -0
- package/src/components/BriefingDiff.tsx +93 -0
- package/src/components/ScratchpadPanel.tsx +131 -49
- package/src/components/SplitStepper.tsx +111 -0
- package/src/components/UIResourceRenderer.tsx +1 -1
- package/src/components/index.ts +13 -0
- package/src/index.ts +15 -0
- package/src/types/chat-bus.ts +70 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const web = require("solid-js/web");
|
|
4
|
+
const solidJs = require("solid-js");
|
|
5
|
+
var _tmpl$ = /* @__PURE__ */ web.template(`<span class="text-xs text-gray-400 dark:text-gray-500">`), _tmpl$2 = /* @__PURE__ */ web.template(`<div class="flex flex-wrap gap-1 mt-1.5">`), _tmpl$3 = /* @__PURE__ */ web.template(`<div class="mt-1.5 flex items-center gap-1.5 text-xs text-blue-600 dark:text-blue-400"><div class="w-3 h-3 border-2 border-blue-500 border-t-transparent rounded-full animate-spin"></div><!$><!/>`), _tmpl$4 = /* @__PURE__ */ web.template(`<div class="flex items-start gap-3 p-3 rounded-lg bg-gradient-to-r from-gray-50 to-transparent dark:from-gray-800/50"><div class="flex-shrink-0 w-10 h-10 rounded-full bg-gray-100 dark:bg-gray-700 flex items-center justify-center text-xl"></div><div class="flex-1 min-w-0"><div class="flex items-center gap-2"><span class="font-medium text-sm text-gray-900 dark:text-white truncate"></span><span></span><span class="text-xs text-gray-500 dark:text-gray-400"></span></div><!$><!/><!$><!/><!$><!/>`), _tmpl$5 = /* @__PURE__ */ web.template(`<span class="px-1.5 py-0.5 text-[10px] rounded bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300">`), _tmpl$6 = /* @__PURE__ */ web.template(`<span class="inline-flex items-center gap-1.5 text-xs"><span></span><span class="text-gray-600 dark:text-gray-300"></span><span class="text-gray-400 dark:text-gray-500">`);
|
|
6
|
+
const AVATAR_MAP = {
|
|
7
|
+
scales: "⚖️",
|
|
8
|
+
chart: "📈",
|
|
9
|
+
search: "🔍",
|
|
10
|
+
document: "📄",
|
|
11
|
+
brain: "🧠",
|
|
12
|
+
shield: "🛡️",
|
|
13
|
+
globe: "🌐",
|
|
14
|
+
robot: "🤖"
|
|
15
|
+
};
|
|
16
|
+
const STATUS_CONFIG = {
|
|
17
|
+
idle: {
|
|
18
|
+
label: "Idle",
|
|
19
|
+
color: "bg-gray-400",
|
|
20
|
+
pulse: false
|
|
21
|
+
},
|
|
22
|
+
running: {
|
|
23
|
+
label: "Running",
|
|
24
|
+
color: "bg-blue-500",
|
|
25
|
+
pulse: true
|
|
26
|
+
},
|
|
27
|
+
waiting: {
|
|
28
|
+
label: "Waiting",
|
|
29
|
+
color: "bg-amber-500",
|
|
30
|
+
pulse: true
|
|
31
|
+
},
|
|
32
|
+
done: {
|
|
33
|
+
label: "Done",
|
|
34
|
+
color: "bg-green-500",
|
|
35
|
+
pulse: false
|
|
36
|
+
},
|
|
37
|
+
error: {
|
|
38
|
+
label: "Error",
|
|
39
|
+
color: "bg-red-500",
|
|
40
|
+
pulse: false
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
function AgentCard(props) {
|
|
44
|
+
const c = () => props.content;
|
|
45
|
+
const status = () => STATUS_CONFIG[c().status] || STATUS_CONFIG.idle;
|
|
46
|
+
const avatar = () => AVATAR_MAP[c().avatar || ""] || c().avatar || "🤖";
|
|
47
|
+
if (typeof console !== "undefined") {
|
|
48
|
+
console.info("[MCP-UI:AgentCard] mounted", {
|
|
49
|
+
agentId: c().agentId,
|
|
50
|
+
status: c().status,
|
|
51
|
+
capabilities: c().capabilities
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return (() => {
|
|
55
|
+
var _el$ = web.getNextElement(_tmpl$4), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling, _el$7 = _el$6.nextSibling, _el$12 = _el$4.nextSibling, [_el$13, _co$2] = web.getNextMarker(_el$12.nextSibling), _el$14 = _el$13.nextSibling, [_el$15, _co$3] = web.getNextMarker(_el$14.nextSibling), _el$16 = _el$15.nextSibling, [_el$17, _co$4] = web.getNextMarker(_el$16.nextSibling);
|
|
56
|
+
web.insert(_el$2, avatar);
|
|
57
|
+
web.insert(_el$5, () => c().name);
|
|
58
|
+
web.insert(_el$7, () => status().label);
|
|
59
|
+
web.insert(_el$3, web.createComponent(solidJs.Show, {
|
|
60
|
+
get when() {
|
|
61
|
+
return c().model;
|
|
62
|
+
},
|
|
63
|
+
get children() {
|
|
64
|
+
var _el$8 = web.getNextElement(_tmpl$);
|
|
65
|
+
web.insert(_el$8, () => c().model);
|
|
66
|
+
return _el$8;
|
|
67
|
+
}
|
|
68
|
+
}), _el$13, _co$2);
|
|
69
|
+
web.insert(_el$3, web.createComponent(solidJs.Show, {
|
|
70
|
+
get when() {
|
|
71
|
+
return web.memo(() => !!c().capabilities)() && c().capabilities.length > 0;
|
|
72
|
+
},
|
|
73
|
+
get children() {
|
|
74
|
+
var _el$9 = web.getNextElement(_tmpl$2);
|
|
75
|
+
web.insert(_el$9, web.createComponent(solidJs.For, {
|
|
76
|
+
get each() {
|
|
77
|
+
return c().capabilities;
|
|
78
|
+
},
|
|
79
|
+
children: (cap) => (() => {
|
|
80
|
+
var _el$18 = web.getNextElement(_tmpl$5);
|
|
81
|
+
web.insert(_el$18, cap);
|
|
82
|
+
return _el$18;
|
|
83
|
+
})()
|
|
84
|
+
}));
|
|
85
|
+
return _el$9;
|
|
86
|
+
}
|
|
87
|
+
}), _el$15, _co$3);
|
|
88
|
+
web.insert(_el$3, web.createComponent(solidJs.Show, {
|
|
89
|
+
get when() {
|
|
90
|
+
return web.memo(() => !!c().currentStep)() && c().status === "running";
|
|
91
|
+
},
|
|
92
|
+
get children() {
|
|
93
|
+
var _el$0 = web.getNextElement(_tmpl$3), _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling, [_el$11, _co$] = web.getNextMarker(_el$10.nextSibling);
|
|
94
|
+
web.insert(_el$0, () => c().currentStep.label, _el$11, _co$);
|
|
95
|
+
return _el$0;
|
|
96
|
+
}
|
|
97
|
+
}), _el$17, _co$4);
|
|
98
|
+
web.effect((_p$) => {
|
|
99
|
+
var _v$ = `inline-block w-2 h-2 rounded-full ${status().color} ${status().pulse ? "animate-pulse" : ""}`, _v$2 = status().label;
|
|
100
|
+
_v$ !== _p$.e && web.className(_el$6, _p$.e = _v$);
|
|
101
|
+
_v$2 !== _p$.t && web.setAttribute(_el$6, "title", _p$.t = _v$2);
|
|
102
|
+
return _p$;
|
|
103
|
+
}, {
|
|
104
|
+
e: void 0,
|
|
105
|
+
t: void 0
|
|
106
|
+
});
|
|
107
|
+
return _el$;
|
|
108
|
+
})();
|
|
109
|
+
}
|
|
110
|
+
function AgentStatusBadge(props) {
|
|
111
|
+
const status = () => STATUS_CONFIG[props.status] || STATUS_CONFIG.idle;
|
|
112
|
+
return (() => {
|
|
113
|
+
var _el$19 = web.getNextElement(_tmpl$6), _el$20 = _el$19.firstChild, _el$21 = _el$20.nextSibling, _el$22 = _el$21.nextSibling;
|
|
114
|
+
web.insert(_el$21, () => props.agentName);
|
|
115
|
+
web.insert(_el$22, () => status().label);
|
|
116
|
+
web.effect(() => web.className(_el$20, `w-2 h-2 rounded-full ${status().color} ${status().pulse ? "animate-pulse" : ""}`));
|
|
117
|
+
return _el$19;
|
|
118
|
+
})();
|
|
119
|
+
}
|
|
120
|
+
exports.AgentCard = AgentCard;
|
|
121
|
+
exports.AgentStatusBadge = AgentStatusBadge;
|
|
122
|
+
//# sourceMappingURL=AgentCard.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentCard.cjs","sources":["../../src/components/AgentCard.tsx"],"sourcesContent":["/**\n * AgentCard — Agent identity + status display\n * v4.1.0: AITL sprint — shows avatar, name, status, capabilities, current step\n *\n * @experimental\n */\n\nimport { Show, For } from 'solid-js'\nimport type { AgentCardContent } from '../types/chat-bus'\n\nexport interface AgentCardProps {\n content: AgentCardContent\n}\n\nconst AVATAR_MAP: Record<string, string> = {\n scales: '\\u2696\\uFE0F',\n chart: '\\uD83D\\uDCC8',\n search: '\\uD83D\\uDD0D',\n document: '\\uD83D\\uDCC4',\n brain: '\\uD83E\\uDDE0',\n shield: '\\uD83D\\uDEE1\\uFE0F',\n globe: '\\uD83C\\uDF10',\n robot: '\\uD83E\\uDD16',\n}\n\nconst STATUS_CONFIG: Record<string, { label: string; color: string; pulse: boolean }> = {\n idle: { label: 'Idle', color: 'bg-gray-400', pulse: false },\n running: { label: 'Running', color: 'bg-blue-500', pulse: true },\n waiting: { label: 'Waiting', color: 'bg-amber-500', pulse: true },\n done: { label: 'Done', color: 'bg-green-500', pulse: false },\n error: { label: 'Error', color: 'bg-red-500', pulse: false },\n}\n\nexport function AgentCard(props: AgentCardProps) {\n const c = () => props.content\n const status = () => STATUS_CONFIG[c().status] || STATUS_CONFIG.idle\n const avatar = () => AVATAR_MAP[c().avatar || ''] || c().avatar || '\\uD83E\\uDD16'\n\n if (typeof console !== 'undefined') {\n console.info('[MCP-UI:AgentCard] mounted', {\n agentId: c().agentId, status: c().status, capabilities: c().capabilities,\n })\n }\n\n return (\n <div class=\"flex items-start gap-3 p-3 rounded-lg bg-gradient-to-r from-gray-50 to-transparent dark:from-gray-800/50\">\n {/* Avatar */}\n <div class=\"flex-shrink-0 w-10 h-10 rounded-full bg-gray-100 dark:bg-gray-700 flex items-center justify-center text-xl\">\n {avatar()}\n </div>\n\n {/* Info */}\n <div class=\"flex-1 min-w-0\">\n <div class=\"flex items-center gap-2\">\n <span class=\"font-medium text-sm text-gray-900 dark:text-white truncate\">{c().name}</span>\n {/* Status dot */}\n <span class={`inline-block w-2 h-2 rounded-full ${status().color} ${status().pulse ? 'animate-pulse' : ''}`} title={status().label} />\n <span class=\"text-xs text-gray-500 dark:text-gray-400\">{status().label}</span>\n </div>\n\n {/* Model */}\n <Show when={c().model}>\n <span class=\"text-xs text-gray-400 dark:text-gray-500\">{c().model}</span>\n </Show>\n\n {/* Capabilities */}\n <Show when={c().capabilities && c().capabilities!.length > 0}>\n <div class=\"flex flex-wrap gap-1 mt-1.5\">\n <For each={c().capabilities}>\n {(cap) => (\n <span class=\"px-1.5 py-0.5 text-[10px] rounded bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300\">\n {cap}\n </span>\n )}\n </For>\n </div>\n </Show>\n\n {/* Current step */}\n <Show when={c().currentStep && c().status === 'running'}>\n <div class=\"mt-1.5 flex items-center gap-1.5 text-xs text-blue-600 dark:text-blue-400\">\n <div class=\"w-3 h-3 border-2 border-blue-500 border-t-transparent rounded-full animate-spin\" />\n {c().currentStep!.label}\n </div>\n </Show>\n </div>\n </div>\n )\n}\n\n/**\n * AgentStatusBadge — compact pulse badge for scratchpad header\n */\nexport interface AgentStatusBadgeProps {\n agentName: string\n status: 'idle' | 'running' | 'waiting' | 'done' | 'error'\n}\n\nexport function AgentStatusBadge(props: AgentStatusBadgeProps) {\n const status = () => STATUS_CONFIG[props.status] || STATUS_CONFIG.idle\n\n return (\n <span class=\"inline-flex items-center gap-1.5 text-xs\">\n <span class={`w-2 h-2 rounded-full ${status().color} ${status().pulse ? 'animate-pulse' : ''}`} />\n <span class=\"text-gray-600 dark:text-gray-300\">{props.agentName}</span>\n <span class=\"text-gray-400 dark:text-gray-500\">{status().label}</span>\n </span>\n )\n}\n"],"names":["AVATAR_MAP","scales","chart","search","document","brain","shield","globe","robot","STATUS_CONFIG","idle","label","color","pulse","running","waiting","done","error","AgentCard","props","c","content","status","avatar","console","info","agentId","capabilities","_el$","_$getNextElement","_tmpl$4","_el$2","firstChild","_el$3","nextSibling","_el$4","_el$5","_el$6","_el$7","_el$12","_el$13","_co$2","_$getNextMarker","_el$14","_el$15","_co$3","_el$16","_el$17","_co$4","_$insert","name","_$createComponent","Show","when","model","children","_el$8","_tmpl$","_$memo","length","_el$9","_tmpl$2","For","each","cap","_el$18","_tmpl$5","currentStep","_el$0","_tmpl$3","_el$1","_el$10","_el$11","_co$","_$effect","_p$","_v$","_v$2","e","_$className","t","_$setAttribute","undefined","AgentStatusBadge","_el$19","_tmpl$6","_el$20","_el$21","_el$22","agentName"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentCard — Agent identity + status display
|
|
3
|
+
* v4.1.0: AITL sprint — shows avatar, name, status, capabilities, current step
|
|
4
|
+
*
|
|
5
|
+
* @experimental
|
|
6
|
+
*/
|
|
7
|
+
import type { AgentCardContent } from '../types/chat-bus';
|
|
8
|
+
export interface AgentCardProps {
|
|
9
|
+
content: AgentCardContent;
|
|
10
|
+
}
|
|
11
|
+
export declare function AgentCard(props: AgentCardProps): import("solid-js").JSX.Element;
|
|
12
|
+
/**
|
|
13
|
+
* AgentStatusBadge — compact pulse badge for scratchpad header
|
|
14
|
+
*/
|
|
15
|
+
export interface AgentStatusBadgeProps {
|
|
16
|
+
agentName: string;
|
|
17
|
+
status: 'idle' | 'running' | 'waiting' | 'done' | 'error';
|
|
18
|
+
}
|
|
19
|
+
export declare function AgentStatusBadge(props: AgentStatusBadgeProps): import("solid-js").JSX.Element;
|
|
20
|
+
//# sourceMappingURL=AgentCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentCard.d.ts","sourceRoot":"","sources":["../../src/components/AgentCard.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,gBAAgB,CAAA;CAC1B;AAqBD,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,kCAuD9C;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAA;CAC1D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,kCAU5D"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { getNextElement, template, getNextMarker, insert, createComponent, memo, effect, className, setAttribute } from "solid-js/web";
|
|
2
|
+
import { Show, For } from "solid-js";
|
|
3
|
+
var _tmpl$ = /* @__PURE__ */ template(`<span class="text-xs text-gray-400 dark:text-gray-500">`), _tmpl$2 = /* @__PURE__ */ template(`<div class="flex flex-wrap gap-1 mt-1.5">`), _tmpl$3 = /* @__PURE__ */ template(`<div class="mt-1.5 flex items-center gap-1.5 text-xs text-blue-600 dark:text-blue-400"><div class="w-3 h-3 border-2 border-blue-500 border-t-transparent rounded-full animate-spin"></div><!$><!/>`), _tmpl$4 = /* @__PURE__ */ template(`<div class="flex items-start gap-3 p-3 rounded-lg bg-gradient-to-r from-gray-50 to-transparent dark:from-gray-800/50"><div class="flex-shrink-0 w-10 h-10 rounded-full bg-gray-100 dark:bg-gray-700 flex items-center justify-center text-xl"></div><div class="flex-1 min-w-0"><div class="flex items-center gap-2"><span class="font-medium text-sm text-gray-900 dark:text-white truncate"></span><span></span><span class="text-xs text-gray-500 dark:text-gray-400"></span></div><!$><!/><!$><!/><!$><!/>`), _tmpl$5 = /* @__PURE__ */ template(`<span class="px-1.5 py-0.5 text-[10px] rounded bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300">`), _tmpl$6 = /* @__PURE__ */ template(`<span class="inline-flex items-center gap-1.5 text-xs"><span></span><span class="text-gray-600 dark:text-gray-300"></span><span class="text-gray-400 dark:text-gray-500">`);
|
|
4
|
+
const AVATAR_MAP = {
|
|
5
|
+
scales: "⚖️",
|
|
6
|
+
chart: "📈",
|
|
7
|
+
search: "🔍",
|
|
8
|
+
document: "📄",
|
|
9
|
+
brain: "🧠",
|
|
10
|
+
shield: "🛡️",
|
|
11
|
+
globe: "🌐",
|
|
12
|
+
robot: "🤖"
|
|
13
|
+
};
|
|
14
|
+
const STATUS_CONFIG = {
|
|
15
|
+
idle: {
|
|
16
|
+
label: "Idle",
|
|
17
|
+
color: "bg-gray-400",
|
|
18
|
+
pulse: false
|
|
19
|
+
},
|
|
20
|
+
running: {
|
|
21
|
+
label: "Running",
|
|
22
|
+
color: "bg-blue-500",
|
|
23
|
+
pulse: true
|
|
24
|
+
},
|
|
25
|
+
waiting: {
|
|
26
|
+
label: "Waiting",
|
|
27
|
+
color: "bg-amber-500",
|
|
28
|
+
pulse: true
|
|
29
|
+
},
|
|
30
|
+
done: {
|
|
31
|
+
label: "Done",
|
|
32
|
+
color: "bg-green-500",
|
|
33
|
+
pulse: false
|
|
34
|
+
},
|
|
35
|
+
error: {
|
|
36
|
+
label: "Error",
|
|
37
|
+
color: "bg-red-500",
|
|
38
|
+
pulse: false
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
function AgentCard(props) {
|
|
42
|
+
const c = () => props.content;
|
|
43
|
+
const status = () => STATUS_CONFIG[c().status] || STATUS_CONFIG.idle;
|
|
44
|
+
const avatar = () => AVATAR_MAP[c().avatar || ""] || c().avatar || "🤖";
|
|
45
|
+
if (typeof console !== "undefined") {
|
|
46
|
+
console.info("[MCP-UI:AgentCard] mounted", {
|
|
47
|
+
agentId: c().agentId,
|
|
48
|
+
status: c().status,
|
|
49
|
+
capabilities: c().capabilities
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return (() => {
|
|
53
|
+
var _el$ = getNextElement(_tmpl$4), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling, _el$7 = _el$6.nextSibling, _el$12 = _el$4.nextSibling, [_el$13, _co$2] = getNextMarker(_el$12.nextSibling), _el$14 = _el$13.nextSibling, [_el$15, _co$3] = getNextMarker(_el$14.nextSibling), _el$16 = _el$15.nextSibling, [_el$17, _co$4] = getNextMarker(_el$16.nextSibling);
|
|
54
|
+
insert(_el$2, avatar);
|
|
55
|
+
insert(_el$5, () => c().name);
|
|
56
|
+
insert(_el$7, () => status().label);
|
|
57
|
+
insert(_el$3, createComponent(Show, {
|
|
58
|
+
get when() {
|
|
59
|
+
return c().model;
|
|
60
|
+
},
|
|
61
|
+
get children() {
|
|
62
|
+
var _el$8 = getNextElement(_tmpl$);
|
|
63
|
+
insert(_el$8, () => c().model);
|
|
64
|
+
return _el$8;
|
|
65
|
+
}
|
|
66
|
+
}), _el$13, _co$2);
|
|
67
|
+
insert(_el$3, createComponent(Show, {
|
|
68
|
+
get when() {
|
|
69
|
+
return memo(() => !!c().capabilities)() && c().capabilities.length > 0;
|
|
70
|
+
},
|
|
71
|
+
get children() {
|
|
72
|
+
var _el$9 = getNextElement(_tmpl$2);
|
|
73
|
+
insert(_el$9, createComponent(For, {
|
|
74
|
+
get each() {
|
|
75
|
+
return c().capabilities;
|
|
76
|
+
},
|
|
77
|
+
children: (cap) => (() => {
|
|
78
|
+
var _el$18 = getNextElement(_tmpl$5);
|
|
79
|
+
insert(_el$18, cap);
|
|
80
|
+
return _el$18;
|
|
81
|
+
})()
|
|
82
|
+
}));
|
|
83
|
+
return _el$9;
|
|
84
|
+
}
|
|
85
|
+
}), _el$15, _co$3);
|
|
86
|
+
insert(_el$3, createComponent(Show, {
|
|
87
|
+
get when() {
|
|
88
|
+
return memo(() => !!c().currentStep)() && c().status === "running";
|
|
89
|
+
},
|
|
90
|
+
get children() {
|
|
91
|
+
var _el$0 = getNextElement(_tmpl$3), _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling, [_el$11, _co$] = getNextMarker(_el$10.nextSibling);
|
|
92
|
+
insert(_el$0, () => c().currentStep.label, _el$11, _co$);
|
|
93
|
+
return _el$0;
|
|
94
|
+
}
|
|
95
|
+
}), _el$17, _co$4);
|
|
96
|
+
effect((_p$) => {
|
|
97
|
+
var _v$ = `inline-block w-2 h-2 rounded-full ${status().color} ${status().pulse ? "animate-pulse" : ""}`, _v$2 = status().label;
|
|
98
|
+
_v$ !== _p$.e && className(_el$6, _p$.e = _v$);
|
|
99
|
+
_v$2 !== _p$.t && setAttribute(_el$6, "title", _p$.t = _v$2);
|
|
100
|
+
return _p$;
|
|
101
|
+
}, {
|
|
102
|
+
e: void 0,
|
|
103
|
+
t: void 0
|
|
104
|
+
});
|
|
105
|
+
return _el$;
|
|
106
|
+
})();
|
|
107
|
+
}
|
|
108
|
+
function AgentStatusBadge(props) {
|
|
109
|
+
const status = () => STATUS_CONFIG[props.status] || STATUS_CONFIG.idle;
|
|
110
|
+
return (() => {
|
|
111
|
+
var _el$19 = getNextElement(_tmpl$6), _el$20 = _el$19.firstChild, _el$21 = _el$20.nextSibling, _el$22 = _el$21.nextSibling;
|
|
112
|
+
insert(_el$21, () => props.agentName);
|
|
113
|
+
insert(_el$22, () => status().label);
|
|
114
|
+
effect(() => className(_el$20, `w-2 h-2 rounded-full ${status().color} ${status().pulse ? "animate-pulse" : ""}`));
|
|
115
|
+
return _el$19;
|
|
116
|
+
})();
|
|
117
|
+
}
|
|
118
|
+
export {
|
|
119
|
+
AgentCard,
|
|
120
|
+
AgentStatusBadge
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=AgentCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentCard.js","sources":["../../src/components/AgentCard.tsx"],"sourcesContent":["/**\n * AgentCard — Agent identity + status display\n * v4.1.0: AITL sprint — shows avatar, name, status, capabilities, current step\n *\n * @experimental\n */\n\nimport { Show, For } from 'solid-js'\nimport type { AgentCardContent } from '../types/chat-bus'\n\nexport interface AgentCardProps {\n content: AgentCardContent\n}\n\nconst AVATAR_MAP: Record<string, string> = {\n scales: '\\u2696\\uFE0F',\n chart: '\\uD83D\\uDCC8',\n search: '\\uD83D\\uDD0D',\n document: '\\uD83D\\uDCC4',\n brain: '\\uD83E\\uDDE0',\n shield: '\\uD83D\\uDEE1\\uFE0F',\n globe: '\\uD83C\\uDF10',\n robot: '\\uD83E\\uDD16',\n}\n\nconst STATUS_CONFIG: Record<string, { label: string; color: string; pulse: boolean }> = {\n idle: { label: 'Idle', color: 'bg-gray-400', pulse: false },\n running: { label: 'Running', color: 'bg-blue-500', pulse: true },\n waiting: { label: 'Waiting', color: 'bg-amber-500', pulse: true },\n done: { label: 'Done', color: 'bg-green-500', pulse: false },\n error: { label: 'Error', color: 'bg-red-500', pulse: false },\n}\n\nexport function AgentCard(props: AgentCardProps) {\n const c = () => props.content\n const status = () => STATUS_CONFIG[c().status] || STATUS_CONFIG.idle\n const avatar = () => AVATAR_MAP[c().avatar || ''] || c().avatar || '\\uD83E\\uDD16'\n\n if (typeof console !== 'undefined') {\n console.info('[MCP-UI:AgentCard] mounted', {\n agentId: c().agentId, status: c().status, capabilities: c().capabilities,\n })\n }\n\n return (\n <div class=\"flex items-start gap-3 p-3 rounded-lg bg-gradient-to-r from-gray-50 to-transparent dark:from-gray-800/50\">\n {/* Avatar */}\n <div class=\"flex-shrink-0 w-10 h-10 rounded-full bg-gray-100 dark:bg-gray-700 flex items-center justify-center text-xl\">\n {avatar()}\n </div>\n\n {/* Info */}\n <div class=\"flex-1 min-w-0\">\n <div class=\"flex items-center gap-2\">\n <span class=\"font-medium text-sm text-gray-900 dark:text-white truncate\">{c().name}</span>\n {/* Status dot */}\n <span class={`inline-block w-2 h-2 rounded-full ${status().color} ${status().pulse ? 'animate-pulse' : ''}`} title={status().label} />\n <span class=\"text-xs text-gray-500 dark:text-gray-400\">{status().label}</span>\n </div>\n\n {/* Model */}\n <Show when={c().model}>\n <span class=\"text-xs text-gray-400 dark:text-gray-500\">{c().model}</span>\n </Show>\n\n {/* Capabilities */}\n <Show when={c().capabilities && c().capabilities!.length > 0}>\n <div class=\"flex flex-wrap gap-1 mt-1.5\">\n <For each={c().capabilities}>\n {(cap) => (\n <span class=\"px-1.5 py-0.5 text-[10px] rounded bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300\">\n {cap}\n </span>\n )}\n </For>\n </div>\n </Show>\n\n {/* Current step */}\n <Show when={c().currentStep && c().status === 'running'}>\n <div class=\"mt-1.5 flex items-center gap-1.5 text-xs text-blue-600 dark:text-blue-400\">\n <div class=\"w-3 h-3 border-2 border-blue-500 border-t-transparent rounded-full animate-spin\" />\n {c().currentStep!.label}\n </div>\n </Show>\n </div>\n </div>\n )\n}\n\n/**\n * AgentStatusBadge — compact pulse badge for scratchpad header\n */\nexport interface AgentStatusBadgeProps {\n agentName: string\n status: 'idle' | 'running' | 'waiting' | 'done' | 'error'\n}\n\nexport function AgentStatusBadge(props: AgentStatusBadgeProps) {\n const status = () => STATUS_CONFIG[props.status] || STATUS_CONFIG.idle\n\n return (\n <span class=\"inline-flex items-center gap-1.5 text-xs\">\n <span class={`w-2 h-2 rounded-full ${status().color} ${status().pulse ? 'animate-pulse' : ''}`} />\n <span class=\"text-gray-600 dark:text-gray-300\">{props.agentName}</span>\n <span class=\"text-gray-400 dark:text-gray-500\">{status().label}</span>\n </span>\n )\n}\n"],"names":["AVATAR_MAP","scales","chart","search","document","brain","shield","globe","robot","STATUS_CONFIG","idle","label","color","pulse","running","waiting","done","error","AgentCard","props","c","content","status","avatar","console","info","agentId","capabilities","_el$","_$getNextElement","_tmpl$4","_el$2","firstChild","_el$3","nextSibling","_el$4","_el$5","_el$6","_el$7","_el$12","_el$13","_co$2","_$getNextMarker","_el$14","_el$15","_co$3","_el$16","_el$17","_co$4","_$insert","name","_$createComponent","Show","when","model","children","_el$8","_tmpl$","_$memo","length","_el$9","_tmpl$2","For","each","cap","_el$18","_tmpl$5","currentStep","_el$0","_tmpl$3","_el$1","_el$10","_el$11","_co$","_$effect","_p$","_v$","_v$2","e","_$className","t","_$setAttribute","undefined","AgentStatusBadge","_el$19","_tmpl$6","_el$20","_el$21","_el$22","agentName"],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const web = require("solid-js/web");
|
|
4
|
+
const solidJs = require("solid-js");
|
|
5
|
+
var _tmpl$ = /* @__PURE__ */ web.template(`<span class="text-[10px] text-gray-500 dark:text-gray-400 text-center">`), _tmpl$2 = /* @__PURE__ */ web.template(`<div class="flex items-center gap-3 p-3 rounded-lg bg-gradient-to-r from-blue-50 via-transparent to-purple-50 dark:from-blue-900/10 dark:via-transparent dark:to-purple-900/10 border border-gray-200 dark:border-gray-700"><div class="flex items-center gap-1.5 flex-shrink-0"><span class=text-lg></span><span class="text-sm font-medium text-gray-700 dark:text-gray-300"></span></div><div class="flex-1 flex flex-col items-center gap-0.5"><div class="flex items-center gap-1 text-gray-400 dark:text-gray-500"><div class="h-px flex-1 bg-gray-300 dark:bg-gray-600 min-w-[20px]"></div><span class=text-xs>→</span><div class="h-px flex-1 bg-gray-300 dark:bg-gray-600 min-w-[20px]"></div></div><!$><!/></div><div class="flex items-center gap-1.5 flex-shrink-0"><span class=text-lg></span><span class="text-sm font-medium text-gray-700 dark:text-gray-300">`);
|
|
6
|
+
const AVATAR_MAP = {
|
|
7
|
+
scales: "⚖️",
|
|
8
|
+
chart: "📈",
|
|
9
|
+
search: "🔍",
|
|
10
|
+
document: "📄",
|
|
11
|
+
brain: "🧠",
|
|
12
|
+
shield: "🛡️",
|
|
13
|
+
globe: "🌐",
|
|
14
|
+
robot: "🤖"
|
|
15
|
+
};
|
|
16
|
+
function getAvatar(key) {
|
|
17
|
+
if (!key) return "🤖";
|
|
18
|
+
return AVATAR_MAP[key] || key;
|
|
19
|
+
}
|
|
20
|
+
function AgentHandoff(props) {
|
|
21
|
+
const c = () => props.content;
|
|
22
|
+
if (typeof console !== "undefined") {
|
|
23
|
+
console.info("[MCP-UI:Handoff] agent transfer", {
|
|
24
|
+
from: c().from.id,
|
|
25
|
+
to: c().to.id,
|
|
26
|
+
dataKeys: c().dataKeys
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return (() => {
|
|
30
|
+
var _el$ = web.getNextElement(_tmpl$2), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$2.nextSibling, _el$6 = _el$5.firstChild, _el$8 = _el$6.nextSibling, [_el$9, _co$] = web.getNextMarker(_el$8.nextSibling), _el$0 = _el$5.nextSibling, _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling;
|
|
31
|
+
web.insert(_el$3, () => getAvatar(c().from.avatar));
|
|
32
|
+
web.insert(_el$4, () => c().from.name);
|
|
33
|
+
web.insert(_el$5, web.createComponent(solidJs.Show, {
|
|
34
|
+
get when() {
|
|
35
|
+
return c().summary || c().itemCount;
|
|
36
|
+
},
|
|
37
|
+
get children() {
|
|
38
|
+
var _el$7 = web.getNextElement(_tmpl$);
|
|
39
|
+
web.insert(_el$7, () => c().summary || `${c().itemCount} items`);
|
|
40
|
+
return _el$7;
|
|
41
|
+
}
|
|
42
|
+
}), _el$9, _co$);
|
|
43
|
+
web.insert(_el$1, () => getAvatar(c().to.avatar));
|
|
44
|
+
web.insert(_el$10, () => c().to.name);
|
|
45
|
+
return _el$;
|
|
46
|
+
})();
|
|
47
|
+
}
|
|
48
|
+
exports.AgentHandoff = AgentHandoff;
|
|
49
|
+
//# sourceMappingURL=AgentHandoff.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentHandoff.cjs","sources":["../../src/components/AgentHandoff.tsx"],"sourcesContent":["/**\n * AgentHandoff — visualizes agent-to-agent transfer\n * v4.1.0: AITL sprint — \"Extracteur -> Analyste : 47 entites transmises\"\n *\n * @experimental\n */\n\nimport { Show } from 'solid-js'\nimport type { AgentHandoffContent } from '../types/chat-bus'\n\nexport interface AgentHandoffProps {\n content: AgentHandoffContent\n}\n\nconst AVATAR_MAP: Record<string, string> = {\n scales: '\\u2696\\uFE0F', chart: '\\uD83D\\uDCC8', search: '\\uD83D\\uDD0D',\n document: '\\uD83D\\uDCC4', brain: '\\uD83E\\uDDE0', shield: '\\uD83D\\uDEE1\\uFE0F',\n globe: '\\uD83C\\uDF10', robot: '\\uD83E\\uDD16',\n}\n\nfunction getAvatar(key?: string): string {\n if (!key) return '\\uD83E\\uDD16'\n return AVATAR_MAP[key] || key\n}\n\nexport function AgentHandoff(props: AgentHandoffProps) {\n const c = () => props.content\n\n if (typeof console !== 'undefined') {\n console.info('[MCP-UI:Handoff] agent transfer', {\n from: c().from.id, to: c().to.id, dataKeys: c().dataKeys,\n })\n }\n\n return (\n <div class=\"flex items-center gap-3 p-3 rounded-lg bg-gradient-to-r from-blue-50 via-transparent to-purple-50 dark:from-blue-900/10 dark:via-transparent dark:to-purple-900/10 border border-gray-200 dark:border-gray-700\">\n {/* From agent */}\n <div class=\"flex items-center gap-1.5 flex-shrink-0\">\n <span class=\"text-lg\">{getAvatar(c().from.avatar)}</span>\n <span class=\"text-sm font-medium text-gray-700 dark:text-gray-300\">{c().from.name}</span>\n </div>\n\n {/* Arrow + data */}\n <div class=\"flex-1 flex flex-col items-center gap-0.5\">\n <div class=\"flex items-center gap-1 text-gray-400 dark:text-gray-500\">\n <div class=\"h-px flex-1 bg-gray-300 dark:bg-gray-600 min-w-[20px]\" />\n <span class=\"text-xs\">→</span>\n <div class=\"h-px flex-1 bg-gray-300 dark:bg-gray-600 min-w-[20px]\" />\n </div>\n <Show when={c().summary || c().itemCount}>\n <span class=\"text-[10px] text-gray-500 dark:text-gray-400 text-center\">\n {c().summary || `${c().itemCount} items`}\n </span>\n </Show>\n </div>\n\n {/* To agent */}\n <div class=\"flex items-center gap-1.5 flex-shrink-0\">\n <span class=\"text-lg\">{getAvatar(c().to.avatar)}</span>\n <span class=\"text-sm font-medium text-gray-700 dark:text-gray-300\">{c().to.name}</span>\n </div>\n </div>\n )\n}\n"],"names":["AVATAR_MAP","scales","chart","search","document","brain","shield","globe","robot","getAvatar","key","AgentHandoff","props","c","content","console","info","from","id","to","dataKeys","_el$","_$getNextElement","_tmpl$2","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_el$6","_el$8","_el$9","_co$","_$getNextMarker","_el$0","_el$1","_el$10","_$insert","avatar","name","_$createComponent","Show","when","summary","itemCount","children","_el$7","_tmpl$"],"mappings":";;;;;AAcA,MAAMA,aAAqC;AAAA,EACzCC,QAAQ;AAAA,EAAgBC,OAAO;AAAA,EAAgBC,QAAQ;AAAA,EACvDC,UAAU;AAAA,EAAgBC,OAAO;AAAA,EAAgBC,QAAQ;AAAA,EACzDC,OAAO;AAAA,EAAgBC,OAAO;AAChC;AAEA,SAASC,UAAUC,KAAsB;AACvC,MAAI,CAACA,IAAK,QAAO;AACjB,SAAOV,WAAWU,GAAG,KAAKA;AAC5B;AAEO,SAASC,aAAaC,OAA0B;AACrD,QAAMC,IAAIA,MAAMD,MAAME;AAEtB,MAAI,OAAOC,YAAY,aAAa;AAClCA,YAAQC,KAAK,mCAAmC;AAAA,MAC9CC,MAAMJ,IAAII,KAAKC;AAAAA,MAAIC,IAAIN,IAAIM,GAAGD;AAAAA,MAAIE,UAAUP,IAAIO;AAAAA,IAAAA,CACjD;AAAA,EACH;AAEA,UAAA,MAAA;AAAA,QAAAC,OAAAC,IAAAA,eAAAC,OAAA,GAAAC,QAAAH,KAAAI,YAAAC,QAAAF,MAAAC,YAAAE,QAAAD,MAAAE,aAAAC,QAAAL,MAAAI,aAAAE,QAAAD,MAAAJ,YAAAM,QAAAD,MAAAF,aAAA,CAAAI,OAAAC,IAAA,IAAAC,IAAAA,cAAAH,MAAAH,WAAA,GAAAO,QAAAN,MAAAD,aAAAQ,QAAAD,MAAAV,YAAAY,SAAAD,MAAAR;AAAAU,QAAAA,OAAAZ,OAAA,MAI6BjB,UAAUI,IAAII,KAAKsB,MAAM,CAAC;AAAAD,QAAAA,OAAAX,OAAA,MACmBd,EAAAA,EAAII,KAAKuB,IAAI;AAAAF,eAAAT,OAAAY,IAAAA,gBAUhFC,cAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAE9B,EAAAA,EAAI+B,WAAW/B,EAAAA,EAAIgC;AAAAA,MAAS;AAAA,MAAA,IAAAC,WAAA;AAAA,YAAAC,QAAAzB,IAAAA,eAAA0B,MAAA;AAAAV,mBAAAS,OAAA,MAEnClC,IAAI+B,WAAW,GAAG/B,EAAAA,EAAIgC,SAAS,QAAQ;AAAA,eAAAE;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAAf,OAAAC,IAAA;AAAAK,QAAAA,OAAAF,OAAA,MAOrB3B,UAAUI,IAAIM,GAAGoB,MAAM,CAAC;AAAAD,QAAAA,OAAAD,QAAA,MACqBxB,EAAAA,EAAIM,GAAGqB,IAAI;AAAA,WAAAnB;AAAAA,EAAA,GAAA;AAIvF;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentHandoff — visualizes agent-to-agent transfer
|
|
3
|
+
* v4.1.0: AITL sprint — "Extracteur -> Analyste : 47 entites transmises"
|
|
4
|
+
*
|
|
5
|
+
* @experimental
|
|
6
|
+
*/
|
|
7
|
+
import type { AgentHandoffContent } from '../types/chat-bus';
|
|
8
|
+
export interface AgentHandoffProps {
|
|
9
|
+
content: AgentHandoffContent;
|
|
10
|
+
}
|
|
11
|
+
export declare function AgentHandoff(props: AgentHandoffProps): import("solid-js").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=AgentHandoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentHandoff.d.ts","sourceRoot":"","sources":["../../src/components/AgentHandoff.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAE5D,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,mBAAmB,CAAA;CAC7B;AAaD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,kCAsCpD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { getNextElement, template, getNextMarker, insert, createComponent } from "solid-js/web";
|
|
2
|
+
import { Show } from "solid-js";
|
|
3
|
+
var _tmpl$ = /* @__PURE__ */ template(`<span class="text-[10px] text-gray-500 dark:text-gray-400 text-center">`), _tmpl$2 = /* @__PURE__ */ template(`<div class="flex items-center gap-3 p-3 rounded-lg bg-gradient-to-r from-blue-50 via-transparent to-purple-50 dark:from-blue-900/10 dark:via-transparent dark:to-purple-900/10 border border-gray-200 dark:border-gray-700"><div class="flex items-center gap-1.5 flex-shrink-0"><span class=text-lg></span><span class="text-sm font-medium text-gray-700 dark:text-gray-300"></span></div><div class="flex-1 flex flex-col items-center gap-0.5"><div class="flex items-center gap-1 text-gray-400 dark:text-gray-500"><div class="h-px flex-1 bg-gray-300 dark:bg-gray-600 min-w-[20px]"></div><span class=text-xs>→</span><div class="h-px flex-1 bg-gray-300 dark:bg-gray-600 min-w-[20px]"></div></div><!$><!/></div><div class="flex items-center gap-1.5 flex-shrink-0"><span class=text-lg></span><span class="text-sm font-medium text-gray-700 dark:text-gray-300">`);
|
|
4
|
+
const AVATAR_MAP = {
|
|
5
|
+
scales: "⚖️",
|
|
6
|
+
chart: "📈",
|
|
7
|
+
search: "🔍",
|
|
8
|
+
document: "📄",
|
|
9
|
+
brain: "🧠",
|
|
10
|
+
shield: "🛡️",
|
|
11
|
+
globe: "🌐",
|
|
12
|
+
robot: "🤖"
|
|
13
|
+
};
|
|
14
|
+
function getAvatar(key) {
|
|
15
|
+
if (!key) return "🤖";
|
|
16
|
+
return AVATAR_MAP[key] || key;
|
|
17
|
+
}
|
|
18
|
+
function AgentHandoff(props) {
|
|
19
|
+
const c = () => props.content;
|
|
20
|
+
if (typeof console !== "undefined") {
|
|
21
|
+
console.info("[MCP-UI:Handoff] agent transfer", {
|
|
22
|
+
from: c().from.id,
|
|
23
|
+
to: c().to.id,
|
|
24
|
+
dataKeys: c().dataKeys
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return (() => {
|
|
28
|
+
var _el$ = getNextElement(_tmpl$2), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$2.nextSibling, _el$6 = _el$5.firstChild, _el$8 = _el$6.nextSibling, [_el$9, _co$] = getNextMarker(_el$8.nextSibling), _el$0 = _el$5.nextSibling, _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling;
|
|
29
|
+
insert(_el$3, () => getAvatar(c().from.avatar));
|
|
30
|
+
insert(_el$4, () => c().from.name);
|
|
31
|
+
insert(_el$5, createComponent(Show, {
|
|
32
|
+
get when() {
|
|
33
|
+
return c().summary || c().itemCount;
|
|
34
|
+
},
|
|
35
|
+
get children() {
|
|
36
|
+
var _el$7 = getNextElement(_tmpl$);
|
|
37
|
+
insert(_el$7, () => c().summary || `${c().itemCount} items`);
|
|
38
|
+
return _el$7;
|
|
39
|
+
}
|
|
40
|
+
}), _el$9, _co$);
|
|
41
|
+
insert(_el$1, () => getAvatar(c().to.avatar));
|
|
42
|
+
insert(_el$10, () => c().to.name);
|
|
43
|
+
return _el$;
|
|
44
|
+
})();
|
|
45
|
+
}
|
|
46
|
+
export {
|
|
47
|
+
AgentHandoff
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=AgentHandoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentHandoff.js","sources":["../../src/components/AgentHandoff.tsx"],"sourcesContent":["/**\n * AgentHandoff — visualizes agent-to-agent transfer\n * v4.1.0: AITL sprint — \"Extracteur -> Analyste : 47 entites transmises\"\n *\n * @experimental\n */\n\nimport { Show } from 'solid-js'\nimport type { AgentHandoffContent } from '../types/chat-bus'\n\nexport interface AgentHandoffProps {\n content: AgentHandoffContent\n}\n\nconst AVATAR_MAP: Record<string, string> = {\n scales: '\\u2696\\uFE0F', chart: '\\uD83D\\uDCC8', search: '\\uD83D\\uDD0D',\n document: '\\uD83D\\uDCC4', brain: '\\uD83E\\uDDE0', shield: '\\uD83D\\uDEE1\\uFE0F',\n globe: '\\uD83C\\uDF10', robot: '\\uD83E\\uDD16',\n}\n\nfunction getAvatar(key?: string): string {\n if (!key) return '\\uD83E\\uDD16'\n return AVATAR_MAP[key] || key\n}\n\nexport function AgentHandoff(props: AgentHandoffProps) {\n const c = () => props.content\n\n if (typeof console !== 'undefined') {\n console.info('[MCP-UI:Handoff] agent transfer', {\n from: c().from.id, to: c().to.id, dataKeys: c().dataKeys,\n })\n }\n\n return (\n <div class=\"flex items-center gap-3 p-3 rounded-lg bg-gradient-to-r from-blue-50 via-transparent to-purple-50 dark:from-blue-900/10 dark:via-transparent dark:to-purple-900/10 border border-gray-200 dark:border-gray-700\">\n {/* From agent */}\n <div class=\"flex items-center gap-1.5 flex-shrink-0\">\n <span class=\"text-lg\">{getAvatar(c().from.avatar)}</span>\n <span class=\"text-sm font-medium text-gray-700 dark:text-gray-300\">{c().from.name}</span>\n </div>\n\n {/* Arrow + data */}\n <div class=\"flex-1 flex flex-col items-center gap-0.5\">\n <div class=\"flex items-center gap-1 text-gray-400 dark:text-gray-500\">\n <div class=\"h-px flex-1 bg-gray-300 dark:bg-gray-600 min-w-[20px]\" />\n <span class=\"text-xs\">→</span>\n <div class=\"h-px flex-1 bg-gray-300 dark:bg-gray-600 min-w-[20px]\" />\n </div>\n <Show when={c().summary || c().itemCount}>\n <span class=\"text-[10px] text-gray-500 dark:text-gray-400 text-center\">\n {c().summary || `${c().itemCount} items`}\n </span>\n </Show>\n </div>\n\n {/* To agent */}\n <div class=\"flex items-center gap-1.5 flex-shrink-0\">\n <span class=\"text-lg\">{getAvatar(c().to.avatar)}</span>\n <span class=\"text-sm font-medium text-gray-700 dark:text-gray-300\">{c().to.name}</span>\n </div>\n </div>\n )\n}\n"],"names":["AVATAR_MAP","scales","chart","search","document","brain","shield","globe","robot","getAvatar","key","AgentHandoff","props","c","content","console","info","from","id","to","dataKeys","_el$","_$getNextElement","_tmpl$2","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_el$6","_el$8","_el$9","_co$","_$getNextMarker","_el$0","_el$1","_el$10","_$insert","avatar","name","_$createComponent","Show","when","summary","itemCount","children","_el$7","_tmpl$"],"mappings":";;;AAcA,MAAMA,aAAqC;AAAA,EACzCC,QAAQ;AAAA,EAAgBC,OAAO;AAAA,EAAgBC,QAAQ;AAAA,EACvDC,UAAU;AAAA,EAAgBC,OAAO;AAAA,EAAgBC,QAAQ;AAAA,EACzDC,OAAO;AAAA,EAAgBC,OAAO;AAChC;AAEA,SAASC,UAAUC,KAAsB;AACvC,MAAI,CAACA,IAAK,QAAO;AACjB,SAAOV,WAAWU,GAAG,KAAKA;AAC5B;AAEO,SAASC,aAAaC,OAA0B;AACrD,QAAMC,IAAIA,MAAMD,MAAME;AAEtB,MAAI,OAAOC,YAAY,aAAa;AAClCA,YAAQC,KAAK,mCAAmC;AAAA,MAC9CC,MAAMJ,IAAII,KAAKC;AAAAA,MAAIC,IAAIN,IAAIM,GAAGD;AAAAA,MAAIE,UAAUP,IAAIO;AAAAA,IAAAA,CACjD;AAAA,EACH;AAEA,UAAA,MAAA;AAAA,QAAAC,OAAAC,eAAAC,OAAA,GAAAC,QAAAH,KAAAI,YAAAC,QAAAF,MAAAC,YAAAE,QAAAD,MAAAE,aAAAC,QAAAL,MAAAI,aAAAE,QAAAD,MAAAJ,YAAAM,QAAAD,MAAAF,aAAA,CAAAI,OAAAC,IAAA,IAAAC,cAAAH,MAAAH,WAAA,GAAAO,QAAAN,MAAAD,aAAAQ,QAAAD,MAAAV,YAAAY,SAAAD,MAAAR;AAAAU,WAAAZ,OAAA,MAI6BjB,UAAUI,IAAII,KAAKsB,MAAM,CAAC;AAAAD,WAAAX,OAAA,MACmBd,EAAAA,EAAII,KAAKuB,IAAI;AAAAF,WAAAT,OAAAY,gBAUhFC,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAE9B,EAAAA,EAAI+B,WAAW/B,EAAAA,EAAIgC;AAAAA,MAAS;AAAA,MAAA,IAAAC,WAAA;AAAA,YAAAC,QAAAzB,eAAA0B,MAAA;AAAAV,eAAAS,OAAA,MAEnClC,IAAI+B,WAAW,GAAG/B,EAAAA,EAAIgC,SAAS,QAAQ;AAAA,eAAAE;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAAf,OAAAC,IAAA;AAAAK,WAAAF,OAAA,MAOrB3B,UAAUI,IAAIM,GAAGoB,MAAM,CAAC;AAAAD,WAAAD,QAAA,MACqBxB,EAAAA,EAAIM,GAAGqB,IAAI;AAAA,WAAAnB;AAAAA,EAAA,GAAA;AAIvF;"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const web = require("solid-js/web");
|
|
4
|
+
const solidJs = require("solid-js");
|
|
5
|
+
var _tmpl$ = /* @__PURE__ */ web.template(`<span class=font-medium>`), _tmpl$2 = /* @__PURE__ */ web.template(`<span><!$><!/> → <!$><!/>`), _tmpl$3 = /* @__PURE__ */ web.template(`<div class="flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"><!$><!/><!$><!/>`), _tmpl$4 = /* @__PURE__ */ web.template(`<div class="briefing-diff space-y-2"><!$><!/><!$><!/><div class=space-y-1>`), _tmpl$5 = /* @__PURE__ */ web.template(`<span class="text-green-600 dark:text-green-400">+<!$><!/> added`), _tmpl$6 = /* @__PURE__ */ web.template(`<span class="text-red-600 dark:text-red-400"><!$><!/> removed`), _tmpl$7 = /* @__PURE__ */ web.template(`<span class="text-amber-600 dark:text-amber-400"><!$><!/> changed`), _tmpl$8 = /* @__PURE__ */ web.template(`<div class="flex items-center gap-3 text-xs"><!$><!/><!$><!/><!$><!/>`), _tmpl$9 = /* @__PURE__ */ web.template(`<div class="mt-0.5 text-xs"><span class="text-red-500 line-through"></span><span class="mx-1 text-gray-400">→</span><span class="text-green-600 dark:text-green-400">`), _tmpl$0 = /* @__PURE__ */ web.template(`<div class="mt-0.5 text-xs text-gray-600 dark:text-gray-400">`), _tmpl$1 = /* @__PURE__ */ web.template(`<div class="mt-0.5 text-xs text-gray-500 line-through">`), _tmpl$10 = /* @__PURE__ */ web.template(`<div><span></span><div class="flex-1 min-w-0"><span></span><!$><!/><!$><!/><!$><!/>`);
|
|
6
|
+
const CHANGE_CONFIG = {
|
|
7
|
+
added: {
|
|
8
|
+
icon: "+",
|
|
9
|
+
color: "text-green-700 dark:text-green-300",
|
|
10
|
+
bg: "bg-green-50 dark:bg-green-900/10"
|
|
11
|
+
},
|
|
12
|
+
removed: {
|
|
13
|
+
icon: "−",
|
|
14
|
+
color: "text-red-700 dark:text-red-300",
|
|
15
|
+
bg: "bg-red-50 dark:bg-red-900/10"
|
|
16
|
+
},
|
|
17
|
+
changed: {
|
|
18
|
+
icon: "↔",
|
|
19
|
+
color: "text-amber-700 dark:text-amber-300",
|
|
20
|
+
bg: "bg-amber-50 dark:bg-amber-900/10"
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
function BriefingDiff(props) {
|
|
24
|
+
const c = () => props.content;
|
|
25
|
+
if (typeof console !== "undefined") {
|
|
26
|
+
console.info("[MCP-UI:BriefingDiff] mounted", {
|
|
27
|
+
changes: c().changes.length,
|
|
28
|
+
stats: c().stats
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return (() => {
|
|
32
|
+
var _el$ = web.getNextElement(_tmpl$4), _el$13 = _el$.firstChild, [_el$14, _co$5] = web.getNextMarker(_el$13.nextSibling), _el$15 = _el$14.nextSibling, [_el$16, _co$6] = web.getNextMarker(_el$15.nextSibling), _el$12 = _el$16.nextSibling;
|
|
33
|
+
web.insert(_el$, web.createComponent(solidJs.Show, {
|
|
34
|
+
get when() {
|
|
35
|
+
return c().title || c().previousDate || c().currentDate;
|
|
36
|
+
},
|
|
37
|
+
get children() {
|
|
38
|
+
var _el$2 = web.getNextElement(_tmpl$3), _el$0 = _el$2.firstChild, [_el$1, _co$3] = web.getNextMarker(_el$0.nextSibling), _el$10 = _el$1.nextSibling, [_el$11, _co$4] = web.getNextMarker(_el$10.nextSibling);
|
|
39
|
+
web.insert(_el$2, web.createComponent(solidJs.Show, {
|
|
40
|
+
get when() {
|
|
41
|
+
return c().title;
|
|
42
|
+
},
|
|
43
|
+
get children() {
|
|
44
|
+
var _el$3 = web.getNextElement(_tmpl$);
|
|
45
|
+
web.insert(_el$3, () => c().title);
|
|
46
|
+
return _el$3;
|
|
47
|
+
}
|
|
48
|
+
}), _el$1, _co$3);
|
|
49
|
+
web.insert(_el$2, web.createComponent(solidJs.Show, {
|
|
50
|
+
get when() {
|
|
51
|
+
return web.memo(() => !!c().previousDate)() && c().currentDate;
|
|
52
|
+
},
|
|
53
|
+
get children() {
|
|
54
|
+
var _el$4 = web.getNextElement(_tmpl$2), _el$6 = _el$4.firstChild, [_el$7, _co$] = web.getNextMarker(_el$6.nextSibling), _el$5 = _el$7.nextSibling, _el$8 = _el$5.nextSibling, [_el$9, _co$2] = web.getNextMarker(_el$8.nextSibling);
|
|
55
|
+
web.insert(_el$4, () => c().previousDate, _el$7, _co$);
|
|
56
|
+
web.insert(_el$4, () => c().currentDate, _el$9, _co$2);
|
|
57
|
+
return _el$4;
|
|
58
|
+
}
|
|
59
|
+
}), _el$11, _co$4);
|
|
60
|
+
return _el$2;
|
|
61
|
+
}
|
|
62
|
+
}), _el$14, _co$5);
|
|
63
|
+
web.insert(_el$, web.createComponent(solidJs.Show, {
|
|
64
|
+
get when() {
|
|
65
|
+
return c().stats;
|
|
66
|
+
},
|
|
67
|
+
children: (stats) => (() => {
|
|
68
|
+
var _el$17 = web.getNextElement(_tmpl$8), _el$31 = _el$17.firstChild, [_el$32, _co$0] = web.getNextMarker(_el$31.nextSibling), _el$33 = _el$32.nextSibling, [_el$34, _co$1] = web.getNextMarker(_el$33.nextSibling), _el$35 = _el$34.nextSibling, [_el$36, _co$10] = web.getNextMarker(_el$35.nextSibling);
|
|
69
|
+
web.insert(_el$17, web.createComponent(solidJs.Show, {
|
|
70
|
+
get when() {
|
|
71
|
+
return stats().added > 0;
|
|
72
|
+
},
|
|
73
|
+
get children() {
|
|
74
|
+
var _el$18 = web.getNextElement(_tmpl$5), _el$19 = _el$18.firstChild, _el$21 = _el$19.nextSibling, [_el$22, _co$7] = web.getNextMarker(_el$21.nextSibling);
|
|
75
|
+
_el$22.nextSibling;
|
|
76
|
+
web.insert(_el$18, () => stats().added, _el$22, _co$7);
|
|
77
|
+
return _el$18;
|
|
78
|
+
}
|
|
79
|
+
}), _el$32, _co$0);
|
|
80
|
+
web.insert(_el$17, web.createComponent(solidJs.Show, {
|
|
81
|
+
get when() {
|
|
82
|
+
return stats().removed > 0;
|
|
83
|
+
},
|
|
84
|
+
get children() {
|
|
85
|
+
var _el$23 = web.getNextElement(_tmpl$6), _el$25 = _el$23.firstChild, [_el$26, _co$8] = web.getNextMarker(_el$25.nextSibling);
|
|
86
|
+
_el$26.nextSibling;
|
|
87
|
+
web.insert(_el$23, () => stats().removed, _el$26, _co$8);
|
|
88
|
+
return _el$23;
|
|
89
|
+
}
|
|
90
|
+
}), _el$34, _co$1);
|
|
91
|
+
web.insert(_el$17, web.createComponent(solidJs.Show, {
|
|
92
|
+
get when() {
|
|
93
|
+
return stats().changed > 0;
|
|
94
|
+
},
|
|
95
|
+
get children() {
|
|
96
|
+
var _el$27 = web.getNextElement(_tmpl$7), _el$29 = _el$27.firstChild, [_el$30, _co$9] = web.getNextMarker(_el$29.nextSibling);
|
|
97
|
+
_el$30.nextSibling;
|
|
98
|
+
web.insert(_el$27, () => stats().changed, _el$30, _co$9);
|
|
99
|
+
return _el$27;
|
|
100
|
+
}
|
|
101
|
+
}), _el$36, _co$10);
|
|
102
|
+
return _el$17;
|
|
103
|
+
})()
|
|
104
|
+
}), _el$16, _co$6);
|
|
105
|
+
web.insert(_el$12, web.createComponent(solidJs.For, {
|
|
106
|
+
get each() {
|
|
107
|
+
return c().changes;
|
|
108
|
+
},
|
|
109
|
+
children: (change) => {
|
|
110
|
+
const cfg = CHANGE_CONFIG[change.type] || CHANGE_CONFIG.changed;
|
|
111
|
+
return (() => {
|
|
112
|
+
var _el$37 = web.getNextElement(_tmpl$10), _el$38 = _el$37.firstChild, _el$39 = _el$38.nextSibling, _el$40 = _el$39.firstChild, _el$47 = _el$40.nextSibling, [_el$48, _co$11] = web.getNextMarker(_el$47.nextSibling), _el$49 = _el$48.nextSibling, [_el$50, _co$12] = web.getNextMarker(_el$49.nextSibling), _el$51 = _el$50.nextSibling, [_el$52, _co$13] = web.getNextMarker(_el$51.nextSibling);
|
|
113
|
+
web.insert(_el$38, () => cfg.icon);
|
|
114
|
+
web.insert(_el$40, () => change.label);
|
|
115
|
+
web.insert(_el$39, web.createComponent(solidJs.Show, {
|
|
116
|
+
get when() {
|
|
117
|
+
return web.memo(() => !!(change.type === "changed" && change.previous))() && change.current;
|
|
118
|
+
},
|
|
119
|
+
get children() {
|
|
120
|
+
var _el$41 = web.getNextElement(_tmpl$9), _el$42 = _el$41.firstChild, _el$43 = _el$42.nextSibling, _el$44 = _el$43.nextSibling;
|
|
121
|
+
web.insert(_el$42, () => change.previous);
|
|
122
|
+
web.insert(_el$44, () => change.current);
|
|
123
|
+
return _el$41;
|
|
124
|
+
}
|
|
125
|
+
}), _el$48, _co$11);
|
|
126
|
+
web.insert(_el$39, web.createComponent(solidJs.Show, {
|
|
127
|
+
get when() {
|
|
128
|
+
return web.memo(() => change.type === "added")() && change.current;
|
|
129
|
+
},
|
|
130
|
+
get children() {
|
|
131
|
+
var _el$45 = web.getNextElement(_tmpl$0);
|
|
132
|
+
web.insert(_el$45, () => change.current);
|
|
133
|
+
return _el$45;
|
|
134
|
+
}
|
|
135
|
+
}), _el$50, _co$12);
|
|
136
|
+
web.insert(_el$39, web.createComponent(solidJs.Show, {
|
|
137
|
+
get when() {
|
|
138
|
+
return web.memo(() => change.type === "removed")() && change.previous;
|
|
139
|
+
},
|
|
140
|
+
get children() {
|
|
141
|
+
var _el$46 = web.getNextElement(_tmpl$1);
|
|
142
|
+
web.insert(_el$46, () => change.previous);
|
|
143
|
+
return _el$46;
|
|
144
|
+
}
|
|
145
|
+
}), _el$52, _co$13);
|
|
146
|
+
web.effect((_p$) => {
|
|
147
|
+
var _v$ = `flex items-start gap-2 px-2 py-1.5 rounded ${cfg.bg}`, _v$2 = `flex-shrink-0 w-5 h-5 rounded-full flex items-center justify-center text-xs font-bold ${cfg.color}`, _v$3 = `text-sm font-medium ${cfg.color}`;
|
|
148
|
+
_v$ !== _p$.e && web.className(_el$37, _p$.e = _v$);
|
|
149
|
+
_v$2 !== _p$.t && web.className(_el$38, _p$.t = _v$2);
|
|
150
|
+
_v$3 !== _p$.a && web.className(_el$40, _p$.a = _v$3);
|
|
151
|
+
return _p$;
|
|
152
|
+
}, {
|
|
153
|
+
e: void 0,
|
|
154
|
+
t: void 0,
|
|
155
|
+
a: void 0
|
|
156
|
+
});
|
|
157
|
+
return _el$37;
|
|
158
|
+
})();
|
|
159
|
+
}
|
|
160
|
+
}));
|
|
161
|
+
return _el$;
|
|
162
|
+
})();
|
|
163
|
+
}
|
|
164
|
+
exports.BriefingDiff = BriefingDiff;
|
|
165
|
+
//# sourceMappingURL=BriefingDiff.cjs.map
|