Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 321bf74aef | |||
| 55ee75106c | |||
| b2829caa02 | |||
| d4b280cf75 |
19
HISTORY.md
19
HISTORY.md
@@ -5,6 +5,25 @@ Changelog
|
|||||||
(unreleased)
|
(unreleased)
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
Fix
|
||||||
|
~~~
|
||||||
|
- N8n workflow generation, refs NOISSUE. [Simon Diesenreiter]
|
||||||
|
|
||||||
|
|
||||||
|
0.6.2 (2026-04-10)
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Fix
|
||||||
|
~~~
|
||||||
|
- Fix Quasar layout issues, refs NOISSUE. [Simon Diesenreiter]
|
||||||
|
|
||||||
|
Other
|
||||||
|
~~~~~
|
||||||
|
|
||||||
|
|
||||||
|
0.6.1 (2026-04-10)
|
||||||
|
------------------
|
||||||
|
|
||||||
Fix
|
Fix
|
||||||
~~~
|
~~~
|
||||||
- Fix commit for version push, refs NOISSUE. [Simon Diesenreiter]
|
- Fix commit for version push, refs NOISSUE. [Simon Diesenreiter]
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
0.6.1
|
0.6.3
|
||||||
|
|||||||
@@ -220,11 +220,31 @@ class N8NSetupAgent:
|
|||||||
|
|
||||||
async def create_workflow(self, workflow_json: dict) -> dict:
|
async def create_workflow(self, workflow_json: dict) -> dict:
|
||||||
"""Create or update a workflow."""
|
"""Create or update a workflow."""
|
||||||
return await self._request("POST", "workflows", json=workflow_json)
|
return await self._request("POST", "workflows", json=self._workflow_payload(workflow_json))
|
||||||
|
|
||||||
|
def _workflow_payload(self, workflow_json: dict) -> dict:
|
||||||
|
"""Return a workflow payload without server-managed read-only fields."""
|
||||||
|
payload = dict(workflow_json)
|
||||||
|
payload.pop("active", None)
|
||||||
|
payload.pop("id", None)
|
||||||
|
payload.pop("createdAt", None)
|
||||||
|
payload.pop("updatedAt", None)
|
||||||
|
payload.pop("versionId", None)
|
||||||
|
return payload
|
||||||
|
|
||||||
|
async def _update_workflow_via_put(self, workflow_id: str, workflow_json: dict) -> dict:
|
||||||
|
"""Fallback update path for n8n instances that only support PUT."""
|
||||||
|
return await self._request("PUT", f"workflows/{workflow_id}", json=self._workflow_payload(workflow_json))
|
||||||
|
|
||||||
async def update_workflow(self, workflow_id: str, workflow_json: dict) -> dict:
|
async def update_workflow(self, workflow_id: str, workflow_json: dict) -> dict:
|
||||||
"""Update an existing workflow."""
|
"""Update an existing workflow."""
|
||||||
return await self._request("PATCH", f"workflows/{workflow_id}", json=workflow_json)
|
result = await self._request("PATCH", f"workflows/{workflow_id}", json=self._workflow_payload(workflow_json))
|
||||||
|
if result.get("status_code") == 405:
|
||||||
|
fallback = await self._update_workflow_via_put(workflow_id, workflow_json)
|
||||||
|
if not fallback.get("error") and isinstance(fallback, dict):
|
||||||
|
fallback.setdefault("method", "PUT")
|
||||||
|
return fallback
|
||||||
|
return result
|
||||||
|
|
||||||
async def enable_workflow(self, workflow_id: str) -> dict:
|
async def enable_workflow(self, workflow_id: str) -> dict:
|
||||||
"""Enable a workflow."""
|
"""Enable a workflow."""
|
||||||
@@ -232,6 +252,11 @@ class N8NSetupAgent:
|
|||||||
if result.get("error"):
|
if result.get("error"):
|
||||||
fallback = await self._request("PATCH", f"workflows/{workflow_id}", json={"active": True})
|
fallback = await self._request("PATCH", f"workflows/{workflow_id}", json={"active": True})
|
||||||
if fallback.get("error"):
|
if fallback.get("error"):
|
||||||
|
if fallback.get("status_code") == 405:
|
||||||
|
put_fallback = await self._request("PUT", f"workflows/{workflow_id}", json={"active": True})
|
||||||
|
if put_fallback.get("error"):
|
||||||
|
return put_fallback
|
||||||
|
return {"success": True, "id": workflow_id, "method": "put"}
|
||||||
return fallback
|
return fallback
|
||||||
return {"success": True, "id": workflow_id, "method": "patch"}
|
return {"success": True, "id": workflow_id, "method": "patch"}
|
||||||
return {"success": True, "id": workflow_id, "method": "activate"}
|
return {"success": True, "id": workflow_id, "method": "activate"}
|
||||||
@@ -255,7 +280,6 @@ class N8NSetupAgent:
|
|||||||
normalized_path = webhook_path.strip().strip("/") or "telegram"
|
normalized_path = webhook_path.strip().strip("/") or "telegram"
|
||||||
return {
|
return {
|
||||||
"name": "Telegram to AI Software Factory",
|
"name": "Telegram to AI Software Factory",
|
||||||
"active": False,
|
|
||||||
"settings": {"executionOrder": "v1"},
|
"settings": {"executionOrder": "v1"},
|
||||||
"nodes": [
|
"nodes": [
|
||||||
{
|
{
|
||||||
@@ -324,7 +348,6 @@ class N8NSetupAgent:
|
|||||||
"""Build a production Telegram Trigger based workflow."""
|
"""Build a production Telegram Trigger based workflow."""
|
||||||
return {
|
return {
|
||||||
"name": "Telegram to AI Software Factory",
|
"name": "Telegram to AI Software Factory",
|
||||||
"active": False,
|
|
||||||
"settings": {"executionOrder": "v1"},
|
"settings": {"executionOrder": "v1"},
|
||||||
"nodes": [
|
"nodes": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -284,12 +284,12 @@ def create_dashboard():
|
|||||||
ui.label(str(value)).style('font-size: 2.1rem; font-weight: 800; margin-top: 6px;')
|
ui.label(str(value)).style('font-size: 2.1rem; font-weight: 800; margin-top: 6px;')
|
||||||
ui.label(subtitle).style('font-size: 0.9rem; opacity: 0.78; margin-top: 8px;')
|
ui.label(subtitle).style('font-size: 0.9rem; opacity: 0.78; margin-top: 8px;')
|
||||||
|
|
||||||
tabs = ui.tabs().classes('w-full')
|
with ui.tabs().classes('w-full') as tabs:
|
||||||
overview_tab = ui.tab('Overview')
|
overview_tab = ui.tab('Overview')
|
||||||
projects_tab = ui.tab('Projects')
|
projects_tab = ui.tab('Projects')
|
||||||
trace_tab = ui.tab('Prompt Trace')
|
trace_tab = ui.tab('Prompt Trace')
|
||||||
system_tab = ui.tab('System')
|
system_tab = ui.tab('System')
|
||||||
health_tab = ui.tab('Health')
|
health_tab = ui.tab('Health')
|
||||||
|
|
||||||
with ui.tab_panels(tabs, value=overview_tab).classes('w-full'):
|
with ui.tab_panels(tabs, value=overview_tab).classes('w-full'):
|
||||||
with ui.tab_panel(overview_tab):
|
with ui.tab_panel(overview_tab):
|
||||||
|
|||||||
Reference in New Issue
Block a user