@octo-cyber/ai 0.5.4 → 0.5.6
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/dist/shared/IClaudeCodeSessionManager.d.ts +151 -0
- package/dist/shared/IClaudeCodeSessionManager.d.ts.map +1 -0
- package/dist/shared/IClaudeCodeSessionManager.js +6 -0
- package/dist/shared/IClaudeCodeSessionManager.js.map +1 -0
- package/dist/src/BranchDecisionEngine.d.ts +73 -0
- package/dist/src/BranchDecisionEngine.d.ts.map +1 -0
- package/dist/src/BranchDecisionEngine.js +195 -0
- package/dist/src/BranchDecisionEngine.js.map +1 -0
- package/dist/src/agent/agent-approval.controller.d.ts +20 -0
- package/dist/src/agent/agent-approval.controller.d.ts.map +1 -0
- package/dist/src/agent/agent-approval.controller.js +101 -0
- package/dist/src/agent/agent-approval.controller.js.map +1 -0
- package/dist/src/agent/agent-approval.entity.d.ts +15 -0
- package/dist/src/agent/agent-approval.entity.d.ts.map +1 -0
- package/dist/src/agent/agent-approval.entity.js +63 -0
- package/dist/src/agent/agent-approval.entity.js.map +1 -0
- package/dist/src/agent/agent-approval.service.d.ts +35 -0
- package/dist/src/agent/agent-approval.service.d.ts.map +1 -0
- package/dist/src/agent/agent-approval.service.js +109 -0
- package/dist/src/agent/agent-approval.service.js.map +1 -0
- package/dist/src/agent/agent-gateway.controller.d.ts +30 -0
- package/dist/src/agent/agent-gateway.controller.d.ts.map +1 -0
- package/dist/src/agent/agent-gateway.controller.js +112 -0
- package/dist/src/agent/agent-gateway.controller.js.map +1 -0
- package/dist/src/agent/agent-gateway.service.d.ts +33 -0
- package/dist/src/agent/agent-gateway.service.d.ts.map +1 -0
- package/dist/src/agent/agent-gateway.service.js +84 -0
- package/dist/src/agent/agent-gateway.service.js.map +1 -0
- package/dist/src/agent/agent-registry.service.d.ts +30 -0
- package/dist/src/agent/agent-registry.service.d.ts.map +1 -0
- package/dist/src/agent/agent-registry.service.js +45 -0
- package/dist/src/agent/agent-registry.service.js.map +1 -0
- package/dist/src/agent/agent-run.controller.d.ts +42 -0
- package/dist/src/agent/agent-run.controller.d.ts.map +1 -0
- package/dist/src/agent/agent-run.controller.js +195 -0
- package/dist/src/agent/agent-run.controller.js.map +1 -0
- package/dist/src/agent/agent-run.entity.d.ts +35 -0
- package/dist/src/agent/agent-run.entity.d.ts.map +1 -0
- package/dist/src/agent/agent-run.entity.js +98 -0
- package/dist/src/agent/agent-run.entity.js.map +1 -0
- package/dist/src/agent/agent-run.service.d.ts +48 -0
- package/dist/src/agent/agent-run.service.d.ts.map +1 -0
- package/dist/src/agent/agent-run.service.js +155 -0
- package/dist/src/agent/agent-run.service.js.map +1 -0
- package/dist/src/agent/agent-session.controller.d.ts +20 -0
- package/dist/src/agent/agent-session.controller.d.ts.map +1 -0
- package/dist/src/agent/agent-session.controller.js +97 -0
- package/dist/src/agent/agent-session.controller.js.map +1 -0
- package/dist/src/agent/agent-session.entity.d.ts +13 -0
- package/dist/src/agent/agent-session.entity.d.ts.map +1 -0
- package/dist/src/agent/agent-session.entity.js +57 -0
- package/dist/src/agent/agent-session.entity.js.map +1 -0
- package/dist/src/agent/agent-session.service.d.ts +38 -0
- package/dist/src/agent/agent-session.service.d.ts.map +1 -0
- package/dist/src/agent/agent-session.service.js +112 -0
- package/dist/src/agent/agent-session.service.js.map +1 -0
- package/dist/src/agent/coding-tools.d.ts +7 -0
- package/dist/src/agent/coding-tools.d.ts.map +1 -0
- package/dist/src/agent/coding-tools.js +181 -0
- package/dist/src/agent/coding-tools.js.map +1 -0
- package/dist/src/agent/computer-use-tools.d.ts +15 -0
- package/dist/src/agent/computer-use-tools.d.ts.map +1 -0
- package/dist/src/agent/computer-use-tools.js +256 -0
- package/dist/src/agent/computer-use-tools.js.map +1 -0
- package/dist/src/agent/external-agent.controller.d.ts +41 -0
- package/dist/src/agent/external-agent.controller.d.ts.map +1 -0
- package/dist/src/agent/external-agent.controller.js +129 -0
- package/dist/src/agent/external-agent.controller.js.map +1 -0
- package/dist/src/agent/external-agent.entity.d.ts +22 -0
- package/dist/src/agent/external-agent.entity.d.ts.map +1 -0
- package/dist/src/agent/external-agent.entity.js +75 -0
- package/dist/src/agent/external-agent.entity.js.map +1 -0
- package/dist/src/agent/external-agent.service.d.ts +60 -0
- package/dist/src/agent/external-agent.service.d.ts.map +1 -0
- package/dist/src/agent/external-agent.service.js +143 -0
- package/dist/src/agent/external-agent.service.js.map +1 -0
- package/dist/src/ai.module.d.ts +22 -0
- package/dist/src/ai.module.d.ts.map +1 -0
- package/dist/src/ai.module.js +178 -0
- package/dist/src/ai.module.js.map +1 -0
- package/dist/{cli → src/cli}/adapters/antigravity.adapter.d.ts +2 -0
- package/dist/src/cli/adapters/antigravity.adapter.d.ts.map +1 -0
- package/dist/{cli → src/cli}/adapters/antigravity.adapter.js +78 -0
- package/dist/src/cli/adapters/antigravity.adapter.js.map +1 -0
- package/dist/src/cli/adapters/claude-cli.adapter.d.ts.map +1 -0
- package/dist/{cli → src/cli}/adapters/claude-cli.adapter.js +2 -0
- package/dist/src/cli/adapters/claude-cli.adapter.js.map +1 -0
- package/dist/src/cli/adapters/cli-proxy-api.adapter.d.ts +32 -0
- package/dist/src/cli/adapters/cli-proxy-api.adapter.d.ts.map +1 -0
- package/dist/src/cli/adapters/cli-proxy-api.adapter.js +239 -0
- package/dist/src/cli/adapters/cli-proxy-api.adapter.js.map +1 -0
- package/dist/src/cli/adapters/codex-cli.adapter.d.ts.map +1 -0
- package/dist/src/cli/adapters/codex-cli.adapter.js.map +1 -0
- package/dist/src/cli/adapters/detect-cli.d.ts.map +1 -0
- package/dist/src/cli/adapters/detect-cli.js.map +1 -0
- package/dist/src/cli/adapters/gemini-cli.adapter.d.ts.map +1 -0
- package/dist/src/cli/adapters/gemini-cli.adapter.js.map +1 -0
- package/dist/src/cli/adapters/index.d.ts.map +1 -0
- package/dist/src/cli/adapters/index.js.map +1 -0
- package/dist/{cli → src/cli}/cli-executor.service.d.ts +2 -0
- package/dist/src/cli/cli-executor.service.d.ts.map +1 -0
- package/dist/{cli → src/cli}/cli-executor.service.js +21 -1
- package/dist/src/cli/cli-executor.service.js.map +1 -0
- package/dist/src/cli/cli-registry.service.d.ts.map +1 -0
- package/dist/{cli → src/cli}/cli-registry.service.js +3 -1
- package/dist/src/cli/cli-registry.service.js.map +1 -0
- package/dist/{cli → src/cli}/controllers/ai-cli.controller.d.ts +4 -0
- package/dist/src/cli/controllers/ai-cli.controller.d.ts.map +1 -0
- package/dist/{cli → src/cli}/controllers/ai-cli.controller.js +33 -4
- package/dist/src/cli/controllers/ai-cli.controller.js.map +1 -0
- package/dist/{cli → src/cli}/index.d.ts +1 -1
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/{cli → src/cli}/types.d.ts +23 -1
- package/dist/src/cli/types.d.ts.map +1 -0
- package/dist/{skill → src/cli}/types.js.map +1 -1
- package/dist/{cli → src/cli}/workspace.service.d.ts +11 -3
- package/dist/src/cli/workspace.service.d.ts.map +1 -0
- package/dist/{cli → src/cli}/workspace.service.js +61 -6
- package/dist/src/cli/workspace.service.js.map +1 -0
- package/dist/src/computer-use/computer-use.controller.d.ts +23 -0
- package/dist/src/computer-use/computer-use.controller.d.ts.map +1 -0
- package/dist/src/computer-use/computer-use.controller.js +87 -0
- package/dist/src/computer-use/computer-use.controller.js.map +1 -0
- package/dist/src/index.d.ts +12 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +51 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/orchestrator/orchestrator-plan.entity.d.ts +31 -0
- package/dist/src/orchestrator/orchestrator-plan.entity.d.ts.map +1 -0
- package/dist/src/orchestrator/orchestrator-plan.entity.js +69 -0
- package/dist/src/orchestrator/orchestrator-plan.entity.js.map +1 -0
- package/dist/src/orchestrator/orchestrator-plan.service.d.ts +27 -0
- package/dist/src/orchestrator/orchestrator-plan.service.d.ts.map +1 -0
- package/dist/src/orchestrator/orchestrator-plan.service.js +201 -0
- package/dist/src/orchestrator/orchestrator-plan.service.js.map +1 -0
- package/dist/src/orchestrator/orchestrator.controller.d.ts +29 -0
- package/dist/src/orchestrator/orchestrator.controller.d.ts.map +1 -0
- package/dist/src/orchestrator/orchestrator.controller.js +144 -0
- package/dist/src/orchestrator/orchestrator.controller.js.map +1 -0
- package/dist/src/orchestrator/workflow-feedback.entity.d.ts +12 -0
- package/dist/src/orchestrator/workflow-feedback.entity.d.ts.map +1 -0
- package/dist/src/orchestrator/workflow-feedback.entity.js +49 -0
- package/dist/src/orchestrator/workflow-feedback.entity.js.map +1 -0
- package/dist/src/orchestrator/workflow-feedback.service.d.ts +14 -0
- package/dist/src/orchestrator/workflow-feedback.service.d.ts.map +1 -0
- package/dist/src/orchestrator/workflow-feedback.service.js +51 -0
- package/dist/src/orchestrator/workflow-feedback.service.js.map +1 -0
- package/dist/src/session/claude-code-session-manager.service.d.ts +28 -0
- package/dist/src/session/claude-code-session-manager.service.d.ts.map +1 -0
- package/dist/src/session/claude-code-session-manager.service.js +177 -0
- package/dist/src/session/claude-code-session-manager.service.js.map +1 -0
- package/dist/src/skill/controllers/skill-market.controller.d.ts +18 -0
- package/dist/src/skill/controllers/skill-market.controller.d.ts.map +1 -0
- package/dist/src/skill/controllers/skill-market.controller.js +128 -0
- package/dist/src/skill/controllers/skill-market.controller.js.map +1 -0
- package/dist/{skill → src/skill}/controllers/skill.controller.d.ts +4 -0
- package/dist/src/skill/controllers/skill.controller.d.ts.map +1 -0
- package/dist/{skill → src/skill}/controllers/skill.controller.js +31 -0
- package/dist/src/skill/controllers/skill.controller.js.map +1 -0
- package/dist/src/skill/entities/octo-skill.entity.d.ts.map +1 -0
- package/dist/src/skill/entities/octo-skill.entity.js.map +1 -0
- package/dist/{skill → src/skill}/index.d.ts +3 -1
- package/dist/src/skill/index.d.ts.map +1 -0
- package/dist/{skill → src/skill}/index.js +5 -1
- package/dist/src/skill/index.js.map +1 -0
- package/dist/src/skill/services/skill-generator.service.d.ts.map +1 -0
- package/dist/src/skill/services/skill-generator.service.js.map +1 -0
- package/dist/{skill → src/skill}/services/skill-installer.service.d.ts +27 -0
- package/dist/src/skill/services/skill-installer.service.d.ts.map +1 -0
- package/dist/{skill → src/skill}/services/skill-installer.service.js +108 -0
- package/dist/src/skill/services/skill-installer.service.js.map +1 -0
- package/dist/src/skill/services/skill-market-helpers.d.ts +25 -0
- package/dist/src/skill/services/skill-market-helpers.d.ts.map +1 -0
- package/dist/src/skill/services/skill-market-helpers.js +22 -0
- package/dist/src/skill/services/skill-market-helpers.js.map +1 -0
- package/dist/src/skill/services/skill-market.service.d.ts +60 -0
- package/dist/src/skill/services/skill-market.service.d.ts.map +1 -0
- package/dist/src/skill/services/skill-market.service.js +228 -0
- package/dist/src/skill/services/skill-market.service.js.map +1 -0
- package/dist/{skill → src/skill}/services/skill-registry.service.d.ts +1 -0
- package/dist/src/skill/services/skill-registry.service.d.ts.map +1 -0
- package/dist/{skill → src/skill}/services/skill-registry.service.js +18 -6
- package/dist/src/skill/services/skill-registry.service.js.map +1 -0
- package/dist/{skill → src/skill}/types.d.ts +32 -1
- package/dist/src/skill/types.d.ts.map +1 -0
- package/dist/{cli → src/skill}/types.js.map +1 -1
- package/dist/src/workflow-design/DocumentExtractorAgent.d.ts +47 -0
- package/dist/src/workflow-design/DocumentExtractorAgent.d.ts.map +1 -0
- package/dist/src/workflow-design/DocumentExtractorAgent.js +118 -0
- package/dist/src/workflow-design/DocumentExtractorAgent.js.map +1 -0
- package/dist/src/workflow-design/N8nNodeKnowledgeBase.d.ts +26 -0
- package/dist/src/workflow-design/N8nNodeKnowledgeBase.d.ts.map +1 -0
- package/dist/src/workflow-design/N8nNodeKnowledgeBase.js +362 -0
- package/dist/src/workflow-design/N8nNodeKnowledgeBase.js.map +1 -0
- package/dist/src/workflow-design/OctoAgentClient.d.ts +42 -0
- package/dist/src/workflow-design/OctoAgentClient.d.ts.map +1 -0
- package/dist/src/workflow-design/OctoAgentClient.js +191 -0
- package/dist/src/workflow-design/OctoAgentClient.js.map +1 -0
- package/dist/src/workflow-design/WorkflowDesignOrchestrator.d.ts +45 -0
- package/dist/src/workflow-design/WorkflowDesignOrchestrator.d.ts.map +1 -0
- package/dist/src/workflow-design/WorkflowDesignOrchestrator.js +265 -0
- package/dist/src/workflow-design/WorkflowDesignOrchestrator.js.map +1 -0
- package/dist/src/workflow-design/agents/ActionChainAgent.d.ts +9 -0
- package/dist/src/workflow-design/agents/ActionChainAgent.d.ts.map +1 -0
- package/dist/src/workflow-design/agents/ActionChainAgent.js +79 -0
- package/dist/src/workflow-design/agents/ActionChainAgent.js.map +1 -0
- package/dist/src/workflow-design/agents/CodeScriptAgent.d.ts +15 -0
- package/dist/src/workflow-design/agents/CodeScriptAgent.d.ts.map +1 -0
- package/dist/src/workflow-design/agents/CodeScriptAgent.js +96 -0
- package/dist/src/workflow-design/agents/CodeScriptAgent.js.map +1 -0
- package/dist/src/workflow-design/agents/LogicFlowAgent.d.ts +9 -0
- package/dist/src/workflow-design/agents/LogicFlowAgent.d.ts.map +1 -0
- package/dist/src/workflow-design/agents/LogicFlowAgent.js +78 -0
- package/dist/src/workflow-design/agents/LogicFlowAgent.js.map +1 -0
- package/dist/src/workflow-design/agents/TriggerAnalystAgent.d.ts +9 -0
- package/dist/src/workflow-design/agents/TriggerAnalystAgent.d.ts.map +1 -0
- package/dist/src/workflow-design/agents/TriggerAnalystAgent.js +65 -0
- package/dist/src/workflow-design/agents/TriggerAnalystAgent.js.map +1 -0
- package/dist/src/workflow-design/agents/WorkflowValidatorAgent.d.ts +9 -0
- package/dist/src/workflow-design/agents/WorkflowValidatorAgent.d.ts.map +1 -0
- package/dist/src/workflow-design/agents/WorkflowValidatorAgent.js +117 -0
- package/dist/src/workflow-design/agents/WorkflowValidatorAgent.js.map +1 -0
- package/dist/src/workflow-design/index.d.ts +12 -0
- package/dist/src/workflow-design/index.d.ts.map +1 -0
- package/dist/src/workflow-design/index.js +23 -0
- package/dist/src/workflow-design/index.js.map +1 -0
- package/dist/src/workflow-design/types.d.ts +155 -0
- package/dist/src/workflow-design/types.d.ts.map +1 -0
- package/dist/src/workflow-design/types.js +6 -0
- package/dist/src/workflow-design/types.js.map +1 -0
- package/package.json +21 -15
- package/web/components/CreateWorkspaceDialog.tsx +157 -0
- package/web/components/DirBrowser.tsx +85 -0
- package/web/components/GithubTokenDialog.tsx +152 -0
- package/web/components/LocalPathSection.tsx +91 -0
- package/web/components/MarketInstallDialog.tsx +196 -0
- package/web/components/MarketSkillCard.tsx +74 -0
- package/web/components/RepoList.tsx +97 -0
- package/web/components/SearchResultsGrid.tsx +55 -0
- package/web/components/SkillCard.tsx +4 -1
- package/web/components/ToolCard.tsx +88 -0
- package/web/components/WorkspaceCard.tsx +146 -0
- package/web/components/WorkspaceItem.tsx +65 -0
- package/web/components/WorkspaceSelect.tsx +94 -0
- package/web/index.ts +18 -1
- package/web/manifest.ts +7 -0
- package/web/messages/en-US.json +231 -7
- package/web/messages/zh-CN.json +234 -7
- package/web/pages/AgentMarketPage.tsx +318 -0
- package/web/pages/AgentRunsPage.tsx +162 -0
- package/web/pages/AgentsPage.tsx +239 -0
- package/web/pages/AiCliToolsPage.tsx +17 -128
- package/web/pages/ApprovalsPage.tsx +260 -0
- package/web/pages/OrchestratorPage.tsx +384 -0
- package/web/pages/SessionsPage.tsx +248 -0
- package/web/pages/SkillMarketPage.tsx +25 -0
- package/web/pages/WorkspaceSection.tsx +13 -113
- package/web/pages/WorkspacesPage.tsx +29 -254
- package/web/services/agent-approval.service.ts +35 -0
- package/web/services/agent-gateway.service.ts +41 -0
- package/web/services/agent-run.service.ts +48 -0
- package/web/services/agent-session.service.ts +30 -0
- package/web/services/ai-cli-service.ts +33 -0
- package/web/services/external-agent.service.ts +38 -0
- package/web/services/orchestrator.service.ts +52 -0
- package/web/services/skill-market-service.ts +88 -0
- package/web/services/skill-service.ts +12 -0
- package/dist/ai.module.d.ts +0 -4
- package/dist/ai.module.d.ts.map +0 -1
- package/dist/ai.module.js +0 -59
- package/dist/ai.module.js.map +0 -1
- package/dist/cli/adapters/antigravity.adapter.d.ts.map +0 -1
- package/dist/cli/adapters/antigravity.adapter.js.map +0 -1
- package/dist/cli/adapters/claude-cli.adapter.d.ts.map +0 -1
- package/dist/cli/adapters/claude-cli.adapter.js.map +0 -1
- package/dist/cli/adapters/codex-cli.adapter.d.ts.map +0 -1
- package/dist/cli/adapters/codex-cli.adapter.js.map +0 -1
- package/dist/cli/adapters/detect-cli.d.ts.map +0 -1
- package/dist/cli/adapters/detect-cli.js.map +0 -1
- package/dist/cli/adapters/gemini-cli.adapter.d.ts.map +0 -1
- package/dist/cli/adapters/gemini-cli.adapter.js.map +0 -1
- package/dist/cli/adapters/index.d.ts.map +0 -1
- package/dist/cli/adapters/index.js.map +0 -1
- package/dist/cli/cli-executor.service.d.ts.map +0 -1
- package/dist/cli/cli-executor.service.js.map +0 -1
- package/dist/cli/cli-registry.service.d.ts.map +0 -1
- package/dist/cli/cli-registry.service.js.map +0 -1
- package/dist/cli/controllers/ai-cli.controller.d.ts.map +0 -1
- package/dist/cli/controllers/ai-cli.controller.js.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/types.d.ts.map +0 -1
- package/dist/cli/workspace.service.d.ts.map +0 -1
- package/dist/cli/workspace.service.js.map +0 -1
- package/dist/index.d.ts +0 -5
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -23
- package/dist/index.js.map +0 -1
- package/dist/skill/controllers/skill.controller.d.ts.map +0 -1
- package/dist/skill/controllers/skill.controller.js.map +0 -1
- package/dist/skill/entities/octo-skill.entity.d.ts.map +0 -1
- package/dist/skill/entities/octo-skill.entity.js.map +0 -1
- package/dist/skill/index.d.ts.map +0 -1
- package/dist/skill/index.js.map +0 -1
- package/dist/skill/services/skill-generator.service.d.ts.map +0 -1
- package/dist/skill/services/skill-generator.service.js.map +0 -1
- package/dist/skill/services/skill-installer.service.d.ts.map +0 -1
- package/dist/skill/services/skill-installer.service.js.map +0 -1
- package/dist/skill/services/skill-registry.service.d.ts.map +0 -1
- package/dist/skill/services/skill-registry.service.js.map +0 -1
- package/dist/skill/types.d.ts.map +0 -1
- /package/dist/{cli → src/cli}/adapters/claude-cli.adapter.d.ts +0 -0
- /package/dist/{cli → src/cli}/adapters/codex-cli.adapter.d.ts +0 -0
- /package/dist/{cli → src/cli}/adapters/codex-cli.adapter.js +0 -0
- /package/dist/{cli → src/cli}/adapters/detect-cli.d.ts +0 -0
- /package/dist/{cli → src/cli}/adapters/detect-cli.js +0 -0
- /package/dist/{cli → src/cli}/adapters/gemini-cli.adapter.d.ts +0 -0
- /package/dist/{cli → src/cli}/adapters/gemini-cli.adapter.js +0 -0
- /package/dist/{cli → src/cli}/adapters/index.d.ts +0 -0
- /package/dist/{cli → src/cli}/adapters/index.js +0 -0
- /package/dist/{cli → src/cli}/cli-registry.service.d.ts +0 -0
- /package/dist/{cli → src/cli}/index.js +0 -0
- /package/dist/{cli → src/cli}/types.js +0 -0
- /package/dist/{skill → src/skill}/entities/octo-skill.entity.d.ts +0 -0
- /package/dist/{skill → src/skill}/entities/octo-skill.entity.js +0 -0
- /package/dist/{skill → src/skill}/services/skill-generator.service.d.ts +0 -0
- /package/dist/{skill → src/skill}/services/skill-generator.service.js +0 -0
- /package/dist/{skill → src/skill}/types.js +0 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CodeScriptAgent = void 0;
|
|
4
|
+
const OctoAgentClient_js_1 = require("../OctoAgentClient.js");
|
|
5
|
+
// ============================================================
|
|
6
|
+
// CodeScriptAgent
|
|
7
|
+
// Generates JavaScript code snippets for Function/Code nodes.
|
|
8
|
+
// Only invoked when at least one node has needsCodeGen = true (Phase 3).
|
|
9
|
+
// ============================================================
|
|
10
|
+
const SYSTEM_PROMPT = `You are an n8n JavaScript code generator for Code nodes.
|
|
11
|
+
Your job is to write the body of n8n Code nodes based on a description of what the code should do.
|
|
12
|
+
|
|
13
|
+
SECURITY CONSTRAINTS (mandatory — never violate):
|
|
14
|
+
- Do NOT access external networks (no fetch, no require('http'), no require('https')) unless the user explicitly states the code must call an external API.
|
|
15
|
+
- Do NOT read or write local files (no fs module, no require('fs')).
|
|
16
|
+
- Do NOT execute child processes (no child_process, no exec, no spawn).
|
|
17
|
+
- Do NOT access environment variables beyond what n8n already injects.
|
|
18
|
+
|
|
19
|
+
n8n Code node context:
|
|
20
|
+
- Input items are available as: const items = $input.all(); or $input.first()
|
|
21
|
+
- Each item has: item.json, item.binary
|
|
22
|
+
- Return value must be an array of items: return items; or return [{ json: {...} }]
|
|
23
|
+
- Built-in helpers available: $now, $today, DateTime, $jmespath, $workflow, $execution, $node
|
|
24
|
+
|
|
25
|
+
Rules:
|
|
26
|
+
- Respond with ONLY a JSON object inside a markdown json fence.
|
|
27
|
+
- The JSON must match this shape:
|
|
28
|
+
{
|
|
29
|
+
"codes": {
|
|
30
|
+
"<nodeId>": "<complete JS code string for that node>"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
- Each code value is the full jsCode string (not a function wrapper — just the statements).
|
|
34
|
+
- Add a brief comment at the top of each snippet explaining what it does.
|
|
35
|
+
- Keep each snippet under 40 lines.
|
|
36
|
+
`;
|
|
37
|
+
class CodeScriptAgent {
|
|
38
|
+
client;
|
|
39
|
+
constructor(client) {
|
|
40
|
+
this.client = client;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Generate code for all nodes marked needsCodeGen.
|
|
44
|
+
* @param actionSpecs Full action spec list (to find code nodes).
|
|
45
|
+
* @param logicSpecs Logic spec list (in case logic nodes also need code).
|
|
46
|
+
* @param history Conversation history for context.
|
|
47
|
+
*/
|
|
48
|
+
async generate(actionSpecs, logicSpecs, history) {
|
|
49
|
+
const requests = this.collectCodeRequests(actionSpecs, logicSpecs);
|
|
50
|
+
if (requests.length === 0) {
|
|
51
|
+
return { codes: {} };
|
|
52
|
+
}
|
|
53
|
+
const requestList = requests
|
|
54
|
+
.map((r) => `- Node "${r.nodeName}" (id: ${r.nodeId}): ${r.description}`)
|
|
55
|
+
.join('\n');
|
|
56
|
+
const prompt = `Generate JavaScript code for the following n8n Code nodes:\n\n${requestList}`;
|
|
57
|
+
const messages = [
|
|
58
|
+
...history,
|
|
59
|
+
{ role: 'user', content: prompt },
|
|
60
|
+
];
|
|
61
|
+
// Cache the code-gen system prompt — same instructions for all code generation calls
|
|
62
|
+
const reply = await this.client.singleCall(messages, [{ type: 'text', text: SYSTEM_PROMPT, cache_control: { type: 'ephemeral' } }]);
|
|
63
|
+
const result = OctoAgentClient_js_1.OctoAgentClient.parseJsonFromReply(reply);
|
|
64
|
+
if (!result.codes || typeof result.codes !== 'object') {
|
|
65
|
+
throw new Error('CodeScriptAgent: missing codes object in response');
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
collectCodeRequests(actionSpecs, logicSpecs) {
|
|
70
|
+
const requests = [];
|
|
71
|
+
actionSpecs.forEach((spec, idx) => {
|
|
72
|
+
if (spec.needsCodeGen) {
|
|
73
|
+
requests.push({
|
|
74
|
+
nodeId: `action_${idx}`,
|
|
75
|
+
nodeName: spec.name,
|
|
76
|
+
description: spec.codeDescription ?? `Execute custom logic for "${spec.name}"`,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
// Logic nodes don't typically need code gen, but support it for completeness
|
|
81
|
+
logicSpecs.forEach((spec, idx) => {
|
|
82
|
+
const isCodeNode = spec.type === 'n8n-nodes-base.code' ||
|
|
83
|
+
spec.type === 'n8n-nodes-base.function';
|
|
84
|
+
if (isCodeNode) {
|
|
85
|
+
requests.push({
|
|
86
|
+
nodeId: `logic_${idx}`,
|
|
87
|
+
nodeName: spec.name,
|
|
88
|
+
description: spec.condition ?? `Execute logic for "${spec.name}"`,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
return requests;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
exports.CodeScriptAgent = CodeScriptAgent;
|
|
96
|
+
//# sourceMappingURL=CodeScriptAgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeScriptAgent.js","sourceRoot":"","sources":["../../../../src/workflow-design/agents/CodeScriptAgent.ts"],"names":[],"mappings":";;;AAAA,8DAAwD;AAGxD,+DAA+D;AAC/D,kBAAkB;AAClB,8DAA8D;AAC9D,yEAAyE;AACzE,+DAA+D;AAE/D,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BrB,CAAC;AAQF,MAAa,eAAe;IACG;IAA7B,YAA6B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAExD;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CACZ,WAA6B,EAC7B,UAA2B,EAC3B,OAAkB;QAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAEnE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACvB,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ;aACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,UAAU,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;aACxE,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,MAAM,GAAG,iEAAiE,WAAW,EAAE,CAAC;QAE9F,MAAM,QAAQ,GAAc;YAC1B,GAAG,OAAO;YACV,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;SAClC,CAAC;QAEF,qFAAqF;QACrF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QACpI,MAAM,MAAM,GAAG,oCAAe,CAAC,kBAAkB,CAAmB,KAAK,CAAC,CAAC;QAE3E,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,mBAAmB,CACzB,WAA6B,EAC7B,UAA2B;QAE3B,MAAM,QAAQ,GAAkB,EAAE,CAAC;QAEnC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAChC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,QAAQ,CAAC,IAAI,CAAC;oBACZ,MAAM,EAAE,UAAU,GAAG,EAAE;oBACvB,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACnB,WAAW,EAAE,IAAI,CAAC,eAAe,IAAI,6BAA6B,IAAI,CAAC,IAAI,GAAG;iBAC/E,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,6EAA6E;QAC7E,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC/B,MAAM,UAAU,GACd,IAAI,CAAC,IAAI,KAAK,qBAAqB;gBACnC,IAAI,CAAC,IAAI,KAAK,yBAAyB,CAAC;YAC1C,IAAI,UAAU,EAAE,CAAC;gBACf,QAAQ,CAAC,IAAI,CAAC;oBACZ,MAAM,EAAE,SAAS,GAAG,EAAE;oBACtB,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACnB,WAAW,EAAE,IAAI,CAAC,SAAS,IAAI,sBAAsB,IAAI,CAAC,IAAI,GAAG;iBAClE,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AA1ED,0CA0EC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { OctoAgentClient } from '../OctoAgentClient.js';
|
|
2
|
+
import type { ActionNodeSpec, LogicFlowResult, Message } from '../types.js';
|
|
3
|
+
export declare class LogicFlowAgent {
|
|
4
|
+
private readonly client;
|
|
5
|
+
constructor(client: OctoAgentClient);
|
|
6
|
+
design(intent: string, actionSpecs: ActionNodeSpec[], history: Message[]): Promise<LogicFlowResult>;
|
|
7
|
+
private validateAndNormalise;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=LogicFlowAgent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogicFlowAgent.d.ts","sourceRoot":"","sources":["../../../../src/workflow-design/agents/LogicFlowAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAEf,OAAO,EACR,MAAM,aAAa,CAAC;AAiCrB,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAE9C,MAAM,CACV,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,cAAc,EAAE,EAC7B,OAAO,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,eAAe,CAAC;IA4B3B,OAAO,CAAC,oBAAoB;CAgB7B"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LogicFlowAgent = void 0;
|
|
4
|
+
const OctoAgentClient_js_1 = require("../OctoAgentClient.js");
|
|
5
|
+
const N8nNodeKnowledgeBase_js_1 = require("../N8nNodeKnowledgeBase.js");
|
|
6
|
+
// ============================================================
|
|
7
|
+
// LogicFlowAgent
|
|
8
|
+
// Adds conditional branches, merge nodes, and error handling.
|
|
9
|
+
// Runs in parallel with ActionChainAgent (Phase 2).
|
|
10
|
+
// ============================================================
|
|
11
|
+
const SYSTEM_PROMPT_BASE = `You are an n8n workflow logic flow designer.
|
|
12
|
+
Your job is to identify where conditional branching (IF/Switch), merging (Merge), or error handling (Error Trigger) is needed in a workflow, and specify those nodes.
|
|
13
|
+
|
|
14
|
+
Rules:
|
|
15
|
+
- Respond with ONLY a JSON object inside a markdown json fence.
|
|
16
|
+
- The JSON must match this shape exactly:
|
|
17
|
+
{
|
|
18
|
+
"specs": [
|
|
19
|
+
{
|
|
20
|
+
"type": "<n8n node type>",
|
|
21
|
+
"name": "<display name>",
|
|
22
|
+
"parameters": { <params> },
|
|
23
|
+
"position": { "x": <number>, "y": 300 },
|
|
24
|
+
"insertAfterIndex": <integer index into the action specs array>,
|
|
25
|
+
"condition": "<optional condition expression for IF/Switch>"
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"reasoning": "<brief explanation>"
|
|
29
|
+
}
|
|
30
|
+
- If no logic nodes are needed, return { "specs": [], "reasoning": "No conditional logic required." }
|
|
31
|
+
- "insertAfterIndex" is 0-based; -1 means before the first action node.
|
|
32
|
+
- Use y: 120 for true-branch paths (if you want to indicate branching visually).
|
|
33
|
+
- Provide realistic condition expressions using n8n expression syntax: e.g. {{ $json.status === 'error' }}
|
|
34
|
+
`;
|
|
35
|
+
class LogicFlowAgent {
|
|
36
|
+
client;
|
|
37
|
+
constructor(client) {
|
|
38
|
+
this.client = client;
|
|
39
|
+
}
|
|
40
|
+
async design(intent, actionSpecs, history) {
|
|
41
|
+
const system = [
|
|
42
|
+
{ type: 'text', text: SYSTEM_PROMPT_BASE },
|
|
43
|
+
N8nNodeKnowledgeBase_js_1.N8nNodeKnowledgeBase.buildCachedBlock(['control']),
|
|
44
|
+
];
|
|
45
|
+
const actionSummary = actionSpecs
|
|
46
|
+
.map((s, i) => `[${i}] ${s.name} (${s.type})`)
|
|
47
|
+
.join('\n');
|
|
48
|
+
const contextBlock = `Workflow requirement: ${intent}
|
|
49
|
+
|
|
50
|
+
Current action nodes (in order):
|
|
51
|
+
${actionSummary}
|
|
52
|
+
|
|
53
|
+
Identify any conditional logic, branches, or error handling that should be added.`;
|
|
54
|
+
const messages = [
|
|
55
|
+
...history,
|
|
56
|
+
{ role: 'user', content: contextBlock },
|
|
57
|
+
];
|
|
58
|
+
const reply = await this.client.singleCall(messages, system);
|
|
59
|
+
const result = OctoAgentClient_js_1.OctoAgentClient.parseJsonFromReply(reply);
|
|
60
|
+
return this.validateAndNormalise(result);
|
|
61
|
+
}
|
|
62
|
+
validateAndNormalise(result) {
|
|
63
|
+
if (!Array.isArray(result.specs)) {
|
|
64
|
+
throw new Error('LogicFlowAgent: specs must be an array');
|
|
65
|
+
}
|
|
66
|
+
const specs = result.specs.map((s, idx) => ({
|
|
67
|
+
type: s.type || 'n8n-nodes-base.if',
|
|
68
|
+
name: s.name || `Logic ${idx + 1}`,
|
|
69
|
+
parameters: s.parameters ?? {},
|
|
70
|
+
position: s.position ?? { x: 460, y: 120 },
|
|
71
|
+
insertAfterIndex: typeof s.insertAfterIndex === 'number' ? s.insertAfterIndex : -1,
|
|
72
|
+
condition: s.condition ?? undefined,
|
|
73
|
+
}));
|
|
74
|
+
return { specs, reasoning: result.reasoning ?? '' };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.LogicFlowAgent = LogicFlowAgent;
|
|
78
|
+
//# sourceMappingURL=LogicFlowAgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogicFlowAgent.js","sourceRoot":"","sources":["../../../../src/workflow-design/agents/LogicFlowAgent.ts"],"names":[],"mappings":";;;AAAA,8DAAwD;AACxD,wEAAkE;AAQlE,+DAA+D;AAC/D,iBAAiB;AACjB,8DAA8D;AAC9D,oDAAoD;AACpD,+DAA+D;AAE/D,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuB1B,CAAC;AAEF,MAAa,cAAc;IACI;IAA7B,YAA6B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAExD,KAAK,CAAC,MAAM,CACV,MAAc,EACd,WAA6B,EAC7B,OAAkB;QAElB,MAAM,MAAM,GAAG;YACb,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kBAAkB,EAAE;YACnD,8CAAoB,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC;SACnD,CAAC;QAEF,MAAM,aAAa,GAAG,WAAW;aAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC;aAC7C,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,YAAY,GAAG,yBAAyB,MAAM;;;EAGtD,aAAa;;kFAEmE,CAAC;QAE/E,MAAM,QAAQ,GAAc;YAC1B,GAAG,OAAO;YACV,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE;SACxC,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,oCAAe,CAAC,kBAAkB,CAAkB,KAAK,CAAC,CAAC;QAE1E,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAEO,oBAAoB,CAAC,MAAuB;QAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,KAAK,GAAoB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,mBAAmB;YACnC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS,GAAG,GAAG,CAAC,EAAE;YAClC,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;YAC9B,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;YAC1C,gBAAgB,EAAE,OAAO,CAAC,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YAClF,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,SAAS;SACpC,CAAC,CAAC,CAAC;QAEJ,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;IACtD,CAAC;CACF;AAnDD,wCAmDC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { OctoAgentClient } from '../OctoAgentClient.js';
|
|
2
|
+
import type { Message, TriggerAnalysisResult } from '../types.js';
|
|
3
|
+
export declare class TriggerAnalystAgent {
|
|
4
|
+
private readonly client;
|
|
5
|
+
constructor(client: OctoAgentClient);
|
|
6
|
+
analyse(intent: string, history: Message[]): Promise<TriggerAnalysisResult>;
|
|
7
|
+
private validateAndNormalise;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=TriggerAnalystAgent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriggerAnalystAgent.d.ts","sourceRoot":"","sources":["../../../../src/workflow-design/agents/TriggerAnalystAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,OAAO,EAAE,qBAAqB,EAAmB,MAAM,aAAa,CAAC;AA4BnF,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAE9C,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAoBjF,OAAO,CAAC,oBAAoB;CAc7B"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TriggerAnalystAgent = void 0;
|
|
4
|
+
const OctoAgentClient_js_1 = require("../OctoAgentClient.js");
|
|
5
|
+
const N8nNodeKnowledgeBase_js_1 = require("../N8nNodeKnowledgeBase.js");
|
|
6
|
+
// ============================================================
|
|
7
|
+
// TriggerAnalystAgent
|
|
8
|
+
// Analyses user intent and selects the appropriate n8n trigger node.
|
|
9
|
+
// ============================================================
|
|
10
|
+
const SYSTEM_PROMPT_BASE = `You are an n8n workflow trigger specialist.
|
|
11
|
+
Your only job is to identify the correct trigger node for a workflow based on the user's description.
|
|
12
|
+
|
|
13
|
+
Rules:
|
|
14
|
+
- Respond with ONLY a JSON object — no extra text, no markdown explanation outside the JSON fence.
|
|
15
|
+
- The JSON must match this shape exactly:
|
|
16
|
+
{
|
|
17
|
+
"spec": {
|
|
18
|
+
"type": "<n8n node type string>",
|
|
19
|
+
"name": "<short display name>",
|
|
20
|
+
"parameters": { <relevant params> },
|
|
21
|
+
"position": { "x": 240, "y": 300 }
|
|
22
|
+
},
|
|
23
|
+
"reasoning": "<one sentence why this trigger>"
|
|
24
|
+
}
|
|
25
|
+
- Use "x": 240, "y": 300 as the default position for all trigger nodes.
|
|
26
|
+
- Choose the most specific trigger available; fall back to Manual Trigger only if truly unclear.
|
|
27
|
+
- For cron/schedule triggers include a "rule" or "cronExpression" parameter with a sensible default.
|
|
28
|
+
- For Webhook triggers include "httpMethod" (GET or POST) and a "path" parameter.
|
|
29
|
+
`;
|
|
30
|
+
class TriggerAnalystAgent {
|
|
31
|
+
client;
|
|
32
|
+
constructor(client) {
|
|
33
|
+
this.client = client;
|
|
34
|
+
}
|
|
35
|
+
async analyse(intent, history) {
|
|
36
|
+
const system = [
|
|
37
|
+
{ type: 'text', text: SYSTEM_PROMPT_BASE },
|
|
38
|
+
N8nNodeKnowledgeBase_js_1.N8nNodeKnowledgeBase.buildCachedBlock(['trigger']),
|
|
39
|
+
];
|
|
40
|
+
const messages = [
|
|
41
|
+
...history,
|
|
42
|
+
{
|
|
43
|
+
role: 'user',
|
|
44
|
+
content: `Analyse the following workflow requirement and return the trigger node specification:\n\n${intent}`,
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
const reply = await this.client.singleCall(messages, system);
|
|
48
|
+
const result = OctoAgentClient_js_1.OctoAgentClient.parseJsonFromReply(reply);
|
|
49
|
+
return this.validateAndNormalise(result);
|
|
50
|
+
}
|
|
51
|
+
validateAndNormalise(result) {
|
|
52
|
+
if (!result.spec?.type) {
|
|
53
|
+
throw new Error('TriggerAnalystAgent: missing spec.type in response');
|
|
54
|
+
}
|
|
55
|
+
const spec = {
|
|
56
|
+
type: result.spec.type,
|
|
57
|
+
name: result.spec.name || 'Trigger',
|
|
58
|
+
parameters: result.spec.parameters ?? {},
|
|
59
|
+
position: result.spec.position ?? { x: 240, y: 300 },
|
|
60
|
+
};
|
|
61
|
+
return { spec, reasoning: result.reasoning ?? '' };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.TriggerAnalystAgent = TriggerAnalystAgent;
|
|
65
|
+
//# sourceMappingURL=TriggerAnalystAgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriggerAnalystAgent.js","sourceRoot":"","sources":["../../../../src/workflow-design/agents/TriggerAnalystAgent.ts"],"names":[],"mappings":";;;AAAA,8DAAwD;AACxD,wEAAkE;AAGlE,+DAA+D;AAC/D,sBAAsB;AACtB,qEAAqE;AACrE,+DAA+D;AAE/D,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;CAmB1B,CAAC;AAEF,MAAa,mBAAmB;IACD;IAA7B,YAA6B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAExD,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,OAAkB;QAC9C,MAAM,MAAM,GAAG;YACb,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kBAAkB,EAAE;YACnD,8CAAoB,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC;SACnD,CAAC;QAEF,MAAM,QAAQ,GAAc;YAC1B,GAAG,OAAO;YACV;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,4FAA4F,MAAM,EAAE;aAC9G;SACF,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,oCAAe,CAAC,kBAAkB,CAAwB,KAAK,CAAC,CAAC;QAEhF,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAEO,oBAAoB,CAAC,MAA6B;QACxD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,IAAI,GAAoB;YAC5B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;YACtB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS;YACnC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE;YACxC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;SACrD,CAAC;QAEF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;IACrD,CAAC;CACF;AArCD,kDAqCC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { OctoAgentClient } from '../OctoAgentClient.js';
|
|
2
|
+
import type { Message, N8nWorkflow, ValidationResult } from '../types.js';
|
|
3
|
+
export declare class WorkflowValidatorAgent {
|
|
4
|
+
private readonly client;
|
|
5
|
+
constructor(client: OctoAgentClient);
|
|
6
|
+
validate(workflow: N8nWorkflow, history: Message[]): Promise<ValidationResult>;
|
|
7
|
+
private runLocalChecks;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=WorkflowValidatorAgent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowValidatorAgent.d.ts","sourceRoot":"","sources":["../../../../src/workflow-design/agents/WorkflowValidatorAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA4B1E,qBAAa,sBAAsB;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAE9C,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8BpF,OAAO,CAAC,cAAc;CA+DvB"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WorkflowValidatorAgent = void 0;
|
|
4
|
+
const OctoAgentClient_js_1 = require("../OctoAgentClient.js");
|
|
5
|
+
// ============================================================
|
|
6
|
+
// WorkflowValidatorAgent
|
|
7
|
+
// Validates the assembled n8n workflow JSON for structural correctness.
|
|
8
|
+
// Phase 5 — runs after Orchestrator assembles the final JSON.
|
|
9
|
+
// ============================================================
|
|
10
|
+
const SYSTEM_PROMPT = `You are an n8n workflow JSON validator.
|
|
11
|
+
You will receive a complete n8n workflow JSON object and must validate it.
|
|
12
|
+
|
|
13
|
+
Check for these issues:
|
|
14
|
+
1. Every node referenced in "connections" must exist in "nodes" (by name).
|
|
15
|
+
2. Every source node in connections must exist in "nodes".
|
|
16
|
+
3. All nodes must have a non-empty "type" field in the correct format (e.g. "n8n-nodes-base.xxx" or "@n8n/n8n-nodes-langchain.xxx").
|
|
17
|
+
4. All nodes must have a non-empty "name" field.
|
|
18
|
+
5. All nodes must have a valid "position" array of two numbers.
|
|
19
|
+
6. The workflow must have exactly one trigger node (a node whose type ends with "Trigger" or "Webhook" or is "n8n-nodes-base.manualTrigger").
|
|
20
|
+
7. No duplicate node names.
|
|
21
|
+
|
|
22
|
+
Respond with ONLY a JSON object inside a markdown json fence:
|
|
23
|
+
{
|
|
24
|
+
"valid": <true|false>,
|
|
25
|
+
"errors": ["<error message>", ...]
|
|
26
|
+
}
|
|
27
|
+
If valid, "errors" should be an empty array.
|
|
28
|
+
`;
|
|
29
|
+
class WorkflowValidatorAgent {
|
|
30
|
+
client;
|
|
31
|
+
constructor(client) {
|
|
32
|
+
this.client = client;
|
|
33
|
+
}
|
|
34
|
+
async validate(workflow, history) {
|
|
35
|
+
// Run structural checks locally first (fast, no LLM call needed for obvious errors)
|
|
36
|
+
const localErrors = this.runLocalChecks(workflow);
|
|
37
|
+
// Also ask the LLM for a higher-level semantic check
|
|
38
|
+
const workflowJson = JSON.stringify(workflow, null, 2);
|
|
39
|
+
const messages = [
|
|
40
|
+
...history,
|
|
41
|
+
{
|
|
42
|
+
role: 'user',
|
|
43
|
+
content: `Validate this n8n workflow JSON:\n\`\`\`json\n${workflowJson}\n\`\`\``,
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
let llmErrors = [];
|
|
47
|
+
try {
|
|
48
|
+
// Cache the validator system prompt — it's large and identical across all validation calls
|
|
49
|
+
const reply = await this.client.singleCall(messages, [{ type: 'text', text: SYSTEM_PROMPT, cache_control: { type: 'ephemeral' } }]);
|
|
50
|
+
const result = OctoAgentClient_js_1.OctoAgentClient.parseJsonFromReply(reply);
|
|
51
|
+
llmErrors = Array.isArray(result.errors) ? result.errors : [];
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// If LLM validation fails, fall back to local checks only
|
|
55
|
+
llmErrors = [];
|
|
56
|
+
}
|
|
57
|
+
const allErrors = [...new Set([...localErrors, ...llmErrors])];
|
|
58
|
+
return { valid: allErrors.length === 0, errors: allErrors };
|
|
59
|
+
}
|
|
60
|
+
runLocalChecks(workflow) {
|
|
61
|
+
const errors = [];
|
|
62
|
+
const nodeNames = new Set(workflow.nodes.map((n) => n.name));
|
|
63
|
+
const seenNames = new Set();
|
|
64
|
+
// Check duplicate names
|
|
65
|
+
for (const node of workflow.nodes) {
|
|
66
|
+
if (!node.name) {
|
|
67
|
+
errors.push(`Node with type "${node.type}" is missing a name.`);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (seenNames.has(node.name)) {
|
|
71
|
+
errors.push(`Duplicate node name: "${node.name}".`);
|
|
72
|
+
}
|
|
73
|
+
seenNames.add(node.name);
|
|
74
|
+
}
|
|
75
|
+
// Check node type format
|
|
76
|
+
for (const node of workflow.nodes) {
|
|
77
|
+
if (!node.type) {
|
|
78
|
+
errors.push(`Node "${node.name}" has no type.`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Check connections reference valid nodes
|
|
82
|
+
for (const [sourceName, outputMap] of Object.entries(workflow.connections)) {
|
|
83
|
+
if (!nodeNames.has(sourceName)) {
|
|
84
|
+
errors.push(`Connection source node "${sourceName}" does not exist in nodes array.`);
|
|
85
|
+
}
|
|
86
|
+
for (const outputConnections of Object.values(outputMap)) {
|
|
87
|
+
for (const connGroup of outputConnections) {
|
|
88
|
+
for (const conn of connGroup) {
|
|
89
|
+
if (!nodeNames.has(conn.node)) {
|
|
90
|
+
errors.push(`Connection target node "${conn.node}" does not exist in nodes array.`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Check node type format (must match n8n-nodes-base.xxx or @scope/pkg.xxx)
|
|
97
|
+
const validTypePattern = /^(@[^/]+\/[^.]+\.[a-zA-Z]|[a-zA-Z0-9-]+\.[a-zA-Z])/;
|
|
98
|
+
for (const node of workflow.nodes) {
|
|
99
|
+
if (node.type && !validTypePattern.test(node.type)) {
|
|
100
|
+
errors.push(`Node "${node.name}" has invalid type format: "${node.type}". Expected format: "n8n-nodes-base.xxx" or "@scope/pkg.xxx".`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Check exactly one trigger node (not zero, not multiple)
|
|
104
|
+
const triggerNodes = workflow.nodes.filter((n) => n.type.toLowerCase().includes('trigger') ||
|
|
105
|
+
n.type === 'n8n-nodes-base.webhook');
|
|
106
|
+
if (triggerNodes.length === 0) {
|
|
107
|
+
errors.push('Workflow has no trigger node.');
|
|
108
|
+
}
|
|
109
|
+
else if (triggerNodes.length > 1) {
|
|
110
|
+
const names = triggerNodes.map((n) => `"${n.name}"`).join(', ');
|
|
111
|
+
errors.push(`Workflow has multiple trigger nodes: ${names}. Only one trigger is allowed.`);
|
|
112
|
+
}
|
|
113
|
+
return errors;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.WorkflowValidatorAgent = WorkflowValidatorAgent;
|
|
117
|
+
//# sourceMappingURL=WorkflowValidatorAgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowValidatorAgent.js","sourceRoot":"","sources":["../../../../src/workflow-design/agents/WorkflowValidatorAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { OctoAgentClient } from './OctoAgentClient.js';
|
|
2
|
+
export { N8nNodeKnowledgeBase } from './N8nNodeKnowledgeBase.js';
|
|
3
|
+
export { WorkflowDesignOrchestrator } from './WorkflowDesignOrchestrator.js';
|
|
4
|
+
export { DocumentExtractorAgent } from './DocumentExtractorAgent.js';
|
|
5
|
+
export { TriggerAnalystAgent } from './agents/TriggerAnalystAgent.js';
|
|
6
|
+
export { ActionChainAgent } from './agents/ActionChainAgent.js';
|
|
7
|
+
export { LogicFlowAgent } from './agents/LogicFlowAgent.js';
|
|
8
|
+
export { CodeScriptAgent } from './agents/CodeScriptAgent.js';
|
|
9
|
+
export { WorkflowValidatorAgent } from './agents/WorkflowValidatorAgent.js';
|
|
10
|
+
export type { InvoiceData, InvoiceLineItem, ContractData, ContractParty, } from './DocumentExtractorAgent.js';
|
|
11
|
+
export type { Message, Tool, NodePosition, TriggerNodeSpec, ActionNodeSpec, LogicNodeSpec, N8nNode, N8nWorkflow, WorkflowDraft, ValidationResult, ModificationScope, ParsedModificationIntent, TriggerAnalysisResult, ActionChainResult, LogicFlowResult, CodeScriptResult, NodeCategory, NodeTemplate, ToolDefinition, AgentRunOptions, } from './types.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/workflow-design/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAGrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAG5E,YAAY,EACV,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,GACd,MAAM,6BAA6B,CAAC;AAErC,YAAY,EACV,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,eAAe,EACf,cAAc,EACd,aAAa,EACb,OAAO,EACP,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WorkflowValidatorAgent = exports.CodeScriptAgent = exports.LogicFlowAgent = exports.ActionChainAgent = exports.TriggerAnalystAgent = exports.DocumentExtractorAgent = exports.WorkflowDesignOrchestrator = exports.N8nNodeKnowledgeBase = exports.OctoAgentClient = void 0;
|
|
4
|
+
var OctoAgentClient_js_1 = require("./OctoAgentClient.js");
|
|
5
|
+
Object.defineProperty(exports, "OctoAgentClient", { enumerable: true, get: function () { return OctoAgentClient_js_1.OctoAgentClient; } });
|
|
6
|
+
var N8nNodeKnowledgeBase_js_1 = require("./N8nNodeKnowledgeBase.js");
|
|
7
|
+
Object.defineProperty(exports, "N8nNodeKnowledgeBase", { enumerable: true, get: function () { return N8nNodeKnowledgeBase_js_1.N8nNodeKnowledgeBase; } });
|
|
8
|
+
var WorkflowDesignOrchestrator_js_1 = require("./WorkflowDesignOrchestrator.js");
|
|
9
|
+
Object.defineProperty(exports, "WorkflowDesignOrchestrator", { enumerable: true, get: function () { return WorkflowDesignOrchestrator_js_1.WorkflowDesignOrchestrator; } });
|
|
10
|
+
var DocumentExtractorAgent_js_1 = require("./DocumentExtractorAgent.js");
|
|
11
|
+
Object.defineProperty(exports, "DocumentExtractorAgent", { enumerable: true, get: function () { return DocumentExtractorAgent_js_1.DocumentExtractorAgent; } });
|
|
12
|
+
// Sub-agents (exported for testing / custom composition)
|
|
13
|
+
var TriggerAnalystAgent_js_1 = require("./agents/TriggerAnalystAgent.js");
|
|
14
|
+
Object.defineProperty(exports, "TriggerAnalystAgent", { enumerable: true, get: function () { return TriggerAnalystAgent_js_1.TriggerAnalystAgent; } });
|
|
15
|
+
var ActionChainAgent_js_1 = require("./agents/ActionChainAgent.js");
|
|
16
|
+
Object.defineProperty(exports, "ActionChainAgent", { enumerable: true, get: function () { return ActionChainAgent_js_1.ActionChainAgent; } });
|
|
17
|
+
var LogicFlowAgent_js_1 = require("./agents/LogicFlowAgent.js");
|
|
18
|
+
Object.defineProperty(exports, "LogicFlowAgent", { enumerable: true, get: function () { return LogicFlowAgent_js_1.LogicFlowAgent; } });
|
|
19
|
+
var CodeScriptAgent_js_1 = require("./agents/CodeScriptAgent.js");
|
|
20
|
+
Object.defineProperty(exports, "CodeScriptAgent", { enumerable: true, get: function () { return CodeScriptAgent_js_1.CodeScriptAgent; } });
|
|
21
|
+
var WorkflowValidatorAgent_js_1 = require("./agents/WorkflowValidatorAgent.js");
|
|
22
|
+
Object.defineProperty(exports, "WorkflowValidatorAgent", { enumerable: true, get: function () { return WorkflowValidatorAgent_js_1.WorkflowValidatorAgent; } });
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/workflow-design/index.ts"],"names":[],"mappings":";;;AAAA,2DAAuD;AAA9C,qHAAA,eAAe,OAAA;AACxB,qEAAiE;AAAxD,+HAAA,oBAAoB,OAAA;AAC7B,iFAA6E;AAApE,2IAAA,0BAA0B,OAAA;AACnC,yEAAqE;AAA5D,mIAAA,sBAAsB,OAAA;AAE/B,yDAAyD;AACzD,0EAAsE;AAA7D,6HAAA,mBAAmB,OAAA;AAC5B,oEAAgE;AAAvD,uHAAA,gBAAgB,OAAA;AACzB,gEAA4D;AAAnD,mHAAA,cAAc,OAAA;AACvB,kEAA8D;AAArD,qHAAA,eAAe,OAAA;AACxB,gFAA4E;AAAnE,mIAAA,sBAAsB,OAAA"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
export interface Message {
|
|
2
|
+
role: 'user' | 'assistant' | 'system';
|
|
3
|
+
content: string;
|
|
4
|
+
}
|
|
5
|
+
export interface Tool {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
parameters: Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
export interface NodePosition {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
}
|
|
14
|
+
export interface TriggerNodeSpec {
|
|
15
|
+
/** n8n node type string, e.g. 'n8n-nodes-base.scheduleTrigger' */
|
|
16
|
+
type: string;
|
|
17
|
+
/** Human-readable name shown in editor */
|
|
18
|
+
name: string;
|
|
19
|
+
parameters: Record<string, unknown>;
|
|
20
|
+
position: NodePosition;
|
|
21
|
+
}
|
|
22
|
+
export interface ActionNodeSpec {
|
|
23
|
+
type: string;
|
|
24
|
+
name: string;
|
|
25
|
+
parameters: Record<string, unknown>;
|
|
26
|
+
position: NodePosition;
|
|
27
|
+
/** id of the upstream node this action depends on */
|
|
28
|
+
dependsOn?: string;
|
|
29
|
+
/** marks this node as needing code generation */
|
|
30
|
+
needsCodeGen?: boolean;
|
|
31
|
+
/** description for CodeScriptAgent when needsCodeGen = true */
|
|
32
|
+
codeDescription?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface LogicNodeSpec {
|
|
35
|
+
type: string;
|
|
36
|
+
name: string;
|
|
37
|
+
parameters: Record<string, unknown>;
|
|
38
|
+
position: NodePosition;
|
|
39
|
+
/** index in actionSpecs after which this logic node is inserted */
|
|
40
|
+
insertAfterIndex: number;
|
|
41
|
+
/** condition expression for IF/Switch nodes */
|
|
42
|
+
condition?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface N8nNodeConnection {
|
|
45
|
+
node: string;
|
|
46
|
+
type: string;
|
|
47
|
+
index: number;
|
|
48
|
+
}
|
|
49
|
+
export interface N8nNode {
|
|
50
|
+
id: string;
|
|
51
|
+
name: string;
|
|
52
|
+
type: string;
|
|
53
|
+
typeVersion: number;
|
|
54
|
+
position: [number, number];
|
|
55
|
+
parameters: Record<string, unknown>;
|
|
56
|
+
}
|
|
57
|
+
export interface N8nWorkflow {
|
|
58
|
+
name: string;
|
|
59
|
+
nodes: N8nNode[];
|
|
60
|
+
connections: Record<string, {
|
|
61
|
+
main: Array<Array<{
|
|
62
|
+
node: string;
|
|
63
|
+
type: string;
|
|
64
|
+
index: number;
|
|
65
|
+
}>>;
|
|
66
|
+
}>;
|
|
67
|
+
active: boolean;
|
|
68
|
+
settings: Record<string, unknown>;
|
|
69
|
+
}
|
|
70
|
+
export interface WorkflowDraft {
|
|
71
|
+
intent: string;
|
|
72
|
+
conversationHistory: Message[];
|
|
73
|
+
triggerSpec?: TriggerNodeSpec;
|
|
74
|
+
actionSpecs?: ActionNodeSpec[];
|
|
75
|
+
logicSpecs?: LogicNodeSpec[];
|
|
76
|
+
/** nodeId → generated code snippet */
|
|
77
|
+
codeSpecs?: Record<string, string>;
|
|
78
|
+
validationErrors?: string[];
|
|
79
|
+
finalWorkflow?: N8nWorkflow;
|
|
80
|
+
}
|
|
81
|
+
export interface ValidationResult {
|
|
82
|
+
valid: boolean;
|
|
83
|
+
errors: string[];
|
|
84
|
+
}
|
|
85
|
+
export type ModificationScope = 'trigger' | 'actions' | 'logic' | 'code' | 'all';
|
|
86
|
+
export interface ParsedModificationIntent {
|
|
87
|
+
scope: ModificationScope;
|
|
88
|
+
description: string;
|
|
89
|
+
}
|
|
90
|
+
export interface TriggerAnalysisResult {
|
|
91
|
+
spec: TriggerNodeSpec;
|
|
92
|
+
reasoning: string;
|
|
93
|
+
}
|
|
94
|
+
export interface ActionChainResult {
|
|
95
|
+
specs: ActionNodeSpec[];
|
|
96
|
+
reasoning: string;
|
|
97
|
+
}
|
|
98
|
+
export interface LogicFlowResult {
|
|
99
|
+
specs: LogicNodeSpec[];
|
|
100
|
+
reasoning: string;
|
|
101
|
+
}
|
|
102
|
+
export interface CodeScriptResult {
|
|
103
|
+
/** nodeId → code */
|
|
104
|
+
codes: Record<string, string>;
|
|
105
|
+
}
|
|
106
|
+
/** A text content block marked for Anthropic prompt caching. */
|
|
107
|
+
export interface CachedTextBlock {
|
|
108
|
+
type: 'text';
|
|
109
|
+
text: string;
|
|
110
|
+
cache_control: {
|
|
111
|
+
type: 'ephemeral';
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/** System content accepted by OctoAgentClient — plain string or cached blocks. */
|
|
115
|
+
export type SystemContent = string | Array<{
|
|
116
|
+
type: 'text';
|
|
117
|
+
text: string;
|
|
118
|
+
cache_control?: {
|
|
119
|
+
type: 'ephemeral';
|
|
120
|
+
};
|
|
121
|
+
}>;
|
|
122
|
+
export type NodeCategory = 'trigger' | 'http' | 'data' | 'control' | 'notification' | 'database' | 'file' | 'ai';
|
|
123
|
+
export interface NodeTemplate {
|
|
124
|
+
type: string;
|
|
125
|
+
displayName: string;
|
|
126
|
+
category: NodeCategory;
|
|
127
|
+
/** Core parameter names users usually configure */
|
|
128
|
+
coreParams: string[];
|
|
129
|
+
/** Short description for prompts */
|
|
130
|
+
description: string;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* A tool that the agent can call during an agent loop.
|
|
134
|
+
* The `execute` function receives parsed JSON arguments and returns a string result.
|
|
135
|
+
*/
|
|
136
|
+
export interface ToolDefinition {
|
|
137
|
+
name: string;
|
|
138
|
+
description: string;
|
|
139
|
+
/** JSON Schema for the tool's input parameters. */
|
|
140
|
+
parameters: Record<string, unknown>;
|
|
141
|
+
execute: (args: unknown) => Promise<string>;
|
|
142
|
+
}
|
|
143
|
+
/** Options for running a full agent loop with optional tool use. */
|
|
144
|
+
export interface AgentRunOptions {
|
|
145
|
+
systemPrompt: string;
|
|
146
|
+
userMessage: string;
|
|
147
|
+
tools?: ToolDefinition[];
|
|
148
|
+
/** Maximum number of LLM rounds (default 10). Prevents infinite loops. */
|
|
149
|
+
maxRounds?: number;
|
|
150
|
+
/** Timeout in ms for the entire run (default 300 000 ms = 5 min). */
|
|
151
|
+
timeoutMs?: number;
|
|
152
|
+
/** Called with each text chunk emitted by the assistant. */
|
|
153
|
+
onChunk?: (chunk: string) => void;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/workflow-design/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Shared message types
|
|
4
|
+
// ============================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
//# sourceMappingURL=types.js.map
|