@legioncodeinc/hive 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +262 -0
- package/dist/cli-commands.d.ts +41 -0
- package/dist/cli-commands.js +76 -0
- package/dist/cli-commands.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +46 -0
- package/dist/cli.js.map +1 -0
- package/dist/daemon/dashboard/app.js +118 -0
- package/dist/daemon/dashboard/host.d.ts +90 -0
- package/dist/daemon/dashboard/host.js +172 -0
- package/dist/daemon/dashboard/host.js.map +1 -0
- package/dist/daemon/dashboard/web-assets.d.ts +88 -0
- package/dist/daemon/dashboard/web-assets.js +195 -0
- package/dist/daemon/dashboard/web-assets.js.map +1 -0
- package/dist/daemon/fleet-status.d.ts +15 -0
- package/dist/daemon/fleet-status.js +56 -0
- package/dist/daemon/fleet-status.js.map +1 -0
- package/dist/daemon/gate.d.ts +55 -0
- package/dist/daemon/gate.js +128 -0
- package/dist/daemon/gate.js.map +1 -0
- package/dist/daemon/proxy.d.ts +38 -0
- package/dist/daemon/proxy.js +126 -0
- package/dist/daemon/proxy.js.map +1 -0
- package/dist/daemon/registry.d.ts +31 -0
- package/dist/daemon/registry.js +120 -0
- package/dist/daemon/registry.js.map +1 -0
- package/dist/daemon/server.d.ts +41 -0
- package/dist/daemon/server.js +126 -0
- package/dist/daemon/server.js.map +1 -0
- package/dist/daemon/setup-auth.d.ts +37 -0
- package/dist/daemon/setup-auth.js +51 -0
- package/dist/daemon/setup-auth.js.map +1 -0
- package/dist/daemon/telemetry-proxy.d.ts +47 -0
- package/dist/daemon/telemetry-proxy.js +63 -0
- package/dist/daemon/telemetry-proxy.js.map +1 -0
- package/dist/dashboard/contracts.d.ts +235 -0
- package/dist/dashboard/contracts.js +43 -0
- package/dist/dashboard/contracts.js.map +1 -0
- package/dist/dashboard/web/app.d.ts +44 -0
- package/dist/dashboard/web/app.js +179 -0
- package/dist/dashboard/web/app.js.map +1 -0
- package/dist/dashboard/web/boot-route.d.ts +23 -0
- package/dist/dashboard/web/boot-route.js +29 -0
- package/dist/dashboard/web/boot-route.js.map +1 -0
- package/dist/dashboard/web/build-graph-button.d.ts +46 -0
- package/dist/dashboard/web/build-graph-button.js +81 -0
- package/dist/dashboard/web/build-graph-button.js.map +1 -0
- package/dist/dashboard/web/buzzing-screen.d.ts +30 -0
- package/dist/dashboard/web/buzzing-screen.js +135 -0
- package/dist/dashboard/web/buzzing-screen.js.map +1 -0
- package/dist/dashboard/web/folder-picker.d.ts +54 -0
- package/dist/dashboard/web/folder-picker.js +125 -0
- package/dist/dashboard/web/folder-picker.js.map +1 -0
- package/dist/dashboard/web/graph-layout.d.ts +101 -0
- package/dist/dashboard/web/graph-layout.js +0 -0
- package/dist/dashboard/web/graph-layout.js.map +1 -0
- package/dist/dashboard/web/harness-strip.d.ts +38 -0
- package/dist/dashboard/web/harness-strip.js +65 -0
- package/dist/dashboard/web/harness-strip.js.map +1 -0
- package/dist/dashboard/web/health-rail.d.ts +26 -0
- package/dist/dashboard/web/health-rail.js +61 -0
- package/dist/dashboard/web/health-rail.js.map +1 -0
- package/dist/dashboard/web/main.d.ts +22 -0
- package/dist/dashboard/web/main.js +51 -0
- package/dist/dashboard/web/main.js.map +1 -0
- package/dist/dashboard/web/needs-project.d.ts +51 -0
- package/dist/dashboard/web/needs-project.js +69 -0
- package/dist/dashboard/web/needs-project.js.map +1 -0
- package/dist/dashboard/web/page-frame.d.ts +95 -0
- package/dist/dashboard/web/page-frame.js +98 -0
- package/dist/dashboard/web/page-frame.js.map +1 -0
- package/dist/dashboard/web/pages/coming-soon.d.ts +23 -0
- package/dist/dashboard/web/pages/coming-soon.js +19 -0
- package/dist/dashboard/web/pages/coming-soon.js.map +1 -0
- package/dist/dashboard/web/pages/dashboard.d.ts +32 -0
- package/dist/dashboard/web/pages/dashboard.js +205 -0
- package/dist/dashboard/web/pages/dashboard.js.map +1 -0
- package/dist/dashboard/web/pages/graph.d.ts +72 -0
- package/dist/dashboard/web/pages/graph.js +362 -0
- package/dist/dashboard/web/pages/graph.js.map +1 -0
- package/dist/dashboard/web/pages/harnesses.d.ts +65 -0
- package/dist/dashboard/web/pages/harnesses.js +210 -0
- package/dist/dashboard/web/pages/harnesses.js.map +1 -0
- package/dist/dashboard/web/pages/health.d.ts +22 -0
- package/dist/dashboard/web/pages/health.js +91 -0
- package/dist/dashboard/web/pages/health.js.map +1 -0
- package/dist/dashboard/web/pages/lifecycle-panel.d.ts +60 -0
- package/dist/dashboard/web/pages/lifecycle-panel.js +187 -0
- package/dist/dashboard/web/pages/lifecycle-panel.js.map +1 -0
- package/dist/dashboard/web/pages/logs.d.ts +55 -0
- package/dist/dashboard/web/pages/logs.js +311 -0
- package/dist/dashboard/web/pages/logs.js.map +1 -0
- package/dist/dashboard/web/pages/memories.d.ts +35 -0
- package/dist/dashboard/web/pages/memories.js +439 -0
- package/dist/dashboard/web/pages/memories.js.map +1 -0
- package/dist/dashboard/web/pages/projects.d.ts +38 -0
- package/dist/dashboard/web/pages/projects.js +325 -0
- package/dist/dashboard/web/pages/projects.js.map +1 -0
- package/dist/dashboard/web/pages/roi-chart.d.ts +52 -0
- package/dist/dashboard/web/pages/roi-chart.js +133 -0
- package/dist/dashboard/web/pages/roi-chart.js.map +1 -0
- package/dist/dashboard/web/pages/roi.d.ts +93 -0
- package/dist/dashboard/web/pages/roi.js +375 -0
- package/dist/dashboard/web/pages/roi.js.map +1 -0
- package/dist/dashboard/web/pages/settings.d.ts +103 -0
- package/dist/dashboard/web/pages/settings.js +420 -0
- package/dist/dashboard/web/pages/settings.js.map +1 -0
- package/dist/dashboard/web/pages/sync.d.ts +59 -0
- package/dist/dashboard/web/pages/sync.js +280 -0
- package/dist/dashboard/web/pages/sync.js.map +1 -0
- package/dist/dashboard/web/panels.d.ts +178 -0
- package/dist/dashboard/web/panels.js +471 -0
- package/dist/dashboard/web/panels.js.map +1 -0
- package/dist/dashboard/web/primitives.d.ts +80 -0
- package/dist/dashboard/web/primitives.js +208 -0
- package/dist/dashboard/web/primitives.js.map +1 -0
- package/dist/dashboard/web/readiness-splash.d.ts +39 -0
- package/dist/dashboard/web/readiness-splash.js +201 -0
- package/dist/dashboard/web/readiness-splash.js.map +1 -0
- package/dist/dashboard/web/registry.d.ts +96 -0
- package/dist/dashboard/web/registry.js +99 -0
- package/dist/dashboard/web/registry.js.map +1 -0
- package/dist/dashboard/web/router.d.ts +48 -0
- package/dist/dashboard/web/router.js +76 -0
- package/dist/dashboard/web/router.js.map +1 -0
- package/dist/dashboard/web/scope-context.d.ts +155 -0
- package/dist/dashboard/web/scope-context.js +266 -0
- package/dist/dashboard/web/scope-context.js.map +1 -0
- package/dist/dashboard/web/service-icons.d.ts +33 -0
- package/dist/dashboard/web/service-icons.js +80 -0
- package/dist/dashboard/web/service-icons.js.map +1 -0
- package/dist/dashboard/web/setup-gate.d.ts +116 -0
- package/dist/dashboard/web/setup-gate.js +272 -0
- package/dist/dashboard/web/setup-gate.js.map +1 -0
- package/dist/dashboard/web/sidebar.d.ts +63 -0
- package/dist/dashboard/web/sidebar.js +91 -0
- package/dist/dashboard/web/sidebar.js.map +1 -0
- package/dist/dashboard/web/use-fleet-telemetry.d.ts +111 -0
- package/dist/dashboard/web/use-fleet-telemetry.js +278 -0
- package/dist/dashboard/web/use-fleet-telemetry.js.map +1 -0
- package/dist/dashboard/web/wire.d.ts +1937 -0
- package/dist/dashboard/web/wire.js +1837 -0
- package/dist/dashboard/web/wire.js.map +1 -0
- package/dist/errors.d.ts +5 -0
- package/dist/errors.js +11 -0
- package/dist/errors.js.map +1 -0
- package/dist/install/registry.d.ts +35 -0
- package/dist/install/registry.js +110 -0
- package/dist/install/registry.js.map +1 -0
- package/dist/lock.d.ts +10 -0
- package/dist/lock.js +87 -0
- package/dist/lock.js.map +1 -0
- package/dist/service/commands.d.ts +15 -0
- package/dist/service/commands.js +49 -0
- package/dist/service/commands.js.map +1 -0
- package/dist/service/index.d.ts +38 -0
- package/dist/service/index.js +174 -0
- package/dist/service/index.js.map +1 -0
- package/dist/service/platform.d.ts +37 -0
- package/dist/service/platform.js +67 -0
- package/dist/service/platform.js.map +1 -0
- package/dist/service/templates.d.ts +10 -0
- package/dist/service/templates.js +120 -0
- package/dist/service/templates.js.map +1 -0
- package/dist/shared/constants.d.ts +15 -0
- package/dist/shared/constants.js +19 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/daemon-routing.d.ts +11 -0
- package/dist/shared/daemon-routing.js +38 -0
- package/dist/shared/daemon-routing.js.map +1 -0
- package/dist/shared/fleet-readiness.d.ts +18 -0
- package/dist/shared/fleet-readiness.js +9 -0
- package/dist/shared/fleet-readiness.js.map +1 -0
- package/dist/shared/fleet-telemetry.d.ts +68 -0
- package/dist/shared/fleet-telemetry.js +61 -0
- package/dist/shared/fleet-telemetry.js.map +1 -0
- package/dist/shared/lifecycle-flags.d.ts +34 -0
- package/dist/shared/lifecycle-flags.js +39 -0
- package/dist/shared/lifecycle-flags.js.map +1 -0
- package/dist/shared/memory-types.d.ts +55 -0
- package/dist/shared/memory-types.js +75 -0
- package/dist/shared/memory-types.js.map +1 -0
- package/dist/shared/service-status.d.ts +82 -0
- package/dist/shared/service-status.js +97 -0
- package/dist/shared/service-status.js.map +1 -0
- package/dist/telemetry/emit.d.ts +197 -0
- package/dist/telemetry/emit.js +196 -0
- package/dist/telemetry/emit.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The SETTINGS page — PRD-044 (the 7th and final page of the dashboard mini-site).
|
|
3
|
+
*
|
|
4
|
+
* Mounted at the PRD-037 `#/settings` slot (the registry already routes it; this fills the
|
|
5
|
+
* `ComingSoon` placeholder). ONE coherent page, THREE sections over the INJECTED `wire` (never
|
|
6
|
+
* `createWireClient`), all on the existing DS tokens + primitives (`Badge`/`Button`/`Input`/
|
|
7
|
+
* `Panel`/`PageFrame`) — NO new design system, NO CDN React, NO in-browser Babel. Every value
|
|
8
|
+
* renders as escaped React text (XSS-safe; never `dangerouslySetInnerHTML`). No token/secret value
|
|
9
|
+
* EVER appears in page state, the DOM, a parsed response, or a log line (D-3 / D-6).
|
|
10
|
+
*
|
|
11
|
+
* 044a — DeepLake auth (SECURITY-CRITICAL, the token is SACRED):
|
|
12
|
+
* · `DeeplakeAuthSection` reads the REDACTED `wire.authStatus()` (`GET /api/auth/status`) and
|
|
13
|
+
* renders it TRUTHFULLY: connected org/workspace/agent, the credentials SOURCE
|
|
14
|
+
* (`env` "via HONEYCOMB_TOKEN" vs `file`), `savedAt`, and expiry ONLY when a real
|
|
15
|
+
* `expiresAt` exists (else "expiry unknown" — never fabricated). Disconnected → an honest
|
|
16
|
+
* "Not connected to DeepLake" state. OQ-1 RESOLVED: STATUS-FIRST + a CLI hand-off (the exact
|
|
17
|
+
* `honeycomb login` commands) — NO in-page device-flow, NO mock success. The section RE-READS
|
|
18
|
+
* `authStatus()` on a focus/poll so a CLI login reflects here. The token is never rendered.
|
|
19
|
+
*
|
|
20
|
+
* 044b — provider API keys (write-only into the encrypted vault):
|
|
21
|
+
* · `ProviderKeysSection` renders one row per provider (Anthropic, OpenAI, OpenRouter, Cohere):
|
|
22
|
+
* a password-type write-only `Input`, a "Save key" `Button`, and a presence `Badge`. A save
|
|
23
|
+
* POSTs `wire.setSecret(name, value)` (`POST /api/secrets/:name`); presence comes from
|
|
24
|
+
* `wire.secretNames()` (NAMES only — there is NO value-returning route, ever). On success the
|
|
25
|
+
* input is CLEARED and `secretNames()` is RE-READ. A secret value never enters page state,
|
|
26
|
+
* the DOM, the response, or a log line (AC-3 write-only discipline).
|
|
27
|
+
*
|
|
28
|
+
* 044c — search mode + migrated inference settings:
|
|
29
|
+
* · `SearchAndInferenceSection` renders a NEW recall-mode `Select` (`keyword | semantic |
|
|
30
|
+
* hybrid` + a "default" option that leaves the `recallMode` key UNSET) PLUS the MIGRATED
|
|
31
|
+
* provider→model selector + pollinating toggle (the existing `SettingsPanel`, REUSED not forked
|
|
32
|
+
* — D-5). All persist through the EXISTING `vaultSettings()`/`setSetting()` surface
|
|
33
|
+
* (persist-then-re-read); `recallMode` adds NO new wire method.
|
|
34
|
+
*/
|
|
35
|
+
import React from "react";
|
|
36
|
+
import type { PageProps } from "../page-frame.js";
|
|
37
|
+
import { type SettingValueWire, type VaultSettingsWire } from "../wire.js";
|
|
38
|
+
/**
|
|
39
|
+
* The DeepLake auth section (044a). Reads the REDACTED `authStatus()` and renders it truthfully —
|
|
40
|
+
* connected identity + source + expiry-when-known, or an honest disconnected state with the CLI
|
|
41
|
+
* hand-off. RE-READS on a poll so a CLI `honeycomb login` reflects here. The token is NEVER
|
|
42
|
+
* rendered (the wire schema has no token field by construction).
|
|
43
|
+
*/
|
|
44
|
+
export declare function DeeplakeAuthSection({ wire }: {
|
|
45
|
+
wire: PageProps["wire"];
|
|
46
|
+
}): React.JSX.Element;
|
|
47
|
+
/**
|
|
48
|
+
* The provider API keys section (044b). One row per provider (Anthropic, OpenAI, OpenRouter,
|
|
49
|
+
* Cohere). A save POSTs `setSecret(name, value)` then RE-READS `secretNames()` so the presence
|
|
50
|
+
* badge reflects the persisted truth (mirroring the `setSetting` re-read). There is NO `getSecret`
|
|
51
|
+
* — a stored key cannot be read back. The presence is by NAME only (`PROVIDER_KEY_NAME`).
|
|
52
|
+
*/
|
|
53
|
+
export declare function ProviderKeysSection({ wire, secretNames, onSaved, }: {
|
|
54
|
+
wire: PageProps["wire"];
|
|
55
|
+
secretNames: readonly string[];
|
|
56
|
+
onSaved: () => void;
|
|
57
|
+
}): React.JSX.Element;
|
|
58
|
+
/**
|
|
59
|
+
* The search-mode + inference section (044c). Composes the NEW recall-mode selector with the
|
|
60
|
+
* MIGRATED provider/model/pollinating controls (the existing `SettingsPanel`, REUSED verbatim — D-5).
|
|
61
|
+
* Everything persists through the SAME `vaultSettings()`/`setSetting()` surface with a persist-then
|
|
62
|
+
* re-read contract; `recallMode` adds no new wire method.
|
|
63
|
+
*
|
|
64
|
+
* PRD-063a (D-2): when `portkeyEnabled` is true, the provider/model rows are rendered but visually
|
|
65
|
+
* de-emphasized with a "superseded by Portkey" hint. Turning Portkey off restores them without
|
|
66
|
+
* re-entry (the keys are still persisted — only the hint disappears).
|
|
67
|
+
*/
|
|
68
|
+
export declare function SearchAndInferenceSection({ settings, catalog, secretNames, onSave, portkeyEnabled, }: {
|
|
69
|
+
settings: Readonly<Record<string, SettingValueWire>>;
|
|
70
|
+
catalog: VaultSettingsWire["catalog"];
|
|
71
|
+
secretNames: readonly string[];
|
|
72
|
+
onSave: (key: string, value: SettingValueWire) => Promise<boolean>;
|
|
73
|
+
/** PRD-063a D-2: when true, de-emphasize the per-provider rows + activeProvider selector. */
|
|
74
|
+
portkeyEnabled?: boolean;
|
|
75
|
+
}): React.JSX.Element;
|
|
76
|
+
/**
|
|
77
|
+
* The embeddings toggle. Reads the LIVE on/off state from `wire.health()` (`reasons.embeddings`) and
|
|
78
|
+
* flips it through `wire.setEmbeddings(...)`, which actuates the daemon's embed supervisor (spawn+warm
|
|
79
|
+
* / stop) AND persists the choice so it survives a restart. Off = lexical (BM25) recall only. The
|
|
80
|
+
* state re-reads from `health()` after a toggle so the badge reflects the persisted truth, never an
|
|
81
|
+
* optimistic flip.
|
|
82
|
+
*/
|
|
83
|
+
export declare function EmbeddingsSection({ wire }: {
|
|
84
|
+
wire: PageProps["wire"];
|
|
85
|
+
}): React.JSX.Element;
|
|
86
|
+
/**
|
|
87
|
+
* The destructive system actions, each gated behind an inline two-step confirm (no new modal
|
|
88
|
+
* dependency). Restart respawns the daemon (the page then waits for `/health` to recover); Uninstall
|
|
89
|
+
* returns the guided removal (detected harnesses + the exact `honeycomb uninstall` command — the
|
|
90
|
+
* daemon does not self-remove the page out from under itself). Both POST through the origin/CSRF +
|
|
91
|
+
* local-mode gated `/api/actions` surface.
|
|
92
|
+
*/
|
|
93
|
+
export declare function SystemActionsSection({ wire }: {
|
|
94
|
+
wire: PageProps["wire"];
|
|
95
|
+
}): React.JSX.Element;
|
|
96
|
+
/**
|
|
97
|
+
* The Settings page (PRD-044). Hydrates the vault settings + secret-name presence over the shared
|
|
98
|
+
* `wire`, and renders the THREE sections: DeepLake auth (044a), provider keys (044b), and search
|
|
99
|
+
* mode + inference (044c). Every setting/secret write goes through the wire with a persist-then
|
|
100
|
+
* re-read contract — the page never trusts a local-only toggle. NO token/secret value crosses into
|
|
101
|
+
* page state, the DOM, a response, or a log line.
|
|
102
|
+
*/
|
|
103
|
+
export declare function SettingsPage({ wire }: PageProps): React.JSX.Element;
|
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* The SETTINGS page — PRD-044 (the 7th and final page of the dashboard mini-site).
|
|
4
|
+
*
|
|
5
|
+
* Mounted at the PRD-037 `#/settings` slot (the registry already routes it; this fills the
|
|
6
|
+
* `ComingSoon` placeholder). ONE coherent page, THREE sections over the INJECTED `wire` (never
|
|
7
|
+
* `createWireClient`), all on the existing DS tokens + primitives (`Badge`/`Button`/`Input`/
|
|
8
|
+
* `Panel`/`PageFrame`) — NO new design system, NO CDN React, NO in-browser Babel. Every value
|
|
9
|
+
* renders as escaped React text (XSS-safe; never `dangerouslySetInnerHTML`). No token/secret value
|
|
10
|
+
* EVER appears in page state, the DOM, a parsed response, or a log line (D-3 / D-6).
|
|
11
|
+
*
|
|
12
|
+
* 044a — DeepLake auth (SECURITY-CRITICAL, the token is SACRED):
|
|
13
|
+
* · `DeeplakeAuthSection` reads the REDACTED `wire.authStatus()` (`GET /api/auth/status`) and
|
|
14
|
+
* renders it TRUTHFULLY: connected org/workspace/agent, the credentials SOURCE
|
|
15
|
+
* (`env` "via HONEYCOMB_TOKEN" vs `file`), `savedAt`, and expiry ONLY when a real
|
|
16
|
+
* `expiresAt` exists (else "expiry unknown" — never fabricated). Disconnected → an honest
|
|
17
|
+
* "Not connected to DeepLake" state. OQ-1 RESOLVED: STATUS-FIRST + a CLI hand-off (the exact
|
|
18
|
+
* `honeycomb login` commands) — NO in-page device-flow, NO mock success. The section RE-READS
|
|
19
|
+
* `authStatus()` on a focus/poll so a CLI login reflects here. The token is never rendered.
|
|
20
|
+
*
|
|
21
|
+
* 044b — provider API keys (write-only into the encrypted vault):
|
|
22
|
+
* · `ProviderKeysSection` renders one row per provider (Anthropic, OpenAI, OpenRouter, Cohere):
|
|
23
|
+
* a password-type write-only `Input`, a "Save key" `Button`, and a presence `Badge`. A save
|
|
24
|
+
* POSTs `wire.setSecret(name, value)` (`POST /api/secrets/:name`); presence comes from
|
|
25
|
+
* `wire.secretNames()` (NAMES only — there is NO value-returning route, ever). On success the
|
|
26
|
+
* input is CLEARED and `secretNames()` is RE-READ. A secret value never enters page state,
|
|
27
|
+
* the DOM, the response, or a log line (AC-3 write-only discipline).
|
|
28
|
+
*
|
|
29
|
+
* 044c — search mode + migrated inference settings:
|
|
30
|
+
* · `SearchAndInferenceSection` renders a NEW recall-mode `Select` (`keyword | semantic |
|
|
31
|
+
* hybrid` + a "default" option that leaves the `recallMode` key UNSET) PLUS the MIGRATED
|
|
32
|
+
* provider→model selector + pollinating toggle (the existing `SettingsPanel`, REUSED not forked
|
|
33
|
+
* — D-5). All persist through the EXISTING `vaultSettings()`/`setSetting()` surface
|
|
34
|
+
* (persist-then-re-read); `recallMode` adds NO new wire method.
|
|
35
|
+
*/
|
|
36
|
+
import React from "react";
|
|
37
|
+
import { Badge, Button, Input } from "../primitives.js";
|
|
38
|
+
import { Panel, PortkeyGatewaySection, PROVIDER_KEY_NAME, SETTING_KEY, SettingsPanel } from "../panels.js";
|
|
39
|
+
import { isTabHidden, PageFrame } from "../page-frame.js";
|
|
40
|
+
import { LIFECYCLE_FLAG_REFERENCE } from "../../../shared/lifecycle-flags.js";
|
|
41
|
+
import { DISCONNECTED_AUTH_STATUS, EMPTY_VAULT_SETTINGS, } from "../wire.js";
|
|
42
|
+
/** How often the auth section re-reads `authStatus()` so a CLI login reflects here (ms). */
|
|
43
|
+
const AUTH_POLL_MS = 5000;
|
|
44
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
45
|
+
// A shared section shell — a titled Panel with consistent rhythm across the three
|
|
46
|
+
// sections (jscpd discipline: one wrapper, not three copies of the same markup).
|
|
47
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
48
|
+
/** One labeled metadata row (a left label + a right value) — shared by the auth section. */
|
|
49
|
+
function MetaRow({ label, children }) {
|
|
50
|
+
return (_jsxs("div", { style: { display: "flex", alignItems: "center", gap: 12, padding: "8px 6px", borderTop: "1px solid var(--border-subtle)" }, children: [_jsx("span", { style: { fontFamily: "var(--font-mono)", fontSize: 12, color: "var(--text-tertiary)", minWidth: 120 }, children: label }), _jsx("span", { style: { flex: 1 } }), _jsx("span", { style: { fontFamily: "var(--font-mono)", fontSize: 13, color: "var(--text-primary)", textAlign: "right", wordBreak: "break-word" }, children: children })] }));
|
|
51
|
+
}
|
|
52
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
53
|
+
// 044a — the DeepLake auth section (status-first + CLI hand-off; token is sacred).
|
|
54
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
55
|
+
/** Human label for the credentials source (`env` → "via HONEYCOMB_TOKEN", honest about the env win). */
|
|
56
|
+
function sourceLabel(source) {
|
|
57
|
+
if (source === "env")
|
|
58
|
+
return "via HONEYCOMB_TOKEN";
|
|
59
|
+
if (source === "file")
|
|
60
|
+
return "saved login (~/.deeplake)";
|
|
61
|
+
return "none";
|
|
62
|
+
}
|
|
63
|
+
/** Render a token-expiry value HONESTLY: a real `expiresAt` as an ISO instant, else "expiry unknown". */
|
|
64
|
+
function expiryLabel(expiresAt) {
|
|
65
|
+
// `expiresAt` is epoch SECONDS (a real `TokenClaims.exp`); absent → never computed/faked.
|
|
66
|
+
if (typeof expiresAt !== "number" || !Number.isFinite(expiresAt))
|
|
67
|
+
return "expiry unknown";
|
|
68
|
+
return new Date(expiresAt * 1000).toISOString();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The connect affordance — an IN-PAGE device flow (the dashboard is now a peer of the CLI for login).
|
|
72
|
+
* "Connect to DeepLake" POSTs `wire.setupLogin()` (the existing 050c device-flow endpoint) and renders
|
|
73
|
+
* the returned `user_code` + verification link; the daemon polls → mints → persists in the background,
|
|
74
|
+
* and the parent {@link DeeplakeAuthSection}'s `authStatus()` poll flips the section to connected the
|
|
75
|
+
* moment the credential lands — same tab, no `honeycomb login`. The exact CLI command is kept as a
|
|
76
|
+
* secondary hint. NO token ever crosses the wire (the setup-login schema has no token field).
|
|
77
|
+
*/
|
|
78
|
+
function ConnectHandoff({ wire }) {
|
|
79
|
+
const [grant, setGrant] = React.useState(null);
|
|
80
|
+
const [busy, setBusy] = React.useState(false);
|
|
81
|
+
const [error, setError] = React.useState(false);
|
|
82
|
+
// A synchronous in-flight guard so a rapid double-click never starts two device flows.
|
|
83
|
+
const inFlightRef = React.useRef(false);
|
|
84
|
+
const begin = React.useCallback(async () => {
|
|
85
|
+
if (inFlightRef.current)
|
|
86
|
+
return;
|
|
87
|
+
inFlightRef.current = true;
|
|
88
|
+
setBusy(true);
|
|
89
|
+
setError(false);
|
|
90
|
+
const result = await wire.setupLogin();
|
|
91
|
+
if (result === null) {
|
|
92
|
+
setError(true);
|
|
93
|
+
setBusy(false);
|
|
94
|
+
inFlightRef.current = false;
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Leave `busy` true: the section now waits for the background `authStatus()` poll to flip to
|
|
98
|
+
// connected once the credential lands. The button stays disabled meanwhile.
|
|
99
|
+
setGrant(result);
|
|
100
|
+
}, [wire]);
|
|
101
|
+
return (_jsxs("div", { "data-testid": "auth-connect", style: { display: "flex", flexDirection: "column", gap: 10, padding: "10px 6px" }, children: [_jsx("span", { style: { fontSize: 13, color: "var(--text-secondary)" }, children: "Not connected to DeepLake." }), grant === null ? (_jsxs(_Fragment, { children: [_jsx(Button, { variant: "primary", size: "sm", disabled: busy, onClick: () => void begin(), "data-testid": "auth-connect-button", children: busy ? "Starting…" : "Connect to DeepLake" }), error && (_jsxs("span", { "data-testid": "auth-connect-error", style: { fontFamily: "var(--font-mono)", fontSize: 11, color: "var(--severity-critical)" }, children: ["Could not start sign-in. Retry, or run ", _jsx("code", { children: "honeycomb login" }), " in your terminal."] }))] })) : (_jsxs("div", { "data-testid": "auth-connect-grant", style: { display: "flex", flexDirection: "column", gap: 6 }, children: [_jsx("span", { style: { fontSize: 13, color: "var(--text-secondary)" }, children: "Enter this code to finish signing in:" }), _jsx("code", { style: { fontFamily: "var(--font-mono)", fontSize: 16, color: "var(--honey)", letterSpacing: "0.08em" }, children: grant.user_code }), _jsx("a", { href: grant.verification_uri_complete ?? grant.verification_uri, target: "_blank", rel: "noreferrer", style: { fontSize: 13, color: "var(--text-secondary)" }, children: "Open the verification page" }), _jsx("span", { style: { fontSize: 11, color: "var(--text-tertiary)" }, children: "Waiting for you to finish in the browser\u2026" })] })), _jsxs("span", { style: { fontSize: 11, color: "var(--text-tertiary)" }, children: ["or, from your terminal: ", _jsx("code", { style: { fontFamily: "var(--font-mono)", color: "var(--honey)" }, children: "honeycomb login" })] })] }));
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* The DeepLake auth section (044a). Reads the REDACTED `authStatus()` and renders it truthfully —
|
|
105
|
+
* connected identity + source + expiry-when-known, or an honest disconnected state with the CLI
|
|
106
|
+
* hand-off. RE-READS on a poll so a CLI `honeycomb login` reflects here. The token is NEVER
|
|
107
|
+
* rendered (the wire schema has no token field by construction).
|
|
108
|
+
*/
|
|
109
|
+
export function DeeplakeAuthSection({ wire }) {
|
|
110
|
+
const [status, setStatus] = React.useState(DISCONNECTED_AUTH_STATUS);
|
|
111
|
+
const [loading, setLoading] = React.useState(true);
|
|
112
|
+
const [loggingOut, setLoggingOut] = React.useState(false);
|
|
113
|
+
const load = React.useCallback(async () => {
|
|
114
|
+
// `authStatus()` never throws — it degrades to DISCONNECTED on any failure (AC-4).
|
|
115
|
+
const next = await wire.authStatus();
|
|
116
|
+
setStatus(next);
|
|
117
|
+
setLoading(false);
|
|
118
|
+
}, [wire]);
|
|
119
|
+
// Log out (dashboard action): remove the shared credential through the daemon, then RE-READ the
|
|
120
|
+
// status so the section flips to the disconnected/connect state on success (never an optimistic flip).
|
|
121
|
+
const onLogout = React.useCallback(async () => {
|
|
122
|
+
setLoggingOut(true);
|
|
123
|
+
await wire.logout();
|
|
124
|
+
await load();
|
|
125
|
+
setLoggingOut(false);
|
|
126
|
+
}, [wire, load]);
|
|
127
|
+
// Fetch on mount + re-read on a poll (so a CLI login reflects here) + on window focus.
|
|
128
|
+
React.useEffect(() => {
|
|
129
|
+
let alive = true;
|
|
130
|
+
const tick = async () => {
|
|
131
|
+
if (!alive || isTabHidden())
|
|
132
|
+
return; // background-tab pause: no auth poll while hidden (focus still refreshes)
|
|
133
|
+
await load();
|
|
134
|
+
};
|
|
135
|
+
void tick();
|
|
136
|
+
const id = setInterval(() => void tick(), AUTH_POLL_MS);
|
|
137
|
+
const onFocus = () => void tick();
|
|
138
|
+
if (typeof window !== "undefined")
|
|
139
|
+
window.addEventListener("focus", onFocus);
|
|
140
|
+
return () => {
|
|
141
|
+
alive = false;
|
|
142
|
+
clearInterval(id);
|
|
143
|
+
if (typeof window !== "undefined")
|
|
144
|
+
window.removeEventListener("focus", onFocus);
|
|
145
|
+
};
|
|
146
|
+
}, [load]);
|
|
147
|
+
return (_jsx(Panel, { title: "DeepLake", eyebrow: "auth \u00B7 org \u00B7 workspace", right: _jsx(Badge, { tone: status.connected ? "verified" : "neutral", mono: true, dot: true, children: status.connected ? "connected" : "not connected" }), children: loading ? (_jsx("div", { "data-testid": "auth-loading", style: { padding: "12px 4px", fontSize: 13, color: "var(--text-tertiary)", fontFamily: "var(--font-mono)" }, children: "loading\u2026" })) : status.connected ? (_jsxs("div", { "data-testid": "auth-connected", children: [_jsx(MetaRow, { label: "org", children: status.orgName || status.orgId || "—" }), _jsx(MetaRow, { label: "org id", children: status.orgId || "—" }), _jsx(MetaRow, { label: "workspace", children: status.workspace || "—" }), _jsx(MetaRow, { label: "agent", children: status.agentId || "—" }), _jsx(MetaRow, { label: "source", children: sourceLabel(status.source) }), _jsx(MetaRow, { label: "last login", children: status.savedAt || "unknown" }), _jsx(MetaRow, { label: "token expiry", children: expiryLabel(status.expiresAt) }), _jsx("div", { style: { display: "flex", justifyContent: "flex-end", paddingTop: 10 }, children: _jsx(Button, { variant: "secondary", size: "sm", disabled: loggingOut, onClick: () => void onLogout(), "data-testid": "auth-logout-button", children: loggingOut ? "Logging out…" : "Log out" }) })] })) : (_jsx("div", { "data-testid": "auth-disconnected", children: _jsx(ConnectHandoff, { wire: wire }) })) }));
|
|
148
|
+
}
|
|
149
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
150
|
+
// 044b — the provider API keys section (write-only into the encrypted vault).
|
|
151
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
152
|
+
/** The four providers this section manages, in display order (label + the conventional key name). */
|
|
153
|
+
const PROVIDER_ROWS = [
|
|
154
|
+
{ id: "anthropic", label: "Anthropic (Claude)" },
|
|
155
|
+
{ id: "openai", label: "OpenAI (ChatGPT)" },
|
|
156
|
+
{ id: "openrouter", label: "OpenRouter" },
|
|
157
|
+
{ id: "cohere", label: "Cohere" },
|
|
158
|
+
];
|
|
159
|
+
/**
|
|
160
|
+
* One provider key row (044b): a label, a write-only password `Input`, a "Save key" `Button`, and
|
|
161
|
+
* a presence `Badge`. The input value lives in a LOCAL draft that is CLEARED on a successful save
|
|
162
|
+
* (never pre-filled — there is no value to fetch). An empty value is rejected client-side BEFORE
|
|
163
|
+
* the POST. The secret value never leaves this row's draft state, never enters the parsed response
|
|
164
|
+
* (the wire returns a boolean), and is never logged.
|
|
165
|
+
*/
|
|
166
|
+
function ProviderKeyRow({ id, label, present, onSave, }) {
|
|
167
|
+
const [draft, setDraft] = React.useState("");
|
|
168
|
+
const [saving, setSaving] = React.useState(false);
|
|
169
|
+
const [rejected, setRejected] = React.useState(false);
|
|
170
|
+
const submit = React.useCallback(async () => {
|
|
171
|
+
const value = draft;
|
|
172
|
+
// Client-side empty-value reject BEFORE the POST (AC-1) — an empty key is never sent.
|
|
173
|
+
if (value.length === 0) {
|
|
174
|
+
setRejected(true);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
setSaving(true);
|
|
178
|
+
setRejected(false);
|
|
179
|
+
const ok = await onSave(id, value);
|
|
180
|
+
setSaving(false);
|
|
181
|
+
// Write-only discipline (AC-3): CLEAR the input on a successful save (no lingering value in
|
|
182
|
+
// state), leave it for a retry on a rejected write. Either way the value is never echoed.
|
|
183
|
+
if (ok) {
|
|
184
|
+
setDraft("");
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
setRejected(true);
|
|
188
|
+
}
|
|
189
|
+
}, [draft, id, onSave]);
|
|
190
|
+
return (_jsxs("div", { "data-testid": `provider-row-${id}`, style: { display: "flex", alignItems: "center", gap: 12, padding: "10px 6px", borderTop: "1px solid var(--border-subtle)", flexWrap: "wrap" }, children: [_jsx("span", { style: { fontSize: 14, color: "var(--text-primary)", minWidth: 150 }, children: label }), _jsx("div", { style: { flex: "1 1 220px", minWidth: 180 }, children: _jsx(Input, { type: "password", mono: true, size: "sm", value: draft, placeholder: present ? "replace key…" : "paste key…", onChange: (e) => {
|
|
191
|
+
setDraft(e.target.value);
|
|
192
|
+
if (rejected)
|
|
193
|
+
setRejected(false);
|
|
194
|
+
}, onKeyDown: (e) => {
|
|
195
|
+
if (e.key === "Enter")
|
|
196
|
+
void submit();
|
|
197
|
+
}, "data-testid": `provider-input-${id}` }) }), _jsx(Button, { variant: "primary", size: "sm", disabled: saving, "data-testid": `provider-save-${id}`, onClick: () => void submit(), children: saving ? "saving…" : "Save key" }), _jsx(Badge, { tone: present ? "verified" : "neutral", mono: true, dot: true, children: present ? "key set ✓" : "not set" }), rejected && (_jsx("span", { "data-testid": `provider-rejected-${id}`, style: { fontFamily: "var(--font-mono)", fontSize: 11, color: "var(--severity-critical)" }, children: "not accepted" }))] }));
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* The provider API keys section (044b). One row per provider (Anthropic, OpenAI, OpenRouter,
|
|
201
|
+
* Cohere). A save POSTs `setSecret(name, value)` then RE-READS `secretNames()` so the presence
|
|
202
|
+
* badge reflects the persisted truth (mirroring the `setSetting` re-read). There is NO `getSecret`
|
|
203
|
+
* — a stored key cannot be read back. The presence is by NAME only (`PROVIDER_KEY_NAME`).
|
|
204
|
+
*/
|
|
205
|
+
export function ProviderKeysSection({ wire, secretNames, onSaved, }) {
|
|
206
|
+
// The single write path: POST the value (write-only), then re-read names on success so the
|
|
207
|
+
// parent's `secretNames` (and thus the presence badge) reflects the persisted truth. The value
|
|
208
|
+
// is consumed here and never returned/stored beyond the row's draft (which clears on success).
|
|
209
|
+
const onSave = React.useCallback(async (id, value) => {
|
|
210
|
+
const keyName = PROVIDER_KEY_NAME[id];
|
|
211
|
+
if (keyName === undefined)
|
|
212
|
+
return false;
|
|
213
|
+
const ok = await wire.setSecret(keyName, value);
|
|
214
|
+
if (ok)
|
|
215
|
+
onSaved(); // re-read secretNames (presence) — mirrors saveSetting's re-read.
|
|
216
|
+
return ok;
|
|
217
|
+
}, [wire, onSaved]);
|
|
218
|
+
return (_jsx(Panel, { title: "Provider keys", eyebrow: "write-only \u00B7 names-only presence", children: _jsx("div", { "data-testid": "provider-keys", children: PROVIDER_ROWS.map((p) => {
|
|
219
|
+
const keyName = PROVIDER_KEY_NAME[p.id] ?? "";
|
|
220
|
+
const present = keyName !== "" && secretNames.includes(keyName);
|
|
221
|
+
return _jsx(ProviderKeyRow, { id: p.id, label: p.label, present: present, onSave: onSave }, p.id);
|
|
222
|
+
}) }) }));
|
|
223
|
+
}
|
|
224
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
225
|
+
// 044c — the search mode + migrated inference settings section.
|
|
226
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
227
|
+
/** The recall-mode options: a "default" (unset) plus the three explicit modes (044c). */
|
|
228
|
+
const RECALL_MODE_OPTIONS = [
|
|
229
|
+
{ value: "", label: "default (semantic when embeddings on)" },
|
|
230
|
+
{ value: "keyword", label: "keyword — lexical only" },
|
|
231
|
+
{ value: "semantic", label: "semantic — vector (fallback when off)" },
|
|
232
|
+
{ value: "hybrid", label: "hybrid — both arms" },
|
|
233
|
+
];
|
|
234
|
+
/**
|
|
235
|
+
* The recall-mode selector (044c). A controlled `<select>` whose value is the persisted
|
|
236
|
+
* `recallMode` setting (or "" for the "default" option, which leaves the key UNSET — preserving the
|
|
237
|
+
* PRD-025 runtime default). Choosing a value persists through the EXISTING `setSetting` (no new
|
|
238
|
+
* wire method); the daemon REJECTS any value outside `keyword | semantic | hybrid` (fail-closed).
|
|
239
|
+
*/
|
|
240
|
+
function RecallModeRow({ value, onChange, }) {
|
|
241
|
+
return (_jsxs("div", { style: { display: "flex", alignItems: "center", gap: 12, padding: "10px 6px", flexWrap: "wrap" }, children: [_jsxs("div", { style: { display: "flex", flexDirection: "column", minWidth: 120 }, children: [_jsx("span", { style: { fontSize: 14, color: "var(--text-primary)" }, children: "Search mode" }), _jsx("span", { style: { fontFamily: "var(--font-mono)", fontSize: 11, color: "var(--text-tertiary)" }, children: "recall channels" })] }), _jsx("span", { style: { flex: 1 } }), _jsx("select", { "aria-label": "search mode", value: value, onChange: (e) => onChange(e.target.value), "data-testid": "recall-mode-select", style: {
|
|
242
|
+
height: 36,
|
|
243
|
+
padding: "0 10px",
|
|
244
|
+
background: "var(--bg-surface)",
|
|
245
|
+
border: "1px solid var(--border-default)",
|
|
246
|
+
borderRadius: "var(--radius-md)",
|
|
247
|
+
color: "var(--text-primary)",
|
|
248
|
+
fontFamily: "var(--font-mono)",
|
|
249
|
+
fontSize: 13,
|
|
250
|
+
minWidth: 220,
|
|
251
|
+
}, children: RECALL_MODE_OPTIONS.map((o) => (_jsx("option", { value: o.value, children: o.label }, o.value))) })] }));
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* The search-mode + inference section (044c). Composes the NEW recall-mode selector with the
|
|
255
|
+
* MIGRATED provider/model/pollinating controls (the existing `SettingsPanel`, REUSED verbatim — D-5).
|
|
256
|
+
* Everything persists through the SAME `vaultSettings()`/`setSetting()` surface with a persist-then
|
|
257
|
+
* re-read contract; `recallMode` adds no new wire method.
|
|
258
|
+
*
|
|
259
|
+
* PRD-063a (D-2): when `portkeyEnabled` is true, the provider/model rows are rendered but visually
|
|
260
|
+
* de-emphasized with a "superseded by Portkey" hint. Turning Portkey off restores them without
|
|
261
|
+
* re-entry (the keys are still persisted — only the hint disappears).
|
|
262
|
+
*/
|
|
263
|
+
export function SearchAndInferenceSection({ settings, catalog, secretNames, onSave, portkeyEnabled, }) {
|
|
264
|
+
// The persisted recall mode (controlled). The "default" option maps to "" → the key stays UNSET
|
|
265
|
+
// (preserving the PRD-025 runtime decision). String() defends against a non-string scalar.
|
|
266
|
+
const recallMode = String(settings[SETTING_KEY.recallMode] ?? "");
|
|
267
|
+
return (_jsx(Panel, { title: "Search & inference", eyebrow: "recall mode \u00B7 provider \u00B7 model \u00B7 pollinating", children: _jsxs("div", { "data-testid": "search-inference", children: [_jsx(RecallModeRow, { value: recallMode, onChange: (v) => void onSave(SETTING_KEY.recallMode, v) }), portkeyEnabled === true && (_jsx("div", { "data-testid": "portkey-supersedes-hint", style: { padding: "6px 6px 2px", fontFamily: "var(--font-mono)", fontSize: 11, color: "var(--text-tertiary)" }, children: "superseded by Portkey \u2014 provider keys still stored, not the active inference path" })), _jsx("div", { style: { marginTop: 8, opacity: portkeyEnabled === true ? 0.45 : 1, transition: "opacity 0.15s" }, children: _jsx(SettingsPanel, { catalog: catalog, settings: settings, secretNames: secretNames, onSave: onSave }) })] }) }));
|
|
268
|
+
}
|
|
269
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
270
|
+
// PRD-058d — the lifecycle config REFERENCE section (AC-55d.1.3): every
|
|
271
|
+
// `memory.lifecycle.*` flag with its symbol, default, master-equation effect, and
|
|
272
|
+
// env override. Read-only on the settings page (the values are governed by
|
|
273
|
+
// `agent.yaml` / `HONEYCOMB_LIFECYCLE_*` per the documented precedence); the table
|
|
274
|
+
// is the SINGLE-SOURCED {@link LIFECYCLE_FLAG_REFERENCE} the config doc also lists,
|
|
275
|
+
// so the symbol/default/effect can never drift between the surface and the doc.
|
|
276
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
277
|
+
/** One flag-reference row (symbol · config path · default · effect · env). Escaped text. */
|
|
278
|
+
function LifecycleFlagRow({ symbol, configPath, envOverride, defaultValue, effect }) {
|
|
279
|
+
return (_jsxs("div", { "data-testid": "lifecycle-flag", "data-config-path": configPath, style: { display: "flex", flexDirection: "column", gap: 2, padding: "8px 0", borderBottom: "1px solid var(--border-subtle)" }, children: [_jsxs("div", { style: { display: "flex", gap: 10, alignItems: "baseline", flexWrap: "wrap" }, children: [_jsx(Badge, { tone: "honey", mono: true, children: symbol }), _jsx("span", { style: { fontFamily: "var(--font-mono)", fontSize: 12, color: "var(--text-secondary)", wordBreak: "break-all" }, children: configPath }), _jsxs("span", { style: { fontFamily: "var(--font-mono)", fontSize: 11, color: "var(--text-tertiary)" }, children: ["default: ", defaultValue] })] }), _jsx("div", { style: { fontSize: 12, color: "var(--text-tertiary)" }, children: effect }), _jsxs("div", { style: { fontFamily: "var(--font-mono)", fontSize: 10, color: "var(--text-tertiary)" }, children: ["env: ", envOverride] })] }));
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* The lifecycle config reference (PRD-058d AC-55d.1.3): the full `memory.lifecycle.*` flag table on the
|
|
283
|
+
* settings page. Each flag shows its symbol, config path, default, master-equation effect, and env
|
|
284
|
+
* override. Read from the single-sourced {@link LIFECYCLE_FLAG_REFERENCE} so the surface and the config
|
|
285
|
+
* doc never drift. Precedence is documented inline (env > yaml > default) per the `HONEYCOMB_PIPELINE_*`
|
|
286
|
+
* precedent. Non-destructive defaults are visible: `a = 1`, `c = 0`, `s = 0`, auto-resolve `false`.
|
|
287
|
+
*/
|
|
288
|
+
function LifecycleConfigSection() {
|
|
289
|
+
return (_jsx(Panel, { title: "Memory lifecycle", eyebrow: "memory.lifecycle.* \u00B7 symbol \u00B7 default \u00B7 effect", children: _jsxs("div", { "data-testid": "lifecycle-config-reference", style: { display: "flex", flexDirection: "column" }, children: [_jsx("div", { style: { fontFamily: "var(--font-mono)", fontSize: 11, color: "var(--text-tertiary)", marginBottom: 8 }, children: "Precedence: HONEYCOMB_LIFECYCLE_* env > agent.yaml memory.lifecycle.* > the documented default. Defaults are non-destructive \u2014 a = 1, c = 0, s = 0 (posture observe), auto-resolve off." }), LIFECYCLE_FLAG_REFERENCE.map((flag) => (_jsx(LifecycleFlagRow, { ...flag }, flag.configPath)))] }) }));
|
|
290
|
+
}
|
|
291
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
292
|
+
// Embeddings on/off (dashboard action) — turn semantic recall on/off LIVE + persisted.
|
|
293
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
294
|
+
/**
|
|
295
|
+
* The embeddings toggle. Reads the LIVE on/off state from `wire.health()` (`reasons.embeddings`) and
|
|
296
|
+
* flips it through `wire.setEmbeddings(...)`, which actuates the daemon's embed supervisor (spawn+warm
|
|
297
|
+
* / stop) AND persists the choice so it survives a restart. Off = lexical (BM25) recall only. The
|
|
298
|
+
* state re-reads from `health()` after a toggle so the badge reflects the persisted truth, never an
|
|
299
|
+
* optimistic flip.
|
|
300
|
+
*/
|
|
301
|
+
export function EmbeddingsSection({ wire }) {
|
|
302
|
+
// `null` while the first health read is in flight (so we never render a wrong default).
|
|
303
|
+
const [on, setOn] = React.useState(null);
|
|
304
|
+
const [busy, setBusy] = React.useState(false);
|
|
305
|
+
const load = React.useCallback(async () => {
|
|
306
|
+
// Fail-soft like the rest of the dashboard: a failed/absent health read degrades to "off"
|
|
307
|
+
// rather than throwing into React (the badge shows off; the toggle still works).
|
|
308
|
+
try {
|
|
309
|
+
const health = await wire.health();
|
|
310
|
+
setOn(health?.reasons?.embeddings === "on");
|
|
311
|
+
}
|
|
312
|
+
catch {
|
|
313
|
+
setOn(false);
|
|
314
|
+
}
|
|
315
|
+
}, [wire]);
|
|
316
|
+
React.useEffect(() => {
|
|
317
|
+
void load();
|
|
318
|
+
}, [load]);
|
|
319
|
+
const toggle = React.useCallback(async () => {
|
|
320
|
+
if (on === null)
|
|
321
|
+
return;
|
|
322
|
+
setBusy(true);
|
|
323
|
+
const want = !on;
|
|
324
|
+
const ok = await wire.setEmbeddings(want);
|
|
325
|
+
if (ok)
|
|
326
|
+
setOn(want);
|
|
327
|
+
setBusy(false);
|
|
328
|
+
// Re-read the live truth (a disabled toggle may already be reflected; an enable warms async).
|
|
329
|
+
void load();
|
|
330
|
+
}, [on, wire, load]);
|
|
331
|
+
const label = on === null ? "…" : on ? "on" : "off";
|
|
332
|
+
return (_jsx(Panel, { title: "Embeddings", eyebrow: "semantic recall \u00B7 local model", right: _jsx(Badge, { tone: on ? "verified" : "neutral", mono: true, dot: true, children: label }), children: _jsxs("div", { "data-testid": "embeddings-section", style: { display: "flex", alignItems: "center", gap: 12, padding: "10px 6px", flexWrap: "wrap" }, children: [_jsxs("div", { style: { display: "flex", flexDirection: "column", minWidth: 200, flex: 1 }, children: [_jsx("span", { style: { fontSize: 14, color: "var(--text-primary)" }, children: "Semantic vector recall" }), _jsx("span", { style: { fontSize: 12, color: "var(--text-tertiary)" }, children: "On runs the local embedding model for semantic search. Off falls back to lexical (BM25) recall only." })] }), _jsx(Button, { variant: on ? "secondary" : "primary", size: "sm", disabled: busy || on === null, onClick: () => void toggle(), "data-testid": "embeddings-toggle", children: busy ? "saving…" : on ? "Turn off" : "Turn on" })] }) }));
|
|
333
|
+
}
|
|
334
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
335
|
+
// System actions (dashboard) — restart the daemon + uninstall (two-step confirm).
|
|
336
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
337
|
+
/**
|
|
338
|
+
* The destructive system actions, each gated behind an inline two-step confirm (no new modal
|
|
339
|
+
* dependency). Restart respawns the daemon (the page then waits for `/health` to recover); Uninstall
|
|
340
|
+
* returns the guided removal (detected harnesses + the exact `honeycomb uninstall` command — the
|
|
341
|
+
* daemon does not self-remove the page out from under itself). Both POST through the origin/CSRF +
|
|
342
|
+
* local-mode gated `/api/actions` surface.
|
|
343
|
+
*/
|
|
344
|
+
export function SystemActionsSection({ wire }) {
|
|
345
|
+
const [restartConfirm, setRestartConfirm] = React.useState(false);
|
|
346
|
+
const [restarting, setRestarting] = React.useState(false);
|
|
347
|
+
const [uninstallConfirm, setUninstallConfirm] = React.useState(false);
|
|
348
|
+
const [uninstalling, setUninstalling] = React.useState(false);
|
|
349
|
+
const [uninstallResult, setUninstallResult] = React.useState(null);
|
|
350
|
+
const [uninstallError, setUninstallError] = React.useState(false);
|
|
351
|
+
const doRestart = React.useCallback(async () => {
|
|
352
|
+
setRestartConfirm(false);
|
|
353
|
+
setRestarting(true);
|
|
354
|
+
const ok = await wire.restartDaemon();
|
|
355
|
+
// Leave `restarting` true on success — the daemon is going down + coming back; the rest of the
|
|
356
|
+
// dashboard re-hydrates from live endpoints once it answers again. On failure, clear it.
|
|
357
|
+
if (!ok)
|
|
358
|
+
setRestarting(false);
|
|
359
|
+
}, [wire]);
|
|
360
|
+
const doUninstall = React.useCallback(async () => {
|
|
361
|
+
setUninstallConfirm(false);
|
|
362
|
+
setUninstalling(true);
|
|
363
|
+
setUninstallError(false);
|
|
364
|
+
const result = await wire.uninstall();
|
|
365
|
+
// `uninstall()` returns null on a non-2xx / network failure — surface that honestly rather than
|
|
366
|
+
// silently rendering nothing, so the user knows to retry (the wire contract: null = failed).
|
|
367
|
+
setUninstallResult(result);
|
|
368
|
+
setUninstallError(result === null);
|
|
369
|
+
setUninstalling(false);
|
|
370
|
+
}, [wire]);
|
|
371
|
+
return (_jsxs(Panel, { title: "System", eyebrow: "restart \u00B7 uninstall", children: [_jsxs("div", { "data-testid": "system-restart", style: { display: "flex", alignItems: "center", gap: 12, padding: "10px 6px", borderBottom: "1px solid var(--border-subtle)", flexWrap: "wrap" }, children: [_jsxs("div", { style: { display: "flex", flexDirection: "column", minWidth: 200, flex: 1 }, children: [_jsx("span", { style: { fontSize: 14, color: "var(--text-primary)" }, children: "Restart the daemon" }), _jsx("span", { style: { fontSize: 12, color: "var(--text-tertiary)" }, children: "Stops and relaunches the background daemon. The dashboard reconnects automatically." })] }), restarting ? (_jsx("span", { "data-testid": "system-restarting", style: { fontFamily: "var(--font-mono)", fontSize: 12, color: "var(--text-secondary)" }, children: "restarting\u2026" })) : restartConfirm ? (_jsxs("div", { style: { display: "flex", gap: 8 }, children: [_jsx(Button, { variant: "secondary", size: "sm", onClick: () => setRestartConfirm(false), children: "Cancel" }), _jsx(Button, { variant: "danger", size: "sm", onClick: () => void doRestart(), "data-testid": "system-restart-confirm", children: "Confirm restart" })] })) : (_jsx(Button, { variant: "secondary", size: "sm", onClick: () => setRestartConfirm(true), "data-testid": "system-restart-button", children: "Restart" }))] }), _jsxs("div", { "data-testid": "system-uninstall", style: { display: "flex", flexDirection: "column", gap: 8, padding: "10px 6px" }, children: [_jsxs("div", { style: { display: "flex", alignItems: "center", gap: 12, flexWrap: "wrap" }, children: [_jsxs("div", { style: { display: "flex", flexDirection: "column", minWidth: 200, flex: 1 }, children: [_jsx("span", { style: { fontSize: 14, color: "var(--text-primary)" }, children: "Uninstall Honeycomb" }), _jsx("span", { style: { fontSize: 12, color: "var(--text-tertiary)" }, children: "Reverses Honeycomb's changes to your coding assistants. Your DeepLake login is left intact." })] }), uninstallConfirm ? (_jsxs("div", { style: { display: "flex", gap: 8 }, children: [_jsx(Button, { variant: "secondary", size: "sm", onClick: () => setUninstallConfirm(false), children: "Cancel" }), _jsx(Button, { variant: "danger", size: "sm", disabled: uninstalling, onClick: () => void doUninstall(), "data-testid": "system-uninstall-confirm", children: uninstalling ? "Working…" : "Confirm uninstall" })] })) : (_jsx(Button, { variant: "danger", size: "sm", onClick: () => setUninstallConfirm(true), "data-testid": "system-uninstall-button", children: "Uninstall" }))] }), uninstallResult !== null && (_jsxs("div", { "data-testid": "system-uninstall-result", style: { display: "flex", flexDirection: "column", gap: 6, padding: "8px 0" }, children: [_jsx("span", { style: { fontSize: 13, color: "var(--text-secondary)" }, children: uninstallResult.note }), uninstallResult.harnesses.length > 0 && (_jsxs("span", { style: { fontSize: 12, color: "var(--text-tertiary)" }, children: ["Detected: ", uninstallResult.harnesses.join(", ")] })), _jsx("code", { style: { fontFamily: "var(--font-mono)", fontSize: 13, color: "var(--honey)" }, children: uninstallResult.command })] })), uninstallError && (_jsxs("span", { "data-testid": "system-uninstall-error", style: { fontSize: 12, color: "var(--severity-critical)" }, children: ["Could not load uninstall guidance. Retry, or run ", _jsx("code", { style: { fontFamily: "var(--font-mono)" }, children: "honeycomb uninstall" }), " in your terminal."] }))] })] }));
|
|
372
|
+
}
|
|
373
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
374
|
+
// The routed page.
|
|
375
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
376
|
+
/**
|
|
377
|
+
* The Settings page (PRD-044). Hydrates the vault settings + secret-name presence over the shared
|
|
378
|
+
* `wire`, and renders the THREE sections: DeepLake auth (044a), provider keys (044b), and search
|
|
379
|
+
* mode + inference (044c). Every setting/secret write goes through the wire with a persist-then
|
|
380
|
+
* re-read contract — the page never trusts a local-only toggle. NO token/secret value crosses into
|
|
381
|
+
* page state, the DOM, a response, or a log line.
|
|
382
|
+
*/
|
|
383
|
+
export function SettingsPage({ wire }) {
|
|
384
|
+
const [vault, setVault] = React.useState(EMPTY_VAULT_SETTINGS);
|
|
385
|
+
const [secretNames, setSecretNames] = React.useState([]);
|
|
386
|
+
// Hydrate the vault settings + the names-only secret presence (both already-served, secret-free).
|
|
387
|
+
const hydrateSettings = React.useCallback(async () => {
|
|
388
|
+
setVault(await wire.vaultSettings());
|
|
389
|
+
}, [wire]);
|
|
390
|
+
const hydrateSecretNames = React.useCallback(async () => {
|
|
391
|
+
setSecretNames(await wire.secretNames());
|
|
392
|
+
}, [wire]);
|
|
393
|
+
React.useEffect(() => {
|
|
394
|
+
void hydrateSettings();
|
|
395
|
+
void hydrateSecretNames();
|
|
396
|
+
}, [hydrateSettings, hydrateSecretNames]);
|
|
397
|
+
// Persist one setting then RE-READ so the rendered value is the PERSISTED vault value, never a
|
|
398
|
+
// local-only optimistic toggle (mirrors the dashboard `SettingsPanel` contract). A rejected
|
|
399
|
+
// write (the daemon fail-closes an invalid `recallMode`/model) leaves the persisted value
|
|
400
|
+
// unchanged — the re-read reflects whatever actually persisted.
|
|
401
|
+
const onSaveSetting = React.useCallback(async (key, value) => {
|
|
402
|
+
const ok = await wire.setSetting(key, value);
|
|
403
|
+
await hydrateSettings();
|
|
404
|
+
return ok;
|
|
405
|
+
}, [wire, hydrateSettings]);
|
|
406
|
+
// PRD-063a (D-2): derive portkeyEnabled from persisted vault settings so the SearchAndInference
|
|
407
|
+
// section can de-emphasize per-provider rows. The raw value is a SettingValueWire (string|number|
|
|
408
|
+
// boolean|"") coming through the tolerant z.record() catch; coerce to boolean explicitly.
|
|
409
|
+
const portkeyEnabled = vault.settings[SETTING_KEY.portkeyEnabled] === true;
|
|
410
|
+
// PRD-063a (a-AC-4): write the PORTKEY_API_KEY secret then re-read the names-only presence so the
|
|
411
|
+
// badge updates. The value is NEVER stored in component state; it is consumed by the key input,
|
|
412
|
+
// cleared immediately on success, and the only trace of it is the names list confirming presence.
|
|
413
|
+
const onSavePortkeyKey = React.useCallback(async (value) => {
|
|
414
|
+
const ok = await wire.setSecret(PROVIDER_KEY_NAME.portkey, value);
|
|
415
|
+
await hydrateSecretNames();
|
|
416
|
+
return ok;
|
|
417
|
+
}, [wire, hydrateSecretNames]);
|
|
418
|
+
return (_jsx(PageFrame, { title: "Settings", eyebrow: "deeplake \u00B7 provider keys \u00B7 search mode", children: _jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 16 }, children: [_jsx(DeeplakeAuthSection, { wire: wire }), _jsx(ProviderKeysSection, { wire: wire, secretNames: secretNames, onSaved: () => void hydrateSecretNames() }), _jsx(EmbeddingsSection, { wire: wire }), _jsx(PortkeyGatewaySection, { settings: vault.settings, secretNames: secretNames, onSaveSetting: onSaveSetting, onSaveKey: onSavePortkeyKey }), _jsx(SearchAndInferenceSection, { settings: vault.settings, catalog: vault.catalog, secretNames: secretNames, onSave: onSaveSetting, portkeyEnabled: portkeyEnabled }), _jsx(LifecycleConfigSection, {}), _jsx(SystemActionsSection, { wire: wire })] }) }));
|
|
419
|
+
}
|
|
420
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../../src/dashboard/web/pages/settings.tsx"],"names":[],"mappings":"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"}
|