@circuitwall/jarela 1.9.2 → 1.9.3

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 (57) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +1 -1
  3. package/.next/standalone/.next/build-manifest.json +2 -2
  4. package/.next/standalone/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  6. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  16. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  17. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  18. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  19. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  20. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  21. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  22. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  23. package/.next/standalone/.next/server/app/page.js +688 -427
  24. package/.next/standalone/.next/server/app/page.js.map +1 -1
  25. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app-paths-manifest.json +1 -1
  28. package/.next/standalone/.next/server/chunks/4045.js.map +1 -1
  29. package/.next/standalone/.next/server/middleware-build-manifest.js +2 -2
  30. package/.next/standalone/.next/server/pages/404.html +2 -2
  31. package/.next/standalone/.next/server/pages/500.html +1 -1
  32. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  33. package/.next/standalone/.next/static/chunks/2747-4a6287cacd57d231.js.map +1 -1
  34. package/.next/standalone/.next/static/chunks/{1998-31a617131197a83a.js → 962-fe2372e00f85e23a.js} +111 -2
  35. package/.next/standalone/.next/static/chunks/962-fe2372e00f85e23a.js.map +1 -0
  36. package/.next/standalone/.next/static/chunks/app/layout-84c6f211a7a1ca36.js.map +1 -1
  37. package/.next/standalone/.next/static/chunks/app/{page-afdef9bd1108a656.js → page-c5b9f4407416c3f9.js} +332 -154
  38. package/.next/standalone/.next/static/chunks/app/page-c5b9f4407416c3f9.js.map +1 -0
  39. package/.next/standalone/.next/static/css/b8e04d59a2bfff04.css +5 -0
  40. package/.next/standalone/.next/static/css/b8e04d59a2bfff04.css.map +1 -0
  41. package/.next/standalone/package.json +1 -1
  42. package/CHANGELOG.md +25 -0
  43. package/components/credentials/CredentialsPanel.tsx +1 -1
  44. package/components/layout/AppShell.tsx +6 -0
  45. package/components/layout/MenuPanel.tsx +15 -91
  46. package/components/settings/AppearancePanel.tsx +93 -0
  47. package/components/settings/SettingsPanel.tsx +94 -0
  48. package/contexts/AppContext.tsx +1 -1
  49. package/hooks/useUrlSync.ts +1 -1
  50. package/lib/ui/navigate.ts +1 -1
  51. package/package.json +1 -1
  52. package/.next/standalone/.next/static/chunks/1998-31a617131197a83a.js.map +0 -1
  53. package/.next/standalone/.next/static/chunks/app/page-afdef9bd1108a656.js.map +0 -1
  54. package/.next/standalone/.next/static/css/44f9bbea39fef458.css +0 -5
  55. package/.next/standalone/.next/static/css/44f9bbea39fef458.css.map +0 -1
  56. /package/.next/standalone/.next/static/{rr-Rxxi6kkXe1Bw8-Hzq2 → EOkgU73YJOpR-vFcKMgL0}/_buildManifest.js +0 -0
  57. /package/.next/standalone/.next/static/{rr-Rxxi6kkXe1Bw8-Hzq2 → EOkgU73YJOpR-vFcKMgL0}/_ssgManifest.js +0 -0
@@ -89,7 +89,17 @@ function useTheme() {
89
89
 
90
90
  /***/ }),
91
91
 
92
- /***/ 8280:
92
+ /***/ 9852:
93
+ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
94
+
95
+ Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9998));
96
+ ;
97
+ Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 2283));
98
+
99
+
100
+ /***/ }),
101
+
102
+ /***/ 9998:
93
103
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
94
104
 
95
105
  "use strict";
@@ -608,7 +618,8 @@ const TABS = [
608
618
  "bridges",
609
619
  "profile",
610
620
  "harness",
611
- "documents"
621
+ "documents",
622
+ "settings"
612
623
  ];
