fa-mcp-sdk 0.4.76 → 0.4.77
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/README.md +319 -314
- package/bin/fa-mcp.js +85 -68
- package/cli-template/.claude/agents/javascript-pro.md +276 -276
- package/cli-template/.claude/settings.json +50 -50
- package/cli-template/.claude/skills/upgrade-guide/SKILL.md +2 -1
- package/cli-template/.oxfmtrc.json +41 -0
- package/cli-template/.oxlintrc.json +120 -0
- package/cli-template/CLAUDE.md +358 -355
- package/cli-template/FA-MCP-SDK-DOC/00-FA-MCP-SDK-index.md +132 -132
- package/cli-template/FA-MCP-SDK-DOC/01-getting-started.md +146 -146
- package/cli-template/FA-MCP-SDK-DOC/02-1-tools-and-api.md +431 -431
- package/cli-template/FA-MCP-SDK-DOC/02-2-prompts-and-resources.md +201 -201
- package/cli-template/FA-MCP-SDK-DOC/03-configuration.md +384 -384
- package/cli-template/FA-MCP-SDK-DOC/04-authentication.md +412 -412
- package/cli-template/FA-MCP-SDK-DOC/05-ad-authorization.md +196 -196
- package/cli-template/FA-MCP-SDK-DOC/06-utilities.md +163 -163
- package/cli-template/FA-MCP-SDK-DOC/07-testing-and-operations.md +127 -127
- package/cli-template/jest.config.js +27 -30
- package/cli-template/package.json +10 -5
- package/cli-template/prompt-example-new-MCP.md +101 -101
- package/cli-template/readme-docs/SKILLS.md +1 -1
- package/cli-template/tsconfig.json +58 -58
- package/cli-template/update.cjs +41 -38
- package/config/custom-environment-variables.yaml +63 -63
- package/config/development.yaml +4 -4
- package/config/production.yaml +4 -4
- package/config/test.yaml +26 -26
- package/dist/core/_types_/TNtlm.d.ts.map +1 -1
- package/dist/core/_types_/active-directory-config.d.ts.map +1 -1
- package/dist/core/_types_/config.d.ts.map +1 -1
- package/dist/core/_types_/types.d.ts.map +1 -1
- package/dist/core/ad/group-checker.d.ts.map +1 -1
- package/dist/core/ad/group-checker.js.map +1 -1
- package/dist/core/agent-tester/agent-tester-router.d.ts.map +1 -1
- package/dist/core/agent-tester/agent-tester-router.js +6 -6
- package/dist/core/agent-tester/agent-tester-router.js.map +1 -1
- package/dist/core/agent-tester/check-llm.d.ts.map +1 -1
- package/dist/core/agent-tester/check-llm.js.map +1 -1
- package/dist/core/agent-tester/services/SummaryMemory.d.ts.map +1 -1
- package/dist/core/agent-tester/services/SummaryMemory.js +3 -9
- package/dist/core/agent-tester/services/SummaryMemory.js.map +1 -1
- package/dist/core/agent-tester/services/TesterAgentService.d.ts.map +1 -1
- package/dist/core/agent-tester/services/TesterAgentService.js +25 -27
- package/dist/core/agent-tester/services/TesterAgentService.js.map +1 -1
- package/dist/core/agent-tester/services/TesterMcpClientService.d.ts.map +1 -1
- package/dist/core/agent-tester/services/TesterMcpClientService.js +26 -25
- package/dist/core/agent-tester/services/TesterMcpClientService.js.map +1 -1
- package/dist/core/auth/admin-auth.d.ts.map +1 -1
- package/dist/core/auth/admin-auth.js +5 -5
- package/dist/core/auth/admin-auth.js.map +1 -1
- package/dist/core/auth/agent-tester-auth.d.ts.map +1 -1
- package/dist/core/auth/agent-tester-auth.js +1 -6
- package/dist/core/auth/agent-tester-auth.js.map +1 -1
- package/dist/core/auth/basic.d.ts.map +1 -1
- package/dist/core/auth/basic.js.map +1 -1
- package/dist/core/auth/ip-check.d.ts.map +1 -1
- package/dist/core/auth/ip-check.js +1 -1
- package/dist/core/auth/ip-check.js.map +1 -1
- package/dist/core/auth/jwt.d.ts.map +1 -1
- package/dist/core/auth/jwt.js +1 -1
- package/dist/core/auth/jwt.js.map +1 -1
- package/dist/core/auth/middleware.d.ts.map +1 -1
- package/dist/core/auth/middleware.js +9 -6
- package/dist/core/auth/middleware.js.map +1 -1
- package/dist/core/auth/multi-auth.d.ts.map +1 -1
- package/dist/core/auth/multi-auth.js +6 -6
- package/dist/core/auth/multi-auth.js.map +1 -1
- package/dist/core/auth/revocation.d.ts.map +1 -1
- package/dist/core/auth/revocation.js +2 -6
- package/dist/core/auth/revocation.js.map +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-auth-options.d.ts.map +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-auth-options.js +2 -2
- package/dist/core/auth/token-generator/ntlm/ntlm-auth-options.js.map +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-domain-config.js +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-domain-config.js.map +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-integration.d.ts.map +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-integration.js +4 -2
- package/dist/core/auth/token-generator/ntlm/ntlm-integration.js.map +1 -1
- package/dist/core/auth/token-generator/server.d.ts.map +1 -1
- package/dist/core/auth/token-generator/server.js.map +1 -1
- package/dist/core/bootstrap/init-config.d.ts.map +1 -1
- package/dist/core/bootstrap/init-config.js +2 -2
- package/dist/core/bootstrap/init-config.js.map +1 -1
- package/dist/core/bootstrap/startup-info.d.ts.map +1 -1
- package/dist/core/bootstrap/startup-info.js +3 -7
- package/dist/core/bootstrap/startup-info.js.map +1 -1
- package/dist/core/cache/cache.d.ts.map +1 -1
- package/dist/core/cache/cache.js +2 -2
- package/dist/core/cache/cache.js.map +1 -1
- package/dist/core/consul/deregister.d.ts.map +1 -1
- package/dist/core/consul/deregister.js.map +1 -1
- package/dist/core/consul/get-consul-api.d.ts.map +1 -1
- package/dist/core/consul/get-consul-api.js +1 -2
- package/dist/core/consul/get-consul-api.js.map +1 -1
- package/dist/core/db/pg-db.d.ts.map +1 -1
- package/dist/core/db/pg-db.js +3 -3
- package/dist/core/db/pg-db.js.map +1 -1
- package/dist/core/debug.d.ts.map +1 -1
- package/dist/core/debug.js.map +1 -1
- package/dist/core/errors/BaseMcpError.d.ts.map +1 -1
- package/dist/core/errors/BaseMcpError.js.map +1 -1
- package/dist/core/errors/ValidationError.d.ts.map +1 -1
- package/dist/core/errors/ValidationError.js.map +1 -1
- package/dist/core/errors/errors.d.ts.map +1 -1
- package/dist/core/errors/errors.js +1 -1
- package/dist/core/errors/errors.js.map +1 -1
- package/dist/core/index.d.ts +6 -6
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +5 -5
- package/dist/core/index.js.map +1 -1
- package/dist/core/init-mcp-server.d.ts.map +1 -1
- package/dist/core/init-mcp-server.js.map +1 -1
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/logger.js +1 -1
- package/dist/core/logger.js.map +1 -1
- package/dist/core/mcp/create-mcp-server.d.ts.map +1 -1
- package/dist/core/mcp/create-mcp-server.js +1 -1
- package/dist/core/mcp/create-mcp-server.js.map +1 -1
- package/dist/core/mcp/prompts.d.ts.map +1 -1
- package/dist/core/mcp/prompts.js.map +1 -1
- package/dist/core/mcp/readme-assembler.d.ts.map +1 -1
- package/dist/core/mcp/readme-assembler.js +3 -1
- package/dist/core/mcp/readme-assembler.js.map +1 -1
- package/dist/core/mcp/resources.d.ts.map +1 -1
- package/dist/core/mcp/resources.js.map +1 -1
- package/dist/core/mcp/server-stdio.d.ts.map +1 -1
- package/dist/core/utils/formatToolResult.d.ts.map +1 -1
- package/dist/core/utils/formatToolResult.js.map +1 -1
- package/dist/core/utils/port-checker.d.ts.map +1 -1
- package/dist/core/utils/port-checker.js.map +1 -1
- package/dist/core/utils/rate-limit.d.ts.map +1 -1
- package/dist/core/utils/rate-limit.js +2 -8
- package/dist/core/utils/rate-limit.js.map +1 -1
- package/dist/core/utils/testing/BaseMcpClient.d.ts.map +1 -1
- package/dist/core/utils/testing/BaseMcpClient.js.map +1 -1
- package/dist/core/utils/testing/McpHttpClient.d.ts.map +1 -1
- package/dist/core/utils/testing/McpHttpClient.js +2 -2
- package/dist/core/utils/testing/McpHttpClient.js.map +1 -1
- package/dist/core/utils/testing/McpSseClient.d.ts.map +1 -1
- package/dist/core/utils/testing/McpSseClient.js +3 -8
- package/dist/core/utils/testing/McpSseClient.js.map +1 -1
- package/dist/core/utils/testing/McpStdioClient.d.ts.map +1 -1
- package/dist/core/utils/testing/McpStdioClient.js.map +1 -1
- package/dist/core/utils/testing/McpStreamableHttpClient.d.ts.map +1 -1
- package/dist/core/utils/testing/McpStreamableHttpClient.js +7 -8
- package/dist/core/utils/testing/McpStreamableHttpClient.js.map +1 -1
- package/dist/core/utils/utils.d.ts.map +1 -1
- package/dist/core/utils/utils.js +3 -5
- package/dist/core/utils/utils.js.map +1 -1
- package/dist/core/web/admin-router.d.ts.map +1 -1
- package/dist/core/web/admin-router.js +3 -3
- package/dist/core/web/admin-router.js.map +1 -1
- package/dist/core/web/cors.d.ts.map +1 -1
- package/dist/core/web/cors.js.map +1 -1
- package/dist/core/web/favicon-svg.d.ts.map +1 -1
- package/dist/core/web/favicon-svg.js +1 -5
- package/dist/core/web/favicon-svg.js.map +1 -1
- package/dist/core/web/home-api.d.ts.map +1 -1
- package/dist/core/web/home-api.js +7 -8
- package/dist/core/web/home-api.js.map +1 -1
- package/dist/core/web/openapi.d.ts.map +1 -1
- package/dist/core/web/openapi.js +1 -3
- package/dist/core/web/openapi.js.map +1 -1
- package/dist/core/web/server-http.d.ts.map +1 -1
- package/dist/core/web/server-http.js +4 -4
- package/dist/core/web/server-http.js.map +1 -1
- package/dist/core/web/static/agent-tester/index.html +323 -323
- package/dist/core/web/static/agent-tester/script.js +311 -200
- package/dist/core/web/static/agent-tester/styles.css +1840 -1840
- package/dist/core/web/static/home/index.html +220 -220
- package/dist/core/web/static/home/script.js +72 -43
- package/dist/core/web/static/styles.css +927 -927
- package/dist/core/web/static/token-gen/index.html +136 -136
- package/dist/core/web/static/token-gen/script.js +58 -56
- package/dist/core/web/svg-icons.d.ts.map +1 -1
- package/dist/core/web/svg-icons.js +1 -5
- package/dist/core/web/svg-icons.js.map +1 -1
- package/package.json +10 -5
- package/{cli-template/.claude/hooks/eslint-fix.cjs → scripts/cc-hook-oxlint-oxfmt-fix.cjs} +109 -100
- package/scripts/generate-jwt.js +5 -9
- package/scripts/kill-port.js +5 -2
- package/scripts/npm/run.js +1 -2
- package/scripts/remove-nul.js +1 -1
- package/scripts/update-sdk.js +36 -14
- package/src/template/api/router.ts +3 -3
- package/src/template/prompts/agent-brief.ts +0 -1
- package/src/template/start.ts +3 -8
- package/src/template/tools/handle-tool-call.ts +3 -3
- package/src/template/tools/tools.ts +3 -7
- package/src/tests/jest-simple-reporter.js +1 -1
- package/src/tests/mcp/sse/mcp-sse-client-handling.md +111 -111
- package/src/tests/mcp/sse/test-sse-npm-package.js +2 -3
- package/src/tests/mcp/test-cases.js +6 -7
- package/src/tests/mcp/test-http.js +2 -2
- package/src/tests/mcp/test-sse.js +9 -7
- package/src/tests/mcp/test-stdio.js +12 -8
- package/src/tests/utils.ts +4 -3
- package/cli-template/eslint.config.js +0 -27
|
@@ -4,19 +4,19 @@ let resourcesData = [];
|
|
|
4
4
|
let promptsData = [];
|
|
5
5
|
|
|
6
6
|
// Set primary color CSS variable
|
|
7
|
-
function setPrimaryColor
|
|
7
|
+
function setPrimaryColor(color) {
|
|
8
8
|
if (color) {
|
|
9
9
|
document.documentElement.style.setProperty('--primary-color', color);
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
// Set favicon dynamically
|
|
14
|
-
function setFavicon
|
|
15
|
-
if (!svgContent) {
|
|
14
|
+
function setFavicon(svgContent) {
|
|
15
|
+
if (!svgContent) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
16
18
|
|
|
17
|
-
const encoded = encodeURIComponent(svgContent)
|
|
18
|
-
.replace(/'/g, '%27')
|
|
19
|
-
.replace(/"/g, '%22');
|
|
19
|
+
const encoded = encodeURIComponent(svgContent).replace(/'/g, '%27').replace(/"/g, '%22');
|
|
20
20
|
|
|
21
21
|
const link = document.querySelector('link[rel="icon"]') || document.createElement('link');
|
|
22
22
|
link.rel = 'icon';
|
|
@@ -29,7 +29,7 @@ function setFavicon (svgContent) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
// Set header icon dynamically
|
|
32
|
-
function setHeaderIcon
|
|
32
|
+
function setHeaderIcon(svgContent) {
|
|
33
33
|
const iconContainer = document.getElementById('serviceIcon');
|
|
34
34
|
if (iconContainer && svgContent) {
|
|
35
35
|
iconContainer.innerHTML = svgContent;
|
|
@@ -37,7 +37,7 @@ function setHeaderIcon (svgContent) {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
// Render page info
|
|
40
|
-
function renderPageInfo
|
|
40
|
+
function renderPageInfo(data) {
|
|
41
41
|
// Service title
|
|
42
42
|
const titleEl = document.getElementById('serviceTitle');
|
|
43
43
|
if (titleEl) {
|
|
@@ -49,27 +49,39 @@ function renderPageInfo (data) {
|
|
|
49
49
|
|
|
50
50
|
// Description
|
|
51
51
|
const descEl = document.getElementById('serviceDescription');
|
|
52
|
-
if (descEl) {
|
|
52
|
+
if (descEl) {
|
|
53
|
+
descEl.textContent = data.description;
|
|
54
|
+
}
|
|
53
55
|
|
|
54
56
|
// Version
|
|
55
57
|
const versionEl = document.getElementById('serviceVersion');
|
|
56
|
-
if (versionEl) {
|
|
58
|
+
if (versionEl) {
|
|
59
|
+
versionEl.textContent = data.version;
|
|
60
|
+
}
|
|
57
61
|
|
|
58
62
|
// Uptime
|
|
59
63
|
const uptimeEl = document.getElementById('serviceUptime');
|
|
60
|
-
if (uptimeEl) {
|
|
64
|
+
if (uptimeEl) {
|
|
65
|
+
uptimeEl.textContent = data.uptime;
|
|
66
|
+
}
|
|
61
67
|
|
|
62
68
|
// Tools count
|
|
63
69
|
const toolsEl = document.getElementById('toolsCount');
|
|
64
|
-
if (toolsEl) {
|
|
70
|
+
if (toolsEl) {
|
|
71
|
+
toolsEl.textContent = data.toolsCount + ' available';
|
|
72
|
+
}
|
|
65
73
|
|
|
66
74
|
// Resources count
|
|
67
75
|
const resourcesEl = document.getElementById('resourcesCount');
|
|
68
|
-
if (resourcesEl) {
|
|
76
|
+
if (resourcesEl) {
|
|
77
|
+
resourcesEl.textContent = data.resourcesCount + ' available';
|
|
78
|
+
}
|
|
69
79
|
|
|
70
80
|
// Prompts count
|
|
71
81
|
const promptsEl = document.getElementById('promptsCount');
|
|
72
|
-
if (promptsEl) {
|
|
82
|
+
if (promptsEl) {
|
|
83
|
+
promptsEl.textContent = data.promptsCount + ' available';
|
|
84
|
+
}
|
|
73
85
|
|
|
74
86
|
// Database info
|
|
75
87
|
const dbSection = document.getElementById('dbSection');
|
|
@@ -78,7 +90,9 @@ function renderPageInfo (data) {
|
|
|
78
90
|
dbSection.style.display = 'block';
|
|
79
91
|
const dbValue = document.getElementById('dbValue');
|
|
80
92
|
const dbStatus = document.getElementById('dbStatus');
|
|
81
|
-
if (dbValue) {
|
|
93
|
+
if (dbValue) {
|
|
94
|
+
dbValue.textContent = data.db.connection + ' • ';
|
|
95
|
+
}
|
|
82
96
|
if (dbStatus) {
|
|
83
97
|
dbStatus.textContent = data.db.status;
|
|
84
98
|
dbStatus.className = 'value ' + data.db.status;
|
|
@@ -96,10 +110,14 @@ function renderPageInfo (data) {
|
|
|
96
110
|
|
|
97
111
|
// Auth info
|
|
98
112
|
const mcpAuthEl = document.getElementById('mcpAuthValue');
|
|
99
|
-
if (mcpAuthEl) {
|
|
113
|
+
if (mcpAuthEl) {
|
|
114
|
+
mcpAuthEl.textContent = data.mcpAuth || 'disabled';
|
|
115
|
+
}
|
|
100
116
|
|
|
101
117
|
const adminPanelEl = document.getElementById('adminPanelValue');
|
|
102
|
-
if (adminPanelEl) {
|
|
118
|
+
if (adminPanelEl) {
|
|
119
|
+
adminPanelEl.textContent = data.adminPanel || 'disabled';
|
|
120
|
+
}
|
|
103
121
|
|
|
104
122
|
// Consul info
|
|
105
123
|
const consulSection = document.getElementById('consulSection');
|
|
@@ -124,7 +142,7 @@ function renderPageInfo (data) {
|
|
|
124
142
|
}
|
|
125
143
|
|
|
126
144
|
// Load page data from API
|
|
127
|
-
async function loadPageData
|
|
145
|
+
async function loadPageData() {
|
|
128
146
|
try {
|
|
129
147
|
const response = await fetch('/api/home-info');
|
|
130
148
|
if (!response.ok) {
|
|
@@ -147,14 +165,13 @@ async function loadPageData () {
|
|
|
147
165
|
|
|
148
166
|
// Render page info
|
|
149
167
|
renderPageInfo(data);
|
|
150
|
-
|
|
151
168
|
} catch (error) {
|
|
152
169
|
console.error('Error loading page data:', error);
|
|
153
170
|
}
|
|
154
171
|
}
|
|
155
172
|
|
|
156
173
|
// eslint-disable-next-line unused-imports/no-unused-vars
|
|
157
|
-
function openModal
|
|
174
|
+
function openModal(sectionName) {
|
|
158
175
|
const modal = document.getElementById(sectionName + '-modal');
|
|
159
176
|
const tableBody = document.getElementById(sectionName + '-table').querySelector('tbody');
|
|
160
177
|
|
|
@@ -168,12 +185,12 @@ function openModal (sectionName) {
|
|
|
168
185
|
}, 300);
|
|
169
186
|
}
|
|
170
187
|
|
|
171
|
-
function closeModal
|
|
188
|
+
function closeModal(sectionName) {
|
|
172
189
|
const modal = document.getElementById(sectionName + '-modal');
|
|
173
190
|
modal.style.display = 'none';
|
|
174
191
|
}
|
|
175
192
|
|
|
176
|
-
function loadTableData
|
|
193
|
+
function loadTableData(sectionName) {
|
|
177
194
|
const tableBody = document.getElementById(sectionName + '-table').querySelector('tbody');
|
|
178
195
|
let data, html;
|
|
179
196
|
|
|
@@ -195,12 +212,14 @@ function loadTableData (sectionName) {
|
|
|
195
212
|
tableBody.innerHTML = html;
|
|
196
213
|
}
|
|
197
214
|
|
|
198
|
-
function generateToolsTableRows
|
|
215
|
+
function generateToolsTableRows(tools) {
|
|
199
216
|
if (!tools || tools.length === 0) {
|
|
200
217
|
return '<tr><td colspan="3" class="loading-cell">No tools available</td></tr>';
|
|
201
218
|
}
|
|
202
|
-
return tools
|
|
203
|
-
|
|
219
|
+
return tools
|
|
220
|
+
.map(
|
|
221
|
+
(tool, index) =>
|
|
222
|
+
`<tr>
|
|
204
223
|
<td><code>${tool.name}</code></td>
|
|
205
224
|
<td>${tool.annotations?.title || tool.description}</td>
|
|
206
225
|
<td>
|
|
@@ -215,15 +234,18 @@ function generateToolsTableRows (tools) {
|
|
|
215
234
|
</div>
|
|
216
235
|
</td>
|
|
217
236
|
</tr>`,
|
|
218
|
-
|
|
237
|
+
)
|
|
238
|
+
.join('');
|
|
219
239
|
}
|
|
220
240
|
|
|
221
|
-
function generateResourcesTableRows
|
|
241
|
+
function generateResourcesTableRows(resources) {
|
|
222
242
|
if (!resources || resources.length === 0) {
|
|
223
243
|
return '<tr><td colspan="5" class="loading-cell">No resources available</td></tr>';
|
|
224
244
|
}
|
|
225
|
-
return resources
|
|
226
|
-
|
|
245
|
+
return resources
|
|
246
|
+
.map(
|
|
247
|
+
(resource, index) =>
|
|
248
|
+
`<tr>
|
|
227
249
|
<td><code>${resource.uri}</code></td>
|
|
228
250
|
<td>${resource.name}</td>
|
|
229
251
|
<td>${resource.description}</td>
|
|
@@ -243,15 +265,18 @@ function generateResourcesTableRows (resources) {
|
|
|
243
265
|
</div>
|
|
244
266
|
</td>
|
|
245
267
|
</tr>`,
|
|
246
|
-
|
|
268
|
+
)
|
|
269
|
+
.join('');
|
|
247
270
|
}
|
|
248
271
|
|
|
249
|
-
function generatePromptsTableRows
|
|
272
|
+
function generatePromptsTableRows(prompts) {
|
|
250
273
|
if (!prompts || prompts.length === 0) {
|
|
251
274
|
return '<tr><td colspan="2" class="loading-cell">No prompts available</td></tr>';
|
|
252
275
|
}
|
|
253
|
-
return prompts
|
|
254
|
-
|
|
276
|
+
return prompts
|
|
277
|
+
.map(
|
|
278
|
+
(prompt, index) =>
|
|
279
|
+
`<tr>
|
|
255
280
|
<td><code>${prompt.name}</code></td>
|
|
256
281
|
<td>
|
|
257
282
|
<a class="detail-link" id="prompts-toggle-details-${index}" onclick="togglePromptDetails('prompts', ${index}, 'details')">details</a>
|
|
@@ -268,11 +293,12 @@ function generatePromptsTableRows (prompts) {
|
|
|
268
293
|
</div>
|
|
269
294
|
</td>
|
|
270
295
|
</tr>`,
|
|
271
|
-
|
|
296
|
+
)
|
|
297
|
+
.join('');
|
|
272
298
|
}
|
|
273
299
|
|
|
274
300
|
// eslint-disable-next-line unused-imports/no-unused-vars
|
|
275
|
-
function toggleDetails
|
|
301
|
+
function toggleDetails(sectionName, index) {
|
|
276
302
|
const detailRow = document.getElementById(sectionName + '-detail-' + index);
|
|
277
303
|
const toggleLink = document.getElementById(sectionName + '-toggle-' + index);
|
|
278
304
|
const loadingSpinner = detailRow.querySelector('.loading-spinner');
|
|
@@ -323,7 +349,7 @@ function toggleDetails (sectionName, index) {
|
|
|
323
349
|
|
|
324
350
|
// Handle prompt details and prompt content display
|
|
325
351
|
// eslint-disable-next-line unused-imports/no-unused-vars
|
|
326
|
-
async function togglePromptDetails
|
|
352
|
+
async function togglePromptDetails(sectionName, index, displayType) {
|
|
327
353
|
const detailRow = document.getElementById(sectionName + '-detail-' + index);
|
|
328
354
|
const toggleLinkDetails = document.getElementById(sectionName + '-toggle-details-' + index);
|
|
329
355
|
const toggleLinkPrompt = document.getElementById(sectionName + '-toggle-prompt-' + index);
|
|
@@ -385,7 +411,9 @@ async function togglePromptDetails (sectionName, index, displayType) {
|
|
|
385
411
|
let promptText = '';
|
|
386
412
|
|
|
387
413
|
messages.forEach((msg, i) => {
|
|
388
|
-
if (i > 0) {
|
|
414
|
+
if (i > 0) {
|
|
415
|
+
promptText += '\n\n---\n\n';
|
|
416
|
+
}
|
|
389
417
|
promptText += 'Role: ' + msg.role + '\n\n';
|
|
390
418
|
if (typeof msg.content === 'string') {
|
|
391
419
|
promptText += msg.content;
|
|
@@ -416,7 +444,7 @@ async function togglePromptDetails (sectionName, index, displayType) {
|
|
|
416
444
|
|
|
417
445
|
// Handle resource details and resource content display
|
|
418
446
|
// eslint-disable-next-line unused-imports/no-unused-vars
|
|
419
|
-
async function toggleResourceDetails
|
|
447
|
+
async function toggleResourceDetails(sectionName, index, displayType) {
|
|
420
448
|
const detailRow = document.getElementById(sectionName + '-detail-' + index);
|
|
421
449
|
const toggleLinkDetails = document.getElementById(sectionName + '-toggle-details-' + index);
|
|
422
450
|
const toggleLinkResource = document.getElementById(sectionName + '-toggle-resource-' + index);
|
|
@@ -478,7 +506,9 @@ async function toggleResourceDetails (sectionName, index, displayType) {
|
|
|
478
506
|
let resourceText = '';
|
|
479
507
|
|
|
480
508
|
contents.forEach((content, i) => {
|
|
481
|
-
if (i > 0) {
|
|
509
|
+
if (i > 0) {
|
|
510
|
+
resourceText += '\n\n---\n\n';
|
|
511
|
+
}
|
|
482
512
|
resourceText += 'URI: ' + content.uri + '\n';
|
|
483
513
|
resourceText += 'MIME Type: ' + content.mimeType + '\n\n';
|
|
484
514
|
|
|
@@ -519,7 +549,7 @@ async function toggleResourceDetails (sectionName, index, displayType) {
|
|
|
519
549
|
|
|
520
550
|
// Health Check Modal
|
|
521
551
|
// eslint-disable-next-line unused-imports/no-unused-vars
|
|
522
|
-
async function openHealthCheckModal
|
|
552
|
+
async function openHealthCheckModal() {
|
|
523
553
|
const modal = document.getElementById('health-modal');
|
|
524
554
|
const loading = document.getElementById('health-loading');
|
|
525
555
|
const result = document.getElementById('health-result');
|
|
@@ -561,14 +591,14 @@ async function openHealthCheckModal () {
|
|
|
561
591
|
}
|
|
562
592
|
|
|
563
593
|
// Escape HTML to prevent XSS
|
|
564
|
-
function escapeHtml
|
|
594
|
+
function escapeHtml(text) {
|
|
565
595
|
const div = document.createElement('div');
|
|
566
596
|
div.textContent = text;
|
|
567
597
|
return div.innerHTML;
|
|
568
598
|
}
|
|
569
599
|
|
|
570
600
|
// Copy to clipboard functionality
|
|
571
|
-
function addCopyButton
|
|
601
|
+
function addCopyButton(contentElement) {
|
|
572
602
|
if (!contentElement || contentElement.hasAttribute('data-copy-added')) {
|
|
573
603
|
return;
|
|
574
604
|
}
|
|
@@ -601,7 +631,6 @@ function addCopyButton (contentElement) {
|
|
|
601
631
|
setTimeout(() => {
|
|
602
632
|
notification.classList.remove('show');
|
|
603
633
|
}, 1000);
|
|
604
|
-
|
|
605
634
|
} catch {
|
|
606
635
|
// Fallback for browsers that don't support clipboard API
|
|
607
636
|
const textArea = document.createElement('textarea');
|