@mdwrk/extension-manager 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +38 -0
  2. package/dist/components/ExtensionCard.d.ts +13 -0
  3. package/dist/components/ExtensionCard.d.ts.map +1 -0
  4. package/dist/components/ExtensionCard.js +72 -0
  5. package/dist/components/ExtensionCard.js.map +1 -0
  6. package/dist/components/ExtensionManagerView.d.ts +13 -0
  7. package/dist/components/ExtensionManagerView.d.ts.map +1 -0
  8. package/dist/components/ExtensionManagerView.js +16 -0
  9. package/dist/components/ExtensionManagerView.js.map +1 -0
  10. package/dist/components/ExtensionManifestIcon.d.ts +7 -0
  11. package/dist/components/ExtensionManifestIcon.d.ts.map +1 -0
  12. package/dist/components/ExtensionManifestIcon.js +15 -0
  13. package/dist/components/ExtensionManifestIcon.js.map +1 -0
  14. package/dist/components/ExtensionStatusBadge.d.ts +6 -0
  15. package/dist/components/ExtensionStatusBadge.d.ts.map +1 -0
  16. package/dist/components/ExtensionStatusBadge.js +12 -0
  17. package/dist/components/ExtensionStatusBadge.js.map +1 -0
  18. package/dist/components/SettingsSchemaForm.d.ts +10 -0
  19. package/dist/components/SettingsSchemaForm.d.ts.map +1 -0
  20. package/dist/components/SettingsSchemaForm.js +130 -0
  21. package/dist/components/SettingsSchemaForm.js.map +1 -0
  22. package/dist/constants.d.ts +5 -0
  23. package/dist/constants.d.ts.map +1 -0
  24. package/dist/constants.js +5 -0
  25. package/dist/constants.js.map +1 -0
  26. package/dist/createExtensionManagerBundledEntry.d.ts +4 -0
  27. package/dist/createExtensionManagerBundledEntry.d.ts.map +1 -0
  28. package/dist/createExtensionManagerBundledEntry.js +59 -0
  29. package/dist/createExtensionManagerBundledEntry.js.map +1 -0
  30. package/dist/i18n.d.ts +52 -0
  31. package/dist/i18n.d.ts.map +1 -0
  32. package/dist/i18n.js +63 -0
  33. package/dist/i18n.js.map +1 -0
  34. package/dist/index.d.ts +8 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +8 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/locales/en.d.ts +3 -0
  39. package/dist/locales/en.d.ts.map +1 -0
  40. package/dist/locales/en.js +51 -0
  41. package/dist/locales/en.js.map +1 -0
  42. package/dist/locales/es.d.ts +3 -0
  43. package/dist/locales/es.d.ts.map +1 -0
  44. package/dist/locales/es.js +51 -0
  45. package/dist/locales/es.js.map +1 -0
  46. package/dist/manifest.d.ts +4 -0
  47. package/dist/manifest.d.ts.map +1 -0
  48. package/dist/manifest.js +102 -0
  49. package/dist/manifest.js.map +1 -0
  50. package/dist/types.d.ts +5 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +2 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/version.d.ts +2 -0
  55. package/dist/version.d.ts.map +1 -0
  56. package/dist/version.js +2 -0
  57. package/dist/version.js.map +1 -0
  58. package/package.json +74 -0