613
624
  function parseHref(input) {
614
625
  if (!input) return {
@@ -682,7 +693,8 @@ const useUrlSync_TABS = [
682
693
  "tasks",
683
694
  "bridges",
684
695
  "profile",
685
- "harness"
696
+ "harness",
697
+ "settings"
686
698
  ];
687
699
  function useUrlSync() {
688
700
  const { state, dispatch } = (0,AppContext/* useAppContext */.U)();
@@ -11691,7 +11703,7 @@ const PRESET_CATEGORIES = {
11691
11703
  }
11692
11704
 
11693
11705
  ;// ./components/credentials/CredentialsPanel.tsx
11694
- /* __next_internal_client_entry_do_not_use__ CredentialsPanel auto */
11706
+ /* __next_internal_client_entry_do_not_use__ CredentialsPanel,CredentialsListPanel auto */
11695
11707
 
11696
11708
 
11697
11709
 
@@ -24228,6 +24240,293 @@ async function EnvVarsPanel_pollUntilUp(timeoutMs = 30000) {
24228
24240
  throw new Error("server did not return");
24229
24241
  }
24230
24242
 
24243
+ // EXTERNAL MODULE: ./node_modules/lucide-react/dist/esm/icons/palette.mjs
24244
+ var palette = __webpack_require__(2920);
24245
+ // EXTERNAL MODULE: ./node_modules/lucide-react/dist/esm/icons/shapes.mjs
24246
+ var shapes = __webpack_require__(1827);
24247
+ // EXTERNAL MODULE: ./node_modules/lucide-react/dist/esm/icons/scroll-text.mjs
24248
+ var scroll_text = __webpack_require__(2540);
24249
+ // EXTERNAL MODULE: ./node_modules/lucide-react/dist/esm/icons/sun.mjs
24250
+ var sun = __webpack_require__(7603);
24251
+ // EXTERNAL MODULE: ./node_modules/lucide-react/dist/esm/icons/moon.mjs
24252
+ var moon = __webpack_require__(8890);
24253
+ // EXTERNAL MODULE: ./node_modules/lucide-react/dist/esm/icons/monitor.mjs
24254
+ var monitor = __webpack_require__(299);
24255
+ // EXTERNAL MODULE: ./contexts/ThemeContext.tsx
24256
+ var ThemeContext = __webpack_require__(737);
24257
+ ;// ./components/settings/AppearancePanel.tsx
24258
+ /* __next_internal_client_entry_do_not_use__ AppearancePanel auto */
24259
+
24260
+
24261
+
24262
+ // Visual + chrome settings that used to live in the MenuPanel footer
24263
+ // (theme) and the top of the menu (Workspace mode). Hoisted here so
24264
+ // every settings surface has the same shape: a Settings sub-tab with
24265
+ // its own header.
24266
+ function AppearancePanel() {
24267
+ const { state, dispatch } = (0,AppContext/* useAppContext */.U)();
24268
+ const { theme, setTheme } = (0,ThemeContext/* useTheme */.D)();
24269
+ const isFullMode = state.experienceMode === "full";
24270
+ const themeOptions = [
24271
+ {
24272
+ value: "light",
24273
+ label: "Light",
24274
+ icon: /*#__PURE__*/ (0,jsx_runtime.jsx)(sun/* default */.A, {
24275
+ size: 14
24276
+ }),
24277
+ description: "Bright UI; ignores system preference."
24278
+ },
24279
+ {
24280
+ value: "dark",
24281
+ label: "Dark",
24282
+ icon: /*#__PURE__*/ (0,jsx_runtime.jsx)(moon/* default */.A, {
24283
+ size: 14
24284
+ }),
24285
+ description: "Dimmed UI; ignores system preference."
24286
+ },
24287
+ {
24288
+ value: "system",
24289
+ label: "System",
24290
+ icon: /*#__PURE__*/ (0,jsx_runtime.jsx)(monitor/* default */.A, {
24291
+ size: 14
24292
+ }),
24293
+ description: "Follow the OS-level light/dark preference."
24294
+ }
24295
+ ];
24296
+ const modeOptions = [
24297
+ {
24298
+ value: "essential",
24299
+ label: "Essential",
24300
+ description: "Day-to-day surfaces only. Hides Memory, Bridges, Harness, Logs, Defaults from the menu."
24301
+ },
24302
+ {
24303
+ value: "full",
24304
+ label: "Full",
24305
+ description: "Everything visible: engine-room tabs, power-user settings, all advanced sub-tabs."
24306
+ }
24307
+ ];
24308
+ function setMode(mode) {
24309
+ if (mode === state.experienceMode) return;
24310
+ dispatch({
24311
+ type: "SET_EXPERIENCE_MODE",
24312
+ mode
24313
+ });
24314
+ }
24315
+ return /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", {
24316
+ className: "flex flex-col h-full",
24317
+ children: [
24318
+ /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", {
24319
+ className: "border-b border-border px-4 py-3 flex items-center gap-2",
24320
+ children: [
24321
+ /*#__PURE__*/ (0,jsx_runtime.jsx)(palette/* default */.A, {
24322
+ size: 14,
24323
+ className: "text-fg-subtle"
24324
+ }),
24325
+ /*#__PURE__*/ (0,jsx_runtime.jsx)("h2", {
24326
+ className: "text-sm font-semibold text-fg mr-auto",
24327
+ children: "Appearance"
24328
+ })
24329
+ ]
24330
+ }),
24331
+ /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", {
24332
+ className: "flex-1 overflow-y-auto px-4 py-4 space-y-6",
24333
+ children: [
24334
+ /*#__PURE__*/ (0,jsx_runtime.jsxs)("section", {
24335
+ children: [
24336
+ /*#__PURE__*/ (0,jsx_runtime.jsx)("h3", {
24337
+ className: "text-[11px] uppercase tracking-wide text-fg-faint mb-2 px-1",
24338
+ children: "Theme"
24339
+ }),
24340
+ /*#__PURE__*/ (0,jsx_runtime.jsx)("div", {
24341
+ className: "grid grid-cols-1 sm:grid-cols-3 gap-2",
24342
+ children: themeOptions.map((o)=>{
24343
+ const active = theme === o.value;
24344
+ return /*#__PURE__*/ (0,jsx_runtime.jsxs)("button", {
24345
+ onClick: ()=>setTheme(o.value),
24346
+ "aria-pressed": active,
24347
+ className: `text-left rounded-lg border px-3 py-2.5 transition-colors ${active ? "border-accent bg-accent/10 text-fg" : "border-border bg-surface-2 text-fg-muted hover:bg-surface-3"}`,
24348
+ children: [
24349
+ /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", {
24350
+ className: "flex items-center gap-2 mb-1",
24351
+ children: [
24352
+ /*#__PURE__*/ (0,jsx_runtime.jsx)("span", {
24353
+ className: "text-fg-subtle",
24354
+ children: o.icon
24355
+ }),
24356
+ /*#__PURE__*/ (0,jsx_runtime.jsx)("span", {
24357
+ className: "text-sm font-medium text-fg",
24358
+ children: o.label
24359
+ })
24360
+ ]
24361
+ }),
24362
+ /*#__PURE__*/ (0,jsx_runtime.jsx)("p", {
24363
+ className: "text-[11px] text-fg-faint leading-snug",
24364
+ children: o.description
24365
+ })
24366
+ ]
24367
+ }, o.value);
24368
+ })
24369
+ })
24370
+ ]
24371
+ }),
24372
+ /*#__PURE__*/ (0,jsx_runtime.jsxs)("section", {
24373
+ children: [
24374
+ /*#__PURE__*/ (0,jsx_runtime.jsx)("h3", {
24375
+ className: "text-[11px] uppercase tracking-wide text-fg-faint mb-2 px-1",
24376
+ children: "Workspace mode"
24377
+ }),
24378
+ /*#__PURE__*/ (0,jsx_runtime.jsx)("div", {
24379
+ className: "grid grid-cols-1 sm:grid-cols-2 gap-2",
24380
+ children: modeOptions.map((o)=>{
24381
+ const active = isFullMode ? o.value === "full" : o.value === "essential";
24382
+ return /*#__PURE__*/ (0,jsx_runtime.jsxs)("button", {
24383
+ onClick: ()=>setMode(o.value),
24384
+ "aria-pressed": active,
24385
+ className: `text-left rounded-lg border px-3 py-2.5 transition-colors ${active ? "border-accent bg-accent/10 text-fg" : "border-border bg-surface-2 text-fg-muted hover:bg-surface-3"}`,
24386
+ children: [
24387
+ /*#__PURE__*/ (0,jsx_runtime.jsx)("div", {
24388
+ className: "text-sm font-medium text-fg mb-1",
24389
+ children: o.label
24390
+ }),
24391
+ /*#__PURE__*/ (0,jsx_runtime.jsx)("p", {
24392
+ className: "text-[11px] text-fg-faint leading-snug",
24393
+ children: o.description
24394
+ })
24395
+ ]
24396
+ }, o.value);
24397
+ })
24398
+ })
24399
+ ]
24400
+ })
24401
+ ]
24402
+ })
24403
+ ]
24404
+ });
24405
+ }
24406
+
24407
+ ;// ./components/settings/SettingsPanel.tsx
24408
+ /* __next_internal_client_entry_do_not_use__ SettingsPanel auto */
24409
+
24410
+
24411
+
24412
+
24413
+
24414
+
24415
+
24416
+
24417
+
24418
+ const SettingsPanel_SUBS = [
24419
+ {
24420
+ id: "appearance",
24421
+ label: "Appearance",
24422
+ icon: /*#__PURE__*/ (0,jsx_runtime.jsx)(palette/* default */.A, {
24423
+ size: 13
24424
+ })
24425
+ },
24426
+ {
24427
+ id: "networking",
24428
+ label: "Networking",
24429
+ icon: /*#__PURE__*/ (0,jsx_runtime.jsx)(globe/* default */.A, {
24430
+ size: 13
24431
+ })
24432
+ },
24433
+ {
24434
+ id: "credentials",
24435
+ label: "Credentials",
24436
+ icon: /*#__PURE__*/ (0,jsx_runtime.jsx)(key/* default */.A, {
24437
+ size: 13
24438
+ })
24439
+ },
24440
+ {
24441
+ id: "models",
24442
+ label: "Models",
24443
+ icon: /*#__PURE__*/ (0,jsx_runtime.jsx)(cpu/* default */.A, {
24444
+ size: 13
24445
+ })
24446
+ },
24447
+ {
24448
+ id: "harness",
24449
+ label: "Harness",
24450
+ icon: /*#__PURE__*/ (0,jsx_runtime.jsx)(shapes/* default */.A, {
24451
+ size: 13
24452
+ }),
24453
+ advancedOnly: true
24454
+ },
24455
+ {
24456
+ id: "logs",
24457
+ label: "Logs",
24458
+ icon: /*#__PURE__*/ (0,jsx_runtime.jsx)(scroll_text/* default */.A, {
24459
+ size: 13
24460
+ }),
24461
+ advancedOnly: true
24462
+ },
24463
+ {
24464
+ id: "defaults",
24465
+ label: "Defaults",
24466
+ icon: /*#__PURE__*/ (0,jsx_runtime.jsx)(server_cog/* default */.A, {
24467
+ size: 13
24468
+ }),
24469
+ advancedOnly: true
24470
+ }
24471
+ ];
24472
+ const VALID = new Set(SettingsPanel_SUBS.map((s)=>s.id));
24473
+ function parseSub(raw) {
24474
+ if (raw && VALID.has(raw)) return raw;
24475
+ return "appearance";
24476
+ }
24477
+ function SettingsPanel() {
24478
+ const { state, dispatch } = (0,AppContext/* useAppContext */.U)();
24479
+ const isFullMode = state.experienceMode === "full";
24480
+ const active = parseSub(state.selectedItem.settings);
24481
+ const setSub = (s)=>dispatch({
24482
+ type: "SET_SELECTION",
24483
+ tab: "settings",
24484
+ itemId: s
24485
+ });
24486
+ const visibleSubs = SettingsPanel_SUBS.filter((s)=>isFullMode || !s.advancedOnly);
24487
+ return /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", {
24488
+ className: "flex flex-col h-full min-h-0",
24489
+ children: [
24490
+ /*#__PURE__*/ (0,jsx_runtime.jsx)("div", {
24491
+ role: "tablist",
24492
+ "aria-label": "Settings sub-section",
24493
+ className: "flex gap-1 border-b border-[var(--border)] bg-[var(--bg-secondary)] px-3 pt-2 overflow-x-auto",
24494
+ children: visibleSubs.map((s)=>{
24495
+ const selected = s.id === active;
24496
+ return /*#__PURE__*/ (0,jsx_runtime.jsxs)("button", {
24497
+ role: "tab",
24498
+ type: "button",
24499
+ "aria-selected": selected,
24500
+ onClick: ()=>setSub(s.id),
24501
+ className: "inline-flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-t-md border-b-2 -mb-px transition-colors whitespace-nowrap " + (selected ? "border-[var(--accent)] text-[var(--text-primary)] bg-[var(--bg-primary)]" : "border-transparent text-[var(--text-secondary)] hover:text-[var(--text-primary)]"),
24502
+ children: [
24503
+ /*#__PURE__*/ (0,jsx_runtime.jsx)("span", {
24504
+ className: "text-fg-subtle",
24505
+ children: s.icon
24506
+ }),
24507
+ /*#__PURE__*/ (0,jsx_runtime.jsx)("span", {
24508
+ children: s.label
24509
+ })
24510
+ ]
24511
+ }, s.id);
24512
+ })
24513
+ }),
24514
+ /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", {
24515
+ className: "flex-1 min-h-0 overflow-hidden",
24516
+ children: [
24517
+ active === "appearance" && /*#__PURE__*/ (0,jsx_runtime.jsx)(AppearancePanel, {}),
24518
+ active === "networking" && /*#__PURE__*/ (0,jsx_runtime.jsx)(NetworkPanel, {}),
24519
+ active === "credentials" && /*#__PURE__*/ (0,jsx_runtime.jsx)(CredentialsListPanel, {}),
24520
+ active === "models" && /*#__PURE__*/ (0,jsx_runtime.jsx)(ModelsPanel, {}),
24521
+ active === "harness" && /*#__PURE__*/ (0,jsx_runtime.jsx)(HarnessPanel, {}),
24522
+ active === "logs" && /*#__PURE__*/ (0,jsx_runtime.jsx)(LogsPanel, {}),
24523
+ active === "defaults" && /*#__PURE__*/ (0,jsx_runtime.jsx)(EnvVarsPanel, {})
24524
+ ]
24525
+ })
24526
+ ]
24527
+ });
24528
+ }
24529
+
24231
24530
  ;// ./components/ui/HeaderActivity.tsx
