@circuitwall/jarela 1.9.1 → 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.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +2 -2
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/page.js +3989 -3805
- package/.next/standalone/.next/server/app/page.js.map +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app-paths-manifest.json +2 -2
- package/.next/standalone/.next/server/chunks/1813.js.map +1 -1
- package/.next/standalone/.next/server/chunks/319.js.map +1 -1
- package/.next/standalone/.next/server/chunks/4045.js.map +1 -1
- package/.next/standalone/.next/server/chunks/4741.js.map +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +2 -2
- package/.next/standalone/.next/server/pages/404.html +2 -2
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/proxy.js.map +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/2747-4a6287cacd57d231.js.map +1 -1
- package/.next/standalone/.next/static/chunks/3457-6d51726379cee3b7.js.map +1 -1
- package/.next/standalone/.next/static/chunks/{1998-31a617131197a83a.js → 962-fe2372e00f85e23a.js} +111 -2
- package/.next/standalone/.next/static/chunks/962-fe2372e00f85e23a.js.map +1 -0
- package/.next/standalone/.next/static/chunks/app/layout-84c6f211a7a1ca36.js.map +1 -1
- package/.next/standalone/.next/static/chunks/app/{page-cd662565eba5ef59.js → page-c5b9f4407416c3f9.js} +3493 -3390
- package/.next/standalone/.next/static/chunks/app/page-c5b9f4407416c3f9.js.map +1 -0
- package/.next/standalone/.next/static/chunks/main-3eb94471f04b2368.js.map +1 -1
- package/.next/standalone/.next/static/css/b8e04d59a2bfff04.css +5 -0
- package/.next/standalone/.next/static/css/b8e04d59a2bfff04.css.map +1 -0
- package/.next/standalone/package.json +1 -1
- package/CHANGELOG.md +47 -0
- package/README.md +6 -6
- package/components/agents/agent-editor/VoiceFields.tsx +1 -1
- package/components/credentials/AddCredentialDialog.tsx +30 -141
- package/components/credentials/CredentialsPanel.tsx +146 -49
- package/components/{integrations/IntegrationsPanel.tsx → credentials/IntegrationCard.tsx} +9 -168
- package/components/documents/AddSourceForm.tsx +4 -4
- package/components/documents/DocumentsPanel.tsx +1 -1
- package/components/integrations/NetworkPanel.tsx +104 -0
- package/components/layout/AppShell.tsx +6 -0
- package/components/layout/MenuPanel.tsx +15 -91
- package/components/profile/ProfileEditor.tsx +1 -1
- package/components/proposals/ApprovalsBanner.tsx +2 -2
- package/components/settings/AppearancePanel.tsx +93 -0
- package/components/settings/SettingsPanel.tsx +94 -0
- package/contexts/AppContext.tsx +1 -1
- package/hooks/useUrlSync.ts +1 -1
- package/lib/ui/navigate.ts +1 -1
- package/package.json +1 -1
- package/.next/standalone/.next/static/chunks/1998-31a617131197a83a.js.map +0 -1
- package/.next/standalone/.next/static/chunks/app/page-cd662565eba5ef59.js.map +0 -1
- package/.next/standalone/.next/static/css/11aaed27d2989cc1.css +0 -5
- package/.next/standalone/.next/static/css/11aaed27d2989cc1.css.map +0 -1
- /package/.next/standalone/.next/static/{tTk-KuLcT7O-E0z6PdMmO → EOkgU73YJOpR-vFcKMgL0}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{tTk-KuLcT7O-E0z6PdMmO → EOkgU73YJOpR-vFcKMgL0}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Cpu, Globe, Key, Palette, ScrollText, ServerCog, Shapes } from "lucide-react";
|
|
3
|
+
import { useAppContext } from "@/contexts/AppContext";
|
|
4
|
+
import { CredentialsListPanel } from "@/components/credentials/CredentialsPanel";
|
|
5
|
+
import { NetworkPanel } from "@/components/integrations/NetworkPanel";
|
|
6
|
+
import { ModelsPanel } from "@/components/models/ModelsPanel";
|
|
7
|
+
import { HarnessPanel } from "@/components/harness/HarnessPanel";
|
|
8
|
+
import { LogsPanel } from "@/components/logs/LogsPanel";
|
|
9
|
+
import { EnvVarsPanel } from "@/components/env/EnvVarsPanel";
|
|
10
|
+
import { AppearancePanel } from "./AppearancePanel";
|
|
11
|
+
|
|
12
|
+
// Settings is the consolidated home for everything that used to live as
|
|
13
|
+
// its own top-level tab (credentials, models, harness, logs, defaults)
|
|
14
|
+
// plus appearance/networking. The individual Tab values still exist so
|
|
15
|
+
// deep links like ?tab=credentials and ?tab=models keep working — this
|
|
16
|
+
// surface is the new top-of-funnel for menu navigation.
|
|
17
|
+
|
|
18
|
+
type Sub =
|
|
19
|
+
| "appearance"
|
|
20
|
+
| "networking"
|
|
21
|
+
| "credentials"
|
|
22
|
+
| "models"
|
|
23
|
+
| "harness"
|
|
24
|
+
| "logs"
|
|
25
|
+
| "defaults";
|
|
26
|
+
|
|
27
|
+
const SUBS: ReadonlyArray<{ id: Sub; label: string; icon: React.ReactNode; advancedOnly?: boolean }> = [
|
|
28
|
+
{ id: "appearance", label: "Appearance", icon: <Palette size={13} /> },
|
|
29
|
+
{ id: "networking", label: "Networking", icon: <Globe size={13} /> },
|
|
30
|
+
{ id: "credentials", label: "Credentials", icon: <Key size={13} /> },
|
|
31
|
+
{ id: "models", label: "Models", icon: <Cpu size={13} /> },
|
|
32
|
+
{ id: "harness", label: "Harness", icon: <Shapes size={13} />, advancedOnly: true },
|
|
33
|
+
{ id: "logs", label: "Logs", icon: <ScrollText size={13} />, advancedOnly: true },
|
|
34
|
+
{ id: "defaults", label: "Defaults", icon: <ServerCog size={13} />, advancedOnly: true },
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
const VALID = new Set<Sub>(SUBS.map((s) => s.id));
|
|
38
|
+
|
|
39
|
+
function parseSub(raw: string | undefined): Sub {
|
|
40
|
+
if (raw && VALID.has(raw as Sub)) return raw as Sub;
|
|
41
|
+
return "appearance";
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function SettingsPanel() {
|
|
45
|
+
const { state, dispatch } = useAppContext();
|
|
46
|
+
const isFullMode = state.experienceMode === "full";
|
|
47
|
+
const active = parseSub(state.selectedItem.settings);
|
|
48
|
+
|
|
49
|
+
const setSub = (s: Sub) =>
|
|
50
|
+
dispatch({ type: "SET_SELECTION", tab: "settings", itemId: s });
|
|
51
|
+
|
|
52
|
+
const visibleSubs = SUBS.filter((s) => isFullMode || !s.advancedOnly);
|
|
53
|
+
|
|
54
|
+
return (
|
|
55
|
+
<div className="flex flex-col h-full min-h-0">
|
|
56
|
+
<div
|
|
57
|
+
role="tablist"
|
|
58
|
+
aria-label="Settings sub-section"
|
|
59
|
+
className="flex gap-1 border-b border-[var(--border)] bg-[var(--bg-secondary)] px-3 pt-2 overflow-x-auto"
|
|
60
|
+
>
|
|
61
|
+
{visibleSubs.map((s) => {
|
|
62
|
+
const selected = s.id === active;
|
|
63
|
+
return (
|
|
64
|
+
<button
|
|
65
|
+
key={s.id}
|
|
66
|
+
role="tab"
|
|
67
|
+
type="button"
|
|
68
|
+
aria-selected={selected}
|
|
69
|
+
onClick={() => setSub(s.id)}
|
|
70
|
+
className={
|
|
71
|
+
"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 " +
|
|
72
|
+
(selected
|
|
73
|
+
? "border-[var(--accent)] text-[var(--text-primary)] bg-[var(--bg-primary)]"
|
|
74
|
+
: "border-transparent text-[var(--text-secondary)] hover:text-[var(--text-primary)]")
|
|
75
|
+
}
|
|
76
|
+
>
|
|
77
|
+
<span className="text-fg-subtle">{s.icon}</span>
|
|
78
|
+
<span>{s.label}</span>
|
|
79
|
+
</button>
|
|
80
|
+
);
|
|
81
|
+
})}
|
|
82
|
+
</div>
|
|
83
|
+
<div className="flex-1 min-h-0 overflow-hidden">
|
|
84
|
+
{active === "appearance" && <AppearancePanel />}
|
|
85
|
+
{active === "networking" && <NetworkPanel />}
|
|
86
|
+
{active === "credentials" && <CredentialsListPanel />}
|
|
87
|
+
{active === "models" && <ModelsPanel />}
|
|
88
|
+
{active === "harness" && <HarnessPanel />}
|
|
89
|
+
{active === "logs" && <LogsPanel />}
|
|
90
|
+
{active === "defaults" && <EnvVarsPanel />}
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
);
|
|
94
|
+
}
|
package/contexts/AppContext.tsx
CHANGED
|
@@ -13,7 +13,7 @@ function parseStoredMode(raw: string | null): ExperienceMode | null {
|
|
|
13
13
|
return null;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
export type Tab = "chat" | "dashboard" | "agents" | "memory" | "documents" | "models" | "credentials" | "mcp" | "extensions" | "tools" | "tasks" | "bridges" | "profile" | "harness" | "logs" | "env";
|
|
16
|
+
export type Tab = "chat" | "dashboard" | "agents" | "memory" | "documents" | "models" | "credentials" | "mcp" | "extensions" | "tools" | "tasks" | "bridges" | "profile" | "harness" | "logs" | "env" | "settings";
|
|
17
17
|
|
|
18
18
|
interface AppState {
|
|
19
19
|
activeThreadId: string | null;
|
package/hooks/useUrlSync.ts
CHANGED
|
@@ -15,7 +15,7 @@ import { useEffect, useRef } from "react";
|
|
|
15
15
|
import { useAppContext, type Tab } from "@/contexts/AppContext";
|
|
16
16
|
import { buildHref, parseHref } from "@/lib/ui/navigate";
|
|
17
17
|
|
|
18
|
-
const TABS: Tab[] = ["chat", "dashboard", "agents", "memory", "documents", "models", "credentials", "mcp", "extensions", "tools", "tasks", "bridges", "profile", "harness"];
|
|
18
|
+
const TABS: Tab[] = ["chat", "dashboard", "agents", "memory", "documents", "models", "credentials", "mcp", "extensions", "tools", "tasks", "bridges", "profile", "harness", "settings"];
|
|
19
19
|
|
|
20
20
|
export function useUrlSync() {
|
|
21
21
|
const { state, dispatch } = useAppContext();
|
package/lib/ui/navigate.ts
CHANGED
|
@@ -18,7 +18,7 @@ export interface ParsedHref {
|
|
|
18
18
|
external: boolean;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
const TABS: Tab[] = ["chat", "dashboard", "agents", "memory", "models", "credentials", "mcp", "extensions", "tools", "tasks", "bridges", "profile", "harness", "documents"];
|
|
21
|
+
const TABS: Tab[] = ["chat", "dashboard", "agents", "memory", "models", "credentials", "mcp", "extensions", "tools", "tasks", "bridges", "profile", "harness", "documents", "settings"];
|
|
22
22
|
|
|
23
23
|
export function parseHref(input: string | null | undefined): ParsedHref {
|
|
24
24
|
if (!input) return { external: false };
|
package/package.json
CHANGED