@emblemvault/hustle-react 1.4.3 → 1.4.5

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.
@@ -2116,6 +2116,30 @@ function HustleProvider({
2116
2116
  }
2117
2117
  };
2118
2118
  }, [client]);
2119
+ useEffect(() => {
2120
+ if (typeof window !== "undefined") {
2121
+ const win = window;
2122
+ win.__hustleGetModel = () => selectedModel;
2123
+ win.__hustleSetModel = (model) => setSelectedModel(model);
2124
+ win.__hustleGetSystemPrompt = () => systemPrompt;
2125
+ win.__hustleSetSystemPrompt = (prompt) => setSystemPrompt(prompt);
2126
+ win.__hustleGetSkipServerPrompt = () => skipServerPrompt;
2127
+ win.__hustleSetSkipServerPrompt = (skip) => setSkipServerPrompt(skip);
2128
+ win.__hustleGetModels = () => models;
2129
+ }
2130
+ return () => {
2131
+ if (typeof window !== "undefined") {
2132
+ const win = window;
2133
+ delete win.__hustleGetModel;
2134
+ delete win.__hustleSetModel;
2135
+ delete win.__hustleGetSystemPrompt;
2136
+ delete win.__hustleSetSystemPrompt;
2137
+ delete win.__hustleGetSkipServerPrompt;
2138
+ delete win.__hustleSetSkipServerPrompt;
2139
+ delete win.__hustleGetModels;
2140
+ }
2141
+ };
2142
+ }, [selectedModel, setSelectedModel, systemPrompt, setSystemPrompt, skipServerPrompt, setSkipServerPrompt, models]);
2119
2143
  const loadModels = useCallback(async () => {
2120
2144
  if (!client) {
2121
2145
  log("Cannot load models - client not ready");
@@ -3715,6 +3739,15 @@ Executors run in the browser context with full access to:
3715
3739
  - **window.__hustleListPlugins()** - List all installed plugins
3716
3740
  - **window.__hustleGetPlugin(name)** - Get a specific plugin by name
3717
3741
 
3742
+ ### Hustle Settings Globals (Read/Write)
3743
+ - **window.__hustleGetModel()** - Get the current model override (empty string = server default)
3744
+ - **window.__hustleSetModel(model)** - Set the model override (e.g., "anthropic/claude-3-opus")
3745
+ - **window.__hustleGetSystemPrompt()** - Get the current system prompt override
3746
+ - **window.__hustleSetSystemPrompt(prompt)** - Set the system prompt override
3747
+ - **window.__hustleGetSkipServerPrompt()** - Get whether server prompt is skipped (boolean)
3748
+ - **window.__hustleSetSkipServerPrompt(skip)** - Set whether to skip server prompt
3749
+ - **window.__hustleGetModels()** - Get list of available models (read-only)
3750
+
3718
3751
  ### DOM Manipulation Examples
3719
3752
  Create a modal: document.createElement('div'), style it, append to document.body
3720
3753
  Add event listeners: element.addEventListener('click', handler)
@@ -15784,12 +15817,16 @@ function SettingsIcon() {
15784
15817
  function AttachIcon() {
15785
15818
  return /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsx("path", { d: "M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" }) });
15786
15819
  }
15820
+
15821
+ // src/constants/index.ts
15822
+ var AGENT_HUSTLE_ICON = "data:image/jpeg;base64,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";
15787
15823
  var sizeConfigs = {
15788
15824
  sm: { width: "320px", height: "400px" },
15789
15825
  md: { width: "380px", height: "520px" },
15790
15826
  lg: { width: "420px", height: "600px" },
15791
15827
  xl: { width: "480px", height: "700px" },
15792
- full: { width: "100vw", height: "100vh" }
15828
+ full: { width: "100vw", height: "100vh" },
15829
+ sideDock: { width: "380px", height: "100vh" }
15793
15830
  };
15794
15831
  var widgetStyles = {
15795
15832
  // Container for absolute positioning
@@ -15867,6 +15904,21 @@ var widgetStyles = {
15867
15904
  width: "100vw",
15868
15905
  height: "100vh"
15869
15906
  },
15907
+ // Side dock mode overrides
15908
+ panelSideDock: {
15909
+ position: "fixed",
15910
+ top: 0,
15911
+ right: 0,
15912
+ bottom: 0,
15913
+ borderRadius: 0,
15914
+ width: "380px",
15915
+ height: "100vh",
15916
+ borderLeft: `1px solid ${tokens.colors.borderPrimary}`,
15917
+ boxShadow: `-4px 0 24px rgba(0, 0, 0, 0.3)`
15918
+ },
15919
+ // Hustle avatar in launcher
15920
+ launcherAvatar: {
15921
+ borderRadius: tokens.radius.full},
15870
15922
  // Close button in panel header
15871
15923
  closeBtn: {
15872
15924
  width: "32px",
@@ -15886,23 +15938,35 @@ var widgetStyles = {
15886
15938
  color: tokens.colors.textPrimary
15887
15939
  }
15888
15940
  };
15889
- function ChatIcon() {
15890
- return /* @__PURE__ */ jsx("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" }) });
15891
- }
15892
15941
  function CloseIcon() {
15893
15942
  return /* @__PURE__ */ jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
15894
15943
  /* @__PURE__ */ jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
15895
15944
  /* @__PURE__ */ jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
15896
15945
  ] });