24232
24531
  /* __next_internal_client_entry_do_not_use__ HeaderActivity auto */
24233
24532
 
@@ -25323,18 +25622,8 @@ var message_square = __webpack_require__(5494);
25323
25622
  var chart_column = __webpack_require__(4774);
25324
25623
  // EXTERNAL MODULE: ./node_modules/lucide-react/dist/esm/icons/brain.mjs
25325
25624
  var brain = __webpack_require__(5045);
25326
- // EXTERNAL MODULE: ./node_modules/lucide-react/dist/esm/icons/shapes.mjs
25327
- var shapes = __webpack_require__(1827);
25328
- // EXTERNAL MODULE: ./node_modules/lucide-react/dist/esm/icons/scroll-text.mjs
25329
- var scroll_text = __webpack_require__(2540);
25330
- // EXTERNAL MODULE: ./node_modules/lucide-react/dist/esm/icons/sun.mjs
25331
- var sun = __webpack_require__(7603);
25332
- // EXTERNAL MODULE: ./node_modules/lucide-react/dist/esm/icons/moon.mjs
25333
- var moon = __webpack_require__(8890);
25334
- // EXTERNAL MODULE: ./node_modules/lucide-react/dist/esm/icons/monitor.mjs
25335
- var monitor = __webpack_require__(299);
25336
- // EXTERNAL MODULE: ./contexts/ThemeContext.tsx
25337
- var ThemeContext = __webpack_require__(737);
25625
+ // EXTERNAL MODULE: ./node_modules/lucide-react/dist/esm/icons/settings.mjs
25626
+ var settings = __webpack_require__(8074);
25338
25627
  ;// ./components/layout/MenuPanel.tsx
