@red-hat-developer-hub/backstage-plugin-intelligent-assistant 5.1.0 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/README.md +40 -5
- package/dist/alpha.d.ts +61 -0
- package/dist/api/LightspeedApiClient.esm.js +57 -0
- package/dist/api/LightspeedApiClient.esm.js.map +1 -1
- package/dist/api/api.esm.js.map +1 -1
- package/dist/components/DeleteModal.esm.js +2 -0
- package/dist/components/DeleteModal.esm.js.map +1 -1
- package/dist/components/DeleteSavedPromptModal.esm.js +75 -0
- package/dist/components/DeleteSavedPromptModal.esm.js.map +1 -0
- package/dist/components/LightSpeedChat.esm.js +276 -134
- package/dist/components/LightSpeedChat.esm.js.map +1 -1
- package/dist/components/LightspeedChatBoxHeader.esm.js +57 -2
- package/dist/components/LightspeedChatBoxHeader.esm.js.map +1 -1
- package/dist/components/LightspeedChatContainer.esm.js +2 -1
- package/dist/components/LightspeedChatContainer.esm.js.map +1 -1
- package/dist/components/LightspeedDrawerContext.esm.js.map +1 -1
- package/dist/components/LightspeedDrawerProvider.esm.js +1 -0
- package/dist/components/LightspeedDrawerProvider.esm.js.map +1 -1
- package/dist/components/McpServersSettings.esm.js +9 -22
- package/dist/components/McpServersSettings.esm.js.map +1 -1
- package/dist/components/MessageBarModelSelector.esm.js +104 -12
- package/dist/components/MessageBarModelSelector.esm.js.map +1 -1
- package/dist/components/SavedPromptCard.esm.js +100 -0
- package/dist/components/SavedPromptCard.esm.js.map +1 -0
- package/dist/components/SavedPromptKebabMenu.esm.js +87 -0
- package/dist/components/SavedPromptKebabMenu.esm.js.map +1 -0
- package/dist/components/SavedPromptMenuItems.esm.js +52 -0
- package/dist/components/SavedPromptMenuItems.esm.js.map +1 -0
- package/dist/components/SavedPromptsEmptyState.esm.js +63 -0
- package/dist/components/SavedPromptsEmptyState.esm.js.map +1 -0
- package/dist/components/SavedPromptsList.esm.js +63 -0
- package/dist/components/SavedPromptsList.esm.js.map +1 -0
- package/dist/components/SavedPromptsSettings.esm.js +285 -0
- package/dist/components/SavedPromptsSettings.esm.js.map +1 -0
- package/dist/components/ScreenContextChip.esm.js +172 -0
- package/dist/components/ScreenContextChip.esm.js.map +1 -0
- package/dist/components/SettingsPanel.esm.js +135 -0
- package/dist/components/SettingsPanel.esm.js.map +1 -0
- package/dist/hooks/screenContextLabelSubscription.esm.js +113 -0
- package/dist/hooks/screenContextLabelSubscription.esm.js.map +1 -0
- package/dist/hooks/useConversationHistoryGroups.esm.js +71 -0
- package/dist/hooks/useConversationHistoryGroups.esm.js.map +1 -0
- package/dist/hooks/useFeedbackActions.esm.js.map +1 -1
- package/dist/hooks/useLightspeedProviderState.esm.js +19 -5
- package/dist/hooks/useLightspeedProviderState.esm.js.map +1 -1
- package/dist/hooks/useSavedPromptActions.esm.js +64 -0
- package/dist/hooks/useSavedPromptActions.esm.js.map +1 -0
- package/dist/hooks/useSavedPrompts.esm.js +75 -0
- package/dist/hooks/useSavedPrompts.esm.js.map +1 -0
- package/dist/hooks/useSavedPromptsSettings.esm.js +65 -0
- package/dist/hooks/useSavedPromptsSettings.esm.js.map +1 -0
- package/dist/hooks/useScreenContextLabelRevision.esm.js +13 -0
- package/dist/hooks/useScreenContextLabelRevision.esm.js.map +1 -0
- package/dist/hooks/useScreenContextSettings.esm.js +110 -0
- package/dist/hooks/useScreenContextSettings.esm.js.map +1 -0
- package/dist/hooks/useSettingsPanelUrlState.esm.js +95 -0
- package/dist/hooks/useSettingsPanelUrlState.esm.js.map +1 -0
- package/dist/hooks/useWelcomePrompts.esm.js +16 -5
- package/dist/hooks/useWelcomePrompts.esm.js.map +1 -1
- package/dist/hooks/useWindowLocation.esm.js +28 -0
- package/dist/hooks/useWindowLocation.esm.js.map +1 -0
- package/dist/translations/de.esm.js +64 -1
- package/dist/translations/de.esm.js.map +1 -1
- package/dist/translations/es.esm.js +64 -1
- package/dist/translations/es.esm.js.map +1 -1
- package/dist/translations/fr.esm.js +64 -1
- package/dist/translations/fr.esm.js.map +1 -1
- package/dist/translations/it.esm.js +64 -1
- package/dist/translations/it.esm.js.map +1 -1
- package/dist/translations/ja.esm.js +64 -1
- package/dist/translations/ja.esm.js.map +1 -1
- package/dist/translations/ref.esm.js +64 -2
- package/dist/translations/ref.esm.js.map +1 -1
- package/dist/utils/buildConversationHistoryGroups.esm.js +241 -0
- package/dist/utils/buildConversationHistoryGroups.esm.js.map +1 -0
- package/dist/utils/dom-selectors.esm.js +22 -2
- package/dist/utils/dom-selectors.esm.js.map +1 -1
- package/dist/utils/prompt-utils.esm.js +18 -1
- package/dist/utils/prompt-utils.esm.js.map +1 -1
- package/dist/utils/screen-capture.esm.js +116 -0
- package/dist/utils/screen-capture.esm.js.map +1 -0
- package/dist/utils/screen-context-utils.esm.js +343 -0
- package/dist/utils/screen-context-utils.esm.js.map +1 -0
- package/dist/utils/sensitive-data-redactor.esm.js +39 -1
- package/dist/utils/sensitive-data-redactor.esm.js.map +1 -1
- package/package.json +5 -15
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const REDACTED = "[REDACTED]";
|
|
2
|
+
const MASK = "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022";
|
|
2
3
|
const SECRET_PATTERNS = [
|
|
3
4
|
// GitHub tokens (classic PAT, server-to-server, OAuth, fine-grained, user-to-server, refresh)
|
|
4
5
|
/gh[pousr]_[a-zA-Z0-9]{36,}/g,
|
|
@@ -61,6 +62,43 @@ function isSensitiveElement(el, doc) {
|
|
|
61
62
|
}
|
|
62
63
|
return false;
|
|
63
64
|
}
|
|
65
|
+
function sanitizeClonedDom(clonedDoc) {
|
|
66
|
+
clonedDoc.querySelectorAll("input, textarea").forEach((el) => {
|
|
67
|
+
if (isSensitiveElement(el, clonedDoc)) {
|
|
68
|
+
el.value = MASK;
|
|
69
|
+
} else {
|
|
70
|
+
const inp = el;
|
|
71
|
+
if (inp.value) {
|
|
72
|
+
inp.value = redactText(inp.value);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
const walker = clonedDoc.createTreeWalker(
|
|
77
|
+
clonedDoc.body,
|
|
78
|
+
NodeFilter.SHOW_TEXT
|
|
79
|
+
);
|
|
80
|
+
let node = walker.nextNode();
|
|
81
|
+
while (node) {
|
|
82
|
+
if (node.textContent) {
|
|
83
|
+
const redacted = redactText(node.textContent);
|
|
84
|
+
if (redacted !== node.textContent) {
|
|
85
|
+
node.textContent = redacted;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
node = walker.nextNode();
|
|
89
|
+
}
|
|
90
|
+
clonedDoc.querySelectorAll(
|
|
91
|
+
'[aria-label*="Hide secret" i], [aria-label*="Hide value" i]'
|
|
92
|
+
).forEach((btn) => {
|
|
93
|
+
const container = btn.closest('[class*="Box"], [class*="flex"]');
|
|
94
|
+
if (container) {
|
|
95
|
+
const textEl = container.querySelector("pre, code, span, p");
|
|
96
|
+
if (textEl?.textContent && textEl.textContent !== MASK) {
|
|
97
|
+
textEl.textContent = MASK;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
64
102
|
|
|
65
|
-
export { SAFE_LABEL_EXCLUSIONS, SECRET_PATTERNS, SENSITIVE_LABEL_PATTERN, isSensitiveElement, redactText };
|
|
103
|
+
export { SAFE_LABEL_EXCLUSIONS, SECRET_PATTERNS, SENSITIVE_LABEL_PATTERN, isSensitiveElement, redactText, sanitizeClonedDom };
|
|
66
104
|
//# sourceMappingURL=sensitive-data-redactor.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sensitive-data-redactor.esm.js","sources":["../../src/utils/sensitive-data-redactor.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst REDACTED = '[REDACTED]';\nconst MASK = '••••••••';\n\n/**\n * Regex patterns matching known secret/token formats.\n * Each pattern uses the global flag for replaceAll behavior.\n * WARNING: These regexes are stateful (/g). Reset lastIndex before calling\n * .test() or .exec() directly. Prefer using redactText() instead.\n */\nexport const SECRET_PATTERNS: RegExp[] = [\n // GitHub tokens (classic PAT, server-to-server, OAuth, fine-grained, user-to-server, refresh)\n /gh[pousr]_[a-zA-Z0-9]{36,}/g,\n /github_pat_[a-zA-Z0-9_]{22,}/g,\n // GitLab PAT\n /glpat-[a-zA-Z0-9\\-_]{20,}/g,\n // OpenAI / Anthropic API keys\n /sk-[a-zA-Z0-9-]{32,}/g,\n // AWS access key IDs\n /AKIA[0-9A-Z]{16}/g,\n // Slack tokens (app, bot, refresh, session, user)\n /xox[abrsp]-[0-9]+-[A-Za-z0-9]+/g,\n // Slack incoming webhooks\n /https:\\/\\/hooks\\.slack\\.com\\/services\\/T[A-Za-z0-9]+\\/B[A-Za-z0-9]+\\/[A-Za-z0-9]+/g,\n // npm access tokens\n /npm_[A-Za-z0-9]{36,}/g,\n // Google API keys\n /AIza[A-Za-z0-9_-]{35}/g,\n // Azure AD client secrets (v2 format: 3 chars + 7Q~ or 8Q~ + 31 chars)\n /[\\w~.-]{3}[78]Q~[\\w~.-]{31}/g,\n // JWTs\n /eyJ[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]*/g,\n // PEM private keys\n /-----BEGIN[A-Z ]*PRIVATE KEY-----[\\s\\S]*?-----END[A-Z ]*PRIVATE KEY-----/g,\n // Basic auth in URIs (e.g. https://user:pass@host)\n /\\w+:\\/\\/[^/\\s:]+:[^/\\s@]+@[^/\\s]+/g,\n // Bearer tokens\n /Bearer\\s+[A-Za-z0-9\\-._~+/]{20,}=*/g,\n];\n\n/**\n * Label text patterns that indicate a field holds sensitive content.\n */\nexport const SENSITIVE_LABEL_PATTERN =\n /secret|token|password|api.?key|credential|private.?key|access.?key/i;\n\n/**\n * Label patterns that are safe false-positives and should NOT trigger redaction.\n */\nexport const SAFE_LABEL_EXCLUSIONS =\n /token usage|token count|token limit|token budget/i;\n\n/**\n * Scans text for known secret patterns and replaces them with [REDACTED].\n * Used by DOM extraction to sanitize extracted text before sending.\n */\nexport function redactText(text: string): string {\n let result = text;\n for (const pattern of SECRET_PATTERNS) {\n pattern.lastIndex = 0;\n result = result.replace(pattern, REDACTED);\n }\n return result;\n}\n\n/**\n * Determines if an input/textarea element is likely holding a secret,\n * based on its type, aria-label, or associated label element.\n */\nexport function isSensitiveElement(el: Element, doc: Document): boolean {\n if ((el as HTMLInputElement).type === 'password') {\n return true;\n }\n\n for (const attr of ['aria-label', 'name', 'title', 'placeholder']) {\n const val = el.getAttribute(attr) || '';\n if (SENSITIVE_LABEL_PATTERN.test(val) && !SAFE_LABEL_EXCLUSIONS.test(val)) {\n return true;\n }\n }\n\n const id = el.getAttribute('id');\n if (id) {\n const label = doc.querySelector(`label[for=\"${CSS.escape(id)}\"]`);\n if (label?.textContent && SENSITIVE_LABEL_PATTERN.test(label.textContent)) {\n return !SAFE_LABEL_EXCLUSIONS.test(label.textContent);\n }\n }\n\n const parentLabel = el.closest('label');\n if (\n parentLabel?.textContent &&\n SENSITIVE_LABEL_PATTERN.test(parentLabel.textContent)\n ) {\n return !SAFE_LABEL_EXCLUSIONS.test(parentLabel.textContent);\n }\n\n return false;\n}\n\n/**\n * Sanitizes a cloned DOM before it is rendered to canvas.\n * Used in html2canvas onclone callback.\n * Mutates the clone — safe because it's not the live DOM.\n */\nexport function sanitizeClonedDom(clonedDoc: Document): void {\n // 1. Mask all sensitive inputs/textareas (password fields + label-detected)\n // 2. Regex-scan all remaining input/textarea values for token patterns\n clonedDoc.querySelectorAll('input, textarea').forEach(el => {\n if (isSensitiveElement(el, clonedDoc)) {\n (el as HTMLInputElement).value = MASK;\n } else {\n const inp = el as HTMLInputElement;\n if (inp.value) {\n inp.value = redactText(inp.value);\n }\n }\n });\n\n // 3. Regex scan all text nodes for token patterns\n const walker = clonedDoc.createTreeWalker(\n clonedDoc.body,\n NodeFilter.SHOW_TEXT,\n );\n let node = walker.nextNode();\n while (node) {\n if (node.textContent) {\n const redacted = redactText(node.textContent);\n if (redacted !== node.textContent) {\n node.textContent = redacted;\n }\n }\n node = walker.nextNode();\n }\n\n // 4. Handle visibility-toggle secrets (e.g. Akeyless show/hide pattern)\n clonedDoc\n .querySelectorAll(\n '[aria-label*=\"Hide secret\" i], [aria-label*=\"Hide value\" i]',\n )\n .forEach(btn => {\n const container = btn.closest('[class*=\"Box\"], [class*=\"flex\"]');\n if (container) {\n const textEl = container.querySelector('pre, code, span, p');\n if (textEl?.textContent && textEl.textContent !== MASK) {\n textEl.textContent = MASK;\n }\n }\n });\n}\n"],"names":[],"mappings":"AAgBA,MAAM,QAAA,GAAW,YAAA;
|
|
1
|
+
{"version":3,"file":"sensitive-data-redactor.esm.js","sources":["../../src/utils/sensitive-data-redactor.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst REDACTED = '[REDACTED]';\nconst MASK = '••••••••';\n\n/**\n * Regex patterns matching known secret/token formats.\n * Each pattern uses the global flag for replaceAll behavior.\n * WARNING: These regexes are stateful (/g). Reset lastIndex before calling\n * .test() or .exec() directly. Prefer using redactText() instead.\n */\nexport const SECRET_PATTERNS: RegExp[] = [\n // GitHub tokens (classic PAT, server-to-server, OAuth, fine-grained, user-to-server, refresh)\n /gh[pousr]_[a-zA-Z0-9]{36,}/g,\n /github_pat_[a-zA-Z0-9_]{22,}/g,\n // GitLab PAT\n /glpat-[a-zA-Z0-9\\-_]{20,}/g,\n // OpenAI / Anthropic API keys\n /sk-[a-zA-Z0-9-]{32,}/g,\n // AWS access key IDs\n /AKIA[0-9A-Z]{16}/g,\n // Slack tokens (app, bot, refresh, session, user)\n /xox[abrsp]-[0-9]+-[A-Za-z0-9]+/g,\n // Slack incoming webhooks\n /https:\\/\\/hooks\\.slack\\.com\\/services\\/T[A-Za-z0-9]+\\/B[A-Za-z0-9]+\\/[A-Za-z0-9]+/g,\n // npm access tokens\n /npm_[A-Za-z0-9]{36,}/g,\n // Google API keys\n /AIza[A-Za-z0-9_-]{35}/g,\n // Azure AD client secrets (v2 format: 3 chars + 7Q~ or 8Q~ + 31 chars)\n /[\\w~.-]{3}[78]Q~[\\w~.-]{31}/g,\n // JWTs\n /eyJ[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]*/g,\n // PEM private keys\n /-----BEGIN[A-Z ]*PRIVATE KEY-----[\\s\\S]*?-----END[A-Z ]*PRIVATE KEY-----/g,\n // Basic auth in URIs (e.g. https://user:pass@host)\n /\\w+:\\/\\/[^/\\s:]+:[^/\\s@]+@[^/\\s]+/g,\n // Bearer tokens\n /Bearer\\s+[A-Za-z0-9\\-._~+/]{20,}=*/g,\n];\n\n/**\n * Label text patterns that indicate a field holds sensitive content.\n */\nexport const SENSITIVE_LABEL_PATTERN =\n /secret|token|password|api.?key|credential|private.?key|access.?key/i;\n\n/**\n * Label patterns that are safe false-positives and should NOT trigger redaction.\n */\nexport const SAFE_LABEL_EXCLUSIONS =\n /token usage|token count|token limit|token budget/i;\n\n/**\n * Scans text for known secret patterns and replaces them with [REDACTED].\n * Used by DOM extraction to sanitize extracted text before sending.\n */\nexport function redactText(text: string): string {\n let result = text;\n for (const pattern of SECRET_PATTERNS) {\n pattern.lastIndex = 0;\n result = result.replace(pattern, REDACTED);\n }\n return result;\n}\n\n/**\n * Determines if an input/textarea element is likely holding a secret,\n * based on its type, aria-label, or associated label element.\n */\nexport function isSensitiveElement(el: Element, doc: Document): boolean {\n if ((el as HTMLInputElement).type === 'password') {\n return true;\n }\n\n for (const attr of ['aria-label', 'name', 'title', 'placeholder']) {\n const val = el.getAttribute(attr) || '';\n if (SENSITIVE_LABEL_PATTERN.test(val) && !SAFE_LABEL_EXCLUSIONS.test(val)) {\n return true;\n }\n }\n\n const id = el.getAttribute('id');\n if (id) {\n const label = doc.querySelector(`label[for=\"${CSS.escape(id)}\"]`);\n if (label?.textContent && SENSITIVE_LABEL_PATTERN.test(label.textContent)) {\n return !SAFE_LABEL_EXCLUSIONS.test(label.textContent);\n }\n }\n\n const parentLabel = el.closest('label');\n if (\n parentLabel?.textContent &&\n SENSITIVE_LABEL_PATTERN.test(parentLabel.textContent)\n ) {\n return !SAFE_LABEL_EXCLUSIONS.test(parentLabel.textContent);\n }\n\n return false;\n}\n\n/**\n * Sanitizes a cloned DOM before it is rendered to canvas.\n * Used in html2canvas onclone callback.\n * Mutates the clone — safe because it's not the live DOM.\n */\nexport function sanitizeClonedDom(clonedDoc: Document): void {\n // 1. Mask all sensitive inputs/textareas (password fields + label-detected)\n // 2. Regex-scan all remaining input/textarea values for token patterns\n clonedDoc.querySelectorAll('input, textarea').forEach(el => {\n if (isSensitiveElement(el, clonedDoc)) {\n (el as HTMLInputElement).value = MASK;\n } else {\n const inp = el as HTMLInputElement;\n if (inp.value) {\n inp.value = redactText(inp.value);\n }\n }\n });\n\n // 3. Regex scan all text nodes for token patterns\n const walker = clonedDoc.createTreeWalker(\n clonedDoc.body,\n NodeFilter.SHOW_TEXT,\n );\n let node = walker.nextNode();\n while (node) {\n if (node.textContent) {\n const redacted = redactText(node.textContent);\n if (redacted !== node.textContent) {\n node.textContent = redacted;\n }\n }\n node = walker.nextNode();\n }\n\n // 4. Handle visibility-toggle secrets (e.g. Akeyless show/hide pattern)\n clonedDoc\n .querySelectorAll(\n '[aria-label*=\"Hide secret\" i], [aria-label*=\"Hide value\" i]',\n )\n .forEach(btn => {\n const container = btn.closest('[class*=\"Box\"], [class*=\"flex\"]');\n if (container) {\n const textEl = container.querySelector('pre, code, span, p');\n if (textEl?.textContent && textEl.textContent !== MASK) {\n textEl.textContent = MASK;\n }\n }\n });\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@red-hat-developer-hub/backstage-plugin-intelligent-assistant",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.3.0",
|
|
4
4
|
"main": "./dist/index.esm.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -111,13 +111,14 @@
|
|
|
111
111
|
"@patternfly/react-icons": "^6.5.0",
|
|
112
112
|
"@patternfly/react-table": "^6.4.1",
|
|
113
113
|
"@red-hat-developer-hub/backstage-plugin-app-react": "^1.0.0",
|
|
114
|
-
"@red-hat-developer-hub/backstage-plugin-intelligent-assistant-common": "^5.
|
|
114
|
+
"@red-hat-developer-hub/backstage-plugin-intelligent-assistant-common": "^5.3.0",
|
|
115
115
|
"@red-hat-developer-hub/backstage-plugin-theme": "^0.14.10",
|
|
116
116
|
"@tanstack/react-query": "^5.59.15",
|
|
117
117
|
"html2canvas-pro": "^1.5.0",
|
|
118
118
|
"monaco-editor": "^0.56.0",
|
|
119
119
|
"react-dropzone": "^14.4.0",
|
|
120
|
-
"react-use": "^17.2.4"
|
|
120
|
+
"react-use": "^17.2.4",
|
|
121
|
+
"tss-react": "^4.9.18"
|
|
121
122
|
},
|
|
122
123
|
"peerDependencies": {
|
|
123
124
|
"react": "^18.0.0",
|
|
@@ -134,7 +135,7 @@
|
|
|
134
135
|
"@testing-library/jest-dom": "^6.0.0",
|
|
135
136
|
"@testing-library/react": "^15.0.0",
|
|
136
137
|
"@testing-library/user-event": "14.6.1",
|
|
137
|
-
"prettier": "3.9.
|
|
138
|
+
"prettier": "3.9.8",
|
|
138
139
|
"react": "^18.0.0",
|
|
139
140
|
"react-dom": "^18.0.0",
|
|
140
141
|
"react-router-dom": "^6.30.6"
|
|
@@ -142,19 +143,8 @@
|
|
|
142
143
|
"files": [
|
|
143
144
|
"dist",
|
|
144
145
|
"config.schema.json",
|
|
145
|
-
"dist-scalprum",
|
|
146
146
|
"app-config.yaml"
|
|
147
147
|
],
|
|
148
|
-
"scalprum": {
|
|
149
|
-
"name": "red-hat-developer-hub.backstage-plugin-intelligent-assistant",
|
|
150
|
-
"exposedModules": {
|
|
151
|
-
"PluginRoot": "./src/index.tsx",
|
|
152
|
-
"Alpha": "./src/alpha.ts",
|
|
153
|
-
"Legacy": "./src/legacy.ts",
|
|
154
|
-
"IntelligentAssistantFABModule": "./src/lightspeedFABModuleExport.ts",
|
|
155
|
-
"IntelligentAssistantTranslationsModule": "./src/lightspeedTranslationsModuleExport.ts"
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
148
|
"configSchema": "config.schema.json",
|
|
159
149
|
"repository": {
|
|
160
150
|
"type": "git",
|