package/README.md ADDED
@@ -0,0 +1,38 @@
1
+ # mdwrk/extension-manager
2
+
3
+ First-party bundled operator console extension for Markdown Workspace.
4
+
5
+ ## Purpose
6
+
7
+ This package provides the initial Extension Manager experience required to prove the runtime platform with a real bundled extension.
8
+
9
+ It registers:
10
+ - an Extension Manager view
11
+ - an Extension Manager action-rail entry
12
+ - an open-manager command
13
+ - package-local locale catalogs for localized labels and UI text
14
+
15
+ The manager view shows:
16
+ - bundled and installed extension inventory
17
+ - enabled/disabled state
18
+ - activation mode and status
19
+ - compatibility state
20
+ - granted and missing capabilities
21
+ - runtime diagnostics and last-error data
22
+ - schema-driven settings forms for extensions that declare `settingsSchema`
23
+
24
+ ## Public exports
25
+
26
+ - `createExtensionManagerBundledEntry()`
27
+ - `EXTENSION_MANAGER_EXTENSION_ID`
28
+ - `EXTENSION_MANAGER_VIEW_ID`
29
+ - `EXTENSION_MANAGER_COMMAND_ID`
30
+ - `extensionManagerManifest`
31
+ - `extensionManagerLabels`
32
+ - `extensionManagerLocaleLoader`
33
+
34
+ ## Current status
35
+
36
+ Implemented through Phase 13.
37
+
38
+ This package is publishable and intended for first-party bundling. It can visualize installed external extensions once present in the runtime. Broader interactive catalog-management UI can be layered on top of the runtime APIs without changing the extension contract surface.
@@ -0,0 +1,13 @@
1
+ import type { I18nLabel } from "@mdwrk/extension-manifest";
2
+ import type { ExtensionRuntime, ExtensionRuntimeExtensionSnapshot } from "@mdwrk/extension-runtime";
3
+ export interface ExtensionCardProps {
4
+ readonly extension: ExtensionRuntimeExtensionSnapshot;
5
+ readonly runtime: ExtensionRuntime;
6
+ readonly formatLabel: (label: I18nLabel | string) => string;
7
+ readonly defaults: {
8
+ readonly showCompatibility: boolean;
9
+ readonly showDiagnostics: boolean;
10
+ };
11
+ }
12
+ export declare const ExtensionCard: React.FC<ExtensionCardProps>;
13
+ //# sourceMappingURL=ExtensionCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtensionCard.d.ts","sourceRoot":"","sources":["../../src/components/ExtensionCard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,iCAAiC,EAAE,MAAM,0BAA0B,CAAC;AAOpG,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,iCAAiC,CAAC;IACtD,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,KAAK,MAAM,CAAC;IAC5D,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;QACpC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;KACnC,CAAC;CACH;AAsBD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA6JtD,CAAC"}
@@ -0,0 +1,72 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { AlertTriangle, CheckCircle2, ChevronsUpDown, CircleSlash2, Power, PowerOff } from "lucide-react";
4
+ import { extensionManagerLabels } from "../i18n.js";
5
+ import { ExtensionManifestIcon } from "./ExtensionManifestIcon.js";
6
+ import { ExtensionStatusBadge } from "./ExtensionStatusBadge.js";
7
+ import { SettingsSchemaForm } from "./SettingsSchemaForm.js";
8
+ const detailSummaryStyle = {
9
+ cursor: "pointer",
10
+ fontSize: 11,
11
+ fontWeight: 700,
12
+ textTransform: "uppercase",
13
+ letterSpacing: "0.08em",
14
+ };
15
+ const pillStyle = {
16
+ display: "inline-flex",
17
+ alignItems: "center",
18
+ gap: 4,
19
+ padding: "2px 8px",
20
+ borderRadius: 999,
21
+ border: "1px solid var(--border-primary)",
22
+ fontSize: 10,
23
+ textTransform: "uppercase",
24
+ letterSpacing: "0.08em",
25
+ };
26
+ export const ExtensionCard = ({ extension, runtime, formatLabel, defaults }) => {
27
+ const [showCompatibility, setShowCompatibility] = React.useState(defaults.showCompatibility || !extension.compatibility.compatible);
28
+ const [showDiagnostics, setShowDiagnostics] = React.useState(defaults.showDiagnostics || extension.status === "error");
29
+ const [showSettings, setShowSettings] = React.useState(false);
30
+ const [busy, setBusy] = React.useState(false);
31
+ React.useEffect(() => {
32
+ if (!extension.compatibility.compatible) {
33
+ setShowCompatibility(true);
34
+ }
35
+ if (extension.status === "error") {
36
+ setShowDiagnostics(true);
37
+ }
38
+ }, [extension.compatibility.compatible, extension.status]);
39
+ const toggleEnabled = async () => {
40
+ setBusy(true);
41
+ try {
42
+ await runtime.setEnabled(extension.id, !extension.enabled);
43
+ }
44
+ finally {
45
+ setBusy(false);
46
+ }
47
+ };
48
+ const activate = async () => {
49
+ setBusy(true);
50
+ try {
51
+ await runtime.activate(extension.id);
52
+ }
53
+ finally {
54
+ setBusy(false);
55
+ }
56
+ };
57
+ const deactivate = async () => {
58
+ setBusy(true);
59
+ try {
60
+ await runtime.deactivate(extension.id);
61
+ }
62
+ finally {
63
+ setBusy(false);
64
+ }
65
+ };
66
+ const enableLabel = formatLabel(extensionManagerLabels.actionEnable);
67
+ const disableLabel = formatLabel(extensionManagerLabels.actionDisable);
68
+ const activateLabel = formatLabel(extensionManagerLabels.actionActivate);
69
+ const deactivateLabel = formatLabel(extensionManagerLabels.actionDeactivate);
70
+ return (_jsxs("article", { className: "settings-card settings-card-stack", style: { display: "grid", gap: 14 }, children: [_jsxs("header", { style: { display: "grid", gridTemplateColumns: "auto 1fr auto", gap: 12, alignItems: "start" }, children: [_jsx("div", { style: { display: "inline-flex", width: 30, height: 30, borderRadius: 8, alignItems: "center", justifyContent: "center", border: "1px solid var(--border-primary)" }, children: _jsx(ExtensionManifestIcon, { icon: extension.manifest.icon, size: 18 }) }), _jsxs("div", { style: { display: "grid", gap: 4 }, children: [_jsxs("div", { style: { display: "flex", flexWrap: "wrap", gap: 8, alignItems: "center" }, children: [_jsx("strong", { style: { fontSize: 14 }, children: formatLabel(extension.manifest.displayName) }), _jsx("span", { style: pillStyle, children: extension.source === "bundled" ? formatLabel(extensionManagerLabels.sourceBundled) : formatLabel(extensionManagerLabels.sourceInstalled) }), _jsx(ExtensionStatusBadge, { status: extension.status })] }), _jsx("span", { style: { fontSize: 11, color: "var(--fg-muted)" }, children: extension.id }), _jsx("p", { style: { margin: 0, fontSize: 12, color: "var(--fg-secondary)", lineHeight: 1.6 }, children: formatLabel(extension.manifest.description) })] }), _jsxs("div", { style: { display: "flex", gap: 8, flexWrap: "wrap", justifyContent: "flex-end" }, children: [_jsxs("button", { className: "modal-btn", onClick: () => void toggleEnabled(), disabled: busy, "aria-label": `${extension.enabled ? disableLabel : enableLabel} ${extension.id}`, children: [extension.enabled ? _jsx(PowerOff, { size: 14 }) : _jsx(Power, { size: 14 }), " ", extension.enabled ? disableLabel : enableLabel] }), _jsx("button", { className: "modal-btn modal-btn-primary", onClick: () => void activate(), disabled: busy || !extension.enabled, children: activateLabel }), _jsx("button", { className: "modal-btn", onClick: () => void deactivate(), disabled: busy || extension.status !== "active", children: deactivateLabel })] })] }), _jsxs("div", { className: "settings-session-grid", children: [_jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: formatLabel(extensionManagerLabels.labelPackage) }), _jsx("span", { className: "settings-session-value", children: extension.manifest.packageName })] }), _jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: formatLabel(extensionManagerLabels.labelVersion) }), _jsx("span", { className: "settings-session-value", children: extension.manifest.version })] }), _jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: formatLabel(extensionManagerLabels.labelActivation) }), _jsx("span", { className: "settings-session-value", children: extension.activation })] }), _jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: formatLabel(extensionManagerLabels.labelEnabled) }), _jsx("span", { className: "settings-session-value", children: extension.enabled ? formatLabel(extensionManagerLabels.stateEnabled) : formatLabel(extensionManagerLabels.stateDisabled) })] })] }), _jsxs("section", { style: { display: "grid", gap: 8 }, children: [_jsx("span", { style: { fontSize: 11, fontWeight: 700, textTransform: "uppercase", letterSpacing: "0.08em" }, children: formatLabel(extensionManagerLabels.labelPermissions) }), _jsxs("div", { style: { display: "flex", gap: 8, flexWrap: "wrap" }, children: [extension.grantedCapabilities.map((capability) => (_jsxs("span", { style: pillStyle, children: [_jsx(CheckCircle2, { size: 12 }), " ", capability] }, `granted-${capability}`))), extension.missingCapabilities.map((capability) => (_jsxs("span", { style: pillStyle, children: [_jsx(CircleSlash2, { size: 12 }), " ", capability] }, `missing-${capability}`)))] })] }), _jsxs("details", { open: showCompatibility, onToggle: (event) => setShowCompatibility(event.currentTarget.open), children: [_jsxs("summary", { style: detailSummaryStyle, children: [_jsx(ChevronsUpDown, { size: 12, style: { display: "inline-flex", marginRight: 6 } }), formatLabel(extensionManagerLabels.labelCompatibility)] }), _jsxs("div", { style: { display: "grid", gap: 8, marginTop: 10 }, children: [_jsx("p", { style: { margin: 0, fontSize: 12, color: "var(--fg-secondary)" }, children: extension.compatibility.compatible ? formatLabel(extensionManagerLabels.compatibilityOk) : formatLabel(extensionManagerLabels.compatibilityError) }), !extension.compatibility.compatible && (_jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 12, color: "var(--fg-secondary)", display: "grid", gap: 6 }, children: extension.compatibility.issues.map((issue, index) => (_jsx("li", { children: issue.message }, `${issue.target}-${index}`))) }))] })] }), _jsxs("details", { open: showDiagnostics, onToggle: (event) => setShowDiagnostics(event.currentTarget.open), children: [_jsxs("summary", { style: detailSummaryStyle, children: [_jsx(ChevronsUpDown, { size: 12, style: { display: "inline-flex", marginRight: 6 } }), formatLabel(extensionManagerLabels.labelHealth)] }), _jsxs("div", { style: { display: "grid", gap: 8, marginTop: 10 }, children: [extension.lastError && (_jsxs("div", { style: { display: "grid", gap: 4 }, children: [_jsxs("span", { style: { ...pillStyle, width: "fit-content" }, children: [_jsx(AlertTriangle, { size: 12 }), " ", formatLabel(extensionManagerLabels.lastError)] }), _jsx("p", { style: { margin: 0, fontSize: 12, color: "var(--fg-secondary)" }, children: extension.lastError.message })] })), extension.diagnostics.length > 0 ? (_jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 12, color: "var(--fg-secondary)", display: "grid", gap: 6 }, children: extension.diagnostics.map((record, index) => (_jsxs("li", { children: [record.code, ": ", record.message] }, `${record.code}-${index}`))) })) : !extension.lastError ? (_jsx("p", { style: { margin: 0, fontSize: 12, color: "var(--fg-muted)" }, children: formatLabel(extensionManagerLabels.noDiagnostics) })) : null] })] }), extension.manifest.settingsSchema && (_jsxs("details", { open: showSettings, onToggle: (event) => setShowSettings(event.currentTarget.open), children: [_jsxs("summary", { style: detailSummaryStyle, children: [_jsx(ChevronsUpDown, { size: 12, style: { display: "inline-flex", marginRight: 6 } }), formatLabel(extensionManagerLabels.labelSettings)] }), _jsx("div", { style: { marginTop: 10 }, children: _jsx(SettingsSchemaForm, { runtime: runtime, extensionId: extension.id, schema: extension.manifest.settingsSchema, formatLabel: formatLabel }) })] }))] }));
71
+ };
72
+ //# sourceMappingURL=ExtensionCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtensionCard.js","sourceRoot":"","sources":["../../src/components/ExtensionCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { I18nLabel } from "@mdwrk/extension-manifest";
2
+ import type { ExtensionRuntime } from "@mdwrk/extension-runtime";
3
+ export interface ExtensionManagerViewProps {
4
+ readonly runtime: ExtensionRuntime;
5
+ readonly close: () => Promise<void>;
6
+ readonly formatLabel: (label: I18nLabel | string) => string;
7
+ readonly defaultSettings?: {
8
+ readonly showCompatibility?: boolean;
9
+ readonly showDiagnostics?: boolean;
10
+ };
11
+ }
12
+ export declare const ExtensionManagerView: React.FC<ExtensionManagerViewProps>;
13
+ //# sourceMappingURL=ExtensionManagerView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtensionManagerView.d.ts","sourceRoot":"","sources":["../../src/components/ExtensionManagerView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIjE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,KAAK,MAAM,CAAC;IAC5D,QAAQ,CAAC,eAAe,CAAC,EAAE;QACzB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;QACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;KACpC,CAAC;CACH;AAED,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAiDpE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { useSyncExternalStore } from "react";
3
+ import { extensionManagerLabels } from "../i18n.js";
4
+ import { ExtensionCard } from "./ExtensionCard.js";
5
+ export const ExtensionManagerView = ({ runtime, close, formatLabel, defaultSettings }) => {
6
+ const snapshot = useSyncExternalStore(runtime.subscribe, runtime.getSnapshot, runtime.getSnapshot);
7
+ const defaults = React.useMemo(() => ({
8
+ showCompatibility: defaultSettings?.showCompatibility ?? true,
9
+ showDiagnostics: defaultSettings?.showDiagnostics ?? true,
10
+ }), [defaultSettings]);
11
+ return (_jsx("div", { className: "modal-overlay", "data-testid": "extension-manager-modal", children: _jsxs("div", { className: "modal-base settings-modal", style: { width: "min(1180px, 96vw)" }, children: [_jsxs("div", { className: "modal-header", children: [_jsxs("div", { style: { display: "grid", gap: 4 }, children: [_jsx("span", { className: "modal-title", children: formatLabel(extensionManagerLabels.headerTitle) }), _jsx("span", { style: { fontSize: 11, color: "var(--fg-muted)" }, children: formatLabel(extensionManagerLabels.headerSubtitle) })] }), _jsx("button", { onClick: () => void close(), className: "modal-close", children: formatLabel(extensionManagerLabels.actionExit) })] }), _jsx("div", { className: "settings-content-frame", style: { maxHeight: "72vh", overflow: "auto" }, children: _jsxs("div", { className: "settings-pane", style: { display: "grid", gap: 16 }, children: [_jsx("div", { className: "settings-card settings-card-stack", children: _jsxs("div", { className: "settings-session-grid", children: [_jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: formatLabel(extensionManagerLabels.statsExtensions) }), _jsx("span", { className: "settings-session-value", children: snapshot.extensions.length })] }), _jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: formatLabel(extensionManagerLabels.statsActive) }), _jsx("span", { className: "settings-session-value", children: snapshot.extensions.filter((extension) => extension.status === "active").length })] }), _jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: formatLabel(extensionManagerLabels.statsDisabled) }), _jsx("span", { className: "settings-session-value", children: snapshot.extensions.filter((extension) => !extension.enabled).length })] }), _jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: formatLabel(extensionManagerLabels.statsIncompatible) }), _jsx("span", { className: "settings-session-value", children: snapshot.extensions.filter((extension) => extension.status === "incompatible").length })] })] }) }), snapshot.extensions.map((extension) => (_jsx(ExtensionCard, { extension: extension, runtime: runtime, formatLabel: formatLabel, defaults: {
12
+ showCompatibility: defaults.showCompatibility,
13
+ showDiagnostics: defaults.showDiagnostics,
14
+ } }, extension.id)))] }) }), _jsx("footer", { className: "modal-footer", children: _jsx("button", { onClick: () => void close(), className: "modal-btn modal-btn-primary", children: formatLabel(extensionManagerLabels.actionClose) }) })] }) }));
15
+ };
16
+ //# sourceMappingURL=ExtensionManagerView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtensionManagerView.js","sourceRoot":"","sources":["../../src/components/ExtensionManagerView.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAGpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAYnD,MAAM,CAAC,MAAM,oBAAoB,GAAwC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,EAAE;IAC5H,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAgD,CAAC;IAClJ,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACpC,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,IAAI,IAAI;QAC7D,eAAe,EAAE,eAAe,EAAE,eAAe,IAAI,IAAI;KAC1D,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEvB,OAAO,CACL,cAAK,SAAS,EAAC,eAAe,iBAAa,yBAAyB,YAClE,eAAK,SAAS,EAAC,2BAA2B,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,aAC9E,eAAK,SAAS,EAAC,cAAc,aAC3B,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,aACrC,eAAM,SAAS,EAAC,aAAa,YAAE,WAAW,CAAC,sBAAsB,CAAC,WAAW,CAAC,GAAQ,EACtF,eAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,YACpD,WAAW,CAAC,sBAAsB,CAAC,cAAc,CAAC,GAC9C,IACH,EACN,iBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,KAAK,EAAE,EAAE,SAAS,EAAC,aAAa,YAAE,WAAW,CAAC,sBAAsB,CAAC,UAAU,CAAC,GAAU,IAClH,EACN,cAAK,SAAS,EAAC,wBAAwB,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YACpF,eAAK,SAAS,EAAC,eAAe,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,aAChE,cAAK,SAAS,EAAC,mCAAmC,YAChD,eAAK,SAAS,EAAC,uBAAuB,aACpC,eAAK,SAAS,EAAC,uBAAuB,aAAC,eAAM,SAAS,EAAC,wBAAwB,YAAE,WAAW,CAAC,sBAAsB,CAAC,eAAe,CAAC,GAAQ,EAAA,eAAM,SAAS,EAAC,wBAAwB,YAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAQ,IAAM,EAC9N,eAAK,SAAS,EAAC,uBAAuB,aAAC,eAAM,SAAS,EAAC,wBAAwB,YAAE,WAAW,CAAC,sBAAsB,CAAC,WAAW,CAAC,GAAQ,EAAA,eAAM,SAAS,EAAC,wBAAwB,YAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,GAAQ,IAAM,EAC/Q,eAAK,SAAS,EAAC,uBAAuB,aAAC,eAAM,SAAS,EAAC,wBAAwB,YAAE,WAAW,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAQ,EAAA,eAAM,SAAS,EAAC,wBAAwB,YAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,GAAQ,IAAM,EACtQ,eAAK,SAAS,EAAC,uBAAuB,aAAC,eAAM,SAAS,EAAC,wBAAwB,YAAE,WAAW,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,GAAQ,EAAA,eAAM,SAAS,EAAC,wBAAwB,YAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC,MAAM,GAAQ,IAAM,IACvR,GACF,EACL,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CACtC,KAAC,aAAa,IAEZ,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE;oCACR,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;oCAC7C,eAAe,EAAE,QAAQ,CAAC,eAAe;iCAC1C,IAPI,SAAS,CAAC,EAAE,CAQjB,CACH,CAAC,IACE,GACF,EACN,iBAAQ,SAAS,EAAC,cAAc,YAC9B,iBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,KAAK,EAAE,EAAE,SAAS,EAAC,6BAA6B,YAAE,WAAW,CAAC,sBAAsB,CAAC,WAAW,CAAC,GAAU,GAChI,IACL,GACF,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ExtensionIcon } from "@mdwrk/extension-manifest";
2
+ export interface ExtensionManifestIconProps {
3
+ readonly icon: ExtensionIcon;
4
+ readonly size?: number;
5
+ }
6
+ export declare const ExtensionManifestIcon: React.FC<ExtensionManifestIconProps>;
7
+ //# sourceMappingURL=ExtensionManifestIcon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtensionManifestIcon.d.ts","sourceRoot":"","sources":["../../src/components/ExtensionManifestIcon.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAI/D,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAkBtE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as LucideIcons from "lucide-react";
3
+ import { AppWindow, FileQuestion } from "lucide-react";
4
+ export const ExtensionManifestIcon = ({ icon, size = 18 }) => {
5
+ if (icon.kind === "lucide") {
6
+ const iconCatalog = LucideIcons;
7
+ const Component = iconCatalog[icon.name] ?? FileQuestion;
8
+ return _jsx(Component, { size: size, "aria-hidden": "true" });
9
+ }
10
+ if (icon.kind === "svg") {
11
+ return (_jsx("span", { "aria-hidden": "true", style: { display: "inline-flex", width: size, height: size }, dangerouslySetInnerHTML: { __html: icon.svg } }));
12
+ }
13
+ return _jsx(AppWindow, { size: size, "aria-hidden": "true" });
14
+ };
15
+ //# sourceMappingURL=ExtensionManifestIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtensionManifestIcon.js","sourceRoot":"","sources":["../../src/components/ExtensionManifestIcon.tsx"],"names":[],"mappings":";AAEA,OAAO,KAAK,WAAW,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAOvD,MAAM,CAAC,MAAM,qBAAqB,GAAyC,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE;IACjG,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,WAAgF,CAAC;QACrG,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC;QACzD,OAAO,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,iBAAc,MAAM,GAAG,CAAC;IACtD,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO,CACL,8BACc,MAAM,EAClB,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAC5D,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAC7C,CACH,CAAC;IACJ,CAAC;IAED,OAAO,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,iBAAc,MAAM,GAAG,CAAC;AACtD,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ExtensionRuntimeExtensionSnapshot } from "@mdwrk/extension-runtime";
2
+ export interface ExtensionStatusBadgeProps {
3
+ readonly status: ExtensionRuntimeExtensionSnapshot["status"];
4
+ }
5
+ export declare const ExtensionStatusBadge: React.FC<ExtensionStatusBadgeProps>;
6
+ //# sourceMappingURL=ExtensionStatusBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtensionStatusBadge.d.ts","sourceRoot":"","sources":["../../src/components/ExtensionStatusBadge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,0BAA0B,CAAC;AAElF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,iCAAiC,CAAC,QAAQ,CAAC,CAAC;CAC9D;AAED,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAgBpE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const ExtensionStatusBadge = ({ status }) => (_jsx("span", { className: "settings-session-value", style: {
3
+ display: "inline-flex",
4
+ alignItems: "center",
5
+ padding: "2px 8px",
6
+ borderRadius: 999,
7
+ border: "1px solid var(--border-primary)",
8
+ fontSize: 10,
9
+ textTransform: "uppercase",
10
+ letterSpacing: "0.08em",
11
+ }, children: status }));
12
+ //# sourceMappingURL=ExtensionStatusBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtensionStatusBadge.js","sourceRoot":"","sources":["../../src/components/ExtensionStatusBadge.tsx"],"names":[],"mappings":";AAOA,MAAM,CAAC,MAAM,oBAAoB,GAAwC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CACvF,eACE,SAAS,EAAC,wBAAwB,EAClC,KAAK,EAAE;QACL,OAAO,EAAE,aAAa;QACtB,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,SAAS;QAClB,YAAY,EAAE,GAAG;QACjB,MAAM,EAAE,iCAAiC;QACzC,QAAQ,EAAE,EAAE;QACZ,aAAa,EAAE,WAAW;QAC1B,aAAa,EAAE,QAAQ;KACxB,YAEA,MAAM,GACF,CACR,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ExtensionSettingsSchema, I18nLabel } from "@mdwrk/extension-manifest";
2
+ import type { ExtensionRuntime } from "@mdwrk/extension-runtime";
3
+ export interface SettingsSchemaFormProps {
4
+ readonly runtime: ExtensionRuntime;
5
+ readonly extensionId: string;
6
+ readonly schema: ExtensionSettingsSchema;
7
+ readonly formatLabel: (label: I18nLabel | string) => string;
8
+ }
9
+ export declare const SettingsSchemaForm: React.FC<SettingsSchemaFormProps>;
10
+ //# sourceMappingURL=SettingsSchemaForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsSchemaForm.d.ts","sourceRoot":"","sources":["../../src/components/SettingsSchemaForm.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,uBAAuB,EACvB,SAAS,EACV,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAwCjE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,KAAK,MAAM,CAAC;CAC7D;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA2NhE,CAAC"}
@@ -0,0 +1,130 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { extensionManagerLabels } from "../i18n.js";
4
+ const defaultValueForField = (field) => {
5
+ switch (field.kind) {
6
+ case "boolean":
7
+ return field.defaultValue;
8
+ case "number":
9
+ case "integer":
10
+ return field.defaultValue ?? null;
11
+ case "select":
12
+ case "multiselect":
13
+ return field.defaultValue ?? (field.kind === "multiselect" ? [] : "");
14
+ case "string":
15
+ case "secret":
16
+ return field.defaultValue ?? "";
17
+ case "json":
18
+ return field.defaultValue ?? {};
19
+ default:
20
+ return null;
21
+ }
22
+ };
23
+ const toNumberValue = (field, raw) => {
24
+ if (raw.trim() === "")
25
+ return null;
26
+ const parsed = Number(raw);
27
+ if (Number.isNaN(parsed))
28
+ return null;
29
+ return field.kind === "integer" ? Math.trunc(parsed) : parsed;
30
+ };
31
+ const inputStyle = {
32
+ width: "100%",
33
+ background: "var(--bg-secondary)",
34
+ color: "var(--fg-primary)",
35
+ border: "1px solid var(--border-primary)",
36
+ borderRadius: 8,
37
+ padding: "8px 10px",
38
+ fontSize: 12,
39
+ };
40
+ export const SettingsSchemaForm = ({ runtime, extensionId, schema, formatLabel }) => {
41
+ const store = React.useMemo(() => runtime.getConfigurationStore(extensionId), [runtime, extensionId]);
42
+ const [values, setValues] = React.useState({});
43
+ const [jsonText, setJsonText] = React.useState({});
44
+ const [jsonErrors, setJsonErrors] = React.useState({});
45
+ React.useEffect(() => {
46
+ let cancelled = false;
47
+ const disposables = schema.fields.map((field) => store.watch(field.key, (value) => {
48
+ const nextValue = value ?? defaultValueForField(field);
49
+ setValues((current) => ({ ...current, [field.key]: nextValue }));
50
+ if (field.kind === "json") {
51
+ setJsonText((current) => ({
52
+ ...current,
53
+ [field.key]: JSON.stringify(nextValue ?? defaultValueForField(field), null, 2),
54
+ }));
55
+ }
56
+ }));
57
+ void Promise.all(schema.fields.map(async (field) => {
58
+ const stored = await store.get(field.key);
59
+ return [field.key, stored ?? defaultValueForField(field)];
60
+ })).then((entries) => {
61
+ if (cancelled)
62
+ return;
63
+ setValues(Object.fromEntries(entries));
64
+ setJsonText(Object.fromEntries(entries.filter(([, value]) => value !== undefined).map(([key, value]) => [key, JSON.stringify(value, null, 2)])));
65
+ });
66
+ return () => {
67
+ cancelled = true;
68
+ for (const disposable of disposables) {
69
+ disposable.dispose();
70
+ }
71
+ };
72
+ }, [schema.fields, store]);
73
+ const fieldsBySection = React.useMemo(() => {
74
+ const sections = new Map();
75
+ for (const field of schema.fields) {
76
+ const bucketKey = field.sectionId ?? "__root__";
77
+ const bucket = sections.get(bucketKey) ?? [];
78
+ bucket.push(field);
79
+ sections.set(bucketKey, bucket);
80
+ }
81
+ return sections;
82
+ }, [schema.fields]);
83
+ const writeValue = React.useCallback(async (field, nextValue) => {
84
+ setValues((current) => ({ ...current, [field.key]: nextValue }));
85
+ await store.set(field.key, nextValue);
86
+ }, [store]);
87
+ const renderField = (field) => {
88
+ const value = values[field.key] ?? defaultValueForField(field);
89
+ const labelId = `${extensionId}-${field.key}`;
90
+ return (_jsxs("div", { style: { display: "grid", gap: 6 }, children: [_jsx("label", { id: `${labelId}-label`, htmlFor: labelId, style: { fontSize: 11, fontWeight: 700, textTransform: "uppercase", letterSpacing: "0.08em" }, children: formatLabel(field.label) }), field.description && (_jsx("p", { style: { margin: 0, fontSize: 11, color: "var(--fg-muted)", lineHeight: 1.5 }, children: formatLabel(field.description) })), field.kind === "boolean" && (_jsxs("label", { style: { display: "inline-flex", alignItems: "center", gap: 8, fontSize: 12 }, children: [_jsx("input", { id: labelId, "aria-labelledby": `${labelId}-label`, type: "checkbox", checked: Boolean(value), onChange: (event) => {
91
+ void writeValue(field, event.currentTarget.checked);
92
+ } }), Boolean(value) ? formatLabel(extensionManagerLabels.settingsEnabled) : formatLabel(extensionManagerLabels.settingsDisabled)] })), (field.kind === "string" || field.kind === "secret") && !field.multiline && (_jsx("input", { id: labelId, type: field.kind === "secret" ? "password" : "text", value: String(value ?? ""), placeholder: field.placeholder, style: inputStyle, onChange: (event) => {
93
+ void writeValue(field, event.currentTarget.value);
94
+ } })), (field.kind === "string" || field.kind === "secret") && field.multiline && (_jsx("textarea", { id: labelId, value: String(value ?? ""), placeholder: field.placeholder, style: { ...inputStyle, minHeight: 96, resize: "vertical" }, onChange: (event) => {
95
+ void writeValue(field, event.currentTarget.value);
96
+ } })), (field.kind === "number" || field.kind === "integer") && (_jsx("input", { id: labelId, type: "number", value: typeof value === "number" ? String(value) : "", min: field.min, max: field.max, step: field.step ?? (field.kind === "integer" ? 1 : undefined), style: inputStyle, onChange: (event) => {
97
+ void writeValue(field, toNumberValue(field, event.currentTarget.value));
98
+ } })), field.kind === "select" && (_jsx("select", { id: labelId, value: typeof value === "string" ? value : String(field.defaultValue ?? ""), style: inputStyle, onChange: (event) => {
99
+ void writeValue(field, event.currentTarget.value);
100
+ }, children: field.options.map((option) => (_jsx("option", { value: option.value, children: formatLabel(option.label) }, option.value))) })), field.kind === "multiselect" && (_jsx("select", { id: labelId, multiple: true, value: Array.isArray(value) ? value.map(String) : [], style: { ...inputStyle, minHeight: 96 }, onChange: (event) => {
101
+ const selected = Array.from(event.currentTarget.selectedOptions).map((option) => option.value);
102
+ void writeValue(field, selected);
103
+ }, children: field.options.map((option) => (_jsx("option", { value: option.value, children: formatLabel(option.label) }, option.value))) })), field.kind === "json" && (_jsxs(_Fragment, { children: [_jsx("textarea", { id: labelId, value: jsonText[field.key] ?? JSON.stringify(value ?? {}, null, 2), style: { ...inputStyle, minHeight: 144, fontFamily: "var(--font-mono, monospace)" }, onChange: (event) => {
104
+ const nextText = event.currentTarget.value;
105
+ setJsonText((current) => ({ ...current, [field.key]: nextText }));
106
+ }, onBlur: () => {
107
+ const nextText = jsonText[field.key] ?? JSON.stringify(value ?? {}, null, 2);
108
+ try {
109
+ const parsed = JSON.parse(nextText);
110
+ setJsonErrors((current) => ({ ...current, [field.key]: null }));
111
+ void writeValue(field, parsed);
112
+ }
113
+ catch (error) {
114
+ setJsonErrors((current) => ({
115
+ ...current,
116
+ [field.key]: error instanceof Error ? error.message : String(error),
117
+ }));
118
+ }
119
+ } }), jsonErrors[field.key] && (_jsx("p", { style: { margin: 0, fontSize: 11, color: "var(--accent-red, #f87171)" }, children: jsonErrors[field.key] }))] }))] }, field.key));
120
+ };
121
+ const sections = schema.sections ?? [];
122
+ const rootFields = fieldsBySection.get("__root__") ?? [];
123
+ return (_jsxs("div", { style: { display: "grid", gap: 14 }, children: [rootFields.length > 0 && (_jsx("div", { style: { display: "grid", gap: 12 }, children: rootFields.map(renderField) })), sections.map((section) => {
124
+ const fields = fieldsBySection.get(section.id) ?? [];
125
+ if (fields.length === 0)
126
+ return null;
127
+ return (_jsxs("section", { style: { display: "grid", gap: 12, paddingTop: 6 }, children: [_jsxs("div", { style: { display: "grid", gap: 4 }, children: [_jsx("span", { style: { fontSize: 11, fontWeight: 700, textTransform: "uppercase", letterSpacing: "0.08em" }, children: formatLabel(section.title) }), section.description && (_jsx("p", { style: { margin: 0, fontSize: 11, color: "var(--fg-muted)", lineHeight: 1.5 }, children: formatLabel(section.description) }))] }), _jsx("div", { style: { display: "grid", gap: 12 }, children: fields.map(renderField) })] }, section.id));
128
+ })] }));
129
+ };
130
+ //# sourceMappingURL=SettingsSchemaForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsSchemaForm.js","sourceRoot":"","sources":["../../src/components/SettingsSchemaForm.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const EXTENSION_MANAGER_EXTENSION_ID: "core.extension-manager";
2
+ export declare const EXTENSION_MANAGER_VIEW_ID: "core.extension-manager.view";
3
+ export declare const EXTENSION_MANAGER_COMMAND_ID: "core.extension-manager.open";
4
+ export declare const EXTENSION_MANAGER_RAIL_ID: "core.extension-manager.rail";
5
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,EAAG,wBAAiC,CAAC;AAChF,eAAO,MAAM,yBAAyB,+BAAoD,CAAC;AAC3F,eAAO,MAAM,4BAA4B,+BAAoD,CAAC;AAC9F,eAAO,MAAM,yBAAyB,+BAAoD,CAAC"}
@@ -0,0 +1,5 @@
1
+ export const EXTENSION_MANAGER_EXTENSION_ID = "core.extension-manager";
2
+ export const EXTENSION_MANAGER_VIEW_ID = `${EXTENSION_MANAGER_EXTENSION_ID}.view`;
3
+ export const EXTENSION_MANAGER_COMMAND_ID = `${EXTENSION_MANAGER_EXTENSION_ID}.open`;
4
+ export const EXTENSION_MANAGER_RAIL_ID = `${EXTENSION_MANAGER_EXTENSION_ID}.rail`;
5
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,8BAA8B,GAAG,wBAAiC,CAAC;AAChF,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,8BAA8B,OAAgB,CAAC;AAC3F,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,8BAA8B,OAAgB,CAAC;AAC9F,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,8BAA8B,OAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { BundledExtensionCatalogEntry } from "@mdwrk/extension-runtime";
2
+ import type { ExtensionManagerEntryOptions } from "./types.js";
3
+ export declare function createExtensionManagerBundledEntry(options: ExtensionManagerEntryOptions): BundledExtensionCatalogEntry;
4
+ //# sourceMappingURL=createExtensionManagerBundledEntry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createExtensionManagerBundledEntry.d.ts","sourceRoot":"","sources":["../src/createExtensionManagerBundledEntry.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAU/D,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,4BAA4B,GAAG,4BAA4B,CAiEtH"}
@@ -0,0 +1,59 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ExtensionManagerView } from "./components/ExtensionManagerView.js";
3
+ import { EXTENSION_MANAGER_COMMAND_ID, EXTENSION_MANAGER_RAIL_ID, EXTENSION_MANAGER_VIEW_ID, extensionManagerManifest, } from "./manifest.js";
4
+ import { extensionManagerLabels, extensionManagerLocaleLoader } from "./i18n.js";
5
+ export function createExtensionManagerBundledEntry(options) {
6
+ return {
7
+ manifest: extensionManagerManifest,
8
+ activation: "eager",
9
+ async load() {
10
+ const extension = {
11
+ manifest: extensionManagerManifest,
12
+ async activate(context) {
13
+ context.registerLocaleCatalogLoader(extensionManagerLocaleLoader);
14
+ await context.host.i18n.ensureLocale();
15
+ context.registerCommand({
16
+ id: EXTENSION_MANAGER_COMMAND_ID,
17
+ title: extensionManagerLabels.commandOpenTitle,
18
+ description: extensionManagerLabels.commandOpenDescription,
19
+ icon: { kind: "lucide", name: "Puzzle" },
20
+ execute: async () => {
21
+ await context.host.views.open(EXTENSION_MANAGER_VIEW_ID);
22
+ },
23
+ });
24
+ context.registerView({
25
+ id: EXTENSION_MANAGER_VIEW_ID,
26
+ title: extensionManagerLabels.viewTitle,
27
+ description: extensionManagerLabels.viewDescription,
28
+ icon: { kind: "lucide", name: "Puzzle" },
29
+ location: "modal",
30
+ allowMultiple: false,
31
+ canBePinned: false,
32
+ render: (props) => (_jsx(ExtensionManagerView, { runtime: options.runtime, close: () => props.close(), formatLabel: context.host.i18n.format, defaultSettings: {
33
+ showCompatibility: true,
34
+ showDiagnostics: true,
35
+ } })),
36
+ });
37
+ context.registerActionRailItem({
38
+ id: EXTENSION_MANAGER_RAIL_ID,
39
+ title: extensionManagerLabels.railTitle,
40
+ icon: { kind: "lucide", name: "Puzzle" },
41
+ group: "extensions",
42
+ order: 0,
43
+ target: {
44
+ kind: "view",
45
+ viewId: EXTENSION_MANAGER_VIEW_ID,
46
+ },
47
+ });
48
+ await context.host.diagnostics.publish(context.extensionId, {
49
+ severity: "info",
50
+ code: "EXT_MANAGER_READY",
51
+ message: context.host.i18n.format(extensionManagerLabels.readyDiagnostic),
52
+ });
53
+ },
54
+ };
55
+ return extension;
56
+ },
57
+ };
58
+ }
59
+ //# sourceMappingURL=createExtensionManagerBundledEntry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createExtensionManagerBundledEntry.js","sourceRoot":"","sources":["../src/createExtensionManagerBundledEntry.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,WAAW,CAAC;AAEjF,MAAM,UAAU,kCAAkC,CAAC,OAAqC;IACtF,OAAO;QACL,QAAQ,EAAE,wBAAwB;QAClC,UAAU,EAAE,OAAO;QACnB,KAAK,CAAC,IAAI;YACR,MAAM,SAAS,GAA+B;gBAC5C,QAAQ,EAAE,wBAAwB;gBAClC,KAAK,CAAC,QAAQ,CAAC,OAAO;oBACpB,OAAO,CAAC,2BAA2B,CAAC,4BAA4B,CAAC,CAAC;oBAClE,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;oBAEvC,OAAO,CAAC,eAAe,CAAC;wBACtB,EAAE,EAAE,4BAA4B;wBAChC,KAAK,EAAE,sBAAsB,CAAC,gBAAgB;wBAC9C,WAAW,EAAE,sBAAsB,CAAC,sBAAsB;wBAC1D,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACxC,OAAO,EAAE,KAAK,IAAI,EAAE;4BAClB,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;wBAC3D,CAAC;qBACF,CAAC,CAAC;oBAEH,OAAO,CAAC,YAAY,CAAC;wBACnB,EAAE,EAAE,yBAAyB;wBAC7B,KAAK,EAAE,sBAAsB,CAAC,SAAS;wBACvC,WAAW,EAAE,sBAAsB,CAAC,eAAe;wBACnD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACxC,QAAQ,EAAE,OAAO;wBACjB,aAAa,EAAE,KAAK;wBACpB,WAAW,EAAE,KAAK;wBAClB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CACjB,KAAC,oBAAoB,IACnB,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,KAAK,EAAE,GAAG,EAAE,CAAE,KAAwC,CAAC,KAAK,EAAE,EAC9D,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EACrC,eAAe,EAAE;gCACf,iBAAiB,EAAE,IAAI;gCACvB,eAAe,EAAE,IAAI;6BACtB,GACD,CACH;qBACF,CAAC,CAAC;oBAEH,OAAO,CAAC,sBAAsB,CAAC;wBAC7B,EAAE,EAAE,yBAAyB;wBAC7B,KAAK,EAAE,sBAAsB,CAAC,SAAS;wBACvC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACxC,KAAK,EAAE,YAAY;wBACnB,KAAK,EAAE,CAAC;wBACR,MAAM,EAAE;4BACN,IAAI,EAAE,MAAM;4BACZ,MAAM,EAAE,yBAAyB;yBAClC;qBACF,CAAC,CAAC;oBAEH,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE;wBAC1D,QAAQ,EAAE,MAAM;wBAChB,IAAI,EAAE,mBAAmB;wBACzB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,eAAe,CAAC;qBAC1E,CAAC,CAAC;gBACL,CAAC;aACF,CAAC;YAEF,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/i18n.d.ts ADDED
@@ -0,0 +1,52 @@
1
+ import type { I18nLabel } from "@mdwrk/extension-manifest";
2
+ import type { ExtensionLocaleCatalogLoader } from "@mdwrk/extension-host";
3
+ export declare const emLabel: (suffix: string, defaultMessage: string, description?: string) => I18nLabel;
4
+ export declare const extensionManagerLabels: {
5
+ readonly manifestDisplayName: I18nLabel;
6
+ readonly manifestDescription: I18nLabel;
7
+ readonly commandOpenTitle: I18nLabel;
8
+ readonly commandOpenDescription: I18nLabel;
9
+ readonly viewTitle: I18nLabel;
10
+ readonly viewDescription: I18nLabel;
11
+ readonly railTitle: I18nLabel;
12
+ readonly settingsTitle: I18nLabel;
13
+ readonly settingsDisplayTitle: I18nLabel;
14
+ readonly settingsDisplayDescription: I18nLabel;
15
+ readonly showCompatibilityLabel: I18nLabel;
16
+ readonly showCompatibilityDescription: I18nLabel;
17
+ readonly showDiagnosticsLabel: I18nLabel;
18
+ readonly showDiagnosticsDescription: I18nLabel;
19
+ readonly headerTitle: I18nLabel;
20
+ readonly headerSubtitle: I18nLabel;
21
+ readonly actionExit: I18nLabel;
22
+ readonly actionClose: I18nLabel;
23
+ readonly statsExtensions: I18nLabel;
24
+ readonly statsActive: I18nLabel;
25
+ readonly statsDisabled: I18nLabel;
26
+ readonly statsIncompatible: I18nLabel;
27
+ readonly sourceBundled: I18nLabel;
28
+ readonly sourceInstalled: I18nLabel;
29
+ readonly actionEnable: I18nLabel;
30
+ readonly actionDisable: I18nLabel;
31
+ readonly actionActivate: I18nLabel;
32
+ readonly actionDeactivate: I18nLabel;
33
+ readonly labelPackage: I18nLabel;
34
+ readonly labelVersion: I18nLabel;
35
+ readonly labelActivation: I18nLabel;
36
+ readonly labelEnabled: I18nLabel;
37
+ readonly labelPermissions: I18nLabel;
38
+ readonly labelCompatibility: I18nLabel;
39
+ readonly labelHealth: I18nLabel;
40
+ readonly labelSettings: I18nLabel;
41
+ readonly stateEnabled: I18nLabel;
42
+ readonly stateDisabled: I18nLabel;
43
+ readonly compatibilityOk: I18nLabel;
44
+ readonly compatibilityError: I18nLabel;
45
+ readonly noDiagnostics: I18nLabel;
46
+ readonly lastError: I18nLabel;
47
+ readonly settingsEnabled: I18nLabel;
48
+ readonly settingsDisabled: I18nLabel;
49
+ readonly readyDiagnostic: I18nLabel;
50
+ };
51
+ export declare const extensionManagerLocaleLoader: ExtensionLocaleCatalogLoader;
52
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAI1E,eAAO,MAAM,OAAO,GAAI,QAAQ,MAAM,EAAE,gBAAgB,MAAM,EAAE,cAAc,MAAM,KAAG,SAIrF,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CzB,CAAC;AAEX,eAAO,MAAM,4BAA4B,EAAE,4BAO1C,CAAC"}
package/dist/i18n.js ADDED
@@ -0,0 +1,63 @@
1
+ import { EXTENSION_MANAGER_EXTENSION_ID } from "./constants.js";
2
+ const key = (suffix) => `${EXTENSION_MANAGER_EXTENSION_ID}.${suffix}`;
3
+ export const emLabel = (suffix, defaultMessage, description) => ({
4
+ key: key(suffix),
5
+ defaultMessage,
6
+ description,
7
+ });
8
+ export const extensionManagerLabels = {
9
+ manifestDisplayName: emLabel("manifest.displayName", "Extension Manager"),
10
+ manifestDescription: emLabel("manifest.description", "Bundled operator console for browsing, enabling, disabling, diagnosing, and configuring extensions."),
11
+ commandOpenTitle: emLabel("commands.open.title", "Open Extension Manager"),
12
+ commandOpenDescription: emLabel("commands.open.description", "Open the bundled extension operator console."),
13
+ viewTitle: emLabel("views.manager.title", "Extension Manager"),
14
+ viewDescription: emLabel("views.manager.description", "Browse installed extensions, toggle enablement, inspect permissions, and edit extension settings."),
15
+ railTitle: emLabel("rail.title", "Extensions"),
16
+ settingsTitle: emLabel("settings.title", "Extension Manager Preferences"),
17
+ settingsDisplayTitle: emLabel("settings.sections.display.title", "Display"),
18
+ settingsDisplayDescription: emLabel("settings.sections.display.description", "Controls the default information density for the extension manager."),
19
+ showCompatibilityLabel: emLabel("settings.fields.showCompatibilityByDefault.label", "Show compatibility details by default"),
20
+ showCompatibilityDescription: emLabel("settings.fields.showCompatibilityByDefault.description", "Expand compatibility information for each extension when the manager opens."),
21
+ showDiagnosticsLabel: emLabel("settings.fields.showDiagnosticsByDefault.label", "Show diagnostics by default"),
22
+ showDiagnosticsDescription: emLabel("settings.fields.showDiagnosticsByDefault.description", "Expand runtime diagnostics for each extension when the manager opens."),
23
+ headerTitle: emLabel("view.header.title", "Extension Manager"),
24
+ headerSubtitle: emLabel("view.header.subtitle", "Bundled extension catalog, enablement controls, permissions, compatibility, diagnostics, and settings."),
25
+ actionExit: emLabel("view.actions.exit", "Exit"),
26
+ actionClose: emLabel("view.actions.close", "Close"),
27
+ statsExtensions: emLabel("view.stats.extensions", "Extensions"),
28
+ statsActive: emLabel("view.stats.active", "Active"),
29
+ statsDisabled: emLabel("view.stats.disabled", "Disabled"),
30
+ statsIncompatible: emLabel("view.stats.incompatible", "Incompatible"),
31
+ sourceBundled: emLabel("view.card.source.bundled", "Bundled"),
32
+ sourceInstalled: emLabel("view.card.source.installed", "Installed"),
33
+ actionEnable: emLabel("view.card.actions.enable", "Enable"),
34
+ actionDisable: emLabel("view.card.actions.disable", "Disable"),
35
+ actionActivate: emLabel("view.card.actions.activate", "Activate"),
36
+ actionDeactivate: emLabel("view.card.actions.deactivate", "Deactivate"),
37
+ labelPackage: emLabel("view.card.labels.package", "Package"),
38
+ labelVersion: emLabel("view.card.labels.version", "Version"),
39
+ labelActivation: emLabel("view.card.labels.activation", "Activation"),
40
+ labelEnabled: emLabel("view.card.labels.enabled", "Enabled"),
41
+ labelPermissions: emLabel("view.card.labels.permissions", "Permissions"),
42
+ labelCompatibility: emLabel("view.card.labels.compatibility", "Compatibility"),
43
+ labelHealth: emLabel("view.card.labels.health", "Health & diagnostics"),
44
+ labelSettings: emLabel("view.card.labels.settings", "Settings"),
45
+ stateEnabled: emLabel("view.card.state.enabled", "yes"),
46
+ stateDisabled: emLabel("view.card.state.disabled", "no"),
47
+ compatibilityOk: emLabel("view.card.compatibility.ok", "Compatible with the current host, runtime, and theme contract."),
48
+ compatibilityError: emLabel("view.card.compatibility.error", "One or more compatibility issues were detected."),
49
+ noDiagnostics: emLabel("view.card.health.noDiagnostics", "No runtime diagnostics recorded."),
50
+ lastError: emLabel("view.card.health.lastError", "Last error"),
51
+ settingsEnabled: emLabel("settings.form.state.enabled", "Enabled"),
52
+ settingsDisabled: emLabel("settings.form.state.disabled", "Disabled"),
53
+ readyDiagnostic: emLabel("diagnostics.ready", "Extension Manager activated successfully."),
54
+ };
55
+ export const extensionManagerLocaleLoader = {
56
+ defaultLocale: "en",
57
+ fallbackLocale: "en",
58
+ loaders: {
59
+ en: async () => (await import("./locales/en.js")).extensionManagerEnCatalog,
60
+ es: async () => (await import("./locales/es.js")).extensionManagerEsCatalog,
61
+ },
62
+ };
63
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export * from "./version.js";
2
+ export * from "./types.js";
3
+ export * from "./constants.js";
4
+ export * from "./i18n.js";
5
+ export * from "./manifest.js";
6
+ export * from "./createExtensionManagerBundledEntry.js";
7
+ export * from "./components/ExtensionManagerView.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export * from "./version.js";
2
+ export * from "./types.js";
3
+ export * from "./constants.js";
4
+ export * from "./i18n.js";
5
+ export * from "./manifest.js";
6
+ export * from "./createExtensionManagerBundledEntry.js";
7
+ export * from "./components/ExtensionManagerView.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExtensionLocaleCatalog } from "@mdwrk/extension-host";
2
+ export declare const extensionManagerEnCatalog: ExtensionLocaleCatalog;
3
+ //# sourceMappingURL=en.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,eAAO,MAAM,yBAAyB,EAAE,sBAiDvC,CAAC"}
@@ -0,0 +1,51 @@
1
+ export const extensionManagerEnCatalog = {
2
+ locale: "en",
3
+ messages: {
4
+ "manifest.displayName": "Extension Manager",
5
+ "manifest.description": "Bundled operator console for browsing, enabling, disabling, diagnosing, and configuring extensions.",
6
+ "commands.open.title": "Open Extension Manager",
7
+ "commands.open.description": "Open the bundled extension operator console.",
8
+ "views.manager.title": "Extension Manager",
9
+ "views.manager.description": "Browse installed extensions, toggle enablement, inspect permissions, and edit extension settings.",
10
+ "rail.title": "Extensions",
11
+ "settings.title": "Extension Manager Preferences",
12
+ "settings.sections.display.title": "Display",
13
+ "settings.sections.display.description": "Controls the default information density for the extension manager.",
14
+ "settings.fields.showCompatibilityByDefault.label": "Show compatibility details by default",
15
+ "settings.fields.showCompatibilityByDefault.description": "Expand compatibility information for each extension when the manager opens.",
16
+ "settings.fields.showDiagnosticsByDefault.label": "Show diagnostics by default",
17
+ "settings.fields.showDiagnosticsByDefault.description": "Expand runtime diagnostics for each extension when the manager opens.",
18
+ "view.header.title": "Extension Manager",
19
+ "view.header.subtitle": "Bundled extension catalog, enablement controls, permissions, compatibility, diagnostics, and settings.",
20
+ "view.actions.exit": "Exit",
21
+ "view.actions.close": "Close",
22
+ "view.stats.extensions": "Extensions",
23
+ "view.stats.active": "Active",
24
+ "view.stats.disabled": "Disabled",
25
+ "view.stats.incompatible": "Incompatible",
26
+ "view.card.source.bundled": "Bundled",
27
+ "view.card.source.installed": "Installed",
28
+ "view.card.actions.enable": "Enable",
29
+ "view.card.actions.disable": "Disable",
30
+ "view.card.actions.activate": "Activate",
31
+ "view.card.actions.deactivate": "Deactivate",
32
+ "view.card.labels.package": "Package",
33
+ "view.card.labels.version": "Version",
34
+ "view.card.labels.activation": "Activation",
35
+ "view.card.labels.enabled": "Enabled",
36
+ "view.card.labels.permissions": "Permissions",
37
+ "view.card.labels.compatibility": "Compatibility",
38
+ "view.card.labels.health": "Health & diagnostics",
39
+ "view.card.labels.settings": "Settings",
40
+ "view.card.state.enabled": "yes",
41
+ "view.card.state.disabled": "no",
42
+ "view.card.compatibility.ok": "Compatible with the current host, runtime, and theme contract.",
43
+ "view.card.compatibility.error": "One or more compatibility issues were detected.",
44
+ "view.card.health.noDiagnostics": "No runtime diagnostics recorded.",
45
+ "view.card.health.lastError": "Last error",
46
+ "settings.form.state.enabled": "Enabled",
47
+ "settings.form.state.disabled": "Disabled",
48
+ "diagnostics.ready": "Extension Manager activated successfully."
49
+ }
50
+ };
51
+ //# sourceMappingURL=en.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,yBAAyB,GAA2B;IAC/D,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE;QACR,sBAAsB,EAAE,mBAAmB;QAC3C,sBAAsB,EAAE,qGAAqG;QAC7H,qBAAqB,EAAE,wBAAwB;QAC/C,2BAA2B,EAAE,8CAA8C;QAC3E,qBAAqB,EAAE,mBAAmB;QAC1C,2BAA2B,EAAE,mGAAmG;QAChI,YAAY,EAAE,YAAY;QAC1B,gBAAgB,EAAE,+BAA+B;QACjD,iCAAiC,EAAE,SAAS;QAC5C,uCAAuC,EAAE,qEAAqE;QAC9G,kDAAkD,EAAE,uCAAuC;QAC3F,wDAAwD,EAAE,6EAA6E;QACvI,gDAAgD,EAAE,6BAA6B;QAC/E,sDAAsD,EAAE,uEAAuE;QAC/H,mBAAmB,EAAE,mBAAmB;QACxC,sBAAsB,EAAE,wGAAwG;QAChI,mBAAmB,EAAE,MAAM;QAC3B,oBAAoB,EAAE,OAAO;QAC7B,uBAAuB,EAAE,YAAY;QACrC,mBAAmB,EAAE,QAAQ;QAC7B,qBAAqB,EAAE,UAAU;QACjC,yBAAyB,EAAE,cAAc;QACzC,0BAA0B,EAAE,SAAS;QACrC,4BAA4B,EAAE,WAAW;QACzC,0BAA0B,EAAE,QAAQ;QACpC,2BAA2B,EAAE,SAAS;QACtC,4BAA4B,EAAE,UAAU;QACxC,8BAA8B,EAAE,YAAY;QAC5C,0BAA0B,EAAE,SAAS;QACrC,0BAA0B,EAAE,SAAS;QACrC,6BAA6B,EAAE,YAAY;QAC3C,0BAA0B,EAAE,SAAS;QACrC,8BAA8B,EAAE,aAAa;QAC7C,gCAAgC,EAAE,eAAe;QACjD,yBAAyB,EAAE,sBAAsB;QACjD,2BAA2B,EAAE,UAAU;QACvC,yBAAyB,EAAE,KAAK;QAChC,0BAA0B,EAAE,IAAI;QAChC,4BAA4B,EAAE,gEAAgE;QAC9F,+BAA+B,EAAE,iDAAiD;QAClF,gCAAgC,EAAE,kCAAkC;QACpE,4BAA4B,EAAE,YAAY;QAC1C,6BAA6B,EAAE,SAAS;QACxC,8BAA8B,EAAE,UAAU;QAC1C,mBAAmB,EAAE,2CAA2C;KACjE;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExtensionLocaleCatalog } from "@mdwrk/extension-host";
2
+ export declare const extensionManagerEsCatalog: ExtensionLocaleCatalog;
3
+ //# sourceMappingURL=es.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es.d.ts","sourceRoot":"","sources":["../../src/locales/es.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,eAAO,MAAM,yBAAyB,EAAE,sBAiDvC,CAAC"}
@@ -0,0 +1,51 @@
1
+ export const extensionManagerEsCatalog = {
2
+ locale: "es",
3
+ messages: {
4
+ "manifest.displayName": "Administrador de extensiones",
5
+ "manifest.description": "Consola operativa integrada para explorar, habilitar, deshabilitar, diagnosticar y configurar extensiones.",
6
+ "commands.open.title": "Abrir administrador de extensiones",
7
+ "commands.open.description": "Abre la consola operativa integrada de extensiones.",
8
+ "views.manager.title": "Administrador de extensiones",
9
+ "views.manager.description": "Explora extensiones instaladas, cambia su estado, revisa permisos y edita su configuración.",
10
+ "rail.title": "Extensiones",
11
+ "settings.title": "Preferencias del administrador de extensiones",
12
+ "settings.sections.display.title": "Visualización",
13
+ "settings.sections.display.description": "Controla la densidad de información predeterminada del administrador de extensiones.",
14
+ "settings.fields.showCompatibilityByDefault.label": "Mostrar compatibilidad por defecto",
15
+ "settings.fields.showCompatibilityByDefault.description": "Expande la información de compatibilidad de cada extensión cuando se abre el administrador.",
16
+ "settings.fields.showDiagnosticsByDefault.label": "Mostrar diagnósticos por defecto",
17
+ "settings.fields.showDiagnosticsByDefault.description": "Expande los diagnósticos de ejecución de cada extensión cuando se abre el administrador.",
18
+ "view.header.title": "Administrador de extensiones",
19
+ "view.header.subtitle": "Catálogo integrado de extensiones, controles de habilitación, permisos, compatibilidad, diagnósticos y configuración.",
20
+ "view.actions.exit": "Salir",
21
+ "view.actions.close": "Cerrar",
22
+ "view.stats.extensions": "Extensiones",
23
+ "view.stats.active": "Activas",
24
+ "view.stats.disabled": "Deshabilitadas",
25
+ "view.stats.incompatible": "Incompatibles",
26
+ "view.card.source.bundled": "Integrada",
27
+ "view.card.source.installed": "Instalada",
28
+ "view.card.actions.enable": "Habilitar",
29
+ "view.card.actions.disable": "Deshabilitar",
30
+ "view.card.actions.activate": "Activar",
31
+ "view.card.actions.deactivate": "Desactivar",
32
+ "view.card.labels.package": "Paquete",
33
+ "view.card.labels.version": "Versión",
34
+ "view.card.labels.activation": "Activación",
35
+ "view.card.labels.enabled": "Habilitada",
36
+ "view.card.labels.permissions": "Permisos",
37
+ "view.card.labels.compatibility": "Compatibilidad",
38
+ "view.card.labels.health": "Salud y diagnósticos",
39
+ "view.card.labels.settings": "Configuración",
40
+ "view.card.state.enabled": "sí",
41
+ "view.card.state.disabled": "no",
42
+ "view.card.compatibility.ok": "Compatible con el host, el runtime y el contrato de temas actuales.",
43
+ "view.card.compatibility.error": "Se detectaron uno o más problemas de compatibilidad.",
44
+ "view.card.health.noDiagnostics": "No hay diagnósticos de ejecución registrados.",
45
+ "view.card.health.lastError": "Último error",
46
+ "settings.form.state.enabled": "Habilitada",
47
+ "settings.form.state.disabled": "Deshabilitada",
48
+ "diagnostics.ready": "El Administrador de extensiones se activó correctamente."
49
+ }
50
+ };
51
+ //# sourceMappingURL=es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es.js","sourceRoot":"","sources":["../../src/locales/es.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,yBAAyB,GAA2B;IAC/D,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE;QACR,sBAAsB,EAAE,8BAA8B;QACtD,sBAAsB,EAAE,4GAA4G;QACpI,qBAAqB,EAAE,oCAAoC;QAC3D,2BAA2B,EAAE,qDAAqD;QAClF,qBAAqB,EAAE,8BAA8B;QACrD,2BAA2B,EAAE,6FAA6F;QAC1H,YAAY,EAAE,aAAa;QAC3B,gBAAgB,EAAE,+CAA+C;QACjE,iCAAiC,EAAE,eAAe;QAClD,uCAAuC,EAAE,sFAAsF;QAC/H,kDAAkD,EAAE,oCAAoC;QACxF,wDAAwD,EAAE,6FAA6F;QACvJ,gDAAgD,EAAE,kCAAkC;QACpF,sDAAsD,EAAE,0FAA0F;QAClJ,mBAAmB,EAAE,8BAA8B;QACnD,sBAAsB,EAAE,uHAAuH;QAC/I,mBAAmB,EAAE,OAAO;QAC5B,oBAAoB,EAAE,QAAQ;QAC9B,uBAAuB,EAAE,aAAa;QACtC,mBAAmB,EAAE,SAAS;QAC9B,qBAAqB,EAAE,gBAAgB;QACvC,yBAAyB,EAAE,eAAe;QAC1C,0BAA0B,EAAE,WAAW;QACvC,4BAA4B,EAAE,WAAW;QACzC,0BAA0B,EAAE,WAAW;QACvC,2BAA2B,EAAE,cAAc;QAC3C,4BAA4B,EAAE,SAAS;QACvC,8BAA8B,EAAE,YAAY;QAC5C,0BAA0B,EAAE,SAAS;QACrC,0BAA0B,EAAE,SAAS;QACrC,6BAA6B,EAAE,YAAY;QAC3C,0BAA0B,EAAE,YAAY;QACxC,8BAA8B,EAAE,UAAU;QAC1C,gCAAgC,EAAE,gBAAgB;QAClD,yBAAyB,EAAE,sBAAsB;QACjD,2BAA2B,EAAE,eAAe;QAC5C,yBAAyB,EAAE,IAAI;QAC/B,0BAA0B,EAAE,IAAI;QAChC,4BAA4B,EAAE,qEAAqE;QACnG,+BAA+B,EAAE,sDAAsD;QACvF,gCAAgC,EAAE,+CAA+C;QACjF,4BAA4B,EAAE,cAAc;QAC5C,6BAA6B,EAAE,YAAY;QAC3C,8BAA8B,EAAE,eAAe;QAC/C,mBAAmB,EAAE,0DAA0D;KAChF;CACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ExtensionManifest } from "@mdwrk/extension-manifest";
2
+ export declare const extensionManagerManifest: ExtensionManifest;
3
+ export { EXTENSION_MANAGER_COMMAND_ID, EXTENSION_MANAGER_EXTENSION_ID, EXTENSION_MANAGER_RAIL_ID, EXTENSION_MANAGER_VIEW_ID, } from "./constants.js";
4
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAUnE,eAAO,MAAM,wBAAwB,EAAE,iBAgGtC,CAAC;AAEF,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,EAC9B,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,102 @@
1
+ import { EXTENSION_MANAGER_COMMAND_ID, EXTENSION_MANAGER_EXTENSION_ID, EXTENSION_MANAGER_RAIL_ID, EXTENSION_MANAGER_VIEW_ID, } from "./constants.js";
2
+ import { extensionManagerLabels } from "./i18n.js";
3
+ import { EXTENSION_MANAGER_VERSION } from "./version.js";
4
+ export const extensionManagerManifest = {
5
+ manifestVersion: 1,
6
+ id: EXTENSION_MANAGER_EXTENSION_ID,
7
+ packageName: "@mdwrk/extension-manager",
8
+ version: EXTENSION_MANAGER_VERSION,
9
+ displayName: extensionManagerLabels.manifestDisplayName,
10
+ description: extensionManagerLabels.manifestDescription,
11
+ kind: "bundled",
12
+ icon: { kind: "lucide", name: "Puzzle" },
13
+ enabledByDefault: true,
14
+ capabilities: ["view.register", "actionRail.register"],
15
+ compatibility: {
16
+ manifestVersion: 1,
17
+ hostApi: "^1.0.0",
18
+ runtime: "^1.0.0",
19
+ app: ">=1.3.49",
20
+ themeContract: "^1.0.0",
21
+ },
22
+ entry: {
23
+ module: "./index.js",
24
+ export: "createExtensionManagerBundledEntry",
25
+ },
26
+ i18n: {
27
+ defaultLocale: "en",
28
+ supportedLocales: ["en", "es"],
29
+ catalogs: [
30
+ { locale: "en", path: "./locales/en.js" },
31
+ { locale: "es", path: "./locales/es.js" },
32
+ ],
33
+ },
34
+ contributions: {
35
+ commands: [
36
+ {
37
+ id: EXTENSION_MANAGER_COMMAND_ID,
38
+ title: extensionManagerLabels.commandOpenTitle,
39
+ description: extensionManagerLabels.commandOpenDescription,
40
+ icon: { kind: "lucide", name: "Puzzle" },
41
+ keywords: ["extension", "manager", "bundled"],
42
+ },
43
+ ],
44
+ views: [
45
+ {
46
+ id: EXTENSION_MANAGER_VIEW_ID,
47
+ title: extensionManagerLabels.viewTitle,
48
+ description: extensionManagerLabels.viewDescription,
49
+ icon: { kind: "lucide", name: "Puzzle" },
50
+ location: "modal",
51
+ allowMultiple: false,
52
+ canBePinned: false,
53
+ },
54
+ ],
55
+ components: [],
56
+ actionRail: [
57
+ {
58
+ id: EXTENSION_MANAGER_RAIL_ID,
59
+ title: extensionManagerLabels.railTitle,
60
+ icon: { kind: "lucide", name: "Puzzle" },
61
+ group: "extensions",
62
+ order: 0,
63
+ target: {
64
+ kind: "view",
65
+ viewId: EXTENSION_MANAGER_VIEW_ID,
66
+ },
67
+ },
68
+ ],
69
+ settingsSections: [],
70
+ },
71
+ settingsSchema: {
72
+ version: 1,
73
+ title: extensionManagerLabels.settingsTitle,
74
+ sections: [
75
+ {
76
+ id: "display",
77
+ title: extensionManagerLabels.settingsDisplayTitle,
78
+ description: extensionManagerLabels.settingsDisplayDescription,
79
+ },
80
+ ],
81
+ fields: [
82
+ {
83
+ key: "showCompatibilityByDefault",
84
+ kind: "boolean",
85
+ sectionId: "display",
86
+ label: extensionManagerLabels.showCompatibilityLabel,
87
+ description: extensionManagerLabels.showCompatibilityDescription,
88
+ defaultValue: true,
89
+ },
90
+ {
91
+ key: "showDiagnosticsByDefault",
92
+ kind: "boolean",
93
+ sectionId: "display",
94
+ label: extensionManagerLabels.showDiagnosticsLabel,
95
+ description: extensionManagerLabels.showDiagnosticsDescription,
96
+ defaultValue: true,
97
+ },
98
+ ],
99
+ },
100
+ };
101
+ export { EXTENSION_MANAGER_COMMAND_ID, EXTENSION_MANAGER_EXTENSION_ID, EXTENSION_MANAGER_RAIL_ID, EXTENSION_MANAGER_VIEW_ID, } from "./constants.js";
102
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ExtensionRuntime } from "@mdwrk/extension-runtime";
2
+ export interface ExtensionManagerEntryOptions {
3
+ readonly runtime: ExtensionRuntime;
4
+ }
5
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;CACpC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const EXTENSION_MANAGER_VERSION: "1.0.1";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,EAAG,OAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const EXTENSION_MANAGER_VERSION = "1.0.1";
2
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,yBAAyB,GAAG,OAAgB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,74 @@
1
+ {
2
+ "name": "@mdwrk/extension-manager",
3
+ "version": "1.0.1",
4
+ "type": "module",
5
+ "license": "Apache-2.0",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "engines": {
10
+ "node": ">=20 <23"
11
+ },
12
+ "files": [
13
+ "dist",
14
+ "README.md"
15
+ ],
16
+ "sideEffects": false,
17
+ "keywords": [
18
+ "markdown-workspace",
19
+ "extension",
20
+ "manager",
21
+ "runtime",
22
+ "react"
23
+ ],
24
+ "description": "First-party bundled operator console extension for browsing, enabling, disabling, diagnosing, and configuring Markdown Workspace extensions.",
25
+ "dependencies": {
26
+ "@mdwrk/extension-host": "^1.0.1",
27
+ "@mdwrk/extension-manifest": "^1.0.0",
28
+ "@mdwrk/extension-runtime": "^1.0.1",
29
+ "lucide-react": "^0.475.0"
30
+ },
31
+ "peerDependencies": {
32
+ "react": "^19.0.0",
33
+ "react-dom": "^19.0.0"
34
+ },
35
+ "devDependencies": {
36
+ "@mdwrk/testing": "^1.0.0",
37
+ "@testing-library/jest-dom": "^6.6.3",
38
+ "@testing-library/react": "^16.1.0",
39
+ "@types/react": "^19.0.8",
40
+ "@types/react-dom": "^19.0.3",
41
+ "jsdom": "^25.0.1",
42
+ "vitest": "^2.1.8"
43
+ },
44
+ "scripts": {
45
+ "build:deps": "npm run build -w @mdwrk/extension-manifest && npm run build -w @mdwrk/extension-host && npm run build -w @mdwrk/extension-runtime",
46
+ "build": "npm run build:deps && tsc -p tsconfig.json",
47
+ "typecheck": "npm run build:deps && tsc --noEmit -p tsconfig.json",
48
+ "lint": "npm run typecheck",
49
+ "test": "vitest run tests/extension-manager.test.tsx --pool=forks --minWorkers=1 --maxWorkers=1",
50
+ "prepack": "npm run build"
51
+ },
52
+ "exports": {
53
+ ".": {
54
+ "types": "./dist/index.d.ts",
55
+ "import": "./dist/index.js"
56
+ },
57
+ "./version": {
58
+ "types": "./dist/version.d.ts",
59
+ "import": "./dist/version.js"
60
+ },
61
+ "./manifest": {
62
+ "types": "./dist/manifest.d.ts",
63
+ "import": "./dist/manifest.js"
64
+ },
65
+ "./types": {
66
+ "types": "./dist/types.d.ts",
67
+ "import": "./dist/types.js"
68
+ }
69
+ },
70
+ "main": "./dist/index.js",
71
+ "types": "./dist/index.d.ts",
72
+ "author": "Jacob Stewart <jacob@swarmauri.com>",
73
+ "homepage": "https://mdwrk.com"
74
+ }