25339
25628
  /* __next_internal_client_entry_do_not_use__ MenuPanel auto */
25340
25629
 
@@ -25342,7 +25631,6 @@ var ThemeContext = __webpack_require__(737);
25342
25631
 
25343
25632
 
25344
25633
 
25345
-
25346
25634
  const TAB_ICONS = {
25347
25635
  chat: /*#__PURE__*/ (0,jsx_runtime.jsx)(message_square/* default */.A, {
25348
25636
  size: 13
@@ -25391,6 +25679,9 @@ const TAB_ICONS = {
25391
25679
  }),
25392
25680
  env: /*#__PURE__*/ (0,jsx_runtime.jsx)(server_cog/* default */.A, {
25393
25681
  size: 13
25682
+ }),
25683
+ settings: /*#__PURE__*/ (0,jsx_runtime.jsx)(settings/* default */.A, {
25684
+ size: 13
25394
25685
  })
25395
25686
  };
25396
25687
  const TAB_TITLES = {
@@ -25409,7 +25700,8 @@ const TAB_TITLES = {
25409
25700
  profile: "Profile",
25410
25701
  harness: "Harness",
25411
25702
  logs: "Logs",
25412
- env: "Defaults"
25703
+ env: "Defaults",
25704
+ settings: "Settings"
25413
25705
  };
25414
25706
  const TAB_SHORT = {
25415
25707
  chat: "Chat",
@@ -25427,11 +25719,14 @@ const TAB_SHORT = {
25427
25719
  profile: "Me",
25428
25720
  harness: "Test",
25429
25721
  logs: "Logs",
25430
- env: "Defaults"
25722
+ env: "Defaults",
25723
+ settings: "Setup"
25431
25724
  };
25432
- // Two-tier menu. "Common" surfaces the day-to-day verbs plus the most
25433
- // relevant configuration touchpoints. "Advanced" hides the less-frequently
25434
- // used engine-room surfaces behind a collapsible header.
25725
+ // Two-tier menu. "Common" surfaces the day-to-day verbs. Settings is
25726
+ // the single home for previously top-level chrome (credentials, models,
25727
+ // harness, logs, defaults, appearance, networking) those legacy Tab
25728
+ // values still exist for deep-link compat but no longer appear in this
25729
+ // menu grid.
25435
25730
  //
25436
25731
  // Capability-presence surfaces (documents, memory, MCP, extensions,
25437
25732
  // bridges, built-in tool categories) all live under the "Tools" tab now —
@@ -25439,28 +25734,16 @@ const TAB_SHORT = {
25439
25734
  // answering the same question: "what can the agent see / do?". The legacy
25440
25735
  // top-level Tab entries remain wired so deep-links (?tab=documents&item=…)
25441
25736
  // still resolve, but they're hidden from the menu grid.
25442
- //
25443
- // "credentials" is the single home for every auth surface — saved API
25444
- // keys + built-in integrations (Gmail, GitHub, Atlassian…) live there as
25445
- // sub-tabs.
25446
- //
25447
- // "models" lives in Advanced — most users let the default model do its
25448
- // job; switching providers is power-user territory.
25449
25737
  const COMMON_TABS = [
25450
25738
  "chat",
25451
25739
  "dashboard",
25452
25740
  "agents",
25453
- "credentials",
25454
25741
  "tools",
25455
25742
  "tasks",
25456
- "profile"
25457
- ];
25458
- const ADVANCED_TABS = [
25459
- "models",
25460
- "harness",
25461
- "logs",
25462
- "env"
25743
+ "profile",
25744
+ "settings"
25463
25745
  ];
25746
+ const ADVANCED_TABS = [];
25464
25747
  const ADVANCED_KEY = "jarela.menu.advanced";
25465
25748
  const MenuPanel_GRADIENTS = [
25466
25749
  "from-violet-500 to-indigo-600",
@@ -25484,7 +25767,8 @@ const TAB_ACCENT = {
25484
25767
  tools: "from-emerald-500/20 to-lime-500/5",
25485
25768
  harness: "from-orange-500/20 to-amber-500/5",
25486
25769
  logs: "from-slate-500/20 to-zinc-500/5",
25487
- env: "from-teal-500/20 to-cyan-500/5"
25770
+ env: "from-teal-500/20 to-cyan-500/5",
25771
+ settings: "from-slate-500/20 to-zinc-500/5"
25488
25772
  };
25489
25773
  function avatarGradient(id) {
25490
25774
  let h = 0;
@@ -25576,15 +25860,8 @@ function AgentSessionList({ activeAgentId, onSelect }) {
25576
25860
  });
25577
25861
  }
25578
25862
  function MenuPanel({ activeTab, agentId, onClose, onAgentChange, onSetTab }) {
25579
- const { state, dispatch } = (0,AppContext/* useAppContext */.U)();
25863
+ const { state } = (0,AppContext/* useAppContext */.U)();
25580
25864
  const isFullMode = state.experienceMode === "full";
25581
- const setMode = (mode)=>{
25582
- if (mode === "full" === isFullMode) return;
25583
- dispatch({
25584
- type: "SET_EXPERIENCE_MODE",
25585
- mode
25586
- });
25587
- };
25588
25865
  // Advanced section starts collapsed once the user has dismissed it
25589
25866
  // once (persisted to localStorage). Defaults to *expanded* on first
25590
25867
  // boot so the engine room is visible to power users out of the box.
@@ -25649,42 +25926,10 @@ function MenuPanel({ activeTab, agentId, onClose, onAgentChange, onSetTab }) {
25649
25926
  },
25650
25927
  children: [
25651
25928
  /*#__PURE__*/ (0,jsx_runtime.jsx)("div", {
25652
- className: "px-3 pt-2 pb-1 border-b border-border/60 bg-gradient-to-r from-surface-2/50 to-transparent",
25653
- children: /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", {
25654
- className: "flex items-center justify-between gap-2",
25655
- children: [
25656
- /*#__PURE__*/ (0,jsx_runtime.jsx)("span", {
25657
- className: "text-[10px] uppercase tracking-wide text-fg-faint",
25658
- children: "Workspace mode"
25659
- }),
25660
- /*#__PURE__*/ (0,jsx_runtime.jsx)("div", {
25661
- role: "radiogroup",
25662
- "aria-label": "Workspace mode",
25663
- className: "inline-flex items-center rounded-full border border-border bg-surface-3 p-0.5",
25664
- children: [
25665
- "essential",
25666
- "full"
25667
- ].map((mode)=>{
25668
- const active = mode === "full" === isFullMode;
25669
- return /*#__PURE__*/ (0,jsx_runtime.jsx)("button", {
25670
- type: "button",
25671
- role: "radio",
25672
- "aria-checked": active,
25673
- onClick: ()=>setMode(mode),
25674
- title: active ? `${mode} mode (current)` : `Switch to ${mode} mode`,
25675
- className: `control-tap text-[10px] uppercase tracking-wide px-2 py-0.5 rounded-full transition-colors ${active ? "bg-accent/15 text-fg-subtle" : "text-fg-faint hover:text-fg-muted"}`,
25676
- children: mode
25677
- }, mode);
25678
- })
25679
- })
25680
- ]
25681
- })
25682
- }),
25683
- /*#__PURE__*/ (0,jsx_runtime.jsx)("div", {
25684
- className: "grid grid-cols-4 sm:grid-cols-6 gap-1.5 px-2 py-2 border-b border-border shrink-0",
25929
+ className: "grid grid-cols-4 sm:grid-cols-6 gap-1.5 px-2 py-2 border-b border-border shrink-0 bg-gradient-to-r from-surface-2/50 to-transparent",
25685
25930
  children: COMMON_TABS.map(renderTabButton)
25686
25931
  }),
25687
- isFullMode && /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", {
25932
+ isFullMode && ADVANCED_TABS.length > 0 && /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", {
25688
25933
  className: "border-b border-border shrink-0",
25689
25934
  children: [
25690
25935
  /*#__PURE__*/ (0,jsx_runtime.jsxs)("button", {
@@ -25719,68 +25964,6 @@ function MenuPanel({ activeTab, agentId, onClose, onAgentChange, onSetTab }) {
25719
25964
  onClose();
25720
25965
  }
25721
25966
  })
25722
- }),
25723
- /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", {
25724
- className: "border-t border-border px-3 py-3 shrink-0 bg-surface-1/30",
25725
- children: [
25726
- /*#__PURE__*/ (0,jsx_runtime.jsx)("p", {
25727
- className: "text-[11px] text-fg-faint mb-1.5 font-medium uppercase tracking-wide",
25728
- children: "Display"
25729
- }),
25730
- /*#__PURE__*/ (0,jsx_runtime.jsx)("div", {
25731
- className: "flex flex-col gap-1.5",
25732
- children: /*#__PURE__*/ (0,jsx_runtime.jsx)(ThemePicker, {})
25733
- })
25734
- ]
25735
- })
25736
- ]
25737
- });
25738
- }
25739
- function ThemePicker() {
25740
- const { theme, setTheme } = (0,ThemeContext/* useTheme */.D)();
25741
- const options = [
25742
- {
25743
- value: "light",
25744
- label: "Light",
25745
- icon: /*#__PURE__*/ (0,jsx_runtime.jsx)(sun/* default */.A, {
25746
- size: 12
25747
- })
25748
- },
25749
- {
25750
- value: "dark",
25751
- label: "Dark",
25752
- icon: /*#__PURE__*/ (0,jsx_runtime.jsx)(moon/* default */.A, {
25753
- size: 12
25754
- })
25755
- },
25756
- {
25757
- value: "system",
25758
- label: "System",
25759
- icon: /*#__PURE__*/ (0,jsx_runtime.jsx)(monitor/* default */.A, {
25760
- size: 12
25761
- })
25762
- }
25763
- ];
25764
- return /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", {
25765
- className: "flex items-center gap-2 text-xs text-fg-muted rounded-lg border border-border bg-surface-3/70 px-2.5 py-2",
25766
- children: [
25767
- /*#__PURE__*/ (0,jsx_runtime.jsx)("span", {
25768
- className: "shrink-0",
25769
- children: "Theme"
25770
- }),
25771
- /*#__PURE__*/ (0,jsx_runtime.jsx)("div", {
25772
- className: "flex flex-1 rounded-lg border border-border overflow-hidden bg-surface",
25773
- children: options.map((o)=>/*#__PURE__*/ (0,jsx_runtime.jsxs)("button", {
25774
- onClick: ()=>setTheme(o.value),
25775
- title: o.label,
25776
- className: `control-tap flex-1 inline-flex items-center justify-center gap-1 py-1 text-[11px] transition-colors ${theme === o.value ? "bg-surface-3 text-fg shadow-sm" : "text-fg-faint hover:text-fg-muted hover:bg-surface-3/50"}`,
25777
- children: [
25778
- o.icon,
25779
- /*#__PURE__*/ (0,jsx_runtime.jsx)("span", {
25780
- children: o.label
25781
- })
25782
- ]
25783
- }, o.value))
25784
25967
  })
25785
25968
  ]
25786
25969
  });
