Skip to content

Commit 155e4f3

Browse files
files attachments support, csv interpretation tools, tool calling bug fixes, extra bug fixes, docs updates including workflows fixes
- files attachments support - csv interpretation tools, - tool calling bug fixes, - extra bug fixes, - docs updates including workflows fixes
1 parent 58e429e commit 155e4f3

121 files changed

Lines changed: 3164 additions & 542 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

client/bun.lock

Lines changed: 43 additions & 60 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

client/package.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,26 @@
1212
"dependencies": {
1313
"@emotion/react": "^11.14.0",
1414
"@emotion/styled": "^11.14.0",
15-
"@google-cloud/local-auth": "^3.0.1",
1615
"@mui/lab": "^7.0.0-beta.13",
1716
"@mui/material": "^7.1.0",
1817
"@tauri-apps/api": "^2.9.0",
18+
"@tauri-apps/plugin-shell": "^2.3.4",
1919
"@xyflow/react": "^12.6.4",
2020
"ace-builds": "^1.42.0",
2121
"ajv": "^8.17.1",
2222
"chart.js": "^4.4.9",
23+
"dirty-json": "^0.9.2",
2324
"googleapis": "^150.0.1",
2425
"graphql-ws": "^6.0.6",
2526
"iconoir-react": "^7.11.0",
2627
"js-beautify": "^1.15.4",
2728
"jsonata": "^2.0.6",
2829
"notistack": "^3.0.2",
2930
"ollama": "^0.5.16",
30-
"react": "^19.1.0",
31+
"react": "^19.2.3",
3132
"react-ace": "^14.0.1",
3233
"react-chartjs-2": "^5.3.0",
33-
"react-dom": "^19.1.0",
34+
"react-dom": "^19.2.3",
3435
"react-draggable": "^4.4.6",
3536
"react-markdown": "^9.0.3",
3637
"react-syntax-highlighter": "^15.6.1",
@@ -43,8 +44,8 @@
4344
"@types/js-beautify": "^1.14.3",
4445
"@types/jsonata": "^1.3.1",
4546
"@types/node": "^24.5.2",
46-
"@types/react": "^19.1.2",
47-
"@types/react-dom": "^19.1.2",
47+
"@types/react": "^19.2.7",
48+
"@types/react-dom": "^19.2.3",
4849
"@types/react-syntax-highlighter": "^15.5.13",
4950
"@vitejs/plugin-react": "^4.4.1",
5051
"eslint": "^9.25.0",

client/src/components/App/App.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import {ReactFlow, Background, Controls, MiniMap, BackgroundVariant, useReactFlow, ReactFlowProvider} from '@xyflow/react';
88
import '@xyflow/react/dist/style.css';
99
import './App.scss';
10-
1110
import {useWorkflow} from '../../hooks/useWorkflow';
1211
import {nodeFactory, nodeTypes} from '../nodes';
1312
import {useCallback} from 'react';
@@ -18,6 +17,8 @@ import {AppNodeType} from '../nodes/workflow.gen';
1817
import {toolRegistry} from '../nodes/ToolNode/tools/toolRegistry.gen';
1918
import {nodeRegistry} from '../nodes/nodeRegistry.gen';
2019
import {NODE_TYPE as TOOL_NODE_TYPE} from '../nodes/ToolNode/constants';
20+
import {useFullscreen} from '../../hooks/useFullscreen';
21+
import {getDefaultUserConfigValues} from '../../types/ollama.types';
2122

2223

2324
const getId = () => uuidv4();
@@ -61,6 +62,8 @@ function AppFlow () {
6162
} = useWorkflow();
6263
const {enqueueSnackbar} = useSnackbar();
6364

65+
useFullscreen();
66+
6467
const handleSave = () => {
6568
const sanitizedNodes = nodes.map(node => {
6669
const nodeData = JSON.parse(JSON.stringify(node.data));
@@ -124,11 +127,18 @@ function AppFlow () {
124127
const tool = toolRegistry.find(t => t.toolSubtype === node.data.toolSubtype);
125128

126129
if (tool) {
130+
const defaultUserConfig = getDefaultUserConfigValues(tool.userConfigSchema || {});
131+
127132
updatedNode = {
128133
...node,
129134
data: {
130135
...node.data,
131136
toolSchema: tool.toolSchema,
137+
userConfigSchema: tool.userConfigSchema,
138+
userConfig: {
139+
...defaultUserConfig,
140+
...node.data.userConfig
141+
},
132142
title: tool.title,
133143
handler: undefined,
134144
toSanitize: [...descriptor?.defaultData.toSanitize || [], ...tool.toSanitize]

client/src/components/CodeEditor/CodeEditor.tsx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,30 @@ import AceEditor from "react-ace";
88
import "ace-builds/src-noconflict/mode-json";
99
import "ace-builds/src-noconflict/mode-javascript";
1010
import "ace-builds/src-noconflict/mode-markdown";
11-
import "ace-builds/src-noconflict/theme-terminal";
1211
import "ace-builds/src-noconflict/mode-html";
12+
import "ace-builds/src-noconflict/mode-text";
13+
import "ace-builds/src-noconflict/mode-css";
14+
import "ace-builds/src-noconflict/mode-scss";
15+
import "ace-builds/src-noconflict/mode-typescript";
16+
import "ace-builds/src-noconflict/mode-xml";
17+
import "ace-builds/src-noconflict/mode-csv";
18+
import "ace-builds/src-noconflict/mode-yaml";
19+
import "ace-builds/src-noconflict/mode-ini";
20+
import "ace-builds/src-noconflict/mode-sh";
21+
import "ace-builds/src-noconflict/mode-sql";
22+
import "ace-builds/src-noconflict/mode-python";
23+
import "ace-builds/src-noconflict/mode-java";
24+
import "ace-builds/src-noconflict/mode-c_cpp";
25+
import "ace-builds/src-noconflict/mode-batchfile";
26+
import "ace-builds/src-noconflict/theme-terminal";
27+
import {AceEditorMode} from "./types";
1328

1429
type CodeEditorProps = {
1530
value?: string;
1631
onChange?: (value: string) => void;
1732
placeholder?: string;
1833
readOnly?: boolean;
19-
mode?: "json" | "javascript" | "markdown" | "html";
34+
mode?: AceEditorMode;
2035
height?: string;
2136
width?: string;
2237
showLineNumbers?: boolean;
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
export * from './CodeEditor';
1+
export * from './CodeEditor';
2+
3+
export * from './types';
4+
5+
export * from './utils';
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/************************************************************************
2+
* Copyright (C) 2025 Code Forge Temple *
3+
* This file is part of agentic-signal project *
4+
* See the LICENSE file in the project root for license details. *
5+
************************************************************************/
6+
7+
export type AceEditorMode =
8+
| "json"
9+
| "javascript"
10+
| "markdown"
11+
| "html"
12+
| "text"
13+
| "css"
14+
| "scss"
15+
| "typescript"
16+
| "xml"
17+
| "csv"
18+
| "yaml"
19+
| "ini"
20+
| "sh"
21+
| "sql"
22+
| "python"
23+
| "java"
24+
| "c_cpp"
25+
| "batchfile";
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/************************************************************************
2+
* Copyright (C) 2025 Code Forge Temple *
3+
* This file is part of agentic-signal project *
4+
* See the LICENSE file in the project root for license details. *
5+
************************************************************************/
6+
7+
import {AceEditorMode} from "./types";
8+
9+
export function getEditorMode (filename: string): AceEditorMode {
10+
const ext = filename.split('.').pop()?.toLowerCase();
11+
12+
if (["png", "jpg", "jpeg", "gif", "bmp", "webp", "svg"].includes(ext || "")) {
13+
return "markdown";
14+
}
15+
16+
switch (ext) {
17+
case 'md': return 'markdown';
18+
case 'txt': return 'text';
19+
case 'html': return 'html';
20+
case 'css': return 'css';
21+
case 'scss': return 'scss';
22+
case 'js': return 'javascript';
23+
case 'ts': return 'typescript';
24+
case 'tsx': return 'typescript';
25+
case 'json': return 'json';
26+
case 'xml': return 'xml';
27+
case 'csv': return 'csv';
28+
case 'yaml':
29+
case 'yml': return 'yaml';
30+
case 'ini': return 'ini';
31+
case 'log': return 'text';
32+
case 'sh': return 'sh';
33+
case 'sql': return 'sql';
34+
case 'py': return 'python';
35+
case 'java': return 'java';
36+
case 'c': return 'c_cpp';
37+
case 'cpp': return 'c_cpp';
38+
case 'h': return 'c_cpp';
39+
case 'bat': return 'batchfile';
40+
case 'env': return 'ini';
41+
default: return 'text';
42+
}
43+
}

client/src/components/Dock/components/ActionsDock/ActionsDock.tsx

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ import React, {useRef, useState} from "react";
88
import "./ActionsDock.scss";
99
import {ThemeProvider} from "@mui/material";
1010
import {darkTheme} from "../../../../utils";
11-
import {BinFull, FloppyDiskArrowIn, FloppyDiskArrowOut, Settings as SettingsIcon} from "iconoir-react";
11+
import {BinFull, FloppyDiskArrowIn, FloppyDiskArrowOut, Settings as SettingsIcon, HelpCircle as Docs} from "iconoir-react";
1212
import {BaseDialog} from "../../../BaseDialog";
1313
import {DockItem} from "../DockItem";
1414
import {Settings} from "./components/Settings";
15+
import {isTauri} from "../../../../utils";
16+
1517

1618
type WorkflowActionsProps = {
1719
onSave: () => void;
@@ -23,6 +25,21 @@ export function ActionsDock ({onSave, onLoad, onClear}: WorkflowActionsProps) {
2325
const fileInputRef = useRef<HTMLInputElement>(null);
2426
const [openSettings, setOpenSettings] = useState(false);
2527

28+
const handleOpenDocs = async () => {
29+
const url = "https://agentic-signal.com";
30+
31+
if (isTauri()) {
32+
try {
33+
const shell = await import("@tauri-apps/plugin-shell");
34+
35+
await shell.open(url);
36+
} catch (error) {
37+
console.error("Failed to open URL with Tauri:", error);
38+
}
39+
} else {
40+
window.open(url, "_blank", "noopener,noreferrer");
41+
}
42+
};
2643

2744
return (
2845
<ThemeProvider theme={darkTheme}>
@@ -36,6 +53,7 @@ export function ActionsDock ({onSave, onLoad, onClear}: WorkflowActionsProps) {
3653
>
3754
<Settings />
3855
</BaseDialog>
56+
<DockItem title="Open Documentation" icon={<Docs />} onClick={handleOpenDocs} />
3957
<DockItem title="Save workflow" icon={<FloppyDiskArrowIn />} onClick={onSave} />
4058
<DockItem title="Clear workflow" icon={<BinFull />} onClick={onClear} />
4159
<DockItem title="Load workflow" icon={<FloppyDiskArrowOut />} onClick={() => fileInputRef.current?.click()} />

client/src/components/Dock/components/ActionsDock/components/Settings/Settings.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export const Settings = () => {
3939
fetchModels();
4040
}, [settings.ollamaHost]);
4141

42-
const pollForModel = async (modelName: string, maxAttempts = 5, interval = 1000) => {
42+
const pollForModel = async (modelName: string, maxAttempts = 15, interval = 1000) => {
4343
let attempts = 0;
4444

4545
return new Promise<void>((resolve) => {
Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,55 @@
11
.markdown-renderer {
22
border-radius: 4px;
33
min-height: 50px;
4-
padding: 10px;
4+
padding: 30px;
55
background: #000000;
6+
7+
table {
8+
border-collapse: collapse;
9+
width: 100%;
10+
margin: 8px 0;
11+
overflow: hidden;
12+
border-radius: 4px;
13+
border: 1px solid rgba(255, 255, 255, 0.12);
14+
// font-size: 0.9em;
15+
}
16+
17+
thead {
18+
background: rgba(255, 255, 255, 0.05);
19+
}
20+
21+
th {
22+
padding: 4px 8px;
23+
text-align: left;
24+
font-weight: 600;
25+
border-bottom: 2px solid rgba(255, 255, 255, 0.12);
26+
color: rgba(255, 255, 255, 0.9);
27+
}
28+
29+
td {
30+
padding: 4px 8px;
31+
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
32+
color: rgba(255, 255, 255, 0.8);
33+
}
34+
35+
tr:last-child td {
36+
border-bottom: none;
37+
}
38+
39+
tbody tr:hover {
40+
background: rgba(255, 255, 255, 0.03);
41+
}
642
}
743

844
.code-wrapper {
945
position: relative;
10-
46+
1147
.react-syntax-highlighter {
1248
max-height: 500px;
1349
overflow-y: auto;
1450
}
1551

1652
pre {
17-
margin: 0!important;
53+
margin: 0 !important;
1854
}
1955
}

0 commit comments

Comments
 (0)