@powerhousedao/connect 6.2.3-dev.4 → 6.2.3-dev.41
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/dist/{AddDriveModal-xAw48kdl.js → AddDriveModal-DhNfP94R.js} +5 -5
- package/dist/{AddDriveModal-xAw48kdl.js.map → AddDriveModal-DhNfP94R.js.map} +1 -1
- package/dist/{ClearStorageModal-DLchAUxQ.js → ClearStorageModal-DaNmZ8f2.js} +5 -5
- package/dist/{ClearStorageModal-DLchAUxQ.js.map → ClearStorageModal-DaNmZ8f2.js.map} +1 -1
- package/dist/{ConfirmDocumentUpgradeModal-FUOhZsk7.js → ConfirmDocumentUpgradeModal-DcOZy20m.js} +8 -7
- package/dist/{ConfirmDocumentUpgradeModal-FUOhZsk7.js.map → ConfirmDocumentUpgradeModal-DcOZy20m.js.map} +1 -1
- package/dist/{CookiesPolicyModal-BpyPPyxS.js → CookiesPolicyModal-BLw4pnhn.js} +4 -4
- package/dist/{CookiesPolicyModal-BpyPPyxS.js.map → CookiesPolicyModal-BLw4pnhn.js.map} +1 -1
- package/dist/{CreateDocumentModal-C45W8J0V.js → CreateDocumentModal-Bmv0V-kY.js} +6 -5
- package/dist/{CreateDocumentModal-C45W8J0V.js.map → CreateDocumentModal-Bmv0V-kY.js.map} +1 -1
- package/dist/{DebugSettingsModal-Bg0wn3oX.js → DebugSettingsModal-EYgccEiI.js} +7 -7
- package/dist/{DebugSettingsModal-Bg0wn3oX.js.map → DebugSettingsModal-EYgccEiI.js.map} +1 -1
- package/dist/{DeleteDriveModal-Dug84t1j.js → DeleteDriveModal-CjGnG0ht.js} +5 -5
- package/dist/{DeleteDriveModal-Dug84t1j.js.map → DeleteDriveModal-CjGnG0ht.js.map} +1 -1
- package/dist/{DeleteItemModal-mMzy3V8o.js → DeleteItemModal-BbY_4_xT.js} +5 -5
- package/dist/{DeleteItemModal-mMzy3V8o.js.map → DeleteItemModal-BbY_4_xT.js.map} +1 -1
- package/dist/{DisclaimerModal-DvpD5dPM.js → DisclaimerModal-DuglmEwL.js} +4 -4
- package/dist/{DisclaimerModal-DvpD5dPM.js.map → DisclaimerModal-DuglmEwL.js.map} +1 -1
- package/dist/{DocumentVersionUnsupportedModal-C3Q0V75l.js → DocumentVersionUnsupportedModal-C4fy7fZ6.js} +4 -4
- package/dist/{DocumentVersionUnsupportedModal-C3Q0V75l.js.map → DocumentVersionUnsupportedModal-C4fy7fZ6.js.map} +1 -1
- package/dist/{DownloadDocumentWithErrorsModal-IKl0ljQb.js → DownloadDocumentWithErrorsModal-BsPQ5qgy.js} +6 -5
- package/dist/{DownloadDocumentWithErrorsModal-IKl0ljQb.js.map → DownloadDocumentWithErrorsModal-BsPQ5qgy.js.map} +1 -1
- package/dist/{DriveAuthRequiredModal-DVK7ZQzO.js → DriveAuthRequiredModal-CtsB0kwH.js} +5 -5
- package/dist/{DriveAuthRequiredModal-DVK7ZQzO.js.map → DriveAuthRequiredModal-CtsB0kwH.js.map} +1 -1
- package/dist/{DriveSettingsModal-C6-mRQiv.js → DriveSettingsModal-d1L0eYof.js} +4 -4
- package/dist/{DriveSettingsModal-C6-mRQiv.js.map → DriveSettingsModal-d1L0eYof.js.map} +1 -1
- package/dist/{InspectorModal-DoEQVQYq.js → InspectorModal-Bkry1jv9.js} +61 -21
- package/dist/InspectorModal-Bkry1jv9.js.map +1 -0
- package/dist/{LoginModal-CybbOm3N.js → LoginModal-CI0ogC2-.js} +5 -5
- package/dist/{LoginModal-CybbOm3N.js.map → LoginModal-CI0ogC2-.js.map} +1 -1
- package/dist/{MissingPackageModal-nBnExqO0.js → MissingPackageModal-CjkK_4A7.js} +5 -5
- package/dist/{MissingPackageModal-nBnExqO0.js.map → MissingPackageModal-CjkK_4A7.js.map} +1 -1
- package/dist/{OpenFileDocumentsModal-D50ZOp6U.js → OpenFileDocumentsModal-CEFijapC.js} +8 -7
- package/dist/{OpenFileDocumentsModal-D50ZOp6U.js.map → OpenFileDocumentsModal-CEFijapC.js.map} +1 -1
- package/dist/{SettingsModal-Dj6IQcRU.js → SettingsModal-iBBWf4UN.js} +17 -15
- package/dist/{SettingsModal-Dj6IQcRU.js.map → SettingsModal-iBBWf4UN.js.map} +1 -1
- package/dist/{UpgradeDriveModal-_8t9slxQ.js → UpgradeDriveModal-CXX6D5Au.js} +4 -4
- package/dist/{UpgradeDriveModal-_8t9slxQ.js.map → UpgradeDriveModal-CXX6D5Au.js.map} +1 -1
- package/dist/{app-loader-CKTEeFBT.js → app-loader-BXd5hsez.js} +1160 -1121
- package/dist/app-loader-BXd5hsez.js.map +1 -0
- package/dist/app-loader-D_p85Yp8.js +4 -0
- package/dist/app-skeleton--Me5zlSz.js +112 -0
- package/dist/app-skeleton--Me5zlSz.js.map +1 -0
- package/dist/app-skeleton-CBN4tenZ.js +4 -0
- package/dist/boot-DPNEOI2A.js +210 -0
- package/dist/boot-DPNEOI2A.js.map +1 -0
- package/dist/buffer-DNTcuap_.js +66 -0
- package/dist/buffer-DNTcuap_.js.map +1 -0
- package/dist/{build-info-N9NcY_pl.js → build-info-C7dDerrM.js} +5 -5
- package/dist/{build-info-N9NcY_pl.js.map → build-info-C7dDerrM.js.map} +1 -1
- package/dist/components-CRXekmxS.js +5 -0
- package/dist/{connect.config-DaHDEUrw.js → connect.config-CaXMoB42.js} +24 -12
- package/dist/connect.config-CaXMoB42.js.map +1 -0
- package/dist/{connection-state-3w4liC1X.js → connection-state-Eqc2izmt.js} +6 -6
- package/dist/{connection-state-3w4liC1X.js.map → connection-state-Eqc2izmt.js.map} +1 -1
- package/dist/{cookie-banner-BH6bIq24.js → cookie-banner-BxXvPdIY.js} +6 -6
- package/dist/{cookie-banner-BH6bIq24.js.map → cookie-banner-BxXvPdIY.js.map} +1 -1
- package/dist/{i18n-CWO0vYVd.js → i18n-CTgT1HG-.js} +3 -3
- package/dist/{i18n-CWO0vYVd.js.map → i18n-CTgT1HG-.js.map} +1 -1
- package/dist/{load-BcbPl8PK.js → load--VQTmlAi.js} +13 -11
- package/dist/{load-BcbPl8PK.js.map → load--VQTmlAi.js.map} +1 -1
- package/dist/main.d.ts +2 -1
- package/dist/main.js +8 -8
- package/dist/main.js.map +1 -1
- package/dist/package-manager-BbzIV9aN.js +485 -0
- package/dist/package-manager-BbzIV9aN.js.map +1 -0
- package/dist/{pglite-major-B39aOEiE.js → pglite-major-p4_YefAE.js} +23 -5
- package/dist/pglite-major-p4_YefAE.js.map +1 -0
- package/dist/{pglite-migrate-core-Boxqqx-c.js → pglite-migrate-core-BcXcImng.js} +8 -6
- package/dist/{pglite-migrate-core-Boxqqx-c.js.map → pglite-migrate-core-BcXcImng.js.map} +1 -1
- package/dist/{pglite-seed-BqAUvNFw.js → pglite-seed-Cl2d-iyl.js} +4 -4
- package/dist/{pglite-seed-BqAUvNFw.js.map → pglite-seed-Cl2d-iyl.js.map} +1 -1
- package/dist/pglite.worker.d.ts +2 -1
- package/dist/pglite.worker.js +4 -3
- package/dist/pglite.worker.js.map +1 -1
- package/dist/pglite.worker.legacy.d.ts +2 -1
- package/dist/pglite.worker.legacy.js +4 -3
- package/dist/pglite.worker.legacy.js.map +1 -1
- package/dist/{preferences-store-_5Cw4_YV.js → preferences-store-DZUIAkHE.js} +6 -25
- package/dist/preferences-store-DZUIAkHE.js.map +1 -0
- package/dist/{pwa-manifest-link-DIgOSo2Q.js → pwa-manifest-link-DQRJpF0r.js} +3 -3
- package/dist/{pwa-manifest-link-DIgOSo2Q.js.map → pwa-manifest-link-DQRJpF0r.js.map} +1 -1
- package/dist/{reactor-C8xEzPA1.js → reactor-DnUFDbsP.js} +93 -451
- package/dist/reactor-DnUFDbsP.js.map +1 -0
- package/dist/reactor.worker.d.ts +2 -1
- package/dist/reactor.worker.js +76 -21
- package/dist/reactor.worker.js.map +1 -1
- package/dist/{registerServiceWorker-BSzbNfvz.js → registerServiceWorker-smkROQhm.js} +5 -5
- package/dist/{registerServiceWorker-BSzbNfvz.js.map → registerServiceWorker-smkROQhm.js.map} +1 -1
- package/dist/renown-trust-DRgHpxlZ.js +34 -0
- package/dist/renown-trust-DRgHpxlZ.js.map +1 -0
- package/dist/{runtime-config-DL3QjcfM.js → runtime-config-DtJIUgYw.js} +3 -3
- package/dist/{runtime-config-DL3QjcfM.js.map → runtime-config-DtJIUgYw.js.map} +1 -1
- package/dist/{sentry-QXKgQmr2.js → sentry-jfDyrxdX.js} +3 -3
- package/dist/{sentry-QXKgQmr2.js.map → sentry-jfDyrxdX.js.map} +1 -1
- package/dist/start-connect.d.ts +4 -5
- package/dist/start-connect.d.ts.map +1 -1
- package/dist/start-connect.js +6 -8
- package/dist/start-connect.js.map +1 -1
- package/dist/style.css +2907 -1
- package/dist/{toast-BXIGd4Eb.js → toast-C6WW-_O-.js} +3 -3
- package/dist/{toast-BXIGd4Eb.js.map → toast-C6WW-_O-.js.map} +1 -1
- package/dist/{use-renown-login-Cf3va6u_.js → use-renown-login-BzOSQETV.js} +3 -3
- package/dist/{use-renown-login-Cf3va6u_.js.map → use-renown-login-BzOSQETV.js.map} +1 -1
- package/dist/useIsEmbedded-BWJ0qb7w.js +26 -0
- package/dist/useIsEmbedded-BWJ0qb7w.js.map +1 -0
- package/dist/{useRegistryPackages-BnUcL_nZ.js → useRegistryPackages-Bruz_77X.js} +75 -13
- package/dist/useRegistryPackages-Bruz_77X.js.map +1 -0
- package/package.json +19 -19
- package/style.css +7 -5
- package/dist/InspectorModal-DoEQVQYq.js.map +0 -1
- package/dist/app-loader-B2GI39lp.js +0 -4
- package/dist/app-loader-CKTEeFBT.js.map +0 -1
- package/dist/components-CkldoWSk.js +0 -4
- package/dist/connect.config-DaHDEUrw.js.map +0 -1
- package/dist/pglite-major-B39aOEiE.js.map +0 -1
- package/dist/preferences-store-_5Cw4_YV.js.map +0 -1
- package/dist/reactor-C8xEzPA1.js.map +0 -1
- package/dist/useRegistryPackages-BnUcL_nZ.js.map +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
3
|
-
import {
|
|
4
|
-
import { r as
|
|
5
|
-
import { t as useRegistryPackages } from "./useRegistryPackages-
|
|
6
|
-
import { r as
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9b231b29-9729-5da2-9583-b72cf4ab5924")}catch(e){}}();
|
|
3
|
+
import { r as connectConfig } from "./connect.config-CaXMoB42.js";
|
|
4
|
+
import { r as toast } from "./toast-C6WW-_O-.js";
|
|
5
|
+
import { t as useRegistryPackages } from "./useRegistryPackages-Bruz_77X.js";
|
|
6
|
+
import { a as shortGitSha, n as getGitSha, r as getGitUrl } from "./build-info-C7dDerrM.js";
|
|
7
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
import { t } from "i18next";
|
|
9
9
|
import { useCallback, useMemo, useState } from "react";
|
|
10
|
-
import { DriveCollectionId, closePHModal, deleteDrive, setSelectedDrive, showPHModal, useDriveSystemInfo, useDrives, usePHModal, useSyncList, useVetraPackageManager } from "@powerhousedao/reactor-browser";
|
|
11
10
|
import { About, DangerZone, DefaultEditor, PackageManager, SettingsModal as SettingsModal$1, ThemeSwitch } from "@powerhousedao/design-system/connect";
|
|
11
|
+
import { DriveCollectionId, closePHModal, deleteDrive, setSelectedDrive, showPHModal, useDriveSystemInfo, useDrives, usePHModal, useSyncList, useVetraPackageManager } from "@powerhousedao/reactor-browser";
|
|
12
12
|
import { Icon } from "@powerhousedao/design-system";
|
|
13
13
|
import { getAiSettings, isAiConfigured, updateAiSettings } from "@powerhousedao/reactor-browser/ai";
|
|
14
14
|
import { Bot, CircleHelp, Package, PenLine, TriangleAlert } from "lucide-react";
|
|
@@ -16,7 +16,7 @@ import { Bot, CircleHelp, Package, PenLine, TriangleAlert } from "lucide-react";
|
|
|
16
16
|
var package_default = {
|
|
17
17
|
name: "@powerhousedao/connect",
|
|
18
18
|
productName: "Powerhouse-Connect",
|
|
19
|
-
version: "6.2.3-dev.
|
|
19
|
+
version: "6.2.3-dev.41",
|
|
20
20
|
description: "Powerhouse Connect",
|
|
21
21
|
main: "dist/index.html",
|
|
22
22
|
type: "module",
|
|
@@ -50,6 +50,7 @@ var package_default = {
|
|
|
50
50
|
"./dist/main.js",
|
|
51
51
|
"./dist/start-connect.js",
|
|
52
52
|
"./dist/i18n-*.js",
|
|
53
|
+
"./src/i18n/index.ts",
|
|
53
54
|
"./dist/style.css"
|
|
54
55
|
],
|
|
55
56
|
license: "AGPL-3.0-only",
|
|
@@ -62,7 +63,7 @@ var package_default = {
|
|
|
62
63
|
homepage: "https://github.com/powerhouse-inc/powerhouse#readme",
|
|
63
64
|
scripts: {
|
|
64
65
|
"tsc": "tsc",
|
|
65
|
-
"lint": "
|
|
66
|
+
"lint": "cd ../.. && oxlint apps/connect",
|
|
66
67
|
"test": "vitest --run",
|
|
67
68
|
"dev": "vite dev",
|
|
68
69
|
"build": "pnpm run build:bundle && pnpm run build:css",
|
|
@@ -70,7 +71,6 @@ var package_default = {
|
|
|
70
71
|
"build:css": "pnpm exec tailwindcss -i style.css -o dist/style.css",
|
|
71
72
|
"build:debug": "cross-env PH_DEBUG_BUILD=true vite build",
|
|
72
73
|
"preview": "vite preview",
|
|
73
|
-
"cy:open": "cypress open",
|
|
74
74
|
"docker:build": "docker build -f ./Dockerfile --tag connect-test-dev --build-arg TAG=dev .",
|
|
75
75
|
"docker:run": "docker run -it -p 4000:4000 -v $(realpath ../../../monorepo):/monorepo -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf.template -e PH_CONNECT_BASE_PATH=/develop/powerhouse/connect -e PORT=4000 connect-test-dev"
|
|
76
76
|
},
|
|
@@ -90,6 +90,7 @@ var package_default = {
|
|
|
90
90
|
"@powerhousedao/reactor-mcp": "workspace:*",
|
|
91
91
|
"@powerhousedao/shared": "workspace:*",
|
|
92
92
|
"@powerhousedao/vetra": "workspace:*",
|
|
93
|
+
"@powerhousedao/workflow": "workspace:*",
|
|
93
94
|
"@privy-io/react-auth": "3.35.0",
|
|
94
95
|
"@rainbow-me/rainbowkit": "^2.2.11",
|
|
95
96
|
"@renown/sdk": "workspace:*",
|
|
@@ -123,14 +124,13 @@ var package_default = {
|
|
|
123
124
|
"@types/react-dom": "catalog:",
|
|
124
125
|
"@types/wicg-file-system-access": "^2023.10.7",
|
|
125
126
|
"@vitejs/plugin-react": "catalog:",
|
|
126
|
-
"cypress": "^14.5.4",
|
|
127
127
|
"happy-dom": "^20.8.9",
|
|
128
128
|
"react": "catalog:",
|
|
129
129
|
"react-dom": "catalog:",
|
|
130
130
|
"tailwindcss": "catalog:",
|
|
131
131
|
"tsdown": "catalog:",
|
|
132
|
+
"typescript": "catalog:",
|
|
132
133
|
"vite": "catalog:",
|
|
133
|
-
"vite-bundle-analyzer": "^1.3.6",
|
|
134
134
|
"vite-tsconfig-paths": "catalog:"
|
|
135
135
|
},
|
|
136
136
|
peerDependencies: {
|
|
@@ -220,6 +220,7 @@ function ConnectedDrives() {
|
|
|
220
220
|
}
|
|
221
221
|
function DriveAboutEntry({ drive }) {
|
|
222
222
|
const info = useDriveSystemInfo(drive);
|
|
223
|
+
const name = drive.state.global.name || drive.header.name;
|
|
223
224
|
return /* @__PURE__ */ jsxs("li", {
|
|
224
225
|
className: "text-sm text-foreground",
|
|
225
226
|
children: [
|
|
@@ -227,7 +228,7 @@ function DriveAboutEntry({ drive }) {
|
|
|
227
228
|
className: "flex items-baseline gap-2",
|
|
228
229
|
children: [/* @__PURE__ */ jsx("span", {
|
|
229
230
|
className: "font-medium",
|
|
230
|
-
children:
|
|
231
|
+
children: name
|
|
231
232
|
}), info.status === "ready" && /* @__PURE__ */ jsx("span", {
|
|
232
233
|
className: "text-xs text-muted-foreground",
|
|
233
234
|
children: info.host
|
|
@@ -473,7 +474,8 @@ const ConnectPackageManager = () => {
|
|
|
473
474
|
} else {
|
|
474
475
|
const message = result.error.message;
|
|
475
476
|
console.error(`[Connect][PackageManager] Install failed for "${packageSpec}":`, result.error);
|
|
476
|
-
|
|
477
|
+
const userMessage = /failed to fetch|404|not found/i.test(message) ? `Couldn't install "${packageSpec}". It isn't available on this registry or via npm.` : `Couldn't install "${packageSpec}". Please try again.`;
|
|
478
|
+
toast(userMessage, { type: "error" });
|
|
477
479
|
}
|
|
478
480
|
}
|
|
479
481
|
function handleUninstall(packageName) {
|
|
@@ -565,5 +567,5 @@ const SettingsModal = () => {
|
|
|
565
567
|
//#endregion
|
|
566
568
|
export { SettingsModal };
|
|
567
569
|
|
|
568
|
-
//# sourceMappingURL=SettingsModal-
|
|
569
|
-
//# debugId=
|
|
570
|
+
//# sourceMappingURL=SettingsModal-iBBWf4UN.js.map
|
|
571
|
+
//# debugId=9b231b29-9729-5da2-9583-b72cf4ab5924
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsModal-Dj6IQcRU.js","sources":["../package.json","../src/components/modal/modals/settings/about.tsx","../src/components/modal/modals/settings/ai-assistant.tsx","../src/components/modal/modals/settings/danger-zone.tsx","../src/components/modal/modals/settings/default-editor.tsx","../src/components/modal/modals/settings/package-manager.tsx","../src/components/modal/modals/SettingsModal.tsx"],"sourcesContent":["","import { connectConfig } from \"@powerhousedao/connect/config\";\nimport {\n getGitSha,\n getGitUrl,\n packageJson,\n shortGitSha,\n} from \"@powerhousedao/connect/utils\";\nimport { Icon } from \"@powerhousedao/design-system\";\nimport { About as BaseAbout } from \"@powerhousedao/design-system/connect\";\nimport {\n closePHModal,\n DriveCollectionId,\n showPHModal,\n useDrives,\n useDriveSystemInfo,\n useSyncList,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\nimport { useMemo } from \"react\";\n\nexport const About: React.FC = () => {\n const onOpenInspector = () => {\n closePHModal();\n showPHModal({ type: \"inspector\" });\n };\n\n return (\n <div>\n <BaseAbout\n packageJson={packageJson}\n phCliVersion={\n typeof connectConfig.phCliVersion === \"string\"\n ? connectConfig.phCliVersion\n : undefined\n }\n />\n <AppGitHash />\n <ConnectedDrives />\n <div className=\"bg-background p-3\">\n <h2 className=\"mb-2 font-semibold text-foreground\">Inspector</h2>\n <p className=\"mb-3 text-sm font-normal text-foreground\">\n Explore the local database and sync state for debugging.\n </p>\n <button\n className=\"flex items-center gap-x-2 rounded-md border border-border bg-transparent px-3 py-1 text-sm font-medium text-foreground transition-colors hover:hover-effect\"\n onClick={onOpenInspector}\n type=\"button\"\n >\n Open Inspector <Icon name=\"CircleInfo\" size={16} />\n </button>\n </div>\n </div>\n );\n};\n\nfunction AppGitHash() {\n const sha = getGitSha();\n if (sha === \"unknown\") return null;\n const url = getGitUrl();\n const label = shortGitSha(sha);\n return (\n <div className=\"bg-background p-3 text-sm\">\n <span className=\"font-semibold\">Git hash: </span>\n {url ? (\n <a\n className=\"font-mono underline\"\n href={url}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n title={sha}\n >\n {label}\n </a>\n ) : (\n <span className=\"font-mono\" title={sha}>\n {label}\n </span>\n )}\n </div>\n );\n}\n\nfunction ConnectedDrives() {\n const drives = useDrives() ?? [];\n const remotes = useSyncList();\n\n const remoteDrives = useMemo(\n () =>\n drives.filter((d) =>\n remotes.some((r) =>\n r.meta.collectionId.equals(DriveCollectionId.forDrive(d.header.id)),\n ),\n ),\n [drives, remotes],\n );\n\n return (\n <div className=\"my-4 bg-background p-3\">\n <h2 className=\"mb-2 font-semibold text-foreground\">Connected drives</h2>\n {remoteDrives.length === 0 ? (\n <p className=\"text-sm font-normal text-foreground\">\n No connected remote drives.\n </p>\n ) : (\n <ul className=\"flex flex-col gap-3\">\n {remoteDrives.map((drive) => (\n <DriveAboutEntry key={drive.header.id} drive={drive} />\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nfunction DriveAboutEntry({ drive }: { drive: DocumentDriveDocument }) {\n const info = useDriveSystemInfo(drive);\n const name = drive.state.global.name || drive.header.name;\n\n return (\n <li className=\"text-sm text-foreground\">\n <div className=\"flex items-baseline gap-2\">\n <span className=\"font-medium\">{name}</span>\n {info.status === \"ready\" && (\n <span className=\"text-xs text-muted-foreground\">{info.host}</span>\n )}\n </div>\n {info.status === \"loading\" && (\n <div className=\"mt-1 text-xs text-muted-foreground\">Loading…</div>\n )}\n {info.status === \"error\" && (\n <div className=\"mt-1 text-xs text-destructive\">\n Could not load system info\n </div>\n )}\n {info.status === \"ready\" && (\n <div className=\"mt-1 text-xs text-foreground\">\n <div>\n <span className=\"font-medium\">Version:</span> {info.version}\n </div>\n <div>\n <span className=\"font-medium\">Git hash: </span>\n {info.gitUrl ? (\n <a\n className=\"font-mono hover:underline\"\n href={info.gitUrl}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n title={info.gitHash}\n >\n {shortGitSha(info.gitHash)}\n </a>\n ) : (\n <span className=\"font-mono\" title={info.gitHash}>\n {shortGitSha(info.gitHash)}\n </span>\n )}\n </div>\n </div>\n )}\n {info.status === \"local\" && (\n <div className=\"mt-1 text-xs text-muted-foreground\">\n Local drive — N/A\n </div>\n )}\n </li>\n );\n}\n","import {\n getAiSettings,\n isAiConfigured,\n updateAiSettings,\n type AiSettings,\n} from \"@powerhousedao/reactor-browser/ai\";\nimport { Bot } from \"lucide-react\";\nimport { useState } from \"react\";\n\ntype TestState =\n | { status: \"idle\" }\n | { status: \"testing\" }\n | { status: \"ok\"; message: string }\n | { status: \"error\"; message: string };\n\nconst FIELD_CLASS =\n \"w-full rounded-md border border-border bg-background p-2.5 text-sm text-foreground outline-none placeholder:text-muted-foreground\";\n\n/**\n * Settings-modal section for the in-browser AI assistant: the user master\n * toggle, the OpenAI-compatible endpoint configuration, and a\n * save-and-test-connection action. Only mounted when the deployment\n * enables the feature (`connect.ai.assistantEnabled`).\n */\nexport const AiAssistant: React.FC = () => {\n const [draft, setDraft] = useState<AiSettings>(() => getAiSettings());\n const [test, setTest] = useState<TestState>({ status: \"idle\" });\n\n const patch = (value: Partial<AiSettings>) =>\n setDraft((d) => ({ ...d, ...value }));\n\n const saveAndTest = async () => {\n updateAiSettings(draft);\n if (!isAiConfigured(draft)) {\n setTest({\n status: \"error\",\n message: \"Base URL, API key and model are all required.\",\n });\n return;\n }\n setTest({ status: \"testing\" });\n try {\n const base = draft.baseUrl.trim().replace(/\\/+$/, \"\");\n const res = await fetch(`${base}/models`, {\n headers: draft.apiKey.trim()\n ? { Authorization: `Bearer ${draft.apiKey.trim()}` }\n : undefined,\n });\n if (!res.ok) {\n throw new Error(\n `HTTP ${res.status}${res.statusText ? ` ${res.statusText}` : \"\"}`,\n );\n }\n const data: unknown = await res.json();\n const list = (data as { data?: unknown[] } | null)?.data;\n const count = Array.isArray(list) ? list.length : 0;\n setTest({\n status: \"ok\",\n message: count\n ? `Connected — ${count} model(s) available.`\n : \"Connected.\",\n });\n } catch (error) {\n setTest({\n status: \"error\",\n message: `Connection failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n });\n }\n };\n\n return (\n <div className=\"space-y-4 p-1\">\n <div>\n <h3 className=\"flex items-center gap-2 text-sm font-semibold text-foreground\">\n <Bot size={16} /> AI Assistant\n </h3>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n An in-page assistant that creates and changes documents, manages\n drives, and inspects read models through an OpenAI-compatible\n endpoint.\n </p>\n </div>\n\n <label className=\"flex items-center gap-2 text-sm text-foreground\">\n <input\n type=\"checkbox\"\n checked={draft.enabled}\n onChange={(event) => {\n patch({ enabled: event.target.checked });\n // The switch acts immediately: the FAB mounts/unmounts at once.\n updateAiSettings({ enabled: event.target.checked });\n }}\n />\n Enable AI assistant\n </label>\n\n {draft.enabled && (\n <div className=\"space-y-2 rounded-lg border border-border p-3\">\n <div className=\"mb-1 text-xs font-semibold tracking-wide text-muted-foreground uppercase\">\n Endpoint\n </div>\n <input\n type=\"url\"\n placeholder=\"Base URL (e.g. https://api.openai.com/v1)\"\n value={draft.baseUrl}\n onChange={(e) => patch({ baseUrl: e.target.value })}\n className={FIELD_CLASS}\n spellCheck={false}\n />\n <input\n type=\"password\"\n placeholder=\"API key\"\n value={draft.apiKey}\n onChange={(e) => patch({ apiKey: e.target.value })}\n className={FIELD_CLASS}\n autoComplete=\"off\"\n spellCheck={false}\n />\n <input\n type=\"text\"\n placeholder=\"Model (e.g. gpt-4o-mini)\"\n value={draft.model}\n onChange={(e) => patch({ model: e.target.value })}\n className={FIELD_CLASS}\n spellCheck={false}\n />\n <label className=\"flex items-center gap-2 pt-1 text-sm text-foreground\">\n <input\n type=\"checkbox\"\n checked={draft.autoApproveWrites}\n onChange={(event) =>\n patch({ autoApproveWrites: event.target.checked })\n }\n />\n Auto-approve write actions\n </label>\n <p className=\"text-xs text-muted-foreground\">\n Requests go directly from this browser to the endpoint; the API key\n is never sent to Powerhouse servers. The endpoint must allow\n cross-origin (CORS) requests from this site.\n </p>\n <div className=\"flex items-center gap-3 pt-1\">\n <button\n type=\"button\"\n onClick={() => void saveAndTest()}\n disabled={test.status === \"testing\"}\n className=\"rounded-md bg-primary px-3 py-1.5 text-sm font-semibold text-primary-foreground hover:bg-primary/90 disabled:disabled-effect\"\n >\n {test.status === \"testing\"\n ? \"Testing…\"\n : \"Save & test connection\"}\n </button>\n {test.status === \"ok\" && (\n <span className=\"text-xs text-foreground\">{test.message}</span>\n )}\n {test.status === \"error\" && (\n <span className=\"text-xs text-destructive\">{test.message}</span>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n","import { DangerZone as BaseDangerZone } from \"@powerhousedao/design-system/connect\";\nimport {\n deleteDrive,\n setSelectedDrive,\n showPHModal,\n useDrives,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\n\nexport const DangerZone: React.FC = () => {\n const drives = useDrives();\n\n const handleDeleteDrive = async (drive: DocumentDriveDocument) => {\n await deleteDrive(drive.header.id);\n setSelectedDrive(undefined);\n };\n\n const handleClearStorage = () => {\n showPHModal({ type: \"clearStorage\" });\n };\n\n return (\n <BaseDangerZone\n drives={drives ?? []}\n onDeleteDrive={(drive) => {\n void handleDeleteDrive(drive);\n }}\n onClearStorage={handleClearStorage}\n />\n );\n};\n","import { DefaultEditor as BaseDefaultEditor } from \"@powerhousedao/design-system/connect\";\nimport { useCallback, useState } from \"react\";\n\nconst documentModelEditorOptions = [\n { label: \"V1\", value: \"document-model-editor\" },\n { label: \"V2\", value: \"document-model-editor-v2\" },\n] as const;\n\nexport const DefaultEditor: React.FC = () => {\n const [documentModelEditor, setDocumentModelEditor] = useState<\n (typeof documentModelEditorOptions)[number]\n >(documentModelEditorOptions[1]);\n\n const handleSetDocumentEditor = useCallback((value: string) => {\n const option = documentModelEditorOptions.find((dm) => dm.value == value);\n if (option) {\n setDocumentModelEditor(option);\n }\n }, []);\n\n return (\n <BaseDefaultEditor\n documentModelEditor={documentModelEditor.value}\n setDocumentModelEditor={handleSetDocumentEditor}\n documentModelEditorOptions={\n documentModelEditorOptions as unknown as {\n value: string;\n label: string;\n }[]\n }\n />\n );\n};\n","import { useRegistryPackages } from \"@powerhousedao/connect/hooks\";\nimport { toast } from \"@powerhousedao/connect/services\";\nimport { PackageManager } from \"@powerhousedao/design-system/connect\";\nimport { useVetraPackageManager } from \"@powerhousedao/reactor-browser\";\nimport React from \"react\";\n\n/**\n * Split a `name@tag` spec into its bare package name. Mirrors the design-system's\n * `parsePackageSpec` — duplicated here to avoid reaching into a deep subpath\n * export. Scoped names split on the LAST `@`, unscoped on the first.\n */\nfunction parseBareName(spec: string): string {\n const trimmed = spec.trim();\n const at = trimmed.startsWith(\"@\")\n ? trimmed.lastIndexOf(\"@\")\n : trimmed.indexOf(\"@\");\n return at > 0 ? trimmed.slice(0, at) : trimmed;\n}\n\nexport const ConnectPackageManager: React.FC = () => {\n const packageManager = useVetraPackageManager();\n const {\n registryPackageList,\n installedPackages,\n availablePackages,\n availableHasMore,\n isLoadingAvailable,\n isLoadingMoreAvailable,\n availableError,\n ensureAvailableLoaded,\n ensureInstalledMetadataLoaded,\n fetchAvailablePage,\n loadMoreAvailable,\n setAvailableSearch,\n updateRegistryPackageStatus,\n registerFallbackRegistryPackage,\n } = useRegistryPackages();\n\n async function handleInstall(packageSpec: string) {\n if (!packageManager) return;\n\n // The spec may include an explicit `@tag` / `@version` suffix from the\n // search input. Pass it through to the package manager as-is (the CDN\n // route already handles `name@tag` specs), but track status under the\n // bare name so the Settings list doesn't fragment.\n const bareName = parseBareName(packageSpec);\n // Packages that were in `/packages` when the user clicked Install go\n // through `updateRegistryPackageStatus` and hit an existing entry.\n // Packages that landed via the npm-uplink fallback weren't in the list,\n // so we register them explicitly rather than silently upserting a\n // placeholder — keeping the \"does not exist\" error as a signal for any\n // other code path that reaches update without a matching entry.\n const wasKnownToRegistry = registryPackageList.some(\n (p) => p.name === bareName,\n );\n const result = await packageManager.addPackage(packageSpec);\n if (result.type === \"success\") {\n if (wasKnownToRegistry) {\n updateRegistryPackageStatus(bareName, \"registry-install\");\n } else {\n registerFallbackRegistryPackage(\n bareName,\n result.package,\n packageManager.getPackageVersion(bareName) ??\n packageManager.getPackageVersion(packageSpec),\n \"registry-install\",\n );\n }\n toast(`Package \"${packageSpec}\" installed successfully`, {\n type: \"connect-success\",\n });\n } else {\n const message = result.error.message;\n console.error(\n `[Connect][PackageManager] Install failed for \"${packageSpec}\":`,\n result.error,\n );\n // `BrowserPackageManager` raises a generic \"Failed to fetch dynamically\n // imported module\" when the registry CDN returns an error. That covers\n // both \"the name exists nowhere (not on this registry AND not on the\n // npmjs uplink)\" and \"the tarball is there but doesn't look like a\n // Powerhouse package\". Map to plain-language copy — never dump the raw\n // API / loader message into the toast.\n const isLikelyNotFound = /failed to fetch|404|not found/i.test(message);\n const userMessage = isLikelyNotFound\n ? `Couldn't install \"${packageSpec}\". It isn't available on this registry or via npm.`\n : `Couldn't install \"${packageSpec}\". Please try again.`;\n toast(userMessage, { type: \"error\" });\n }\n }\n\n function handleUninstall(packageName: string) {\n if (!packageManager) return;\n try {\n packageManager.removePackage(packageName);\n updateRegistryPackageStatus(packageName, \"available\");\n\n toast(`Package \"${packageName}\" uninstalled successfully`, {\n type: \"connect-success\",\n });\n } catch (error) {\n console.error(\n `[Connect][PackageManager] Uninstall failed for \"${packageName}\":`,\n error,\n );\n toast(`Couldn't uninstall \"${packageName}\". Please try again.`, {\n type: \"error\",\n });\n }\n }\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <PackageManager\n mutable={true}\n installedPackages={installedPackages}\n availablePackages={availablePackages}\n isAvailableLoading={isLoadingAvailable}\n isLoadingMoreAvailable={isLoadingMoreAvailable}\n hasMoreAvailable={availableHasMore}\n onLoadMoreAvailable={loadMoreAvailable}\n availableError={availableError}\n onAvailableRetry={() => {\n void fetchAvailablePage({ reset: true });\n }}\n onAvailableSearchChange={setAvailableSearch}\n onAvailableTabOpen={ensureAvailableLoaded}\n onInstalledTabOpen={ensureInstalledMetadataLoaded}\n onInstall={handleInstall}\n onUninstall={handleUninstall}\n />\n </div>\n );\n};\n","import {\n SettingsModal as SettingsModalV2,\n ThemeSwitch,\n} from \"@powerhousedao/design-system/connect\";\nimport { connectConfig } from \"@powerhousedao/connect/config\";\nimport { closePHModal, usePHModal } from \"@powerhousedao/reactor-browser\";\nimport { t } from \"i18next\";\nimport { Bot, CircleHelp, Package, PenLine, TriangleAlert } from \"lucide-react\";\nimport React, { useMemo } from \"react\";\nimport { About } from \"./settings/about.js\";\nimport { AiAssistant } from \"./settings/ai-assistant.js\";\nimport { DangerZone } from \"./settings/danger-zone.js\";\nimport { DefaultEditor } from \"./settings/default-editor.js\";\nimport { ConnectPackageManager } from \"./settings/package-manager.js\";\n\nconst iconProps = { size: 16 } as const;\n\nexport const SettingsModal: React.FC = () => {\n const phModal = usePHModal();\n const open = phModal?.type === \"settings\";\n\n const tabs = useMemo(\n () => [\n ...(connectConfig.aiAssistantEnabled\n ? [\n {\n id: \"ai-assistant\",\n icon: <Bot {...iconProps} />,\n label: \"AI Assistant\",\n content: AiAssistant,\n },\n ]\n : []),\n {\n id: \"package-manager\",\n icon: <Package {...iconProps} />,\n label: \"Package Manager\",\n content: ConnectPackageManager,\n },\n {\n id: \"default-editors\",\n icon: <PenLine {...iconProps} />,\n label: \"Default Editors\",\n content: DefaultEditor,\n },\n {\n id: \"danger-zone\",\n icon: <TriangleAlert {...iconProps} className=\"text-destructive\" />,\n label: <span className=\"text-destructive\">Danger Zone</span>,\n content: () => <DangerZone />,\n },\n {\n id: \"about\",\n icon: <CircleHelp {...iconProps} />,\n label: \"About\",\n content: About,\n },\n ],\n [],\n );\n\n return (\n <SettingsModalV2\n open={open}\n title={t(\"modals.connectSettings.title\")}\n onOpenChange={(status: boolean) => {\n if (!status) return closePHModal();\n }}\n tabs={tabs}\n navFooter={<ThemeSwitch horizontal />}\n />\n );\n};\n"],"names":["About","BaseAbout","packageJson","DangerZone","BaseDangerZone","DefaultEditor","BaseDefaultEditor","DefaultEditor","DangerZone","About","SettingsModalV2"],"mappings":"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","debug_id":"a492b9f4-0de3-5007-a8ae-7ccbba25ccbf"}
|
|
1
|
+
{"version":3,"file":"SettingsModal-iBBWf4UN.js","sources":["../package.json","../src/components/modal/modals/settings/about.tsx","../src/components/modal/modals/settings/ai-assistant.tsx","../src/components/modal/modals/settings/danger-zone.tsx","../src/components/modal/modals/settings/default-editor.tsx","../src/components/modal/modals/settings/package-manager.tsx","../src/components/modal/modals/SettingsModal.tsx"],"sourcesContent":["","import { connectConfig } from \"@powerhousedao/connect/config\";\nimport {\n getGitSha,\n getGitUrl,\n packageJson,\n shortGitSha,\n} from \"@powerhousedao/connect/utils\";\nimport { Icon } from \"@powerhousedao/design-system\";\nimport { About as BaseAbout } from \"@powerhousedao/design-system/connect\";\nimport {\n closePHModal,\n DriveCollectionId,\n showPHModal,\n useDrives,\n useDriveSystemInfo,\n useSyncList,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\nimport { useMemo } from \"react\";\n\nexport const About: React.FC = () => {\n const onOpenInspector = () => {\n closePHModal();\n showPHModal({ type: \"inspector\" });\n };\n\n return (\n <div>\n <BaseAbout\n packageJson={packageJson}\n phCliVersion={\n typeof connectConfig.phCliVersion === \"string\"\n ? connectConfig.phCliVersion\n : undefined\n }\n />\n <AppGitHash />\n <ConnectedDrives />\n <div className=\"bg-background p-3\">\n <h2 className=\"mb-2 font-semibold text-foreground\">Inspector</h2>\n <p className=\"mb-3 text-sm font-normal text-foreground\">\n Explore the local database and sync state for debugging.\n </p>\n <button\n className=\"flex items-center gap-x-2 rounded-md border border-border bg-transparent px-3 py-1 text-sm font-medium text-foreground transition-colors hover:hover-effect\"\n onClick={onOpenInspector}\n type=\"button\"\n >\n Open Inspector <Icon name=\"CircleInfo\" size={16} />\n </button>\n </div>\n </div>\n );\n};\n\nfunction AppGitHash() {\n const sha = getGitSha();\n if (sha === \"unknown\") return null;\n const url = getGitUrl();\n const label = shortGitSha(sha);\n return (\n <div className=\"bg-background p-3 text-sm\">\n <span className=\"font-semibold\">Git hash: </span>\n {url ? (\n <a\n className=\"font-mono underline\"\n href={url}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n title={sha}\n >\n {label}\n </a>\n ) : (\n <span className=\"font-mono\" title={sha}>\n {label}\n </span>\n )}\n </div>\n );\n}\n\nfunction ConnectedDrives() {\n const drives = useDrives() ?? [];\n const remotes = useSyncList();\n\n const remoteDrives = useMemo(\n () =>\n drives.filter((d) =>\n remotes.some((r) =>\n r.meta.collectionId.equals(DriveCollectionId.forDrive(d.header.id)),\n ),\n ),\n [drives, remotes],\n );\n\n return (\n <div className=\"my-4 bg-background p-3\">\n <h2 className=\"mb-2 font-semibold text-foreground\">Connected drives</h2>\n {remoteDrives.length === 0 ? (\n <p className=\"text-sm font-normal text-foreground\">\n No connected remote drives.\n </p>\n ) : (\n <ul className=\"flex flex-col gap-3\">\n {remoteDrives.map((drive) => (\n <DriveAboutEntry key={drive.header.id} drive={drive} />\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nfunction DriveAboutEntry({ drive }: { drive: DocumentDriveDocument }) {\n const info = useDriveSystemInfo(drive);\n const name = drive.state.global.name || drive.header.name;\n\n return (\n <li className=\"text-sm text-foreground\">\n <div className=\"flex items-baseline gap-2\">\n <span className=\"font-medium\">{name}</span>\n {info.status === \"ready\" && (\n <span className=\"text-xs text-muted-foreground\">{info.host}</span>\n )}\n </div>\n {info.status === \"loading\" && (\n <div className=\"mt-1 text-xs text-muted-foreground\">Loading…</div>\n )}\n {info.status === \"error\" && (\n <div className=\"mt-1 text-xs text-destructive\">\n Could not load system info\n </div>\n )}\n {info.status === \"ready\" && (\n <div className=\"mt-1 text-xs text-foreground\">\n <div>\n <span className=\"font-medium\">Version:</span> {info.version}\n </div>\n <div>\n <span className=\"font-medium\">Git hash: </span>\n {info.gitUrl ? (\n <a\n className=\"font-mono hover:underline\"\n href={info.gitUrl}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n title={info.gitHash}\n >\n {shortGitSha(info.gitHash)}\n </a>\n ) : (\n <span className=\"font-mono\" title={info.gitHash}>\n {shortGitSha(info.gitHash)}\n </span>\n )}\n </div>\n </div>\n )}\n {info.status === \"local\" && (\n <div className=\"mt-1 text-xs text-muted-foreground\">\n Local drive — N/A\n </div>\n )}\n </li>\n );\n}\n","import {\n getAiSettings,\n isAiConfigured,\n updateAiSettings,\n type AiSettings,\n} from \"@powerhousedao/reactor-browser/ai\";\nimport { Bot } from \"lucide-react\";\nimport { useState } from \"react\";\n\ntype TestState =\n | { status: \"idle\" }\n | { status: \"testing\" }\n | { status: \"ok\"; message: string }\n | { status: \"error\"; message: string };\n\nconst FIELD_CLASS =\n \"w-full rounded-md border border-border bg-background p-2.5 text-sm text-foreground outline-none placeholder:text-muted-foreground\";\n\n/**\n * Settings-modal section for the in-browser AI assistant: the user master\n * toggle, the OpenAI-compatible endpoint configuration, and a\n * save-and-test-connection action. Only mounted when the deployment\n * enables the feature (`connect.ai.assistantEnabled`).\n */\nexport const AiAssistant: React.FC = () => {\n const [draft, setDraft] = useState<AiSettings>(() => getAiSettings());\n const [test, setTest] = useState<TestState>({ status: \"idle\" });\n\n const patch = (value: Partial<AiSettings>) =>\n setDraft((d) => ({ ...d, ...value }));\n\n const saveAndTest = async () => {\n updateAiSettings(draft);\n if (!isAiConfigured(draft)) {\n setTest({\n status: \"error\",\n message: \"Base URL, API key and model are all required.\",\n });\n return;\n }\n setTest({ status: \"testing\" });\n try {\n const base = draft.baseUrl.trim().replace(/\\/+$/, \"\");\n const res = await fetch(`${base}/models`, {\n headers: draft.apiKey.trim()\n ? { Authorization: `Bearer ${draft.apiKey.trim()}` }\n : undefined,\n });\n if (!res.ok) {\n throw new Error(\n `HTTP ${res.status}${res.statusText ? ` ${res.statusText}` : \"\"}`,\n );\n }\n const data: unknown = await res.json();\n const list = (data as { data?: unknown[] } | null)?.data;\n const count = Array.isArray(list) ? list.length : 0;\n setTest({\n status: \"ok\",\n message: count\n ? `Connected — ${count} model(s) available.`\n : \"Connected.\",\n });\n } catch (error) {\n setTest({\n status: \"error\",\n message: `Connection failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n });\n }\n };\n\n return (\n <div className=\"space-y-4 p-1\">\n <div>\n <h3 className=\"flex items-center gap-2 text-sm font-semibold text-foreground\">\n <Bot size={16} /> AI Assistant\n </h3>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n An in-page assistant that creates and changes documents, manages\n drives, and inspects read models through an OpenAI-compatible\n endpoint.\n </p>\n </div>\n\n <label className=\"flex items-center gap-2 text-sm text-foreground\">\n <input\n type=\"checkbox\"\n checked={draft.enabled}\n onChange={(event) => {\n patch({ enabled: event.target.checked });\n // The switch acts immediately: the FAB mounts/unmounts at once.\n updateAiSettings({ enabled: event.target.checked });\n }}\n />\n Enable AI assistant\n </label>\n\n {draft.enabled && (\n <div className=\"space-y-2 rounded-lg border border-border p-3\">\n <div className=\"mb-1 text-xs font-semibold tracking-wide text-muted-foreground uppercase\">\n Endpoint\n </div>\n <input\n type=\"url\"\n placeholder=\"Base URL (e.g. https://api.openai.com/v1)\"\n value={draft.baseUrl}\n onChange={(e) => patch({ baseUrl: e.target.value })}\n className={FIELD_CLASS}\n spellCheck={false}\n />\n <input\n type=\"password\"\n placeholder=\"API key\"\n value={draft.apiKey}\n onChange={(e) => patch({ apiKey: e.target.value })}\n className={FIELD_CLASS}\n autoComplete=\"off\"\n spellCheck={false}\n />\n <input\n type=\"text\"\n placeholder=\"Model (e.g. gpt-4o-mini)\"\n value={draft.model}\n onChange={(e) => patch({ model: e.target.value })}\n className={FIELD_CLASS}\n spellCheck={false}\n />\n <label className=\"flex items-center gap-2 pt-1 text-sm text-foreground\">\n <input\n type=\"checkbox\"\n checked={draft.autoApproveWrites}\n onChange={(event) =>\n patch({ autoApproveWrites: event.target.checked })\n }\n />\n Auto-approve write actions\n </label>\n <p className=\"text-xs text-muted-foreground\">\n Requests go directly from this browser to the endpoint; the API key\n is never sent to Powerhouse servers. The endpoint must allow\n cross-origin (CORS) requests from this site.\n </p>\n <div className=\"flex items-center gap-3 pt-1\">\n <button\n type=\"button\"\n onClick={() => void saveAndTest()}\n disabled={test.status === \"testing\"}\n className=\"rounded-md bg-primary px-3 py-1.5 text-sm font-semibold text-primary-foreground hover:bg-primary/90 disabled:disabled-effect\"\n >\n {test.status === \"testing\"\n ? \"Testing…\"\n : \"Save & test connection\"}\n </button>\n {test.status === \"ok\" && (\n <span className=\"text-xs text-foreground\">{test.message}</span>\n )}\n {test.status === \"error\" && (\n <span className=\"text-xs text-destructive\">{test.message}</span>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n","import { DangerZone as BaseDangerZone } from \"@powerhousedao/design-system/connect\";\nimport {\n deleteDrive,\n setSelectedDrive,\n showPHModal,\n useDrives,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\n\nexport const DangerZone: React.FC = () => {\n const drives = useDrives();\n\n const handleDeleteDrive = async (drive: DocumentDriveDocument) => {\n await deleteDrive(drive.header.id);\n setSelectedDrive(undefined);\n };\n\n const handleClearStorage = () => {\n showPHModal({ type: \"clearStorage\" });\n };\n\n return (\n <BaseDangerZone\n drives={drives ?? []}\n onDeleteDrive={(drive) => {\n void handleDeleteDrive(drive);\n }}\n onClearStorage={handleClearStorage}\n />\n );\n};\n","import { DefaultEditor as BaseDefaultEditor } from \"@powerhousedao/design-system/connect\";\nimport { useCallback, useState } from \"react\";\n\nconst documentModelEditorOptions = [\n { label: \"V1\", value: \"document-model-editor\" },\n { label: \"V2\", value: \"document-model-editor-v2\" },\n] as const;\n\nexport const DefaultEditor: React.FC = () => {\n const [documentModelEditor, setDocumentModelEditor] = useState<\n (typeof documentModelEditorOptions)[number]\n >(documentModelEditorOptions[1]);\n\n const handleSetDocumentEditor = useCallback((value: string) => {\n const option = documentModelEditorOptions.find((dm) => dm.value == value);\n if (option) {\n setDocumentModelEditor(option);\n }\n }, []);\n\n return (\n <BaseDefaultEditor\n documentModelEditor={documentModelEditor.value}\n setDocumentModelEditor={handleSetDocumentEditor}\n documentModelEditorOptions={\n documentModelEditorOptions as unknown as {\n value: string;\n label: string;\n }[]\n }\n />\n );\n};\n","import { useRegistryPackages } from \"@powerhousedao/connect/hooks\";\nimport { toast } from \"@powerhousedao/connect/services\";\nimport { PackageManager } from \"@powerhousedao/design-system/connect\";\nimport { useVetraPackageManager } from \"@powerhousedao/reactor-browser\";\nimport React from \"react\";\n\n/**\n * Split a `name@tag` spec into its bare package name. Mirrors the design-system's\n * `parsePackageSpec` — duplicated here to avoid reaching into a deep subpath\n * export. Scoped names split on the LAST `@`, unscoped on the first.\n */\nfunction parseBareName(spec: string): string {\n const trimmed = spec.trim();\n const at = trimmed.startsWith(\"@\")\n ? trimmed.lastIndexOf(\"@\")\n : trimmed.indexOf(\"@\");\n return at > 0 ? trimmed.slice(0, at) : trimmed;\n}\n\nexport const ConnectPackageManager: React.FC = () => {\n const packageManager = useVetraPackageManager();\n const {\n registryPackageList,\n installedPackages,\n availablePackages,\n availableHasMore,\n isLoadingAvailable,\n isLoadingMoreAvailable,\n availableError,\n ensureAvailableLoaded,\n ensureInstalledMetadataLoaded,\n fetchAvailablePage,\n loadMoreAvailable,\n setAvailableSearch,\n updateRegistryPackageStatus,\n registerFallbackRegistryPackage,\n } = useRegistryPackages();\n\n async function handleInstall(packageSpec: string) {\n if (!packageManager) return;\n\n // The spec may include an explicit `@tag` / `@version` suffix from the\n // search input. Pass it through to the package manager as-is (the CDN\n // route already handles `name@tag` specs), but track status under the\n // bare name so the Settings list doesn't fragment.\n const bareName = parseBareName(packageSpec);\n // Packages that were in `/packages` when the user clicked Install go\n // through `updateRegistryPackageStatus` and hit an existing entry.\n // Packages that landed via the npm-uplink fallback weren't in the list,\n // so we register them explicitly rather than silently upserting a\n // placeholder — keeping the \"does not exist\" error as a signal for any\n // other code path that reaches update without a matching entry.\n const wasKnownToRegistry = registryPackageList.some(\n (p) => p.name === bareName,\n );\n const result = await packageManager.addPackage(packageSpec);\n if (result.type === \"success\") {\n if (wasKnownToRegistry) {\n updateRegistryPackageStatus(bareName, \"registry-install\");\n } else {\n registerFallbackRegistryPackage(\n bareName,\n result.package,\n packageManager.getPackageVersion(bareName) ??\n packageManager.getPackageVersion(packageSpec),\n \"registry-install\",\n );\n }\n toast(`Package \"${packageSpec}\" installed successfully`, {\n type: \"connect-success\",\n });\n } else {\n const message = result.error.message;\n console.error(\n `[Connect][PackageManager] Install failed for \"${packageSpec}\":`,\n result.error,\n );\n // `BrowserPackageManager` raises a generic \"Failed to fetch dynamically\n // imported module\" when the registry CDN returns an error. That covers\n // both \"the name exists nowhere (not on this registry AND not on the\n // npmjs uplink)\" and \"the tarball is there but doesn't look like a\n // Powerhouse package\". Map to plain-language copy — never dump the raw\n // API / loader message into the toast.\n const isLikelyNotFound = /failed to fetch|404|not found/i.test(message);\n const userMessage = isLikelyNotFound\n ? `Couldn't install \"${packageSpec}\". It isn't available on this registry or via npm.`\n : `Couldn't install \"${packageSpec}\". Please try again.`;\n toast(userMessage, { type: \"error\" });\n }\n }\n\n function handleUninstall(packageName: string) {\n if (!packageManager) return;\n try {\n packageManager.removePackage(packageName);\n updateRegistryPackageStatus(packageName, \"available\");\n\n toast(`Package \"${packageName}\" uninstalled successfully`, {\n type: \"connect-success\",\n });\n } catch (error) {\n console.error(\n `[Connect][PackageManager] Uninstall failed for \"${packageName}\":`,\n error,\n );\n toast(`Couldn't uninstall \"${packageName}\". Please try again.`, {\n type: \"error\",\n });\n }\n }\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <PackageManager\n mutable={true}\n installedPackages={installedPackages}\n availablePackages={availablePackages}\n isAvailableLoading={isLoadingAvailable}\n isLoadingMoreAvailable={isLoadingMoreAvailable}\n hasMoreAvailable={availableHasMore}\n onLoadMoreAvailable={loadMoreAvailable}\n availableError={availableError}\n onAvailableRetry={() => {\n void fetchAvailablePage({ reset: true });\n }}\n onAvailableSearchChange={setAvailableSearch}\n onAvailableTabOpen={ensureAvailableLoaded}\n onInstalledTabOpen={ensureInstalledMetadataLoaded}\n onInstall={handleInstall}\n onUninstall={handleUninstall}\n />\n </div>\n );\n};\n","import {\n SettingsModal as SettingsModalV2,\n ThemeSwitch,\n} from \"@powerhousedao/design-system/connect\";\nimport { connectConfig } from \"@powerhousedao/connect/config\";\nimport { closePHModal, usePHModal } from \"@powerhousedao/reactor-browser\";\nimport { t } from \"i18next\";\nimport { Bot, CircleHelp, Package, PenLine, TriangleAlert } from \"lucide-react\";\nimport React, { useMemo } from \"react\";\nimport { About } from \"./settings/about.js\";\nimport { AiAssistant } from \"./settings/ai-assistant.js\";\nimport { DangerZone } from \"./settings/danger-zone.js\";\nimport { DefaultEditor } from \"./settings/default-editor.js\";\nimport { ConnectPackageManager } from \"./settings/package-manager.js\";\n\nconst iconProps = { size: 16 } as const;\n\nexport const SettingsModal: React.FC = () => {\n const phModal = usePHModal();\n const open = phModal?.type === \"settings\";\n\n const tabs = useMemo(\n () => [\n ...(connectConfig.aiAssistantEnabled\n ? [\n {\n id: \"ai-assistant\",\n icon: <Bot {...iconProps} />,\n label: \"AI Assistant\",\n content: AiAssistant,\n },\n ]\n : []),\n {\n id: \"package-manager\",\n icon: <Package {...iconProps} />,\n label: \"Package Manager\",\n content: ConnectPackageManager,\n },\n {\n id: \"default-editors\",\n icon: <PenLine {...iconProps} />,\n label: \"Default Editors\",\n content: DefaultEditor,\n },\n {\n id: \"danger-zone\",\n icon: <TriangleAlert {...iconProps} className=\"text-destructive\" />,\n label: <span className=\"text-destructive\">Danger Zone</span>,\n content: () => <DangerZone />,\n },\n {\n id: \"about\",\n icon: <CircleHelp {...iconProps} />,\n label: \"About\",\n content: About,\n },\n ],\n [],\n );\n\n return (\n <SettingsModalV2\n open={open}\n title={t(\"modals.connectSettings.title\")}\n onOpenChange={(status: boolean) => {\n if (!status) return closePHModal();\n }}\n tabs={tabs}\n navFooter={<ThemeSwitch horizontal />}\n />\n );\n};\n"],"names":["About","BaseAbout","packageJson","DangerZone","BaseDangerZone","DefaultEditor","BaseDefaultEditor","DefaultEditor","DangerZone","About","SettingsModalV2"],"mappings":"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","debug_id":"9b231b29-9729-5da2-9583-b72cf4ab5924"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d05afdb4-8b6f-5d27-8ef7-523366044046")}catch(e){}}();
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
import { useTranslation } from "react-i18next";
|
|
5
5
|
import "react";
|
|
6
|
-
import { closePHModal, usePHModal } from "@powerhousedao/reactor-browser";
|
|
7
6
|
import { ConnectUpgradeDriveModal } from "@powerhousedao/design-system/connect";
|
|
7
|
+
import { closePHModal, usePHModal } from "@powerhousedao/reactor-browser";
|
|
8
8
|
//#region src/components/modal/modals/UpgradeDriveModal.tsx
|
|
9
9
|
const UpgradeDriveModal = () => {
|
|
10
10
|
const phModal = usePHModal();
|
|
@@ -30,5 +30,5 @@ const UpgradeDriveModal = () => {
|
|
|
30
30
|
//#endregion
|
|
31
31
|
export { UpgradeDriveModal };
|
|
32
32
|
|
|
33
|
-
//# sourceMappingURL=UpgradeDriveModal-
|
|
34
|
-
//# debugId=
|
|
33
|
+
//# sourceMappingURL=UpgradeDriveModal-CXX6D5Au.js.map
|
|
34
|
+
//# debugId=d05afdb4-8b6f-5d27-8ef7-523366044046
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpgradeDriveModal-
|
|
1
|
+
{"version":3,"file":"UpgradeDriveModal-CXX6D5Au.js","sources":["../src/components/modal/modals/UpgradeDriveModal.tsx"],"sourcesContent":["import { ConnectUpgradeDriveModal } from \"@powerhousedao/design-system/connect\";\nimport { closePHModal, usePHModal } from \"@powerhousedao/reactor-browser\";\nimport React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const UpgradeDriveModal: React.FC = () => {\n const phModal = usePHModal();\n const open = phModal?.type === \"upgradeDrive\";\n const driveId = open ? phModal.driveId : undefined;\n\n const { t } = useTranslation();\n\n const onContinue = () => {\n // TODO: Implement upgrade drive\n console.log(\"Upgrade drive: \", driveId);\n closePHModal();\n };\n\n return (\n <ConnectUpgradeDriveModal\n open={open}\n onContinue={onContinue}\n header={t(\"modals.upgradeDrive.header\")}\n body={t(\"modals.upgradeDrive.body\")}\n cancelLabel={t(\"common.cancel\")}\n continueLabel={t(\"common.continue\")}\n onOpenChange={(status: boolean) => {\n if (!status) return closePHModal();\n }}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAKA,MAAa,0BAAoC;CAC/C,MAAM,UAAU,WAAW;CAC3B,MAAM,OAAO,SAAS,SAAS;CAC/B,MAAM,UAAU,OAAO,QAAQ,UAAU,KAAA;CAEzC,MAAM,EAAE,MAAM,eAAe;CAE7B,MAAM,mBAAmB;EAEvB,QAAQ,IAAI,mBAAmB,OAAO;EACtC,aAAa;CACf;CAEA,OACE,oBAAC,0BAAD;EACQ;EACM;EACZ,QAAQ,EAAE,4BAA4B;EACtC,MAAM,EAAE,0BAA0B;EAClC,aAAa,EAAE,eAAe;EAC9B,eAAe,EAAE,iBAAiB;EAClC,eAAe,WAAoB;GACjC,IAAI,CAAC,QAAQ,OAAO,aAAa;EACnC;CACD,CAAA;AAEL","debug_id":"d05afdb4-8b6f-5d27-8ef7-523366044046"}
|