15897
15946
  }
15898
- function MinimizeIcon() {
15947
+ function ExpandIcon() {
15899
15948
  return /* @__PURE__ */ jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
15900
- /* @__PURE__ */ jsx("polyline", { points: "4 14 10 14 10 20" }),
15901
- /* @__PURE__ */ jsx("polyline", { points: "20 10 14 10 14 4" }),
15902
- /* @__PURE__ */ jsx("line", { x1: "14", y1: "10", x2: "21", y2: "3" }),
15949
+ /* @__PURE__ */ jsx("polyline", { points: "15 3 21 3 21 9" }),
15950
+ /* @__PURE__ */ jsx("polyline", { points: "9 21 3 21 3 15" }),
15951
+ /* @__PURE__ */ jsx("line", { x1: "21", y1: "3", x2: "14", y2: "10" }),
15903
15952
  /* @__PURE__ */ jsx("line", { x1: "3", y1: "21", x2: "10", y2: "14" })
15904
15953
  ] });
15905
15954
  }
15955
+ function AgentHustleAvatar({ size = 40 }) {
15956
+ return /* @__PURE__ */ jsx(
15957
+ "img",
15958
+ {
15959
+ src: AGENT_HUSTLE_ICON,
15960
+ alt: "Agent Hustle",
15961
+ style: {
15962
+ width: size,
15963
+ height: size,
15964
+ borderRadius: "50%",
15965
+ objectFit: "cover"
15966
+ }
15967
+ }
15968
+ );
15969
+ }
15906
15970
  function HustleChatWidget({
15907
15971
  config = {},
15908
15972
  ...chatProps
@@ -15910,7 +15974,7 @@ function HustleChatWidget({
15910
15974
  const {
15911
15975
  position = "bottom-right",
15912
15976
  size = "md",
15913
- title = "Chat",
15977
+ title = "Agent Hustle",
15914
15978
  defaultOpen = false,
15915
15979
  launcherIcon,
15916
15980
  offset = { x: 24, y: 24 },
@@ -15985,7 +16049,7 @@ function HustleChatWidget({
15985
16049
  style: {
15986
16050
  ...widgetStyles.panel,
15987
16051
  ...positionStyles.panel,
15988
- ...size === "full" ? widgetStyles.panelFull : {
16052
+ ...size === "full" ? widgetStyles.panelFull : size === "sideDock" ? widgetStyles.panelSideDock : {
15989
16053
  width: sizeConfig.width,
15990
16054
  height: sizeConfig.height
15991
16055
  },
@@ -16003,35 +16067,70 @@ function HustleChatWidget({
16003
16067
  padding: `${tokens.spacing.md} ${tokens.spacing.lg}`,
16004
16068
  background: tokens.colors.bgPrimary,
16005
16069
  borderBottom: `1px solid ${tokens.colors.borderPrimary}`,
16006
- borderRadius: `${tokens.radius.xl} ${tokens.radius.xl} 0 0`,
16070
+ borderRadius: size === "sideDock" || size === "full" ? 0 : `${tokens.radius.xl} ${tokens.radius.xl} 0 0`,
16007
16071
  flexShrink: 0
16008
16072
  },
16009
16073
  children: [
16010
- /* @__PURE__ */ jsx(
16011
- "span",
16012
- {
16013
- style: {
16014
- fontWeight: tokens.typography.fontWeightSemibold,
16015
- color: tokens.colors.textPrimary,
16016
- fontSize: tokens.typography.fontSizeMd
16017
- },
16018
- children: title
16019
- }
16020
- ),
16021
- /* @__PURE__ */ jsx(
16022
- "button",
16023
- {
16024
- onClick: toggle,
16025
- onMouseEnter: () => setCloseHovered(true),
16026
- onMouseLeave: () => setCloseHovered(false),
16027
- style: {
16028
- ...widgetStyles.closeBtn,
16029
- ...closeHovered ? widgetStyles.closeBtnHover : {}
16030
- },
16031
- title: "Close chat",
16032
- children: size === "full" ? /* @__PURE__ */ jsx(MinimizeIcon, {}) : /* @__PURE__ */ jsx(CloseIcon, {})
16033
- }
16034
- )
16074
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: tokens.spacing.md }, children: [
16075
+ /* @__PURE__ */ jsx(AgentHustleAvatar, { size: 32 }),
16076
+ /* @__PURE__ */ jsxs("div", { children: [
16077
+ /* @__PURE__ */ jsx(
16078
+ "span",
16079
+ {
16080
+ style: {
16081
+ display: "block",
16082
+ fontWeight: tokens.typography.fontWeightSemibold,
16083
+ color: tokens.colors.textPrimary,
16084
+ fontSize: tokens.typography.fontSizeMd
16085
+ },
16086
+ children: title
16087
+ }
16088
+ ),
16089
+ /* @__PURE__ */ jsx(
16090
+ "span",
16091
+ {
16092
+ style: {
16093
+ display: "block",
16094
+ fontSize: tokens.typography.fontSizeXs,
16095
+ color: tokens.colors.textTertiary
16096
+ },
16097
+ children: "Protocol Companion"
16098
+ }
16099
+ )
16100
+ ] })
16101
+ ] }),
16102
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: tokens.spacing.xs }, children: [
16103
+ size === "sideDock" && /* @__PURE__ */ jsx(
16104
+ "button",
16105
+ {
16106
+ onClick: () => {
16107
+ },
16108
+ onMouseEnter: () => {
16109
+ },
16110
+ onMouseLeave: () => {
16111
+ },
16112
+ style: {
16113
+ ...widgetStyles.closeBtn
16114
+ },
16115
+ title: "Expand",
16116
+ children: /* @__PURE__ */ jsx(ExpandIcon, {})
16117
+ }
16118
+ ),
16119
+ /* @__PURE__ */ jsx(
16120
+ "button",
16121
+ {
16122
+ onClick: toggle,
16123
+ onMouseEnter: () => setCloseHovered(true),
16124
+ onMouseLeave: () => setCloseHovered(false),
16125
+ style: {
16126
+ ...widgetStyles.closeBtn,
16127
+ ...closeHovered ? widgetStyles.closeBtnHover : {}
16128
+ },
16129
+ title: "Close chat",
16130
+ children: size === "full" || size === "sideDock" ? /* @__PURE__ */ jsx(CloseIcon, {}) : /* @__PURE__ */ jsx(CloseIcon, {})
16131
+ }
16132
+ )
16133
+ ] })
16035
16134
  ]
16036
16135
  }
16037
16136
  ),
@@ -16039,7 +16138,7 @@ function HustleChatWidget({
16039
16138
  ]
16040
16139
  }
16041
16140
  ),
16042
- (size !== "full" || !isOpen) && /* @__PURE__ */ jsxs(
16141
+ (size !== "full" && size !== "sideDock" || !isOpen) && /* @__PURE__ */ jsxs(
16043
16142
  "button",
16044
16143
  {
16045
16144
  onClick: toggle,
@@ -16055,7 +16154,7 @@ function HustleChatWidget({
16055
16154
  title: isOpen ? "Close chat" : "Open chat",
16056
16155
  "aria-label": isOpen ? "Close chat" : "Open chat",
16057
16156
  children: [
16058
- launcherIcon || /* @__PURE__ */ jsx(ChatIcon, {}),
16157
+ launcherIcon || /* @__PURE__ */ jsx(AgentHustleAvatar, { size: 40 }),
16059
16158
  showBadge && badgeContent && !isOpen && /* @__PURE__ */ jsx("span", { style: widgetStyles.badge, children: badgeContent })
16060
16159
  ]
16061
16160
  }
@@ -16149,6 +16248,6 @@ var DEFAULTS = {
16149
16248
  EMBLEM_MODAL_URL: "https://emblemvault.ai/connect"
16150
16249
  };
16151
16250
 
16152
- export { DEFAULTS, HustleChat, HustleChatWidget, HustleProvider, MarkdownContent, STORAGE_KEYS, availablePlugins, debounce, formatFileSize, getAvailablePlugin, hydratePlugin, migrateFunPlugin, pluginRegistry, predictionMarketPlugin, tokens, useHustle, usePlugins };
16251
+ export { AGENT_HUSTLE_ICON, DEFAULTS, HustleChat, HustleChatWidget, HustleProvider, MarkdownContent, STORAGE_KEYS, availablePlugins, debounce, formatFileSize, getAvailablePlugin, hydratePlugin, migrateFunPlugin, pluginRegistry, predictionMarketPlugin, tokens, useHustle, usePlugins };
16153
16252
  //# sourceMappingURL=hustle-react.js.map
16154
16253
  //# sourceMappingURL=hustle-react.js.map