@hanzo/ui 8.27.5 → 8.27.8

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.
Files changed (65) hide show
  1. package/dist/agents/ChannelMembers.cjs +8 -0
  2. package/dist/agents/ChannelMembers.d.ts +17 -0
  3. package/dist/agents/ChannelMembers.d.ts.map +1 -0
  4. package/dist/agents/ChannelMembers.js +5 -0
  5. package/dist/agents/ChannelMembers.js.map +1 -0
  6. package/dist/agents/ChannelNotes.cjs +15 -0
  7. package/dist/agents/ChannelNotes.d.ts +11 -0
  8. package/dist/agents/ChannelNotes.d.ts.map +1 -0
  9. package/dist/agents/ChannelNotes.js +12 -0
  10. package/dist/agents/ChannelNotes.js.map +1 -0
  11. package/dist/agents/DiffViewer.cjs +47 -0
  12. package/dist/agents/DiffViewer.d.ts +10 -0
  13. package/dist/agents/DiffViewer.d.ts.map +1 -0
  14. package/dist/agents/DiffViewer.js +44 -0
  15. package/dist/agents/DiffViewer.js.map +1 -0
  16. package/dist/agents/LiveVoiceCall.cjs +62 -0
  17. package/dist/agents/LiveVoiceCall.d.ts +17 -0
  18. package/dist/agents/LiveVoiceCall.d.ts.map +1 -0
  19. package/dist/agents/LiveVoiceCall.js +59 -0
  20. package/dist/agents/LiveVoiceCall.js.map +1 -0
  21. package/dist/agents/MCPHub.cjs +14 -0
  22. package/dist/agents/MCPHub.d.ts +24 -0
  23. package/dist/agents/MCPHub.d.ts.map +1 -0
  24. package/dist/agents/MCPHub.js +11 -0
  25. package/dist/agents/MCPHub.js.map +1 -0
  26. package/dist/agents/ShortcutsSheet.cjs +24 -0
  27. package/dist/agents/ShortcutsSheet.d.ts +14 -0
  28. package/dist/agents/ShortcutsSheet.d.ts.map +1 -0
  29. package/dist/agents/ShortcutsSheet.js +21 -0
  30. package/dist/agents/ShortcutsSheet.js.map +1 -0
  31. package/dist/agents/SwarmBar.cjs +19 -0
  32. package/dist/agents/SwarmBar.d.ts +20 -0
  33. package/dist/agents/SwarmBar.d.ts.map +1 -0
  34. package/dist/agents/SwarmBar.js +16 -0
  35. package/dist/agents/SwarmBar.js.map +1 -0
  36. package/dist/agents/ThemeCustomizer.cjs +20 -0
  37. package/dist/agents/ThemeCustomizer.d.ts +13 -0
  38. package/dist/agents/ThemeCustomizer.d.ts.map +1 -0
  39. package/dist/agents/ThemeCustomizer.js +17 -0
  40. package/dist/agents/ThemeCustomizer.js.map +1 -0
  41. package/dist/agents/index.cjs +17 -1
  42. package/dist/agents/index.d.ts +8 -0
  43. package/dist/agents/index.d.ts.map +1 -1
  44. package/dist/agents/index.js +8 -0
  45. package/dist/agents/index.js.map +1 -1
  46. package/dist/box.cjs +16 -1
  47. package/dist/box.d.ts.map +1 -1
  48. package/dist/box.js +16 -1
  49. package/dist/box.js.map +1 -1
  50. package/dist/core/fonts.cjs +0 -1
  51. package/dist/core/fonts.d.ts +0 -1
  52. package/dist/core/fonts.d.ts.map +1 -1
  53. package/dist/core/fonts.js +0 -1
  54. package/dist/core/fonts.js.map +1 -1
  55. package/dist/gallery.html +1 -1
  56. package/dist/gui-config.d.ts +30 -0
  57. package/dist/gui-config.d.ts.map +1 -1
  58. package/dist/index.cjs +5 -1
  59. package/dist/index.d.ts +1 -0
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +3 -0
  62. package/dist/index.js.map +1 -1
  63. package/dist/index.node.cjs +5 -1
  64. package/dist/index.node.js +3 -0
  65. package/package.json +3 -3
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChannelMembers = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const ChannelMembers = ({ members, onInvite, onDirectMessage, className = '', }) => {
6
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `flex flex-col gap-3 p-4 bg-neutral-900/60 backdrop-blur-md border border-white/10 rounded-2xl ${className}`, "aria-label": "Channel Members Roster", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-base", children: "\uD83D\uDC65" }), (0, jsx_runtime_1.jsxs)("h3", { className: "text-xs font-semibold text-white uppercase tracking-wider", children: ["Members (", members.length, ")"] })] }), onInvite && ((0, jsx_runtime_1.jsx)("button", { onClick: onInvite, className: "px-2.5 py-1 text-xs font-medium text-neutral-300 hover:text-white bg-white/5 hover:bg-white/10 border border-white/10 rounded-lg transition-all", children: "+ Invite" }))] }), (0, jsx_runtime_1.jsx)("div", { className: "flex flex-col gap-1.5 max-h-56 overflow-y-auto pr-1", children: members.map((m) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between p-2 rounded-xl bg-white/5 hover:bg-white/10 transition-colors", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2.5", children: [(0, jsx_runtime_1.jsxs)("div", { className: "relative", children: [(0, jsx_runtime_1.jsx)("div", { className: "w-7 h-7 rounded-full bg-neutral-800 flex items-center justify-center text-xs font-semibold text-neutral-300 border border-white/10", children: m.avatar || m.name.slice(0, 2).toUpperCase() }), m.online && ((0, jsx_runtime_1.jsx)("span", { className: "absolute bottom-0 right-0 w-2 h-2 rounded-full bg-emerald-400 border border-neutral-900" }))] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col", children: [(0, jsx_runtime_1.jsxs)("span", { className: "text-xs font-medium text-white flex items-center gap-1.5", children: [m.name, m.isAgent && ((0, jsx_runtime_1.jsx)("span", { className: "px-1.5 py-0.2 rounded text-[9px] bg-indigo-500/20 text-indigo-300 font-bold border border-indigo-500/30", children: "AGENT" }))] }), (0, jsx_runtime_1.jsx)("span", { className: "text-[10px] text-neutral-400", children: m.role })] })] }), onDirectMessage && !m.isAgent && ((0, jsx_runtime_1.jsx)("button", { onClick: () => onDirectMessage(m.id), className: "px-2 py-0.5 text-[11px] text-neutral-400 hover:text-white bg-white/5 rounded-md transition-colors", children: "DM" }))] }, m.id))) })] }));
7
+ };
8
+ exports.ChannelMembers = ChannelMembers;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ export interface ChannelMember {
3
+ id: string;
4
+ name: string;
5
+ role: string;
6
+ avatar?: string;
7
+ isAgent?: boolean;
8
+ online?: boolean;
9
+ }
10
+ export interface ChannelMembersProps {
11
+ members: ChannelMember[];
12
+ onInvite?: () => void;
13
+ onDirectMessage?: (memberId: string) => void;
14
+ className?: string;
15
+ }
16
+ export declare const ChannelMembers: React.FC<ChannelMembersProps>;
17
+ //# sourceMappingURL=ChannelMembers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChannelMembers.d.ts","sourceRoot":"","sources":["../../src/agents/ChannelMembers.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAqExD,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export const ChannelMembers = ({ members, onInvite, onDirectMessage, className = '', }) => {
3
+ return (_jsxs("div", { className: `flex flex-col gap-3 p-4 bg-neutral-900/60 backdrop-blur-md border border-white/10 rounded-2xl ${className}`, "aria-label": "Channel Members Roster", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-base", children: "\uD83D\uDC65" }), _jsxs("h3", { className: "text-xs font-semibold text-white uppercase tracking-wider", children: ["Members (", members.length, ")"] })] }), onInvite && (_jsx("button", { onClick: onInvite, className: "px-2.5 py-1 text-xs font-medium text-neutral-300 hover:text-white bg-white/5 hover:bg-white/10 border border-white/10 rounded-lg transition-all", children: "+ Invite" }))] }), _jsx("div", { className: "flex flex-col gap-1.5 max-h-56 overflow-y-auto pr-1", children: members.map((m) => (_jsxs("div", { className: "flex items-center justify-between p-2 rounded-xl bg-white/5 hover:bg-white/10 transition-colors", children: [_jsxs("div", { className: "flex items-center gap-2.5", children: [_jsxs("div", { className: "relative", children: [_jsx("div", { className: "w-7 h-7 rounded-full bg-neutral-800 flex items-center justify-center text-xs font-semibold text-neutral-300 border border-white/10", children: m.avatar || m.name.slice(0, 2).toUpperCase() }), m.online && (_jsx("span", { className: "absolute bottom-0 right-0 w-2 h-2 rounded-full bg-emerald-400 border border-neutral-900" }))] }), _jsxs("div", { className: "flex flex-col", children: [_jsxs("span", { className: "text-xs font-medium text-white flex items-center gap-1.5", children: [m.name, m.isAgent && (_jsx("span", { className: "px-1.5 py-0.2 rounded text-[9px] bg-indigo-500/20 text-indigo-300 font-bold border border-indigo-500/30", children: "AGENT" }))] }), _jsx("span", { className: "text-[10px] text-neutral-400", children: m.role })] })] }), onDirectMessage && !m.isAgent && (_jsx("button", { onClick: () => onDirectMessage(m.id), className: "px-2 py-0.5 text-[11px] text-neutral-400 hover:text-white bg-white/5 rounded-md transition-colors", children: "DM" }))] }, m.id))) })] }));
4
+ };
5
+ //# sourceMappingURL=ChannelMembers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChannelMembers.js","sourceRoot":"","sources":["../../src/agents/ChannelMembers.tsx"],"names":[],"mappings":";AAkBA,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAC5D,OAAO,EACP,QAAQ,EACR,eAAe,EACf,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,OAAO,CACL,eACE,SAAS,EAAE,iGAAiG,SAAS,EAAE,gBAC5G,wBAAwB,aAEnC,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAM,SAAS,EAAC,WAAW,6BAAU,EACrC,cAAI,SAAS,EAAC,2DAA2D,0BAC7D,OAAO,CAAC,MAAM,SACrB,IACD,EACL,QAAQ,IAAI,CACX,iBACE,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,iJAAiJ,yBAGpJ,CACV,IACG,EAEN,cAAK,SAAS,EAAC,qDAAqD,YACjE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAClB,eAEE,SAAS,EAAC,iGAAiG,aAE3G,eAAK,SAAS,EAAC,2BAA2B,aACxC,eAAK,SAAS,EAAC,UAAU,aACvB,cAAK,SAAS,EAAC,oIAAoI,YAChJ,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GACzC,EACL,CAAC,CAAC,MAAM,IAAI,CACX,eAAM,SAAS,EAAC,yFAAyF,GAAG,CAC7G,IACG,EACN,eAAK,SAAS,EAAC,eAAe,aAC5B,gBAAM,SAAS,EAAC,0DAA0D,aACvE,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,OAAO,IAAI,CACZ,eAAM,SAAS,EAAC,yGAAyG,sBAElH,CACR,IACI,EACP,eAAM,SAAS,EAAC,8BAA8B,YAAE,CAAC,CAAC,IAAI,GAAQ,IAC1D,IACF,EAEL,eAAe,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAChC,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,EACpC,SAAS,EAAC,mGAAmG,mBAGtG,CACV,KAhCI,CAAC,CAAC,EAAE,CAiCL,CACP,CAAC,GACE,IACF,CACP,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChannelNotes = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const ChannelNotes = ({ channelName, notes, onSaveNotes, onExtractActionItems, isLiveNoteTakerActive = false, className = '', }) => {
7
+ const [content, setContent] = (0, react_1.useState)(notes);
8
+ const [isEditing, setIsEditing] = (0, react_1.useState)(false);
9
+ const handleSave = () => {
10
+ onSaveNotes(content);
11
+ setIsEditing(false);
12
+ };
13
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `flex flex-col gap-3 p-4 bg-neutral-900/60 backdrop-blur-md border border-white/10 rounded-2xl ${className}`, "aria-label": "Channel Collaborative Notes", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-base", children: "\uD83D\uDCDD" }), (0, jsx_runtime_1.jsxs)("h3", { className: "text-xs font-semibold text-white uppercase tracking-wider", children: ["Notes \u00B7 #", channelName] }), isLiveNoteTakerActive && ((0, jsx_runtime_1.jsxs)("span", { className: "flex items-center gap-1 px-2 py-0.5 rounded-full text-[10px] bg-emerald-500/20 text-emerald-300 font-medium border border-emerald-500/30", children: [(0, jsx_runtime_1.jsx)("span", { className: "w-1.5 h-1.5 rounded-full bg-emerald-400 animate-pulse" }), "AI Note Taker"] }))] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1.5", children: [onExtractActionItems && ((0, jsx_runtime_1.jsx)("button", { onClick: () => onExtractActionItems(content), className: "px-2.5 py-1 text-xs font-medium text-purple-300 bg-purple-500/10 hover:bg-purple-500/20 border border-purple-500/30 rounded-lg transition-all", title: "Extract tasks and action items from notes", children: "\u2728 Extract Tasks" })), isEditing ? ((0, jsx_runtime_1.jsx)("button", { onClick: handleSave, className: "px-2.5 py-1 text-xs font-semibold text-white bg-indigo-600 hover:bg-indigo-500 rounded-lg transition-all", children: "Save" })) : ((0, jsx_runtime_1.jsx)("button", { onClick: () => setIsEditing(true), className: "px-2.5 py-1 text-xs font-medium text-neutral-300 hover:text-white bg-white/5 hover:bg-white/10 border border-white/10 rounded-lg transition-all", children: "Edit" }))] })] }), isEditing ? ((0, jsx_runtime_1.jsx)("textarea", { value: content, onChange: (e) => setContent(e.target.value), placeholder: "Write shared channel notes, meeting agenda, or AI summaries...", rows: 6, className: "w-full p-3 bg-neutral-950/80 border border-white/10 rounded-xl text-xs text-neutral-200 font-mono focus:outline-none focus:border-indigo-500 resize-y" })) : ((0, jsx_runtime_1.jsx)("div", { className: "p-3 bg-neutral-950/40 border border-white/5 rounded-xl text-xs text-neutral-300 whitespace-pre-wrap font-mono max-h-60 overflow-y-auto leading-relaxed", children: content || (0, jsx_runtime_1.jsx)("span", { className: "text-neutral-500 italic", children: "No notes recorded yet for this channel." }) }))] }));
14
+ };
15
+ exports.ChannelNotes = ChannelNotes;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export interface ChannelNotesProps {
3
+ channelName: string;
4
+ notes: string;
5
+ onSaveNotes: (notes: string) => void;
6
+ onExtractActionItems?: (notes: string) => void;
7
+ isLiveNoteTakerActive?: boolean;
8
+ className?: string;
9
+ }
10
+ export declare const ChannelNotes: React.FC<ChannelNotesProps>;
11
+ //# sourceMappingURL=ChannelNotes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChannelNotes.d.ts","sourceRoot":"","sources":["../../src/agents/ChannelNotes.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9C,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA+EpD,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ export const ChannelNotes = ({ channelName, notes, onSaveNotes, onExtractActionItems, isLiveNoteTakerActive = false, className = '', }) => {
4
+ const [content, setContent] = useState(notes);
5
+ const [isEditing, setIsEditing] = useState(false);
6
+ const handleSave = () => {
7
+ onSaveNotes(content);
8
+ setIsEditing(false);
9
+ };
10
+ return (_jsxs("div", { className: `flex flex-col gap-3 p-4 bg-neutral-900/60 backdrop-blur-md border border-white/10 rounded-2xl ${className}`, "aria-label": "Channel Collaborative Notes", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-base", children: "\uD83D\uDCDD" }), _jsxs("h3", { className: "text-xs font-semibold text-white uppercase tracking-wider", children: ["Notes \u00B7 #", channelName] }), isLiveNoteTakerActive && (_jsxs("span", { className: "flex items-center gap-1 px-2 py-0.5 rounded-full text-[10px] bg-emerald-500/20 text-emerald-300 font-medium border border-emerald-500/30", children: [_jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-emerald-400 animate-pulse" }), "AI Note Taker"] }))] }), _jsxs("div", { className: "flex items-center gap-1.5", children: [onExtractActionItems && (_jsx("button", { onClick: () => onExtractActionItems(content), className: "px-2.5 py-1 text-xs font-medium text-purple-300 bg-purple-500/10 hover:bg-purple-500/20 border border-purple-500/30 rounded-lg transition-all", title: "Extract tasks and action items from notes", children: "\u2728 Extract Tasks" })), isEditing ? (_jsx("button", { onClick: handleSave, className: "px-2.5 py-1 text-xs font-semibold text-white bg-indigo-600 hover:bg-indigo-500 rounded-lg transition-all", children: "Save" })) : (_jsx("button", { onClick: () => setIsEditing(true), className: "px-2.5 py-1 text-xs font-medium text-neutral-300 hover:text-white bg-white/5 hover:bg-white/10 border border-white/10 rounded-lg transition-all", children: "Edit" }))] })] }), isEditing ? (_jsx("textarea", { value: content, onChange: (e) => setContent(e.target.value), placeholder: "Write shared channel notes, meeting agenda, or AI summaries...", rows: 6, className: "w-full p-3 bg-neutral-950/80 border border-white/10 rounded-xl text-xs text-neutral-200 font-mono focus:outline-none focus:border-indigo-500 resize-y" })) : (_jsx("div", { className: "p-3 bg-neutral-950/40 border border-white/5 rounded-xl text-xs text-neutral-300 whitespace-pre-wrap font-mono max-h-60 overflow-y-auto leading-relaxed", children: content || _jsx("span", { className: "text-neutral-500 italic", children: "No notes recorded yet for this channel." }) }))] }));
11
+ };
12
+ //# sourceMappingURL=ChannelNotes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChannelNotes.js","sourceRoot":"","sources":["../../src/agents/ChannelNotes.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAWvC,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EACxD,WAAW,EACX,KAAK,EACL,WAAW,EACX,oBAAoB,EACpB,qBAAqB,GAAG,KAAK,EAC7B,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEjD,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,WAAW,CAAC,OAAO,CAAC,CAAA;QACpB,YAAY,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC,CAAA;IAED,OAAO,CACL,eACE,SAAS,EAAE,iGAAiG,SAAS,EAAE,gBAC5G,6BAA6B,aAExC,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAM,SAAS,EAAC,WAAW,6BAAU,EACrC,cAAI,SAAS,EAAC,2DAA2D,+BAC7D,WAAW,IAClB,EACJ,qBAAqB,IAAI,CACxB,gBAAM,SAAS,EAAC,0IAA0I,aACxJ,eAAM,SAAS,EAAC,uDAAuD,GAAG,qBAErE,CACR,IACG,EAEN,eAAK,SAAS,EAAC,2BAA2B,aACvC,oBAAoB,IAAI,CACvB,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAC5C,SAAS,EAAC,+IAA+I,EACzJ,KAAK,EAAC,2CAA2C,qCAG1C,CACV,EAEA,SAAS,CAAC,CAAC,CAAC,CACX,iBACE,OAAO,EAAE,UAAU,EACnB,SAAS,EAAC,0GAA0G,qBAG7G,CACV,CAAC,CAAC,CAAC,CACF,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EACjC,SAAS,EAAC,iJAAiJ,qBAGpJ,CACV,IACG,IACF,EAEL,SAAS,CAAC,CAAC,CAAC,CACX,mBACE,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC3C,WAAW,EAAC,gEAAgE,EAC5E,IAAI,EAAE,CAAC,EACP,SAAS,EAAC,uJAAuJ,GACjK,CACH,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,wJAAwJ,YACpK,OAAO,IAAI,eAAM,SAAS,EAAC,yBAAyB,wDAA+C,GAChG,CACP,IACG,CACP,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DiffViewer = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ function computeDiff(original, modified) {
7
+ const origLines = original.split('\n');
8
+ const modLines = modified.split('\n');
9
+ const lines = [];
10
+ let i = 0;
11
+ let j = 0;
12
+ while (i < origLines.length || j < modLines.length) {
13
+ if (i < origLines.length && j < modLines.length) {
14
+ if (origLines[i] === modLines[j]) {
15
+ lines.push({ type: 'same', content: origLines[i], oldNum: i + 1, newNum: j + 1 });
16
+ i++;
17
+ j++;
18
+ }
19
+ else {
20
+ lines.push({ type: 'remove', content: origLines[i], oldNum: i + 1 });
21
+ i++;
22
+ lines.push({ type: 'add', content: modLines[j], newNum: j + 1 });
23
+ j++;
24
+ }
25
+ }
26
+ else if (i < origLines.length) {
27
+ lines.push({ type: 'remove', content: origLines[i], oldNum: i + 1 });
28
+ i++;
29
+ }
30
+ else if (j < modLines.length) {
31
+ lines.push({ type: 'add', content: modLines[j], newNum: j + 1 });
32
+ j++;
33
+ }
34
+ }
35
+ return lines;
36
+ }
37
+ const DiffViewer = ({ originalCode, modifiedCode, filename, className = '', }) => {
38
+ const diffLines = (0, react_1.useMemo)(() => computeDiff(originalCode, modifiedCode), [originalCode, modifiedCode]);
39
+ const additions = diffLines.filter((l) => l.type === 'add').length;
40
+ const deletions = diffLines.filter((l) => l.type === 'remove').length;
41
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `flex flex-col border border-white/10 rounded-xl overflow-hidden bg-neutral-950/80 font-mono text-xs ${className}`, children: [filename && ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between px-3 py-2 bg-neutral-900/80 border-b border-white/10", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-neutral-300 font-semibold", children: filename }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsxs)("span", { className: "text-emerald-400 font-semibold", children: ["+", additions] }), (0, jsx_runtime_1.jsxs)("span", { className: "text-rose-400 font-semibold", children: ["-", deletions] })] })] })), (0, jsx_runtime_1.jsx)("div", { className: "overflow-x-auto divide-y divide-white/5 py-1", children: diffLines.map((line, idx) => ((0, jsx_runtime_1.jsxs)("div", { className: `flex items-stretch px-2 py-0.5 leading-5 select-text ${line.type === 'add'
42
+ ? 'bg-emerald-950/40 text-emerald-300'
43
+ : line.type === 'remove'
44
+ ? 'bg-rose-950/40 text-rose-300'
45
+ : 'text-neutral-400 hover:bg-white/5'}`, children: [(0, jsx_runtime_1.jsx)("div", { className: "w-8 text-right pr-2 text-neutral-600 select-none shrink-0 font-mono", children: line.oldNum || '' }), (0, jsx_runtime_1.jsx)("div", { className: "w-8 text-right pr-2 text-neutral-600 select-none shrink-0 font-mono", children: line.newNum || '' }), (0, jsx_runtime_1.jsx)("div", { className: "w-4 text-center select-none shrink-0", children: line.type === 'add' ? '+' : line.type === 'remove' ? '-' : ' ' }), (0, jsx_runtime_1.jsx)("pre", { className: "flex-1 overflow-x-auto whitespace-pre font-mono pl-1", children: line.content || ' ' })] }, idx))) })] }));
46
+ };
47
+ exports.DiffViewer = DiffViewer;
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ export interface DiffViewerProps {
3
+ originalCode: string;
4
+ modifiedCode: string;
5
+ filename?: string;
6
+ language?: string;
7
+ className?: string;
8
+ }
9
+ export declare const DiffViewer: React.FC<DiffViewerProps>;
10
+ //# sourceMappingURL=DiffViewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiffViewer.d.ts","sourceRoot":"","sources":["../../src/agents/DiffViewer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAEtC,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAyCD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAoDhD,CAAA"}
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ function computeDiff(original, modified) {
4
+ const origLines = original.split('\n');
5
+ const modLines = modified.split('\n');
6
+ const lines = [];
7
+ let i = 0;
8
+ let j = 0;
9
+ while (i < origLines.length || j < modLines.length) {
10
+ if (i < origLines.length && j < modLines.length) {
11
+ if (origLines[i] === modLines[j]) {
12
+ lines.push({ type: 'same', content: origLines[i], oldNum: i + 1, newNum: j + 1 });
13
+ i++;
14
+ j++;
15
+ }
16
+ else {
17
+ lines.push({ type: 'remove', content: origLines[i], oldNum: i + 1 });
18
+ i++;
19
+ lines.push({ type: 'add', content: modLines[j], newNum: j + 1 });
20
+ j++;
21
+ }
22
+ }
23
+ else if (i < origLines.length) {
24
+ lines.push({ type: 'remove', content: origLines[i], oldNum: i + 1 });
25
+ i++;
26
+ }
27
+ else if (j < modLines.length) {
28
+ lines.push({ type: 'add', content: modLines[j], newNum: j + 1 });
29
+ j++;
30
+ }
31
+ }
32
+ return lines;
33
+ }
34
+ export const DiffViewer = ({ originalCode, modifiedCode, filename, className = '', }) => {
35
+ const diffLines = useMemo(() => computeDiff(originalCode, modifiedCode), [originalCode, modifiedCode]);
36
+ const additions = diffLines.filter((l) => l.type === 'add').length;
37
+ const deletions = diffLines.filter((l) => l.type === 'remove').length;
38
+ return (_jsxs("div", { className: `flex flex-col border border-white/10 rounded-xl overflow-hidden bg-neutral-950/80 font-mono text-xs ${className}`, children: [filename && (_jsxs("div", { className: "flex items-center justify-between px-3 py-2 bg-neutral-900/80 border-b border-white/10", children: [_jsx("span", { className: "text-neutral-300 font-semibold", children: filename }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("span", { className: "text-emerald-400 font-semibold", children: ["+", additions] }), _jsxs("span", { className: "text-rose-400 font-semibold", children: ["-", deletions] })] })] })), _jsx("div", { className: "overflow-x-auto divide-y divide-white/5 py-1", children: diffLines.map((line, idx) => (_jsxs("div", { className: `flex items-stretch px-2 py-0.5 leading-5 select-text ${line.type === 'add'
39
+ ? 'bg-emerald-950/40 text-emerald-300'
40
+ : line.type === 'remove'
41
+ ? 'bg-rose-950/40 text-rose-300'
42
+ : 'text-neutral-400 hover:bg-white/5'}`, children: [_jsx("div", { className: "w-8 text-right pr-2 text-neutral-600 select-none shrink-0 font-mono", children: line.oldNum || '' }), _jsx("div", { className: "w-8 text-right pr-2 text-neutral-600 select-none shrink-0 font-mono", children: line.newNum || '' }), _jsx("div", { className: "w-4 text-center select-none shrink-0", children: line.type === 'add' ? '+' : line.type === 'remove' ? '-' : ' ' }), _jsx("pre", { className: "flex-1 overflow-x-auto whitespace-pre font-mono pl-1", children: line.content || ' ' })] }, idx))) })] }));
43
+ };
44
+ //# sourceMappingURL=DiffViewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiffViewer.js","sourceRoot":"","sources":["../../src/agents/DiffViewer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LiveVoiceCall = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const LiveVoiceCall = ({ active, muted, title = 'Duplex Voice Session', statusText = 'Connected · 24kHz Opus', transcripts = [], onToggleMute, onEndCall, className = '', }) => {
7
+ const canvasRef = (0, react_1.useRef)(null);
8
+ const animFrameRef = (0, react_1.useRef)(null);
9
+ (0, react_1.useEffect)(() => {
10
+ if (!active)
11
+ return;
12
+ const canvas = canvasRef.current;
13
+ if (!canvas)
14
+ return;
15
+ const ctx = canvas.getContext('2d');
16
+ if (!ctx)
17
+ return;
18
+ let phase = 0;
19
+ const render = () => {
20
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
21
+ const width = canvas.width;
22
+ const height = canvas.height;
23
+ const centerY = height / 2;
24
+ const bars = 36;
25
+ const barWidth = width / bars - 2;
26
+ for (let i = 0; i < bars; i++) {
27
+ const amplitude = muted
28
+ ? 4
29
+ : Math.sin(phase + i * 0.3) * 18 + Math.cos(phase * 1.5 + i * 0.2) * 12 + 22;
30
+ const barHeight = Math.max(4, Math.abs(amplitude));
31
+ const gradient = ctx.createLinearGradient(0, centerY - barHeight, 0, centerY + barHeight);
32
+ if (muted) {
33
+ gradient.addColorStop(0, '#71717a');
34
+ gradient.addColorStop(1, '#3f3f46');
35
+ }
36
+ else {
37
+ gradient.addColorStop(0, '#818cf8');
38
+ gradient.addColorStop(0.5, '#c084fc');
39
+ gradient.addColorStop(1, '#38bdf8');
40
+ }
41
+ ctx.fillStyle = gradient;
42
+ ctx.beginPath();
43
+ ctx.roundRect(i * (barWidth + 2), centerY - barHeight / 2, barWidth, barHeight, 4);
44
+ ctx.fill();
45
+ }
46
+ phase += muted ? 0.02 : 0.08;
47
+ animFrameRef.current = requestAnimationFrame(render);
48
+ };
49
+ render();
50
+ return () => {
51
+ if (animFrameRef.current) {
52
+ cancelAnimationFrame(animFrameRef.current);
53
+ }
54
+ };
55
+ }, [active, muted]);
56
+ if (!active)
57
+ return null;
58
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `flex flex-col gap-4 p-5 bg-neutral-900/80 backdrop-blur-xl border border-white/15 rounded-2xl shadow-2xl ${className}`, role: "dialog", "aria-label": "Live Voice Call", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("span", { className: "w-2.5 h-2.5 rounded-full bg-emerald-400 animate-pulse" }), (0, jsx_runtime_1.jsx)("h3", { className: "text-sm font-semibold text-white", children: title })] }), (0, jsx_runtime_1.jsx)("span", { className: "text-xs text-neutral-400 font-mono", children: statusText })] }), (0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center p-4 bg-neutral-950/60 rounded-xl border border-white/5", children: (0, jsx_runtime_1.jsx)("canvas", { ref: canvasRef, width: 380, height: 70, className: "w-full h-[70px]" }) }), transcripts.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: "flex flex-col gap-2 max-h-40 overflow-y-auto pr-1", children: transcripts.map((t, idx) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-0.5 text-xs", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between text-[11px] text-neutral-500", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-semibold text-neutral-300", children: t.speaker }), (0, jsx_runtime_1.jsx)("span", { children: t.time })] }), (0, jsx_runtime_1.jsx)("p", { className: "text-neutral-200 bg-white/5 p-2 rounded-lg", children: t.text })] }, idx))) })), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-center gap-3 pt-2", children: [(0, jsx_runtime_1.jsx)("button", { onClick: onToggleMute, className: `flex items-center gap-2 px-4 py-2 rounded-xl text-xs font-semibold transition-all border ${muted
59
+ ? 'bg-rose-500/20 text-rose-300 border-rose-500/40 hover:bg-rose-500/30'
60
+ : 'bg-white/10 text-white border-white/20 hover:bg-white/15'}`, children: (0, jsx_runtime_1.jsx)("span", { children: muted ? '🔇 Unmute' : '🎙️ Mute' }) }), (0, jsx_runtime_1.jsx)("button", { onClick: onEndCall, className: "flex items-center gap-2 px-4 py-2 bg-rose-600 hover:bg-rose-500 text-white text-xs font-semibold rounded-xl transition-all shadow-lg shadow-rose-600/30", children: (0, jsx_runtime_1.jsx)("span", { children: "\uD83D\uDCDE Leave Call" }) })] })] }));
61
+ };
62
+ exports.LiveVoiceCall = LiveVoiceCall;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ export interface LiveVoiceCallProps {
3
+ active: boolean;
4
+ muted: boolean;
5
+ title?: string;
6
+ statusText?: string;
7
+ transcripts?: {
8
+ speaker: string;
9
+ text: string;
10
+ time: string;
11
+ }[];
12
+ onToggleMute: () => void;
13
+ onEndCall: () => void;
14
+ className?: string;
15
+ }
16
+ export declare const LiveVoiceCall: React.FC<LiveVoiceCallProps>;
17
+ //# sourceMappingURL=LiveVoiceCall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveVoiceCall.d.ts","sourceRoot":"","sources":["../../src/agents/LiveVoiceCall.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAA;AAEhD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC/D,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA0HtD,CAAA"}
@@ -0,0 +1,59 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef } from 'react';
3
+ export const LiveVoiceCall = ({ active, muted, title = 'Duplex Voice Session', statusText = 'Connected · 24kHz Opus', transcripts = [], onToggleMute, onEndCall, className = '', }) => {
4
+ const canvasRef = useRef(null);
5
+ const animFrameRef = useRef(null);
6
+ useEffect(() => {
7
+ if (!active)
8
+ return;
9
+ const canvas = canvasRef.current;
10
+ if (!canvas)
11
+ return;
12
+ const ctx = canvas.getContext('2d');
13
+ if (!ctx)
14
+ return;
15
+ let phase = 0;
16
+ const render = () => {
17
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
18
+ const width = canvas.width;
19
+ const height = canvas.height;
20
+ const centerY = height / 2;
21
+ const bars = 36;
22
+ const barWidth = width / bars - 2;
23
+ for (let i = 0; i < bars; i++) {
24
+ const amplitude = muted
25
+ ? 4
26
+ : Math.sin(phase + i * 0.3) * 18 + Math.cos(phase * 1.5 + i * 0.2) * 12 + 22;
27
+ const barHeight = Math.max(4, Math.abs(amplitude));
28
+ const gradient = ctx.createLinearGradient(0, centerY - barHeight, 0, centerY + barHeight);
29
+ if (muted) {
30
+ gradient.addColorStop(0, '#71717a');
31
+ gradient.addColorStop(1, '#3f3f46');
32
+ }
33
+ else {
34
+ gradient.addColorStop(0, '#818cf8');
35
+ gradient.addColorStop(0.5, '#c084fc');
36
+ gradient.addColorStop(1, '#38bdf8');
37
+ }
38
+ ctx.fillStyle = gradient;
39
+ ctx.beginPath();
40
+ ctx.roundRect(i * (barWidth + 2), centerY - barHeight / 2, barWidth, barHeight, 4);
41
+ ctx.fill();
42
+ }
43
+ phase += muted ? 0.02 : 0.08;
44
+ animFrameRef.current = requestAnimationFrame(render);
45
+ };
46
+ render();
47
+ return () => {
48
+ if (animFrameRef.current) {
49
+ cancelAnimationFrame(animFrameRef.current);
50
+ }
51
+ };
52
+ }, [active, muted]);
53
+ if (!active)
54
+ return null;
55
+ return (_jsxs("div", { className: `flex flex-col gap-4 p-5 bg-neutral-900/80 backdrop-blur-xl border border-white/15 rounded-2xl shadow-2xl ${className}`, role: "dialog", "aria-label": "Live Voice Call", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "w-2.5 h-2.5 rounded-full bg-emerald-400 animate-pulse" }), _jsx("h3", { className: "text-sm font-semibold text-white", children: title })] }), _jsx("span", { className: "text-xs text-neutral-400 font-mono", children: statusText })] }), _jsx("div", { className: "flex items-center justify-center p-4 bg-neutral-950/60 rounded-xl border border-white/5", children: _jsx("canvas", { ref: canvasRef, width: 380, height: 70, className: "w-full h-[70px]" }) }), transcripts.length > 0 && (_jsx("div", { className: "flex flex-col gap-2 max-h-40 overflow-y-auto pr-1", children: transcripts.map((t, idx) => (_jsxs("div", { className: "flex flex-col gap-0.5 text-xs", children: [_jsxs("div", { className: "flex items-center justify-between text-[11px] text-neutral-500", children: [_jsx("span", { className: "font-semibold text-neutral-300", children: t.speaker }), _jsx("span", { children: t.time })] }), _jsx("p", { className: "text-neutral-200 bg-white/5 p-2 rounded-lg", children: t.text })] }, idx))) })), _jsxs("div", { className: "flex items-center justify-center gap-3 pt-2", children: [_jsx("button", { onClick: onToggleMute, className: `flex items-center gap-2 px-4 py-2 rounded-xl text-xs font-semibold transition-all border ${muted
56
+ ? 'bg-rose-500/20 text-rose-300 border-rose-500/40 hover:bg-rose-500/30'
57
+ : 'bg-white/10 text-white border-white/20 hover:bg-white/15'}`, children: _jsx("span", { children: muted ? '🔇 Unmute' : '🎙️ Mute' }) }), _jsx("button", { onClick: onEndCall, className: "flex items-center gap-2 px-4 py-2 bg-rose-600 hover:bg-rose-500 text-white text-xs font-semibold rounded-xl transition-all shadow-lg shadow-rose-600/30", children: _jsx("span", { children: "\uD83D\uDCDE Leave Call" }) })] })] }));
58
+ };
59
+ //# sourceMappingURL=LiveVoiceCall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveVoiceCall.js","sourceRoot":"","sources":["../../src/agents/LiveVoiceCall.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAahD,MAAM,CAAC,MAAM,aAAa,GAAiC,CAAC,EAC1D,MAAM,EACN,KAAK,EACL,KAAK,GAAG,sBAAsB,EAC9B,UAAU,GAAG,wBAAwB,EACrC,WAAW,GAAG,EAAE,EAChB,YAAY,EACZ,SAAS,EACT,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,MAAM,SAAS,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAA;IACjD,MAAM,YAAY,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAA;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAM;QAEnB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAA;QAChC,IAAI,CAAC,MAAM;YAAE,OAAM;QACnB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,CAAC,GAAG;YAAE,OAAM;QAEhB,IAAI,KAAK,GAAG,CAAC,CAAA;QAEb,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YAChD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;YAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;YAC5B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,CAAA;YAE1B,MAAM,IAAI,GAAG,EAAE,CAAA;YACf,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,CAAA;YAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9B,MAAM,SAAS,GAAG,KAAK;oBACrB,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;gBAC9E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;gBAElD,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC,CAAA;gBACzF,IAAI,KAAK,EAAE,CAAC;oBACV,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;oBACnC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;gBACrC,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;oBACnC,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;oBACrC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;gBACrC,CAAC;gBAED,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAA;gBACxB,GAAG,CAAC,SAAS,EAAE,CAAA;gBACf,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;gBAClF,GAAG,CAAC,IAAI,EAAE,CAAA;YACZ,CAAC;YAED,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;YAC5B,YAAY,CAAC,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;QACtD,CAAC,CAAA;QAED,MAAM,EAAE,CAAA;QAER,OAAO,GAAG,EAAE;YACV,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACzB,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;IAEnB,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAExB,OAAO,CACL,eACE,SAAS,EAAE,4GAA4G,SAAS,EAAE,EAClI,IAAI,EAAC,QAAQ,gBACF,iBAAiB,aAE5B,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAM,SAAS,EAAC,uDAAuD,GAAG,EAC1E,aAAI,SAAS,EAAC,kCAAkC,YAAE,KAAK,GAAM,IACzD,EACN,eAAM,SAAS,EAAC,oCAAoC,YAAE,UAAU,GAAQ,IACpE,EAEN,cAAK,SAAS,EAAC,yFAAyF,YACtG,iBAAQ,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAC,iBAAiB,GAAG,GAC1E,EAEL,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CACzB,cAAK,SAAS,EAAC,mDAAmD,YAC/D,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAC3B,eAAe,SAAS,EAAC,+BAA+B,aACtD,eAAK,SAAS,EAAC,gEAAgE,aAC7E,eAAM,SAAS,EAAC,gCAAgC,YAAE,CAAC,CAAC,OAAO,GAAQ,EACnE,yBAAO,CAAC,CAAC,IAAI,GAAQ,IACjB,EACN,YAAG,SAAS,EAAC,4CAA4C,YAAE,CAAC,CAAC,IAAI,GAAK,KAL9D,GAAG,CAMP,CACP,CAAC,GACE,CACP,EAED,eAAK,SAAS,EAAC,6CAA6C,aAC1D,iBACE,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,4FACT,KAAK;4BACH,CAAC,CAAC,sEAAsE;4BACxE,CAAC,CAAC,0DACN,EAAE,YAEF,yBAAO,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,GAAQ,GACxC,EAET,iBACE,OAAO,EAAE,SAAS,EAClB,SAAS,EAAC,yJAAyJ,YAEnK,qDAA0B,GACnB,IACL,IACF,CACP,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MCPHub = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const MCPHub = ({ servers, onToggleTool, onReconnect, onAddServer, className = '', }) => {
6
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `flex flex-col gap-3 p-4 bg-neutral-900/60 backdrop-blur-md border border-white/10 rounded-2xl ${className}`, "aria-label": "Model Context Protocol Hub", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-lg", children: "\uD83D\uDD0C" }), (0, jsx_runtime_1.jsx)("h3", { className: "text-sm font-semibold text-white", children: "Model Context Protocol (MCP)" }), (0, jsx_runtime_1.jsxs)("span", { className: "px-1.5 py-0.5 rounded-full text-[10px] bg-white/10 text-neutral-300 font-mono", children: [servers.length, " servers"] })] }), onAddServer && ((0, jsx_runtime_1.jsx)("button", { onClick: onAddServer, className: "px-2.5 py-1 text-xs font-medium text-indigo-300 bg-indigo-500/10 hover:bg-indigo-500/20 border border-indigo-500/30 rounded-lg transition-all", children: "+ Add Server" }))] }), (0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-3", children: servers.map((server) => ((0, jsx_runtime_1.jsxs)("div", { className: "p-3 bg-white/5 border border-white/10 rounded-xl flex flex-col gap-2.5", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("span", { className: `w-2 h-2 rounded-full ${server.status === 'connected'
7
+ ? 'bg-emerald-400 shadow-sm shadow-emerald-400/50'
8
+ : server.status === 'connecting'
9
+ ? 'bg-amber-400 animate-pulse'
10
+ : 'bg-rose-400'}` }), (0, jsx_runtime_1.jsx)("span", { className: "text-xs font-semibold text-white", children: server.name }), (0, jsx_runtime_1.jsx)("span", { className: "text-[10px] text-neutral-400 font-mono uppercase bg-white/5 px-1 py-0.5 rounded", children: server.transport })] }), (0, jsx_runtime_1.jsx)("button", { onClick: () => onReconnect(server.id), className: "text-[11px] text-neutral-400 hover:text-white transition-colors", title: "Reconnect server", children: "\u21BB" })] }), (0, jsx_runtime_1.jsx)("div", { className: "flex flex-wrap gap-1.5", children: server.tools.map((tool) => ((0, jsx_runtime_1.jsx)("button", { onClick: () => onToggleTool(server.id, tool.name, !tool.enabled), className: `px-2 py-0.5 rounded text-[11px] font-mono transition-all border ${tool.enabled
11
+ ? 'bg-emerald-500/15 text-emerald-300 border-emerald-500/30'
12
+ : 'bg-white/5 text-neutral-500 border-white/5 line-through opacity-60'}`, title: tool.description, children: tool.name }, tool.name))) })] }, server.id))) })] }));
13
+ };
14
+ exports.MCPHub = MCPHub;
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ export interface MCPServerInfo {
3
+ id: string;
4
+ name: string;
5
+ status: 'connected' | 'connecting' | 'disconnected' | 'error';
6
+ transport: 'sse' | 'stdio' | 'websocket';
7
+ endpoint?: string;
8
+ toolsCount: number;
9
+ resourcesCount: number;
10
+ tools: {
11
+ name: string;
12
+ description: string;
13
+ enabled: boolean;
14
+ }[];
15
+ }
16
+ export interface MCPHubProps {
17
+ servers: MCPServerInfo[];
18
+ onToggleTool: (serverId: string, toolName: string, enabled: boolean) => void;
19
+ onReconnect: (serverId: string) => void;
20
+ onAddServer?: () => void;
21
+ className?: string;
22
+ }
23
+ export declare const MCPHub: React.FC<MCPHubProps>;
24
+ //# sourceMappingURL=MCPHub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MCPHub.d.ts","sourceRoot":"","sources":["../../src/agents/MCPHub.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,WAAW,GAAG,YAAY,GAAG,cAAc,GAAG,OAAO,CAAA;IAC7D,SAAS,EAAE,KAAK,GAAG,OAAO,GAAG,WAAW,CAAA;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;CACjE;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5E,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAkFxC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export const MCPHub = ({ servers, onToggleTool, onReconnect, onAddServer, className = '', }) => {
3
+ return (_jsxs("div", { className: `flex flex-col gap-3 p-4 bg-neutral-900/60 backdrop-blur-md border border-white/10 rounded-2xl ${className}`, "aria-label": "Model Context Protocol Hub", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-lg", children: "\uD83D\uDD0C" }), _jsx("h3", { className: "text-sm font-semibold text-white", children: "Model Context Protocol (MCP)" }), _jsxs("span", { className: "px-1.5 py-0.5 rounded-full text-[10px] bg-white/10 text-neutral-300 font-mono", children: [servers.length, " servers"] })] }), onAddServer && (_jsx("button", { onClick: onAddServer, className: "px-2.5 py-1 text-xs font-medium text-indigo-300 bg-indigo-500/10 hover:bg-indigo-500/20 border border-indigo-500/30 rounded-lg transition-all", children: "+ Add Server" }))] }), _jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-3", children: servers.map((server) => (_jsxs("div", { className: "p-3 bg-white/5 border border-white/10 rounded-xl flex flex-col gap-2.5", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: `w-2 h-2 rounded-full ${server.status === 'connected'
4
+ ? 'bg-emerald-400 shadow-sm shadow-emerald-400/50'
5
+ : server.status === 'connecting'
6
+ ? 'bg-amber-400 animate-pulse'
7
+ : 'bg-rose-400'}` }), _jsx("span", { className: "text-xs font-semibold text-white", children: server.name }), _jsx("span", { className: "text-[10px] text-neutral-400 font-mono uppercase bg-white/5 px-1 py-0.5 rounded", children: server.transport })] }), _jsx("button", { onClick: () => onReconnect(server.id), className: "text-[11px] text-neutral-400 hover:text-white transition-colors", title: "Reconnect server", children: "\u21BB" })] }), _jsx("div", { className: "flex flex-wrap gap-1.5", children: server.tools.map((tool) => (_jsx("button", { onClick: () => onToggleTool(server.id, tool.name, !tool.enabled), className: `px-2 py-0.5 rounded text-[11px] font-mono transition-all border ${tool.enabled
8
+ ? 'bg-emerald-500/15 text-emerald-300 border-emerald-500/30'
9
+ : 'bg-white/5 text-neutral-500 border-white/5 line-through opacity-60'}`, title: tool.description, children: tool.name }, tool.name))) })] }, server.id))) })] }));
10
+ };
11
+ //# sourceMappingURL=MCPHub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MCPHub.js","sourceRoot":"","sources":["../../src/agents/MCPHub.tsx"],"names":[],"mappings":";AAqBA,MAAM,CAAC,MAAM,MAAM,GAA0B,CAAC,EAC5C,OAAO,EACP,YAAY,EACZ,WAAW,EACX,WAAW,EACX,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,OAAO,CACL,eACE,SAAS,EAAE,iGAAiG,SAAS,EAAE,gBAC5G,4BAA4B,aAEvC,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAM,SAAS,EAAC,SAAS,6BAAU,EACnC,aAAI,SAAS,EAAC,kCAAkC,6CAAkC,EAClF,gBAAM,SAAS,EAAC,+EAA+E,aAC5F,OAAO,CAAC,MAAM,gBACV,IACH,EACL,WAAW,IAAI,CACd,iBACE,OAAO,EAAE,WAAW,EACpB,SAAS,EAAC,+IAA+I,6BAGlJ,CACV,IACG,EAEN,cAAK,SAAS,EAAC,uCAAuC,YACnD,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,eAEE,SAAS,EAAC,wEAAwE,aAElF,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAK,SAAS,EAAC,yBAAyB,aACtC,eACE,SAAS,EAAE,wBACT,MAAM,CAAC,MAAM,KAAK,WAAW;gDAC3B,CAAC,CAAC,gDAAgD;gDAClD,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,YAAY;oDAChC,CAAC,CAAC,4BAA4B;oDAC9B,CAAC,CAAC,aACN,EAAE,GACF,EACF,eAAM,SAAS,EAAC,kCAAkC,YAAE,MAAM,CAAC,IAAI,GAAQ,EACvE,eAAM,SAAS,EAAC,iFAAiF,YAC9F,MAAM,CAAC,SAAS,GACZ,IACH,EACN,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EACrC,SAAS,EAAC,iEAAiE,EAC3E,KAAK,EAAC,kBAAkB,uBAGjB,IACL,EAEN,cAAK,SAAS,EAAC,wBAAwB,YACpC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC1B,iBAEE,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAChE,SAAS,EAAE,mEACT,IAAI,CAAC,OAAO;oCACV,CAAC,CAAC,0DAA0D;oCAC5D,CAAC,CAAC,oEACN,EAAE,EACF,KAAK,EAAE,IAAI,CAAC,WAAW,YAEtB,IAAI,CAAC,IAAI,IATL,IAAI,CAAC,IAAI,CAUP,CACV,CAAC,GACE,KA3CD,MAAM,CAAC,EAAE,CA4CV,CACP,CAAC,GACE,IACF,CACP,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ShortcutsSheet = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const DEFAULT_SHORTCUTS = [
6
+ { keys: ['⌘', 'K'], label: 'Open Omni Search / Command Palette', category: 'Navigation' },
7
+ { keys: ['⌘', 'B'], label: 'Toggle Explorer Sidebar', category: 'Workspace' },
8
+ { keys: ['⌘', 'J'], label: 'Toggle Far-Right Intelligence Dock', category: 'Workspace' },
9
+ { keys: ['⌘', '/'], label: 'Show Keyboard Shortcuts Cheat Sheet', category: 'Workspace' },
10
+ { keys: ['⌘', 'Enter'], label: 'Submit Prompt / Message', category: 'Chat' },
11
+ { keys: ['⌘', 'E'], label: 'Export Markdown Transcript', category: 'Chat' },
12
+ { keys: ['⌘', 'D'], label: 'Toggle Code Diff Inspector', category: 'Editing' },
13
+ { keys: ['⌘', 'M'], label: 'Toggle Duplex Voice Mic Mute', category: 'Chat' },
14
+ ];
15
+ const ShortcutsSheet = ({ isOpen, onClose, customShortcuts, className = '', }) => {
16
+ if (!isOpen)
17
+ return null;
18
+ const list = customShortcuts || DEFAULT_SHORTCUTS;
19
+ const categories = Array.from(new Set(list.map((s) => s.category)));
20
+ return ((0, jsx_runtime_1.jsx)("div", { className: `fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/60 backdrop-blur-md ${className}`, role: "dialog", "aria-modal": "true", "aria-label": "Keyboard Shortcuts", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col w-full max-w-lg bg-neutral-900 border border-white/15 rounded-2xl shadow-2xl p-6 gap-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between border-b border-white/10 pb-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-lg", children: "\u2328\uFE0F" }), (0, jsx_runtime_1.jsx)("h2", { className: "text-sm font-semibold text-white", children: "Keyboard Shortcuts" })] }), (0, jsx_runtime_1.jsx)("button", { onClick: onClose, className: "text-neutral-400 hover:text-white text-xs px-2 py-1 rounded bg-white/5", children: "Esc" })] }), (0, jsx_runtime_1.jsx)("div", { className: "flex flex-col gap-4 max-h-96 overflow-y-auto pr-1", children: categories.map((cat) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-2", children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-[11px] font-semibold text-neutral-400 uppercase tracking-wider", children: cat }), (0, jsx_runtime_1.jsx)("div", { className: "flex flex-col gap-1.5", children: list
21
+ .filter((s) => s.category === cat)
22
+ .map((s, idx) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between py-1 px-2 rounded-lg bg-white/5 text-xs text-neutral-200", children: [(0, jsx_runtime_1.jsx)("span", { children: s.label }), (0, jsx_runtime_1.jsx)("div", { className: "flex items-center gap-1", children: s.keys.map((k, kidx) => ((0, jsx_runtime_1.jsx)("kbd", { className: "px-2 py-0.5 rounded bg-neutral-800 border border-white/10 text-[11px] font-mono text-neutral-300 font-semibold shadow-sm", children: k }, kidx))) })] }, idx))) })] }, cat))) })] }) }));
23
+ };
24
+ exports.ShortcutsSheet = ShortcutsSheet;
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ export interface ShortcutItem {
3
+ keys: string[];
4
+ label: string;
5
+ category: 'Workspace' | 'Navigation' | 'Chat' | 'Editing';
6
+ }
7
+ export interface ShortcutsSheetProps {
8
+ isOpen: boolean;
9
+ onClose: () => void;
10
+ customShortcuts?: ShortcutItem[];
11
+ className?: string;
12
+ }
13
+ export declare const ShortcutsSheet: React.FC<ShortcutsSheetProps>;
14
+ //# sourceMappingURL=ShortcutsSheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShortcutsSheet.d.ts","sourceRoot":"","sources":["../../src/agents/ShortcutsSheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,WAAW,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,CAAA;CAC1D;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,eAAe,CAAC,EAAE,YAAY,EAAE,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAaD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAkExD,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ const DEFAULT_SHORTCUTS = [
3
+ { keys: ['⌘', 'K'], label: 'Open Omni Search / Command Palette', category: 'Navigation' },
4
+ { keys: ['⌘', 'B'], label: 'Toggle Explorer Sidebar', category: 'Workspace' },
5
+ { keys: ['⌘', 'J'], label: 'Toggle Far-Right Intelligence Dock', category: 'Workspace' },
6
+ { keys: ['⌘', '/'], label: 'Show Keyboard Shortcuts Cheat Sheet', category: 'Workspace' },
7
+ { keys: ['⌘', 'Enter'], label: 'Submit Prompt / Message', category: 'Chat' },
8
+ { keys: ['⌘', 'E'], label: 'Export Markdown Transcript', category: 'Chat' },
9
+ { keys: ['⌘', 'D'], label: 'Toggle Code Diff Inspector', category: 'Editing' },
10
+ { keys: ['⌘', 'M'], label: 'Toggle Duplex Voice Mic Mute', category: 'Chat' },
11
+ ];
12
+ export const ShortcutsSheet = ({ isOpen, onClose, customShortcuts, className = '', }) => {
13
+ if (!isOpen)
14
+ return null;
15
+ const list = customShortcuts || DEFAULT_SHORTCUTS;
16
+ const categories = Array.from(new Set(list.map((s) => s.category)));
17
+ return (_jsx("div", { className: `fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/60 backdrop-blur-md ${className}`, role: "dialog", "aria-modal": "true", "aria-label": "Keyboard Shortcuts", children: _jsxs("div", { className: "flex flex-col w-full max-w-lg bg-neutral-900 border border-white/15 rounded-2xl shadow-2xl p-6 gap-4", children: [_jsxs("div", { className: "flex items-center justify-between border-b border-white/10 pb-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-lg", children: "\u2328\uFE0F" }), _jsx("h2", { className: "text-sm font-semibold text-white", children: "Keyboard Shortcuts" })] }), _jsx("button", { onClick: onClose, className: "text-neutral-400 hover:text-white text-xs px-2 py-1 rounded bg-white/5", children: "Esc" })] }), _jsx("div", { className: "flex flex-col gap-4 max-h-96 overflow-y-auto pr-1", children: categories.map((cat) => (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx("h3", { className: "text-[11px] font-semibold text-neutral-400 uppercase tracking-wider", children: cat }), _jsx("div", { className: "flex flex-col gap-1.5", children: list
18
+ .filter((s) => s.category === cat)
19
+ .map((s, idx) => (_jsxs("div", { className: "flex items-center justify-between py-1 px-2 rounded-lg bg-white/5 text-xs text-neutral-200", children: [_jsx("span", { children: s.label }), _jsx("div", { className: "flex items-center gap-1", children: s.keys.map((k, kidx) => (_jsx("kbd", { className: "px-2 py-0.5 rounded bg-neutral-800 border border-white/10 text-[11px] font-mono text-neutral-300 font-semibold shadow-sm", children: k }, kidx))) })] }, idx))) })] }, cat))) })] }) }));
20
+ };
21
+ //# sourceMappingURL=ShortcutsSheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShortcutsSheet.js","sourceRoot":"","sources":["../../src/agents/ShortcutsSheet.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SwarmBar = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const SwarmBar = ({ agents, activeAgentId, swarmMode, onSelectAgent, onToggleSwarm, className = '', }) => {
6
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `flex items-center justify-between gap-2 px-3 py-2 bg-neutral-900/60 backdrop-blur-md border border-white/10 rounded-xl ${className}`, role: "toolbar", "aria-label": "Swarm & Agents Bar", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex items-center gap-1.5 overflow-x-auto no-scrollbar", children: agents.map((agent) => {
7
+ const isActive = agent.id === activeAgentId;
8
+ return ((0, jsx_runtime_1.jsxs)("button", { onClick: () => onSelectAgent(agent.id), className: `flex items-center gap-1.5 px-2.5 py-1 rounded-lg text-xs font-medium transition-all ${isActive
9
+ ? 'bg-white/15 text-white shadow-sm border border-white/20'
10
+ : 'text-neutral-400 hover:text-neutral-200 hover:bg-white/5'}`, title: `${agent.name} — ${agent.role}`, children: [(0, jsx_runtime_1.jsx)("span", { className: "text-sm", children: agent.icon }), (0, jsx_runtime_1.jsx)("span", { children: agent.name }), (0, jsx_runtime_1.jsx)("span", { className: `w-1.5 h-1.5 rounded-full ${agent.status === 'working'
11
+ ? 'bg-amber-400 animate-pulse'
12
+ : agent.status === 'ready'
13
+ ? 'bg-emerald-400'
14
+ : 'bg-neutral-500'}` })] }, agent.id));
15
+ }) }), (0, jsx_runtime_1.jsxs)("button", { onClick: () => onToggleSwarm(!swarmMode), className: `flex items-center gap-1.5 px-3 py-1 rounded-lg text-xs font-semibold transition-all border shrink-0 ${swarmMode
16
+ ? 'bg-indigo-600/30 text-indigo-300 border-indigo-500/40 shadow-sm shadow-indigo-500/20'
17
+ : 'bg-white/5 text-neutral-400 border-white/10 hover:text-white'}`, title: "Swarm Mode coordinates multi-agent task execution", children: [(0, jsx_runtime_1.jsx)("span", { children: "\u26A1 Swarm" }), (0, jsx_runtime_1.jsx)("span", { className: `px-1 py-0.2 rounded text-[10px] ${swarmMode ? 'bg-indigo-500 text-white font-bold' : 'bg-neutral-800 text-neutral-400'}`, children: swarmMode ? 'ON' : 'OFF' })] })] }));
18
+ };
19
+ exports.SwarmBar = SwarmBar;
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ export interface AgentDescriptor {
3
+ id: string;
4
+ name: string;
5
+ role: string;
6
+ icon: string;
7
+ color: string;
8
+ status: 'idle' | 'working' | 'ready';
9
+ capabilities: string[];
10
+ }
11
+ export interface SwarmBarProps {
12
+ agents: AgentDescriptor[];
13
+ activeAgentId: string;
14
+ swarmMode: boolean;
15
+ onSelectAgent: (id: string) => void;
16
+ onToggleSwarm: (enabled: boolean) => void;
17
+ className?: string;
18
+ }
19
+ export declare const SwarmBar: React.FC<SwarmBarProps>;
20
+ //# sourceMappingURL=SwarmBar.d.ts.map