dtSpark 1.1.0a7__py3-none-any.whl → 1.1.0a10__py3-none-any.whl
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.
- dtSpark/_version.txt +1 -1
- dtSpark/mcp_integration/tool_selector.py +3 -3
- dtSpark/tools/builtin.py +29 -14
- dtSpark/web/static/css/dark-theme.css +55 -3
- dtSpark/web/static/js/chat.js +118 -15
- {dtspark-1.1.0a7.dist-info → dtspark-1.1.0a10.dist-info}/METADATA +1 -1
- {dtspark-1.1.0a7.dist-info → dtspark-1.1.0a10.dist-info}/RECORD +11 -11
- {dtspark-1.1.0a7.dist-info → dtspark-1.1.0a10.dist-info}/WHEEL +0 -0
- {dtspark-1.1.0a7.dist-info → dtspark-1.1.0a10.dist-info}/entry_points.txt +0 -0
- {dtspark-1.1.0a7.dist-info → dtspark-1.1.0a10.dist-info}/licenses/LICENSE +0 -0
- {dtspark-1.1.0a7.dist-info → dtspark-1.1.0a10.dist-info}/top_level.txt +0 -0
dtSpark/_version.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.1.
|
|
1
|
+
1.1.0a10
|
|
@@ -21,7 +21,7 @@ class ToolSelector:
|
|
|
21
21
|
'aws_infrastructure': ['ec2', 's3', 'lambda', 'cloudwatch', 'iam', 'vpc', 'rds', 'dynamodb', 'diagram'],
|
|
22
22
|
'elasticsearch': ['elasticsearch', 'search', 'index', 'query', 'aggregation'],
|
|
23
23
|
'ragstore': ['ragstore', 'rag', 'embedding', 'vector', 'semantic'],
|
|
24
|
-
'documents': ['word', 'excel', 'powerpoint', 'pdf', '
|
|
24
|
+
'documents': ['word', 'excel', 'powerpoint', 'pdf', 'docx', 'xlsx', 'pptx', 'spreadsheet'],
|
|
25
25
|
'archives': ['archive', 'zip', 'tar', 'extract', 'compress', 'tgz'],
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -38,8 +38,8 @@ class ToolSelector:
|
|
|
38
38
|
'vpc', 'subnet', 'instance', 'bucket', 'function', 'diagram'],
|
|
39
39
|
'elasticsearch': ['elasticsearch', 'search', 'query', 'index', 'log', 'aggregate'],
|
|
40
40
|
'ragstore': ['ragstore', 'rag', 'embedding', 'semantic', 'vector', 'similarity'],
|
|
41
|
-
'documents': ['
|
|
42
|
-
'spreadsheet', 'presentation', '
|
|
41
|
+
'documents': ['word doc', 'excel', 'powerpoint', 'pdf', 'docx', 'xlsx', 'pptx',
|
|
42
|
+
'spreadsheet', 'presentation', 'office'],
|
|
43
43
|
'archives': ['archive', 'zip', 'tar', 'extract', 'unzip', 'compressed', 'tgz'],
|
|
44
44
|
}
|
|
45
45
|
|
dtSpark/tools/builtin.py
CHANGED
|
@@ -361,7 +361,11 @@ def _get_filesystem_tools(fs_config: Dict[str, Any]) -> List[Dict[str, Any]]:
|
|
|
361
361
|
tools.extend([
|
|
362
362
|
{
|
|
363
363
|
"name": "write_file",
|
|
364
|
-
"description": f"Write content to a file within the allowed path ({allowed_path}). "
|
|
364
|
+
"description": f"Write text content to a file within the allowed path ({allowed_path}). "
|
|
365
|
+
"Use this tool for creating or updating ANY text-based file including HTML, CSS, JavaScript, "
|
|
366
|
+
"JSON, YAML, XML, Python, Markdown, plain text, config files, and all other non-binary formats. "
|
|
367
|
+
"Do NOT use the Microsoft Office tools (create_word_document, create_excel_document, "
|
|
368
|
+
"create_powerpoint_document) for text-based file formats. "
|
|
365
369
|
"Creates the file if it doesn't exist, or overwrites if it exists. "
|
|
366
370
|
"Parent directories must already exist (use create_directories first if needed).",
|
|
367
371
|
"input_schema": {
|
|
@@ -1037,8 +1041,11 @@ def _get_document_tools(doc_config: Dict[str, Any]) -> List[Dict[str, Any]]:
|
|
|
1037
1041
|
{
|
|
1038
1042
|
"name": "create_word_document",
|
|
1039
1043
|
"description": f"Create a Microsoft Word document (.docx) within the allowed path ({allowed_path}). "
|
|
1040
|
-
"
|
|
1041
|
-
"
|
|
1044
|
+
"ONLY use this tool when the user specifically requests a Word/.docx file. "
|
|
1045
|
+
"Do NOT use this for HTML, plain text, Markdown, or other text-based formats — use write_file instead. "
|
|
1046
|
+
"CRITICAL: You MUST provide 'content' with 'title' and 'paragraphs' to create a document with actual content. "
|
|
1047
|
+
"If you only provide 'path' without 'content', the document will be EMPTY. "
|
|
1048
|
+
"Example: {{\"path\": \"doc.docx\", \"content\": {{\"title\": \"My Title\", \"paragraphs\": [{{\"text\": \"First paragraph\", \"style\": \"Normal\"}}]}}}}",
|
|
1042
1049
|
"input_schema": {
|
|
1043
1050
|
"type": "object",
|
|
1044
1051
|
"properties": {
|
|
@@ -1048,29 +1055,31 @@ def _get_document_tools(doc_config: Dict[str, Any]) -> List[Dict[str, Any]]:
|
|
|
1048
1055
|
},
|
|
1049
1056
|
"content": {
|
|
1050
1057
|
"type": "object",
|
|
1051
|
-
"description": "
|
|
1058
|
+
"description": "REQUIRED to create a document with content. Without this, document will be empty.",
|
|
1052
1059
|
"properties": {
|
|
1053
|
-
"title": {"type": "string", "description": "Document title"},
|
|
1060
|
+
"title": {"type": "string", "description": "Document title displayed at top"},
|
|
1054
1061
|
"paragraphs": {
|
|
1055
1062
|
"type": "array",
|
|
1056
1063
|
"items": {
|
|
1057
1064
|
"type": "object",
|
|
1058
1065
|
"properties": {
|
|
1059
|
-
"text": {"type": "string"},
|
|
1060
|
-
"style": {"type": "string", "description": "
|
|
1061
|
-
}
|
|
1066
|
+
"text": {"type": "string", "description": "The paragraph text"},
|
|
1067
|
+
"style": {"type": "string", "description": "Normal, Heading 1, Heading 2, Heading 3, or Title. Defaults to Normal."}
|
|
1068
|
+
},
|
|
1069
|
+
"required": ["text"]
|
|
1062
1070
|
},
|
|
1063
|
-
"description": "
|
|
1071
|
+
"description": "Array of paragraphs with 'text' (required) and 'style' (optional)"
|
|
1064
1072
|
}
|
|
1065
|
-
}
|
|
1073
|
+
},
|
|
1074
|
+
"required": ["title", "paragraphs"]
|
|
1066
1075
|
},
|
|
1067
1076
|
"template_path": {
|
|
1068
1077
|
"type": "string",
|
|
1069
|
-
"description": "
|
|
1078
|
+
"description": "Alternative to 'content': path to a .docx template file with {{placeholder}} markers"
|
|
1070
1079
|
},
|
|
1071
1080
|
"placeholders": {
|
|
1072
1081
|
"type": "object",
|
|
1073
|
-
"description": "
|
|
1082
|
+
"description": "Only with template_path: dictionary mapping placeholder names to replacement values",
|
|
1074
1083
|
"additionalProperties": {"type": "string"}
|
|
1075
1084
|
}
|
|
1076
1085
|
},
|
|
@@ -1080,7 +1089,10 @@ def _get_document_tools(doc_config: Dict[str, Any]) -> List[Dict[str, Any]]:
|
|
|
1080
1089
|
{
|
|
1081
1090
|
"name": "create_excel_document",
|
|
1082
1091
|
"description": f"Create a Microsoft Excel document (.xlsx) within the allowed path ({allowed_path}). "
|
|
1083
|
-
"
|
|
1092
|
+
"ONLY use this tool when the user specifically requests an Excel/.xlsx spreadsheet. "
|
|
1093
|
+
"Do NOT use this for CSV or other text-based tabular formats — use write_file instead. "
|
|
1094
|
+
"CRITICAL: You MUST provide 'sheets' array with sheet data. "
|
|
1095
|
+
"Example: {{\"path\": \"data.xlsx\", \"sheets\": [{{\"name\": \"Sheet1\", \"headers\": [\"Col1\", \"Col2\"], \"data\": [[\"A\", \"B\"]]}}]}}",
|
|
1084
1096
|
"input_schema": {
|
|
1085
1097
|
"type": "object",
|
|
1086
1098
|
"properties": {
|
|
@@ -1112,7 +1124,10 @@ def _get_document_tools(doc_config: Dict[str, Any]) -> List[Dict[str, Any]]:
|
|
|
1112
1124
|
{
|
|
1113
1125
|
"name": "create_powerpoint_document",
|
|
1114
1126
|
"description": f"Create a Microsoft PowerPoint document (.pptx) within the allowed path ({allowed_path}). "
|
|
1115
|
-
"
|
|
1127
|
+
"ONLY use this tool when the user specifically requests a PowerPoint/.pptx presentation. "
|
|
1128
|
+
"Do NOT use this for HTML presentations or other text-based formats — use write_file instead. "
|
|
1129
|
+
"CRITICAL: You MUST provide 'slides' array with slide content. "
|
|
1130
|
+
"Example: {{\"path\": \"pres.pptx\", \"slides\": [{{\"layout\": \"title\", \"title\": \"My Title\", \"content\": [\"Bullet 1\"]}}]}}",
|
|
1116
1131
|
"input_schema": {
|
|
1117
1132
|
"type": "object",
|
|
1118
1133
|
"properties": {
|
|
@@ -101,19 +101,71 @@ body {
|
|
|
101
101
|
overflow-x: auto;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
/* Tool calls */
|
|
104
|
+
/* Tool calls - aligned left like assistant messages */
|
|
105
105
|
.tool-call {
|
|
106
106
|
background-color: #2a3a4a;
|
|
107
107
|
padding: 0.75rem;
|
|
108
108
|
margin: 0.5rem 0;
|
|
109
|
-
|
|
109
|
+
margin-right: 20%;
|
|
110
|
+
border-radius: 0.5rem;
|
|
110
111
|
}
|
|
111
112
|
|
|
113
|
+
/* Tool results - aligned right like user messages */
|
|
112
114
|
.tool-result {
|
|
113
115
|
background-color: #3a3a2a;
|
|
114
116
|
padding: 0.75rem;
|
|
115
117
|
margin: 0.5rem 0;
|
|
116
|
-
|
|
118
|
+
margin-left: 20%;
|
|
119
|
+
border-radius: 0.5rem;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* Tool message header with icons */
|
|
123
|
+
.tool-header {
|
|
124
|
+
display: flex;
|
|
125
|
+
justify-content: space-between;
|
|
126
|
+
align-items: center;
|
|
127
|
+
cursor: pointer;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.tool-header-left {
|
|
131
|
+
display: flex;
|
|
132
|
+
align-items: center;
|
|
133
|
+
gap: 0.5rem;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.tool-header-icons {
|
|
137
|
+
display: flex;
|
|
138
|
+
gap: 0.25rem;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.tool-header-icons button {
|
|
142
|
+
background: none;
|
|
143
|
+
border: none;
|
|
144
|
+
color: #aaa;
|
|
145
|
+
padding: 0.25rem;
|
|
146
|
+
cursor: pointer;
|
|
147
|
+
font-size: 0.9rem;
|
|
148
|
+
transition: color 0.2s;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.tool-header-icons button:hover {
|
|
152
|
+
color: #fff;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/* Tool content - collapsible */
|
|
156
|
+
.tool-content {
|
|
157
|
+
display: none;
|
|
158
|
+
margin-top: 0.5rem;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.tool-content.expanded {
|
|
162
|
+
display: block;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.tool-content pre {
|
|
166
|
+
margin: 0;
|
|
167
|
+
white-space: pre-wrap;
|
|
168
|
+
word-wrap: break-word;
|
|
117
169
|
}
|
|
118
170
|
|
|
119
171
|
/* Rollup summary */
|
dtSpark/web/static/js/chat.js
CHANGED
|
@@ -167,19 +167,34 @@ function appendToolResults(content, timestamp = null) {
|
|
|
167
167
|
|
|
168
168
|
if (Array.isArray(results)) {
|
|
169
169
|
results.forEach((result, index) => {
|
|
170
|
+
const toolId = generateToolId();
|
|
170
171
|
const resultDiv = document.createElement('div');
|
|
171
172
|
resultDiv.className = 'tool-result';
|
|
173
|
+
resultDiv.id = toolId;
|
|
172
174
|
|
|
173
|
-
const
|
|
175
|
+
const toolUseId = result.tool_use_id || 'unknown';
|
|
174
176
|
const resultContent = result.content || JSON.stringify(result);
|
|
177
|
+
const formattedContent = typeof resultContent === 'string' ? resultContent : JSON.stringify(resultContent, null, 2);
|
|
175
178
|
|
|
176
179
|
resultDiv.innerHTML = `
|
|
177
|
-
<div class="small">
|
|
178
|
-
<
|
|
179
|
-
|
|
180
|
-
|
|
180
|
+
<div class="tool-header small" onclick="toggleToolContent('${toolId}')">
|
|
181
|
+
<div class="tool-header-left">
|
|
182
|
+
<strong><i class="bi bi-check-circle-fill"></i> Tool Result ${index + 1}:</strong>
|
|
183
|
+
<code>${escapeHtml(toolUseId)}</code>
|
|
184
|
+
${timestamp ? `<span class="ms-2">${formatTimestamp(timestamp)}</span>` : ''}
|
|
185
|
+
</div>
|
|
186
|
+
<div class="tool-header-icons">
|
|
187
|
+
<button class="tool-copy-btn" onclick="event.stopPropagation(); copyToolContent('${toolId}')" title="Copy to clipboard">
|
|
188
|
+
<i class="bi bi-clipboard"></i>
|
|
189
|
+
</button>
|
|
190
|
+
<button onclick="event.stopPropagation(); toggleToolContent('${toolId}')" title="Expand/Collapse">
|
|
191
|
+
<i class="bi bi-chevron-down" id="${toolId}-toggle-icon"></i>
|
|
192
|
+
</button>
|
|
193
|
+
</div>
|
|
194
|
+
</div>
|
|
195
|
+
<div class="tool-content" id="${toolId}-content">
|
|
196
|
+
<pre class="small mb-0">${escapeHtml(formattedContent)}</pre>
|
|
181
197
|
</div>
|
|
182
|
-
<pre class="small mb-0 mt-1">${escapeHtml(typeof resultContent === 'string' ? resultContent : JSON.stringify(resultContent, null, 2))}</pre>
|
|
183
198
|
`;
|
|
184
199
|
|
|
185
200
|
messagesContainer.appendChild(resultDiv);
|
|
@@ -188,11 +203,27 @@ function appendToolResults(content, timestamp = null) {
|
|
|
188
203
|
} catch (e) {
|
|
189
204
|
console.error('Error parsing tool results:', e);
|
|
190
205
|
// Fall back to displaying the raw content
|
|
206
|
+
const toolId = generateToolId();
|
|
191
207
|
const resultDiv = document.createElement('div');
|
|
192
208
|
resultDiv.className = 'tool-result';
|
|
209
|
+
resultDiv.id = toolId;
|
|
193
210
|
resultDiv.innerHTML = `
|
|
194
|
-
<div class="small"
|
|
195
|
-
|
|
211
|
+
<div class="tool-header small" onclick="toggleToolContent('${toolId}')">
|
|
212
|
+
<div class="tool-header-left">
|
|
213
|
+
<strong><i class="bi bi-check-circle-fill"></i> Tool Results</strong>
|
|
214
|
+
</div>
|
|
215
|
+
<div class="tool-header-icons">
|
|
216
|
+
<button class="tool-copy-btn" onclick="event.stopPropagation(); copyToolContent('${toolId}')" title="Copy to clipboard">
|
|
217
|
+
<i class="bi bi-clipboard"></i>
|
|
218
|
+
</button>
|
|
219
|
+
<button onclick="event.stopPropagation(); toggleToolContent('${toolId}')" title="Expand/Collapse">
|
|
220
|
+
<i class="bi bi-chevron-down" id="${toolId}-toggle-icon"></i>
|
|
221
|
+
</button>
|
|
222
|
+
</div>
|
|
223
|
+
</div>
|
|
224
|
+
<div class="tool-content" id="${toolId}-content">
|
|
225
|
+
<pre class="small mb-0">${escapeHtml(content)}</pre>
|
|
226
|
+
</div>
|
|
196
227
|
`;
|
|
197
228
|
messagesContainer.appendChild(resultDiv);
|
|
198
229
|
}
|
|
@@ -225,6 +256,50 @@ function appendRollupSummary(content, timestamp = null) {
|
|
|
225
256
|
scrollToBottom();
|
|
226
257
|
}
|
|
227
258
|
|
|
259
|
+
/**
|
|
260
|
+
* Generate a unique ID for tool elements
|
|
261
|
+
* @returns {string} Unique ID
|
|
262
|
+
*/
|
|
263
|
+
function generateToolId() {
|
|
264
|
+
return 'tool-' + Date.now() + '-' + Math.random().toString(36).substr(2, 9);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Toggle tool content visibility
|
|
269
|
+
* @param {string} toolId - ID of the tool element
|
|
270
|
+
*/
|
|
271
|
+
function toggleToolContent(toolId) {
|
|
272
|
+
const content = document.getElementById(toolId + '-content');
|
|
273
|
+
const icon = document.getElementById(toolId + '-toggle-icon');
|
|
274
|
+
if (content && icon) {
|
|
275
|
+
content.classList.toggle('expanded');
|
|
276
|
+
icon.className = content.classList.contains('expanded')
|
|
277
|
+
? 'bi bi-chevron-up'
|
|
278
|
+
: 'bi bi-chevron-down';
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Copy tool content to clipboard
|
|
284
|
+
* @param {string} toolId - ID of the tool element
|
|
285
|
+
*/
|
|
286
|
+
function copyToolContent(toolId) {
|
|
287
|
+
const content = document.getElementById(toolId + '-content');
|
|
288
|
+
if (content) {
|
|
289
|
+
const pre = content.querySelector('pre');
|
|
290
|
+
if (pre) {
|
|
291
|
+
navigator.clipboard.writeText(pre.textContent).then(() => {
|
|
292
|
+
const btn = document.querySelector(`#${toolId} .tool-copy-btn`);
|
|
293
|
+
if (btn) {
|
|
294
|
+
const originalIcon = btn.innerHTML;
|
|
295
|
+
btn.innerHTML = '<i class="bi bi-check"></i>';
|
|
296
|
+
setTimeout(() => { btn.innerHTML = originalIcon; }, 1500);
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
228
303
|
/**
|
|
229
304
|
* Append a tool call message
|
|
230
305
|
* @param {string} toolName - Tool name
|
|
@@ -232,14 +307,28 @@ function appendRollupSummary(content, timestamp = null) {
|
|
|
232
307
|
*/
|
|
233
308
|
function appendToolCall(toolName, toolInput) {
|
|
234
309
|
const messagesContainer = document.getElementById('chat-messages');
|
|
310
|
+
const toolId = generateToolId();
|
|
235
311
|
|
|
236
312
|
const toolDiv = document.createElement('div');
|
|
237
313
|
toolDiv.className = 'tool-call';
|
|
314
|
+
toolDiv.id = toolId;
|
|
238
315
|
toolDiv.innerHTML = `
|
|
239
|
-
<div class="small">
|
|
240
|
-
<
|
|
316
|
+
<div class="tool-header small" onclick="toggleToolContent('${toolId}')">
|
|
317
|
+
<div class="tool-header-left">
|
|
318
|
+
<strong><i class="bi bi-tools"></i> Tool Call:</strong> <code>${escapeHtml(toolName)}</code>
|
|
319
|
+
</div>
|
|
320
|
+
<div class="tool-header-icons">
|
|
321
|
+
<button class="tool-copy-btn" onclick="event.stopPropagation(); copyToolContent('${toolId}')" title="Copy to clipboard">
|
|
322
|
+
<i class="bi bi-clipboard"></i>
|
|
323
|
+
</button>
|
|
324
|
+
<button onclick="event.stopPropagation(); toggleToolContent('${toolId}')" title="Expand/Collapse">
|
|
325
|
+
<i class="bi bi-chevron-down" id="${toolId}-toggle-icon"></i>
|
|
326
|
+
</button>
|
|
327
|
+
</div>
|
|
328
|
+
</div>
|
|
329
|
+
<div class="tool-content" id="${toolId}-content">
|
|
330
|
+
<pre class="small mb-0">${escapeHtml(JSON.stringify(toolInput, null, 2))}</pre>
|
|
241
331
|
</div>
|
|
242
|
-
<pre class="small mb-0 mt-1">${escapeHtml(JSON.stringify(toolInput, null, 2))}</pre>
|
|
243
332
|
`;
|
|
244
333
|
|
|
245
334
|
messagesContainer.appendChild(toolDiv);
|
|
@@ -248,19 +337,33 @@ function appendToolCall(toolName, toolInput) {
|
|
|
248
337
|
|
|
249
338
|
/**
|
|
250
339
|
* Append a tool result message
|
|
251
|
-
* @param {string} toolName - Tool name
|
|
340
|
+
* @param {string} toolName - Tool name or tool_use_id
|
|
252
341
|
* @param {object} toolResult - Tool result data
|
|
253
342
|
*/
|
|
254
343
|
function appendToolResult(toolName, toolResult) {
|
|
255
344
|
const messagesContainer = document.getElementById('chat-messages');
|
|
345
|
+
const toolId = generateToolId();
|
|
256
346
|
|
|
257
347
|
const resultDiv = document.createElement('div');
|
|
258
348
|
resultDiv.className = 'tool-result';
|
|
349
|
+
resultDiv.id = toolId;
|
|
259
350
|
resultDiv.innerHTML = `
|
|
260
|
-
<div class="small">
|
|
261
|
-
<
|
|
351
|
+
<div class="tool-header small" onclick="toggleToolContent('${toolId}')">
|
|
352
|
+
<div class="tool-header-left">
|
|
353
|
+
<strong><i class="bi bi-check-circle-fill"></i> Tool Result:</strong> <code>${escapeHtml(toolName)}</code>
|
|
354
|
+
</div>
|
|
355
|
+
<div class="tool-header-icons">
|
|
356
|
+
<button class="tool-copy-btn" onclick="event.stopPropagation(); copyToolContent('${toolId}')" title="Copy to clipboard">
|
|
357
|
+
<i class="bi bi-clipboard"></i>
|
|
358
|
+
</button>
|
|
359
|
+
<button onclick="event.stopPropagation(); toggleToolContent('${toolId}')" title="Expand/Collapse">
|
|
360
|
+
<i class="bi bi-chevron-down" id="${toolId}-toggle-icon"></i>
|
|
361
|
+
</button>
|
|
362
|
+
</div>
|
|
363
|
+
</div>
|
|
364
|
+
<div class="tool-content" id="${toolId}-content">
|
|
365
|
+
<pre class="small mb-0">${escapeHtml(JSON.stringify(toolResult, null, 2))}</pre>
|
|
262
366
|
</div>
|
|
263
|
-
<pre class="small mb-0 mt-1">${escapeHtml(JSON.stringify(toolResult, null, 2))}</pre>
|
|
264
367
|
`;
|
|
265
368
|
|
|
266
369
|
messagesContainer.appendChild(resultDiv);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dtSpark
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.0a10
|
|
4
4
|
Summary: Secure Personal AI Research Kit - Multi-provider LLM CLI/Web interface with MCP tool integration
|
|
5
5
|
Home-page: https://github.com/digital-thought/dtSpark
|
|
6
6
|
Author: Matthew Westwood-Hill
|
|
@@ -4,7 +4,7 @@ dtSpark/_full_name.txt,sha256=wsMYXtT12WMrY9gT1JHiKdE4k7H59psECS6cSD07giQ,31
|
|
|
4
4
|
dtSpark/_licence.txt,sha256=Mvt5wkOkst8VGlk48vwN3CgHwMHLfmplKSPOUEbTfOw,1071
|
|
5
5
|
dtSpark/_metadata.yaml,sha256=h3PQd2QsY5yUBzS2b6EueTwkmd57svsbAKcwDVVEfIo,188
|
|
6
6
|
dtSpark/_name.txt,sha256=kDZC5_a3iMKIPOUvtLXl0C9N5DiOfgUCsecwTUnkJhs,7
|
|
7
|
-
dtSpark/_version.txt,sha256=
|
|
7
|
+
dtSpark/_version.txt,sha256=1fsRT6Hsv69QfbVKQSqRFwJuW8FDwDfpAAMu2LsyLhE,8
|
|
8
8
|
dtSpark/cli_interface.py,sha256=uNcD8s_h65EJA9xXB_waMfiugwmNYVLdntB2qNn8-Rc,97635
|
|
9
9
|
dtSpark/conversation_manager.py,sha256=VcfZSwrRuuUbVZa8kQVJjHwG4un5HA0nqYuajsUovoI,132593
|
|
10
10
|
dtSpark/launch.py,sha256=j8XYpmDswWUIzhpMc32E0Fhbhk_qhOQUAwJSpqh37f0,892
|
|
@@ -48,7 +48,7 @@ dtSpark/llm/manager.py,sha256=Qg9glX5ZhepWaRnb8ILZiPoiwqzC8Y318JgwuJf9m58,5837
|
|
|
48
48
|
dtSpark/llm/ollama.py,sha256=BQOS6j8nRipoHzPv6gxwzpjucdJ-HLQ3ixNvTEPROKM,20897
|
|
49
49
|
dtSpark/mcp_integration/__init__.py,sha256=pFw-yTSSJ1yx_ksTe94eq8pBrwDD-5Z-UqSM3VO4deQ,157
|
|
50
50
|
dtSpark/mcp_integration/manager.py,sha256=yfSymFPXAN-80Rl0M5D-Upb3vIvRq_tvGAI5wVR-IdQ,25241
|
|
51
|
-
dtSpark/mcp_integration/tool_selector.py,sha256=
|
|
51
|
+
dtSpark/mcp_integration/tool_selector.py,sha256=15l2Abr1ouuk0GUoysetnW-e7z-x1MRU1LpYsYJ2xrA,10997
|
|
52
52
|
dtSpark/resources/config.yaml.template,sha256=e_GNNZ2FAVDcx1dQ-Mc41SMEPE9M0JrRWdFyRYqstMA,27454
|
|
53
53
|
dtSpark/safety/__init__.py,sha256=fdcZ4qNbYhH7Un9iKLwNe2GDr_doUmpSgtv-oNS8qPE,460
|
|
54
54
|
dtSpark/safety/llm_service.py,sha256=N2J9_Od-fGGvk9BkddD6CFd81PrJ03sMjSz6egBDYr4,3820
|
|
@@ -61,7 +61,7 @@ dtSpark/scheduler/execution_queue.py,sha256=7_yXnGxO-arZTl0qPbyE-kDhZDVXQKT2z9zI
|
|
|
61
61
|
dtSpark/scheduler/executor.py,sha256=s_-6WKdTYEK1-xjYJNXGcAj6vdN27Cf6TI9zNYPSsk0,51371
|
|
62
62
|
dtSpark/scheduler/manager.py,sha256=vwtmQadqf3cv1QzdZJzFqC0l3bBzIplGZ79BUjfsh4o,12846
|
|
63
63
|
dtSpark/tools/__init__.py,sha256=TPK-c8CmXheEkoiFzL9PMP8ve0hTpw9iIV2xlGLTsMc,147
|
|
64
|
-
dtSpark/tools/builtin.py,sha256=
|
|
64
|
+
dtSpark/tools/builtin.py,sha256=3Gx9vBk4eegMOIhi4YJTrzVRqaAn4b9MexnBQYAbiDQ,90880
|
|
65
65
|
dtSpark/web/__init__.py,sha256=5OrzA2yIR9NBf9mlTPnrQ0afMJTBuEgnzxq4QmIYe54,428
|
|
66
66
|
dtSpark/web/auth.py,sha256=uSIHwJOiklkjZSpLcznwOL1pVQktKeWifZygt068M9Y,4384
|
|
67
67
|
dtSpark/web/dependencies.py,sha256=ku54-Vb8wYvGVQ8Kluzxj8zm2Re3wDgU5LzFJ0NVIsI,874
|
|
@@ -75,9 +75,9 @@ dtSpark/web/endpoints/chat.py,sha256=c5MWZE-SY26Hr0X3DIFU_LQ15m1E-fFZ7hnQbmzXd1w
|
|
|
75
75
|
dtSpark/web/endpoints/conversations.py,sha256=bIt10Laq1JaFBqB_3E1b3dTdSBxPyKvzgmi_f9QaDc8,13537
|
|
76
76
|
dtSpark/web/endpoints/main_menu.py,sha256=shAP7F5zREbs2A7BmZAIzt5LpR83tZHrNXiFdWgsmFg,20621
|
|
77
77
|
dtSpark/web/endpoints/streaming.py,sha256=qo0ugUWYvJJF5QvvLpuIvFIlVWgOpfPyUK59HeoRgdY,14603
|
|
78
|
-
dtSpark/web/static/css/dark-theme.css,sha256=
|
|
78
|
+
dtSpark/web/static/css/dark-theme.css,sha256=K3RwCR3oRU7Iuzrjaa3oRjECCnvzhnJHexw2LDWXyQE,8581
|
|
79
79
|
dtSpark/web/static/js/actions.js,sha256=EI-ur3eNV97flgpUcM4M5YOQtn_VPS1o4aFiPvthx3U,37463
|
|
80
|
-
dtSpark/web/static/js/chat.js,sha256=
|
|
80
|
+
dtSpark/web/static/js/chat.js,sha256=UY28X8is2lrteQhnWePKTSu0KoReZU_M--S1BIfsjXQ,26489
|
|
81
81
|
dtSpark/web/static/js/main.js,sha256=0JUuRtVlWxpRgCZoHwM4_tRxyBrNKwTPQmN_meKEI4M,16133
|
|
82
82
|
dtSpark/web/static/js/sse-client.js,sha256=JZnLDar6j8m7TxuHJ9JQDl7E3LqUiWSbQHt6yMaskPI,9104
|
|
83
83
|
dtSpark/web/templates/actions.html,sha256=08Pk8aqmNEr3uEQTzmnFklETqd1hUcE8PCtUZVMZJso,18875
|
|
@@ -88,9 +88,9 @@ dtSpark/web/templates/goodbye.html,sha256=ZdEzgP9MD4kMPrLHkg_3wAod2Hfr9hSTRyBq9f
|
|
|
88
88
|
dtSpark/web/templates/login.html,sha256=OkLf_uzMYhl_o9ER1RQZc8ch6-bCaiOokEhKbeEl8E8,3274
|
|
89
89
|
dtSpark/web/templates/main_menu.html,sha256=pEJTq642BZ8LeeI5jyuJEU3mfGmGiHlMuMMq2XrBu78,39207
|
|
90
90
|
dtSpark/web/templates/new_conversation.html,sha256=wL9ZZbn3M8ktEoX7H5n4r6XKSEImtO2aXnuNKsB-pEw,8047
|
|
91
|
-
dtspark-1.1.
|
|
92
|
-
dtspark-1.1.
|
|
93
|
-
dtspark-1.1.
|
|
94
|
-
dtspark-1.1.
|
|
95
|
-
dtspark-1.1.
|
|
96
|
-
dtspark-1.1.
|
|
91
|
+
dtspark-1.1.0a10.dist-info/licenses/LICENSE,sha256=jIuWlmbirwQabTwxfzE7SXT1LpCG-y_GRQ3VnoRTKgo,1101
|
|
92
|
+
dtspark-1.1.0a10.dist-info/METADATA,sha256=s2V84W0wxKkLAEksFHYfOKxorpG48QCjJiP9f9qNkIs,7411
|
|
93
|
+
dtspark-1.1.0a10.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
94
|
+
dtspark-1.1.0a10.dist-info/entry_points.txt,sha256=IpIwa_a6XY8Z2w7DtgYAhpFHHEbha-zhLkyttWd3zpw,76
|
|
95
|
+
dtspark-1.1.0a10.dist-info/top_level.txt,sha256=x-6lMA6vNuxyDNJGNOKI4dyy7L0kOb9V98I5z46bJVY,8
|
|
96
|
+
dtspark-1.1.0a10.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|