@@ -27910,6 +28093,7 @@ function DashboardPanel() {
27910
28093
 
27911
28094
 
27912
28095
 
28096
+
27913
28097
 
27914
28098
 
27915
28099
  const AppShell_ADVANCED_TABS = new Set([
@@ -28396,6 +28580,10 @@ function AppShell() {
28396
28580
  mode: state.activeTab === "env" ? "visible" : "hidden",
28397
28581
  children: /*#__PURE__*/ (0,jsx_runtime.jsx)(EnvVarsPanel, {})
28398
28582
  }),
28583
+ mountedTabs.has("settings") && /*#__PURE__*/ (0,jsx_runtime.jsx)(react.Activity, {
28584
+ mode: state.activeTab === "settings" ? "visible" : "hidden",
28585
+ children: /*#__PURE__*/ (0,jsx_runtime.jsx)(SettingsPanel, {})
28586
+ }),
28399
28587
  showMenu && /*#__PURE__*/ (0,jsx_runtime.jsx)("div", {
28400
28588
  className: "fixed left-0 right-0 bottom-0 bg-black/30 backdrop-blur-sm z-30",
28401
28589
  style: {
@@ -28426,24 +28614,14 @@ function AppShell() {
28426
28614
  }
28427
28615
 
28428
28616
 
28429
- /***/ }),
28430
-
28431
- /***/ 9852:
28432
- /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
28433
-
28434
- Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8280));
28435
- ;
28436
- Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 2283));
28437
-
28438
-
28439
28617
  /***/ })
28440
28618
 
28441
28619
  },
28442
28620
  /******/ __webpack_require__ => { // webpackRuntimeModules
28443
28621
  /******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
28444
- /******/ __webpack_require__.O(0, [1973,4502,1998,2747,8441,3457,7358], () => (__webpack_exec__(9852)));
28622
+ /******/ __webpack_require__.O(0, [1973,4502,962,2747,8441,3457,7358], () => (__webpack_exec__(9852)));
28445
28623
  /******/ var __webpack_exports__ = __webpack_require__.O();
28446
28624
  /******/ _N_E = __webpack_exports__;
28447
28625
  /******/ }
28448
28626
  ]);
28449
- //# sourceMappingURL=page-afdef9bd1108a656.js.map
28627
+ //# sourceMappingURL=page-c5b9f4407416c3f9.js.map