agent-orcha 0.0.5 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +250 -1275
- package/dist/lib/agents/agent-executor.d.ts +4 -2
- package/dist/lib/agents/agent-executor.d.ts.map +1 -1
- package/dist/lib/agents/agent-executor.js +85 -53
- package/dist/lib/agents/agent-executor.js.map +1 -1
- package/dist/lib/agents/agent-loader.d.ts +3 -0
- package/dist/lib/agents/agent-loader.d.ts.map +1 -1
- package/dist/lib/agents/agent-loader.js +10 -1
- package/dist/lib/agents/agent-loader.js.map +1 -1
- package/dist/lib/agents/react-loop.d.ts.map +1 -1
- package/dist/lib/agents/react-loop.js +207 -142
- package/dist/lib/agents/react-loop.js.map +1 -1
- package/dist/lib/agents/types.d.ts +181 -18
- package/dist/lib/agents/types.d.ts.map +1 -1
- package/dist/lib/agents/types.js +18 -2
- package/dist/lib/agents/types.js.map +1 -1
- package/dist/lib/functions/function-loader.d.ts +2 -0
- package/dist/lib/functions/function-loader.d.ts.map +1 -1
- package/dist/lib/functions/function-loader.js +10 -0
- package/dist/lib/functions/function-loader.js.map +1 -1
- package/dist/lib/functions/simple-function-wrapper.js +3 -3
- package/dist/lib/functions/simple-function-wrapper.js.map +1 -1
- package/dist/lib/integrations/email.d.ts +38 -0
- package/dist/lib/integrations/email.d.ts.map +1 -0
- package/dist/lib/integrations/email.js +249 -0
- package/dist/lib/integrations/email.js.map +1 -0
- package/dist/lib/integrations/integration-manager.d.ts +5 -0
- package/dist/lib/integrations/integration-manager.d.ts.map +1 -1
- package/dist/lib/integrations/integration-manager.js +53 -3
- package/dist/lib/integrations/integration-manager.js.map +1 -1
- package/dist/lib/integrations/types.d.ts +187 -4
- package/dist/lib/integrations/types.d.ts.map +1 -1
- package/dist/lib/integrations/types.js +24 -1
- package/dist/lib/integrations/types.js.map +1 -1
- package/dist/lib/knowledge/knowledge-store.d.ts +7 -1
- package/dist/lib/knowledge/knowledge-store.d.ts.map +1 -1
- package/dist/lib/knowledge/knowledge-store.js +96 -8
- package/dist/lib/knowledge/knowledge-store.js.map +1 -1
- package/dist/lib/knowledge/loaders/file-loaders.d.ts +8 -3
- package/dist/lib/knowledge/loaders/file-loaders.d.ts.map +1 -1
- package/dist/lib/knowledge/loaders/file-loaders.js +96 -75
- package/dist/lib/knowledge/loaders/file-loaders.js.map +1 -1
- package/dist/lib/knowledge/loaders/web-loader.d.ts +12 -3
- package/dist/lib/knowledge/loaders/web-loader.d.ts.map +1 -1
- package/dist/lib/knowledge/loaders/web-loader.js +56 -22
- package/dist/lib/knowledge/loaders/web-loader.js.map +1 -1
- package/dist/lib/knowledge/sqlite-store.d.ts.map +1 -1
- package/dist/lib/knowledge/sqlite-store.js +19 -10
- package/dist/lib/knowledge/sqlite-store.js.map +1 -1
- package/dist/lib/knowledge/types.d.ts +69 -33
- package/dist/lib/knowledge/types.d.ts.map +1 -1
- package/dist/lib/knowledge/types.js +18 -3
- package/dist/lib/knowledge/types.js.map +1 -1
- package/dist/lib/llm/index.d.ts +1 -1
- package/dist/lib/llm/index.d.ts.map +1 -1
- package/dist/lib/llm/index.js +1 -1
- package/dist/lib/llm/index.js.map +1 -1
- package/dist/lib/llm/llm-call-logger.d.ts +3 -1
- package/dist/lib/llm/llm-call-logger.d.ts.map +1 -1
- package/dist/lib/llm/llm-call-logger.js +31 -26
- package/dist/lib/llm/llm-call-logger.js.map +1 -1
- package/dist/lib/llm/llm-config.d.ts +59 -8
- package/dist/lib/llm/llm-config.d.ts.map +1 -1
- package/dist/lib/llm/llm-config.js +163 -17
- package/dist/lib/llm/llm-config.js.map +1 -1
- package/dist/lib/llm/llm-factory.d.ts +1 -2
- package/dist/lib/llm/llm-factory.d.ts.map +1 -1
- package/dist/lib/llm/llm-factory.js +44 -8
- package/dist/lib/llm/llm-factory.js.map +1 -1
- package/dist/lib/llm/providers/anthropic-chat-model.d.ts +5 -1
- package/dist/lib/llm/providers/anthropic-chat-model.d.ts.map +1 -1
- package/dist/lib/llm/providers/anthropic-chat-model.js +118 -42
- package/dist/lib/llm/providers/anthropic-chat-model.js.map +1 -1
- package/dist/lib/llm/providers/gemini-chat-model.d.ts +3 -2
- package/dist/lib/llm/providers/gemini-chat-model.d.ts.map +1 -1
- package/dist/lib/llm/providers/gemini-chat-model.js +83 -24
- package/dist/lib/llm/providers/gemini-chat-model.js.map +1 -1
- package/dist/lib/llm/providers/openai-chat-model.d.ts +20 -1
- package/dist/lib/llm/providers/openai-chat-model.d.ts.map +1 -1
- package/dist/lib/llm/providers/openai-chat-model.js +265 -32
- package/dist/lib/llm/providers/openai-chat-model.js.map +1 -1
- package/dist/lib/llm/providers/openai-embeddings.d.ts.map +1 -1
- package/dist/lib/llm/providers/openai-embeddings.js +41 -10
- package/dist/lib/llm/providers/openai-embeddings.js.map +1 -1
- package/dist/lib/local-llm/binary-manager.d.ts +66 -0
- package/dist/lib/local-llm/binary-manager.d.ts.map +1 -0
- package/dist/lib/local-llm/binary-manager.js +441 -0
- package/dist/lib/local-llm/binary-manager.js.map +1 -0
- package/dist/lib/local-llm/engine-interface.d.ts +47 -0
- package/dist/lib/local-llm/engine-interface.d.ts.map +1 -0
- package/dist/lib/local-llm/engine-interface.js +2 -0
- package/dist/lib/local-llm/engine-interface.js.map +1 -0
- package/dist/lib/local-llm/engine-registry.d.ts +20 -0
- package/dist/lib/local-llm/engine-registry.d.ts.map +1 -0
- package/dist/lib/local-llm/engine-registry.js +56 -0
- package/dist/lib/local-llm/engine-registry.js.map +1 -0
- package/dist/lib/local-llm/engines/llama-cpp-engine.d.ts +31 -0
- package/dist/lib/local-llm/engines/llama-cpp-engine.d.ts.map +1 -0
- package/dist/lib/local-llm/engines/llama-cpp-engine.js +164 -0
- package/dist/lib/local-llm/engines/llama-cpp-engine.js.map +1 -0
- package/dist/lib/local-llm/engines/mlx-serve-engine.d.ts +31 -0
- package/dist/lib/local-llm/engines/mlx-serve-engine.d.ts.map +1 -0
- package/dist/lib/local-llm/engines/mlx-serve-engine.js +161 -0
- package/dist/lib/local-llm/engines/mlx-serve-engine.js.map +1 -0
- package/dist/lib/local-llm/gguf-reader.d.ts +20 -0
- package/dist/lib/local-llm/gguf-reader.d.ts.map +1 -0
- package/dist/lib/local-llm/gguf-reader.js +190 -0
- package/dist/lib/local-llm/gguf-reader.js.map +1 -0
- package/dist/lib/local-llm/index.d.ts +9 -0
- package/dist/lib/local-llm/index.d.ts.map +1 -0
- package/dist/lib/local-llm/index.js +6 -0
- package/dist/lib/local-llm/index.js.map +1 -0
- package/dist/lib/local-llm/llama-server-process.d.ts +42 -0
- package/dist/lib/local-llm/llama-server-process.d.ts.map +1 -0
- package/dist/lib/local-llm/llama-server-process.js +237 -0
- package/dist/lib/local-llm/llama-server-process.js.map +1 -0
- package/dist/lib/local-llm/mlx-binary-manager.d.ts +33 -0
- package/dist/lib/local-llm/mlx-binary-manager.d.ts.map +1 -0
- package/dist/lib/local-llm/mlx-binary-manager.js +211 -0
- package/dist/lib/local-llm/mlx-binary-manager.js.map +1 -0
- package/dist/lib/local-llm/mlx-server-process.d.ts +26 -0
- package/dist/lib/local-llm/mlx-server-process.d.ts.map +1 -0
- package/dist/lib/local-llm/mlx-server-process.js +210 -0
- package/dist/lib/local-llm/mlx-server-process.js.map +1 -0
- package/dist/lib/local-llm/model-manager.d.ts +33 -0
- package/dist/lib/local-llm/model-manager.d.ts.map +1 -0
- package/dist/lib/local-llm/model-manager.js +591 -0
- package/dist/lib/local-llm/model-manager.js.map +1 -0
- package/dist/lib/local-llm/types.d.ts +51 -0
- package/dist/lib/local-llm/types.d.ts.map +1 -0
- package/dist/lib/local-llm/types.js +2 -0
- package/dist/lib/local-llm/types.js.map +1 -0
- package/dist/lib/logger.d.ts +2 -0
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +68 -6
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/mcp/mcp-client.d.ts.map +1 -1
- package/dist/lib/mcp/mcp-client.js +5 -3
- package/dist/lib/mcp/mcp-client.js.map +1 -1
- package/dist/lib/mcp/types.d.ts +0 -9
- package/dist/lib/mcp/types.d.ts.map +1 -1
- package/dist/lib/mcp/types.js +1 -2
- package/dist/lib/mcp/types.js.map +1 -1
- package/dist/lib/memory/memory-manager.d.ts +1 -0
- package/dist/lib/memory/memory-manager.d.ts.map +1 -1
- package/dist/lib/memory/memory-manager.js +9 -0
- package/dist/lib/memory/memory-manager.js.map +1 -1
- package/dist/lib/orchestrator.d.ts +11 -8
- package/dist/lib/orchestrator.d.ts.map +1 -1
- package/dist/lib/orchestrator.js +246 -5
- package/dist/lib/orchestrator.js.map +1 -1
- package/dist/lib/sandbox/cdp-client.d.ts +15 -0
- package/dist/lib/sandbox/cdp-client.d.ts.map +1 -0
- package/dist/lib/sandbox/cdp-client.js +139 -0
- package/dist/lib/sandbox/cdp-client.js.map +1 -0
- package/dist/lib/sandbox/html-to-markdown.d.ts +9 -1
- package/dist/lib/sandbox/html-to-markdown.d.ts.map +1 -1
- package/dist/lib/sandbox/html-to-markdown.js +67 -10
- package/dist/lib/sandbox/html-to-markdown.js.map +1 -1
- package/dist/lib/sandbox/index.d.ts +6 -0
- package/dist/lib/sandbox/index.d.ts.map +1 -1
- package/dist/lib/sandbox/index.js +5 -0
- package/dist/lib/sandbox/index.js.map +1 -1
- package/dist/lib/sandbox/page-readiness.d.ts +37 -0
- package/dist/lib/sandbox/page-readiness.d.ts.map +1 -0
- package/dist/lib/sandbox/page-readiness.js +268 -0
- package/dist/lib/sandbox/page-readiness.js.map +1 -0
- package/dist/lib/sandbox/sandbox-browser.d.ts +4 -0
- package/dist/lib/sandbox/sandbox-browser.d.ts.map +1 -0
- package/dist/lib/sandbox/sandbox-browser.js +316 -0
- package/dist/lib/sandbox/sandbox-browser.js.map +1 -0
- package/dist/lib/sandbox/sandbox-container.d.ts +39 -0
- package/dist/lib/sandbox/sandbox-container.d.ts.map +1 -0
- package/dist/lib/sandbox/sandbox-container.js +176 -0
- package/dist/lib/sandbox/sandbox-container.js.map +1 -0
- package/dist/lib/sandbox/sandbox-file.d.ts +4 -0
- package/dist/lib/sandbox/sandbox-file.d.ts.map +1 -0
- package/dist/lib/sandbox/sandbox-file.js +169 -0
- package/dist/lib/sandbox/sandbox-file.js.map +1 -0
- package/dist/lib/sandbox/sandbox-shell.d.ts +5 -0
- package/dist/lib/sandbox/sandbox-shell.d.ts.map +1 -0
- package/dist/lib/sandbox/sandbox-shell.js +111 -0
- package/dist/lib/sandbox/sandbox-shell.js.map +1 -0
- package/dist/lib/sandbox/sandbox-web.d.ts.map +1 -1
- package/dist/lib/sandbox/sandbox-web.js +64 -24
- package/dist/lib/sandbox/sandbox-web.js.map +1 -1
- package/dist/lib/sandbox/types.d.ts +9 -0
- package/dist/lib/sandbox/types.d.ts.map +1 -1
- package/dist/lib/sandbox/types.js +1 -0
- package/dist/lib/sandbox/types.js.map +1 -1
- package/dist/lib/sandbox/vision-browser.d.ts +4 -0
- package/dist/lib/sandbox/vision-browser.d.ts.map +1 -0
- package/dist/lib/sandbox/vision-browser.js +298 -0
- package/dist/lib/sandbox/vision-browser.js.map +1 -0
- package/dist/lib/sea/app-window.d.ts +7 -0
- package/dist/lib/sea/app-window.d.ts.map +1 -0
- package/dist/lib/sea/app-window.js +95 -0
- package/dist/lib/sea/app-window.js.map +1 -0
- package/dist/lib/sea/bootstrap.d.ts +18 -0
- package/dist/lib/sea/bootstrap.d.ts.map +1 -0
- package/dist/lib/sea/bootstrap.js +103 -0
- package/dist/lib/sea/bootstrap.js.map +1 -0
- package/dist/lib/sea/sqlite-vec-shim.d.ts +3 -0
- package/dist/lib/sea/sqlite-vec-shim.d.ts.map +1 -0
- package/dist/lib/sea/sqlite-vec-shim.js +10 -0
- package/dist/lib/sea/sqlite-vec-shim.js.map +1 -0
- package/dist/lib/skills/skill-loader.d.ts +2 -0
- package/dist/lib/skills/skill-loader.d.ts.map +1 -1
- package/dist/lib/skills/skill-loader.js +12 -1
- package/dist/lib/skills/skill-loader.js.map +1 -1
- package/dist/lib/tasks/task-manager.d.ts +3 -1
- package/dist/lib/tasks/task-manager.d.ts.map +1 -1
- package/dist/lib/tasks/task-manager.js +11 -0
- package/dist/lib/tasks/task-manager.js.map +1 -1
- package/dist/lib/tasks/task-store.d.ts +1 -1
- package/dist/lib/tasks/task-store.d.ts.map +1 -1
- package/dist/lib/tasks/task-store.js.map +1 -1
- package/dist/lib/tasks/types.d.ts +18 -0
- package/dist/lib/tasks/types.d.ts.map +1 -1
- package/dist/lib/tools/built-in/integration-tools.d.ts +4 -0
- package/dist/lib/tools/built-in/integration-tools.d.ts.map +1 -0
- package/dist/lib/tools/built-in/integration-tools.js +47 -0
- package/dist/lib/tools/built-in/integration-tools.js.map +1 -0
- package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts +1 -2
- package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts.map +1 -1
- package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js +17 -17
- package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-graph-schema.tool.d.ts.map +1 -1
- package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js +2 -4
- package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-search.tool.js +4 -4
- package/dist/lib/tools/built-in/knowledge-search.tool.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-sql.tool.d.ts.map +1 -1
- package/dist/lib/tools/built-in/knowledge-sql.tool.js +74 -40
- package/dist/lib/tools/built-in/knowledge-sql.tool.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-tools-factory.js +2 -2
- package/dist/lib/tools/built-in/knowledge-tools-factory.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts +1 -2
- package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts.map +1 -1
- package/dist/lib/tools/built-in/knowledge-traverse.tool.js +5 -11
- package/dist/lib/tools/built-in/knowledge-traverse.tool.js.map +1 -1
- package/dist/lib/tools/built-in/query-validators.d.ts.map +1 -1
- package/dist/lib/tools/built-in/query-validators.js +4 -0
- package/dist/lib/tools/built-in/query-validators.js.map +1 -1
- package/dist/lib/tools/workspace/workspace-tools.d.ts +1 -0
- package/dist/lib/tools/workspace/workspace-tools.d.ts.map +1 -1
- package/dist/lib/tools/workspace/workspace-tools.js +44 -4
- package/dist/lib/tools/workspace/workspace-tools.js.map +1 -1
- package/dist/lib/triggers/cron-trigger.d.ts +1 -1
- package/dist/lib/triggers/cron-trigger.d.ts.map +1 -1
- package/dist/lib/triggers/cron-trigger.js.map +1 -1
- package/dist/lib/triggers/trigger-manager.d.ts +1 -0
- package/dist/lib/triggers/trigger-manager.d.ts.map +1 -1
- package/dist/lib/triggers/trigger-manager.js +26 -0
- package/dist/lib/triggers/trigger-manager.js.map +1 -1
- package/dist/lib/triggers/webhook-trigger.d.ts +1 -1
- package/dist/lib/triggers/webhook-trigger.d.ts.map +1 -1
- package/dist/lib/triggers/webhook-trigger.js.map +1 -1
- package/dist/lib/types/llm-types.d.ts +22 -4
- package/dist/lib/types/llm-types.d.ts.map +1 -1
- package/dist/lib/types/llm-types.js +50 -0
- package/dist/lib/types/llm-types.js.map +1 -1
- package/dist/lib/types/tool-factory.d.ts +2 -2
- package/dist/lib/types/tool-factory.d.ts.map +1 -1
- package/dist/lib/types/tool-factory.js +9 -2
- package/dist/lib/types/tool-factory.js.map +1 -1
- package/dist/lib/utils/document-extract.d.ts +10 -0
- package/dist/lib/utils/document-extract.d.ts.map +1 -0
- package/dist/lib/utils/document-extract.js +149 -0
- package/dist/lib/utils/document-extract.js.map +1 -0
- package/dist/lib/utils/env-substitution.d.ts +6 -0
- package/dist/lib/utils/env-substitution.d.ts.map +1 -0
- package/dist/lib/utils/env-substitution.js +15 -0
- package/dist/lib/utils/env-substitution.js.map +1 -0
- package/dist/lib/workflows/react-workflow-executor.d.ts.map +1 -1
- package/dist/lib/workflows/react-workflow-executor.js +23 -17
- package/dist/lib/workflows/react-workflow-executor.js.map +1 -1
- package/dist/lib/workflows/types.d.ts +81 -55
- package/dist/lib/workflows/types.d.ts.map +1 -1
- package/dist/lib/workflows/types.js +10 -0
- package/dist/lib/workflows/types.js.map +1 -1
- package/dist/lib/workflows/workflow-loader.d.ts +3 -0
- package/dist/lib/workflows/workflow-loader.d.ts.map +1 -1
- package/dist/lib/workflows/workflow-loader.js +10 -1
- package/dist/lib/workflows/workflow-loader.js.map +1 -1
- package/dist/public/assets/logo.png +0 -0
- package/dist/public/chat.html +39 -0
- package/dist/public/index.html +6 -176
- package/dist/public/src/components/AgentComposer.js +807 -0
- package/dist/public/src/components/AgentsView.js +1812 -508
- package/dist/public/src/components/AppRoot.js +125 -38
- package/dist/public/src/components/GraphView.js +382 -300
- package/dist/public/src/components/IdeView.js +277 -86
- package/dist/public/src/components/KnowledgeView.js +94 -130
- package/dist/public/src/components/LlmView.js +15 -19
- package/dist/public/src/components/LocalLlmView.js +2440 -0
- package/dist/public/src/components/LogViewer.js +155 -0
- package/dist/public/src/components/McpView.js +41 -49
- package/dist/public/src/components/MonitorView.js +174 -83
- package/dist/public/src/components/NavBar.js +16 -26
- package/dist/public/src/components/StandaloneChat.js +875 -0
- package/dist/public/src/services/ApiService.js +203 -4
- package/dist/public/src/services/SessionStore.js +86 -0
- package/dist/public/src/services/StreamManager.js +183 -0
- package/dist/public/src/store.js +1 -3
- package/dist/public/src/utils/card.js +21 -0
- package/dist/public/src/utils/markdown.js +7 -0
- package/dist/public/styles.css +2777 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +7 -1
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/start.d.ts.map +1 -1
- package/dist/src/cli/commands/start.js +28 -5
- package/dist/src/cli/commands/start.js.map +1 -1
- package/dist/src/cli/index.js +19 -5
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/index.js +7 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/middleware/auth.d.ts.map +1 -1
- package/dist/src/middleware/auth.js +28 -6
- package/dist/src/middleware/auth.js.map +1 -1
- package/dist/src/middleware/rate-limit.d.ts +8 -0
- package/dist/src/middleware/rate-limit.d.ts.map +1 -0
- package/dist/src/middleware/rate-limit.js +21 -0
- package/dist/src/middleware/rate-limit.js.map +1 -0
- package/dist/src/routes/agents.route.d.ts.map +1 -1
- package/dist/src/routes/agents.route.js +138 -10
- package/dist/src/routes/agents.route.js.map +1 -1
- package/dist/src/routes/chat.route.d.ts +3 -0
- package/dist/src/routes/chat.route.d.ts.map +1 -0
- package/dist/src/routes/chat.route.js +156 -0
- package/dist/src/routes/chat.route.js.map +1 -0
- package/dist/src/routes/files.route.d.ts.map +1 -1
- package/dist/src/routes/files.route.js +37 -2
- package/dist/src/routes/files.route.js.map +1 -1
- package/dist/src/routes/llm.route.d.ts.map +1 -1
- package/dist/src/routes/llm.route.js +263 -8
- package/dist/src/routes/llm.route.js.map +1 -1
- package/dist/src/routes/local-llm.route.d.ts +3 -0
- package/dist/src/routes/local-llm.route.d.ts.map +1 -0
- package/dist/src/routes/local-llm.route.js +688 -0
- package/dist/src/routes/local-llm.route.js.map +1 -0
- package/dist/src/routes/logs.route.d.ts +3 -0
- package/dist/src/routes/logs.route.d.ts.map +1 -0
- package/dist/src/routes/logs.route.js +24 -0
- package/dist/src/routes/logs.route.js.map +1 -0
- package/dist/src/routes/tasks.route.d.ts.map +1 -1
- package/dist/src/routes/tasks.route.js +15 -1
- package/dist/src/routes/tasks.route.js.map +1 -1
- package/dist/src/routes/vnc.route.d.ts +12 -0
- package/dist/src/routes/vnc.route.d.ts.map +1 -0
- package/dist/src/routes/vnc.route.js +74 -0
- package/dist/src/routes/vnc.route.js.map +1 -0
- package/dist/src/routes/workflows.route.d.ts.map +1 -1
- package/dist/src/routes/workflows.route.js +24 -0
- package/dist/src/routes/workflows.route.js.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +29 -3
- package/dist/src/server.js.map +1 -1
- package/dist/templates/Demo.md +152 -0
- package/dist/templates/README.md +12 -3
- package/dist/templates/agents/actor.agent.yaml +34 -0
- package/dist/templates/agents/architect.agent.yaml +20 -13
- package/dist/templates/agents/chatbot.agent.yaml +23 -27
- package/dist/templates/agents/corporate.agent.yaml +64 -0
- package/dist/templates/agents/functions.agent.yaml +29 -0
- package/dist/templates/agents/investment-analyst.agent.yaml +79 -0
- package/dist/templates/agents/music-librarian.agent.yaml +46 -0
- package/dist/templates/agents/network-security.agent.yaml +81 -0
- package/dist/templates/agents/transport-security.agent.yaml +69 -0
- package/dist/templates/agents/web-engineer.agent.yaml +98 -0
- package/dist/templates/agents/web-pilot.agent.yaml +57 -0
- package/dist/templates/knowledge/music-store/LICENSE.md +11 -0
- package/dist/templates/knowledge/music-store/musicstore.sqlite +0 -0
- package/dist/templates/knowledge/music-store/tables.png +0 -0
- package/dist/templates/knowledge/music-store.knowledge.yaml +138 -0
- package/dist/templates/knowledge/org-chart/personnel.csv +21 -21
- package/dist/templates/knowledge/org-chart.knowledge.yaml +4 -0
- package/dist/templates/knowledge/patient-records.knowledge.yaml +20 -0
- package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_0.pdf +0 -0
- package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_1.pdf +0 -0
- package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_10.pdf +0 -0
- package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_11.pdf +0 -0
- package/dist/templates/knowledge/pet-store.knowledge.yaml +3 -0
- package/dist/templates/knowledge/security-incidents/incidents.json +55935 -0
- package/dist/templates/knowledge/security-incidents.knowledge.yaml +46 -0
- package/dist/templates/knowledge/{example.knowledge.yaml → transcripts.knowledge.yaml} +9 -5
- package/dist/templates/knowledge/transport-ot/systems.csv +117 -0
- package/dist/templates/knowledge/transport-ot.knowledge.yaml +55 -0
- package/dist/templates/knowledge/web-docs.knowledge.yaml +1 -1
- package/dist/templates/llm.json +62 -22
- package/dist/templates/mcp.json +7 -4
- package/dist/templates/skills/orcha-builder/SKILL.md +148 -215
- package/dist/templates/skills/pii-guard/SKILL.md +22 -0
- package/dist/templates/skills/sandbox/SKILL.md +25 -48
- package/dist/templates/skills/web-pilot/SKILL.md +51 -0
- package/dist/templates/workflows/example.workflow.yaml +27 -35
- package/dist/templates/workflows/react-example.workflow.yaml +14 -19
- package/dist/templates/workflows/team-chat.workflow.yaml +47 -0
- package/package.json +17 -4
- package/dist/public/src/components/SkillsView.js +0 -137
- package/dist/public/src/components/WorkflowsView.js +0 -416
- package/dist/templates/agents/knowledge-broker.agent.yaml +0 -39
- package/dist/templates/agents/sandbox.agent.yaml +0 -56
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
|
|
2
2
|
import { Component } from '../utils/Component.js';
|
|
3
3
|
import { api } from '../services/ApiService.js';
|
|
4
|
+
import './AgentComposer.js';
|
|
4
5
|
|
|
5
6
|
const FILE_ICONS = {
|
|
6
|
-
yaml: { icon: 'fa-file-code', color: 'text-orange
|
|
7
|
-
yml: { icon: 'fa-file-code', color: 'text-orange
|
|
8
|
-
json: { icon: 'fa-file-code', color: 'text-yellow
|
|
9
|
-
js: { icon: 'fa-file-code', color: 'text-yellow
|
|
10
|
-
ts: { icon: 'fa-file-code', color: 'text-yellow
|
|
11
|
-
txt: { icon: 'fa-file-lines', color: 'text-
|
|
12
|
-
md: { icon: 'fa-file-lines', color: 'text-blue
|
|
13
|
-
default: { icon: 'fa-file', color: 'text-
|
|
7
|
+
yaml: { icon: 'fa-file-code', color: 'text-orange' },
|
|
8
|
+
yml: { icon: 'fa-file-code', color: 'text-orange' },
|
|
9
|
+
json: { icon: 'fa-file-code', color: 'text-yellow' },
|
|
10
|
+
js: { icon: 'fa-file-code', color: 'text-yellow' },
|
|
11
|
+
ts: { icon: 'fa-file-code', color: 'text-yellow' },
|
|
12
|
+
txt: { icon: 'fa-file-lines', color: 'text-secondary' },
|
|
13
|
+
md: { icon: 'fa-file-lines', color: 'text-blue' },
|
|
14
|
+
default: { icon: 'fa-file', color: 'text-muted' },
|
|
14
15
|
};
|
|
15
16
|
|
|
16
17
|
const ACE_MODES = {
|
|
@@ -27,35 +28,35 @@ const RESOURCE_TYPES = {
|
|
|
27
28
|
agent: {
|
|
28
29
|
label: 'Agent',
|
|
29
30
|
icon: 'fa-robot',
|
|
30
|
-
color: 'text-blue
|
|
31
|
+
color: 'text-blue',
|
|
31
32
|
folder: 'agents/',
|
|
32
33
|
suffix: '.agent.yaml',
|
|
33
34
|
},
|
|
34
35
|
function: {
|
|
35
36
|
label: 'Function',
|
|
36
37
|
icon: 'fa-bolt',
|
|
37
|
-
color: 'text-yellow
|
|
38
|
+
color: 'text-yellow',
|
|
38
39
|
folder: 'functions/',
|
|
39
40
|
suffix: '.function.js',
|
|
40
41
|
},
|
|
41
42
|
knowledge: {
|
|
42
43
|
label: 'Knowledge',
|
|
43
44
|
icon: 'fa-database',
|
|
44
|
-
color: 'text-purple
|
|
45
|
+
color: 'text-purple',
|
|
45
46
|
folder: 'knowledge/',
|
|
46
47
|
suffix: '.knowledge.yaml',
|
|
47
48
|
},
|
|
48
49
|
skill: {
|
|
49
50
|
label: 'Skill',
|
|
50
51
|
icon: 'fa-wand-magic-sparkles',
|
|
51
|
-
color: 'text-green
|
|
52
|
+
color: 'text-green',
|
|
52
53
|
folder: 'skills/',
|
|
53
54
|
suffix: '/SKILL.md',
|
|
54
55
|
},
|
|
55
56
|
workflow: {
|
|
56
57
|
label: 'Workflow',
|
|
57
58
|
icon: 'fa-diagram-project',
|
|
58
|
-
color: 'text-orange
|
|
59
|
+
color: 'text-orange',
|
|
59
60
|
folder: 'workflows/',
|
|
60
61
|
suffix: '.workflow.yaml',
|
|
61
62
|
},
|
|
@@ -66,15 +67,21 @@ function getExtension(filename) {
|
|
|
66
67
|
return parts.length > 1 ? parts.pop().toLowerCase() : '';
|
|
67
68
|
}
|
|
68
69
|
|
|
70
|
+
function isAgentFile(path) {
|
|
71
|
+
return path && path.endsWith('.agent.yaml');
|
|
72
|
+
}
|
|
73
|
+
|
|
69
74
|
export class IdeView extends Component {
|
|
70
75
|
constructor() {
|
|
71
76
|
super();
|
|
72
77
|
this.editor = null;
|
|
73
78
|
this.currentFile = null;
|
|
74
79
|
this.isDirty = false;
|
|
80
|
+
this._loading = false;
|
|
75
81
|
this.treeData = [];
|
|
76
82
|
this.expandedDirs = new Set();
|
|
77
83
|
this._renamingPath = null;
|
|
84
|
+
this._viewMode = 'source'; // 'source' | 'visual'
|
|
78
85
|
this._handleKeyDown = this._handleKeyDown.bind(this);
|
|
79
86
|
this._handleDocClick = this._handleDocClick.bind(this);
|
|
80
87
|
}
|
|
@@ -86,6 +93,7 @@ export class IdeView extends Component {
|
|
|
86
93
|
this.editor.destroy();
|
|
87
94
|
this.editor = null;
|
|
88
95
|
}
|
|
96
|
+
this._viewMode = 'source';
|
|
89
97
|
}
|
|
90
98
|
|
|
91
99
|
async postRender() {
|
|
@@ -105,6 +113,7 @@ export class IdeView extends Component {
|
|
|
105
113
|
});
|
|
106
114
|
}
|
|
107
115
|
|
|
116
|
+
this._attachModeToggle();
|
|
108
117
|
await this._loadTree();
|
|
109
118
|
}
|
|
110
119
|
|
|
@@ -150,10 +159,10 @@ export class IdeView extends Component {
|
|
|
150
159
|
const ext = getExtension(node.name);
|
|
151
160
|
const iconInfo = FILE_ICONS[ext] || FILE_ICONS.default;
|
|
152
161
|
return `
|
|
153
|
-
<div class="tree-item tree-depth-${Math.min(depth, 5)}
|
|
162
|
+
<div class="tree-item tree-depth-${Math.min(depth, 5)}">
|
|
154
163
|
<span class="w-3"></span>
|
|
155
164
|
<i class="fas ${iconInfo.icon} ${iconInfo.color} text-sm"></i>
|
|
156
|
-
<input type="text" class="inline-tree-input
|
|
165
|
+
<input type="text" class="inline-tree-input"
|
|
157
166
|
data-action="rename" data-path="${node.path}" value="${node.name}" />
|
|
158
167
|
</div>
|
|
159
168
|
`;
|
|
@@ -171,17 +180,17 @@ export class IdeView extends Component {
|
|
|
171
180
|
|
|
172
181
|
// Only show menu button for subfolders (depth > 0)
|
|
173
182
|
const menuBtn = depth > 0 ? `
|
|
174
|
-
<button class="tree-menu-btn
|
|
183
|
+
<button class="tree-menu-btn"
|
|
175
184
|
data-menu-path="${node.path}" data-menu-type="directory">
|
|
176
185
|
<i class="fas fa-ellipsis-v text-xs"></i>
|
|
177
186
|
</button>
|
|
178
187
|
` : '';
|
|
179
188
|
|
|
180
189
|
return `
|
|
181
|
-
<div class="tree-item
|
|
190
|
+
<div class="tree-item tree-depth-${Math.min(depth, 5)}"
|
|
182
191
|
data-path="${node.path}" data-type="directory">
|
|
183
|
-
<i class="fas ${chevron} text-xs text-
|
|
184
|
-
<i class="fas fa-folder${isExpanded ? '-open' : ''} text-yellow
|
|
192
|
+
<i class="fas ${chevron} text-xs text-muted"></i>
|
|
193
|
+
<i class="fas fa-folder${isExpanded ? '-open' : ''} text-yellow text-sm"></i>
|
|
185
194
|
<span class="flex-1 min-w-0">${node.name}</span>
|
|
186
195
|
${menuBtn}
|
|
187
196
|
</div>
|
|
@@ -197,15 +206,14 @@ export class IdeView extends Component {
|
|
|
197
206
|
const ext = getExtension(node.name);
|
|
198
207
|
const iconInfo = FILE_ICONS[ext] || FILE_ICONS.default;
|
|
199
208
|
const isActive = this.currentFile && this.currentFile.path === node.path;
|
|
200
|
-
const activeClass = isActive ? 'bg-dark-hover text-white' : '';
|
|
201
209
|
|
|
202
210
|
return `
|
|
203
|
-
<div class="tree-item
|
|
211
|
+
<div class="tree-item tree-depth-${Math.min(depth, 5)} ${isActive ? 'active-file' : ''}"
|
|
204
212
|
data-path="${node.path}" data-type="file">
|
|
205
213
|
<span class="w-3"></span>
|
|
206
214
|
<i class="fas ${iconInfo.icon} ${iconInfo.color} text-sm"></i>
|
|
207
215
|
<span class="tree-filename truncate flex-1 min-w-0">${node.name}</span>
|
|
208
|
-
<button class="tree-menu-btn
|
|
216
|
+
<button class="tree-menu-btn"
|
|
209
217
|
data-menu-path="${node.path}" data-menu-type="file">
|
|
210
218
|
<i class="fas fa-ellipsis-v text-xs"></i>
|
|
211
219
|
</button>
|
|
@@ -322,19 +330,19 @@ export class IdeView extends Component {
|
|
|
322
330
|
|
|
323
331
|
const menu = document.createElement('div');
|
|
324
332
|
menu.id = 'contextMenu';
|
|
325
|
-
menu.className = '
|
|
333
|
+
menu.className = 'context-menu';
|
|
326
334
|
|
|
327
335
|
const isFile = type === 'file';
|
|
328
336
|
|
|
329
337
|
menu.innerHTML = `
|
|
330
338
|
${isFile ? `
|
|
331
|
-
<div class="context-item
|
|
332
|
-
<i class="fas fa-pen text-xs
|
|
339
|
+
<div class="context-item" data-action="rename">
|
|
340
|
+
<i class="fas fa-pen text-xs text-muted"></i>
|
|
333
341
|
<span>Rename</span>
|
|
334
342
|
</div>
|
|
335
343
|
` : ''}
|
|
336
|
-
<div class="context-item
|
|
337
|
-
<i class="fas fa-trash text-xs
|
|
344
|
+
<div class="context-item danger" data-action="delete">
|
|
345
|
+
<i class="fas fa-trash text-xs"></i>
|
|
338
346
|
<span>Delete</span>
|
|
339
347
|
</div>
|
|
340
348
|
`;
|
|
@@ -395,7 +403,9 @@ export class IdeView extends Component {
|
|
|
395
403
|
if (this.currentFile && this.currentFile.path === filePath) {
|
|
396
404
|
this.currentFile = null;
|
|
397
405
|
this.isDirty = false;
|
|
406
|
+
this._viewMode = 'source';
|
|
398
407
|
this._renderEditor();
|
|
408
|
+
this._updateModeToggle();
|
|
399
409
|
}
|
|
400
410
|
|
|
401
411
|
await this._loadTree();
|
|
@@ -425,22 +435,22 @@ export class IdeView extends Component {
|
|
|
425
435
|
if (!btn) return;
|
|
426
436
|
|
|
427
437
|
const items = Object.entries(RESOURCE_TYPES).map(([key, rt]) => `
|
|
428
|
-
<div class="
|
|
438
|
+
<div class="resource-dropdown-item"
|
|
429
439
|
data-resource="${key}">
|
|
430
|
-
<i class="fas ${rt.icon} ${rt.color} text-xs
|
|
440
|
+
<i class="fas ${rt.icon} ${rt.color} text-xs"></i>
|
|
431
441
|
<span>${rt.label}</span>
|
|
432
442
|
</div>
|
|
433
443
|
`).join('');
|
|
434
444
|
|
|
435
445
|
const dropdown = document.createElement('div');
|
|
436
446
|
dropdown.id = 'newResourceDropdown';
|
|
437
|
-
dropdown.className = '
|
|
447
|
+
dropdown.className = 'resource-dropdown';
|
|
438
448
|
dropdown.innerHTML = items;
|
|
439
449
|
|
|
440
450
|
btn.parentElement.classList.add('relative');
|
|
441
451
|
btn.parentElement.appendChild(dropdown);
|
|
442
452
|
|
|
443
|
-
dropdown.querySelectorAll('.
|
|
453
|
+
dropdown.querySelectorAll('.resource-dropdown-item').forEach(item => {
|
|
444
454
|
item.addEventListener('click', (e) => {
|
|
445
455
|
e.stopPropagation();
|
|
446
456
|
const type = item.dataset.resource;
|
|
@@ -462,32 +472,27 @@ export class IdeView extends Component {
|
|
|
462
472
|
const rt = RESOURCE_TYPES[type];
|
|
463
473
|
const modal = document.createElement('div');
|
|
464
474
|
modal.id = 'createResourceModal';
|
|
465
|
-
modal.className = '
|
|
475
|
+
modal.className = 'auth-overlay';
|
|
466
476
|
modal.innerHTML = `
|
|
467
|
-
<div class="absolute inset-0 bg-
|
|
468
|
-
<div class="relative
|
|
469
|
-
<div class="flex items-center gap-3 px-4 py-3 border-b
|
|
477
|
+
<div class="absolute inset-0 bg-overlay" data-action="cancel"></div>
|
|
478
|
+
<div class="relative panel shadow-xl w-full mx-4 max-w-md">
|
|
479
|
+
<div class="flex items-center gap-3 px-4 py-3 border-b">
|
|
470
480
|
<i class="fas ${rt.icon} ${rt.color}"></i>
|
|
471
481
|
<span class="text-white font-medium">New ${rt.label}</span>
|
|
472
482
|
</div>
|
|
473
483
|
<div class="p-4">
|
|
474
|
-
<label class="block text-sm text-
|
|
475
|
-
<div class="
|
|
476
|
-
<span
|
|
484
|
+
<label class="block text-sm text-secondary mb-2">Name</label>
|
|
485
|
+
<div class="create-modal-input">
|
|
486
|
+
<span>${rt.folder}</span>
|
|
477
487
|
<input type="text" id="resourceNameInput"
|
|
478
|
-
class="flex-1 px-3 py-2 bg-transparent text-white text-sm outline-none"
|
|
479
488
|
placeholder="my-${type}" autocomplete="off" />
|
|
480
|
-
<span
|
|
489
|
+
<span>${rt.suffix}</span>
|
|
481
490
|
</div>
|
|
482
|
-
<p class="text-xs text-
|
|
491
|
+
<p class="text-xs text-muted mt-2">Use lowercase letters, numbers, and hyphens</p>
|
|
483
492
|
</div>
|
|
484
|
-
<div class="flex justify-end gap-2 px-4 py-3 border-t
|
|
485
|
-
<button class="
|
|
486
|
-
|
|
487
|
-
</button>
|
|
488
|
-
<button class="px-4 py-1.5 text-sm bg-green-600 hover:bg-green-700 text-white rounded transition-colors" data-action="create">
|
|
489
|
-
Create
|
|
490
|
-
</button>
|
|
493
|
+
<div class="flex justify-end gap-2 px-4 py-3 border-t">
|
|
494
|
+
<button class="btn btn-ghost" data-action="cancel">Cancel</button>
|
|
495
|
+
<button class="btn btn-accent btn-sm" data-action="create">Create</button>
|
|
491
496
|
</div>
|
|
492
497
|
</div>
|
|
493
498
|
`;
|
|
@@ -604,8 +609,19 @@ export class IdeView extends Component {
|
|
|
604
609
|
const data = await api.readFile(filePath);
|
|
605
610
|
this.currentFile = { path: data.path, content: data.content };
|
|
606
611
|
this.isDirty = false;
|
|
612
|
+
// Preserve visual/source choice when switching between agent files
|
|
613
|
+
if (!isAgentFile(filePath)) {
|
|
614
|
+
this._viewMode = 'source';
|
|
615
|
+
} else if (!isAgentFile(this._prevFilePath)) {
|
|
616
|
+
this._viewMode = 'visual';
|
|
617
|
+
}
|
|
618
|
+
this._prevFilePath = filePath;
|
|
619
|
+
this._loading = true;
|
|
607
620
|
this._renderEditor();
|
|
621
|
+
this._loading = false;
|
|
622
|
+
this._updateDirtyState();
|
|
608
623
|
this._renderTree();
|
|
624
|
+
this._updateModeToggle();
|
|
609
625
|
} catch (err) {
|
|
610
626
|
console.error('Failed to read file:', err);
|
|
611
627
|
}
|
|
@@ -613,19 +629,18 @@ export class IdeView extends Component {
|
|
|
613
629
|
|
|
614
630
|
_renderEditor() {
|
|
615
631
|
const editorContainer = this.querySelector('#editorContainer');
|
|
632
|
+
const composerContainer = this.querySelector('#composerContainer');
|
|
616
633
|
const welcomePanel = this.querySelector('#welcomePanel');
|
|
617
634
|
const breadcrumb = this.querySelector('#breadcrumb');
|
|
618
|
-
const saveBtn = this.querySelector('#saveBtn');
|
|
619
|
-
const dirtyIndicator = this.querySelector('#dirtyIndicator');
|
|
620
635
|
|
|
621
636
|
if (!this.currentFile) {
|
|
622
637
|
if (welcomePanel) welcomePanel.classList.remove('hidden');
|
|
623
638
|
if (editorContainer) editorContainer.classList.add('hidden');
|
|
639
|
+
if (composerContainer) composerContainer.classList.add('hidden');
|
|
624
640
|
return;
|
|
625
641
|
}
|
|
626
642
|
|
|
627
643
|
if (welcomePanel) welcomePanel.classList.add('hidden');
|
|
628
|
-
if (editorContainer) editorContainer.classList.remove('hidden');
|
|
629
644
|
|
|
630
645
|
// Update breadcrumb
|
|
631
646
|
if (breadcrumb) {
|
|
@@ -636,7 +651,49 @@ export class IdeView extends Component {
|
|
|
636
651
|
// Update dirty state
|
|
637
652
|
this._updateDirtyState();
|
|
638
653
|
|
|
639
|
-
|
|
654
|
+
if (this._viewMode === 'visual') {
|
|
655
|
+
if (editorContainer) editorContainer.classList.add('hidden');
|
|
656
|
+
if (composerContainer) composerContainer.classList.remove('hidden');
|
|
657
|
+
|
|
658
|
+
// Parse and load into composer
|
|
659
|
+
let parsed;
|
|
660
|
+
try {
|
|
661
|
+
parsed = jsyaml.load(this.currentFile.content);
|
|
662
|
+
} catch { parsed = null; }
|
|
663
|
+
|
|
664
|
+
if (parsed && typeof parsed === 'object') {
|
|
665
|
+
let composer = composerContainer.querySelector('agent-composer');
|
|
666
|
+
if (!composer) {
|
|
667
|
+
composer = document.createElement('agent-composer');
|
|
668
|
+
composer.classList.add('block', 'h-full');
|
|
669
|
+
composerContainer.appendChild(composer);
|
|
670
|
+
composer.addEventListener('composer:change', () => {
|
|
671
|
+
if (this._loading) return;
|
|
672
|
+
if (!this.isDirty) {
|
|
673
|
+
this.isDirty = true;
|
|
674
|
+
this._updateDirtyState();
|
|
675
|
+
}
|
|
676
|
+
});
|
|
677
|
+
}
|
|
678
|
+
composer.data = parsed;
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
// Also sync Ace so switching to source has current content
|
|
682
|
+
this._syncAceContent();
|
|
683
|
+
return;
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
// Source mode
|
|
687
|
+
if (composerContainer) composerContainer.classList.add('hidden');
|
|
688
|
+
if (editorContainer) editorContainer.classList.remove('hidden');
|
|
689
|
+
|
|
690
|
+
this._syncAceContent();
|
|
691
|
+
this._updateDirtyState();
|
|
692
|
+
if (this.editor) this.editor.focus();
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
_syncAceContent() {
|
|
696
|
+
if (!this.currentFile) return;
|
|
640
697
|
const aceEl = this.querySelector('#aceEditor');
|
|
641
698
|
if (!aceEl) return;
|
|
642
699
|
|
|
@@ -650,8 +707,8 @@ export class IdeView extends Component {
|
|
|
650
707
|
tabSize: 2,
|
|
651
708
|
useSoftTabs: true,
|
|
652
709
|
});
|
|
653
|
-
|
|
654
710
|
this.editor.session.on('change', () => {
|
|
711
|
+
if (this._loading) return;
|
|
655
712
|
if (!this.isDirty) {
|
|
656
713
|
this.isDirty = true;
|
|
657
714
|
this._updateDirtyState();
|
|
@@ -659,16 +716,10 @@ export class IdeView extends Component {
|
|
|
659
716
|
});
|
|
660
717
|
}
|
|
661
718
|
|
|
662
|
-
// Set mode based on file extension
|
|
663
719
|
const ext = getExtension(this.currentFile.path);
|
|
664
720
|
const mode = ACE_MODES[ext] || ACE_MODES.default;
|
|
665
721
|
this.editor.session.setMode(mode);
|
|
666
|
-
|
|
667
|
-
// Set content without triggering change event
|
|
668
722
|
this.editor.setValue(this.currentFile.content, -1);
|
|
669
|
-
this.isDirty = false;
|
|
670
|
-
this._updateDirtyState();
|
|
671
|
-
this.editor.focus();
|
|
672
723
|
}
|
|
673
724
|
|
|
674
725
|
_updateDirtyState() {
|
|
@@ -690,9 +741,18 @@ export class IdeView extends Component {
|
|
|
690
741
|
}
|
|
691
742
|
|
|
692
743
|
async _saveFile() {
|
|
693
|
-
if (!this.currentFile || !this.isDirty
|
|
694
|
-
|
|
695
|
-
|
|
744
|
+
if (!this.currentFile || !this.isDirty) return;
|
|
745
|
+
|
|
746
|
+
let content;
|
|
747
|
+
if (this._viewMode === 'visual') {
|
|
748
|
+
const composer = this.querySelector('agent-composer');
|
|
749
|
+
if (!composer) return;
|
|
750
|
+
const data = composer.getData();
|
|
751
|
+
content = jsyaml.dump(data, { indent: 2, lineWidth: -1, noRefs: true, sortKeys: false });
|
|
752
|
+
} else {
|
|
753
|
+
if (!this.editor) return;
|
|
754
|
+
content = this.editor.getValue();
|
|
755
|
+
}
|
|
696
756
|
|
|
697
757
|
try {
|
|
698
758
|
const result = await api.writeFile(this.currentFile.path, content);
|
|
@@ -707,16 +767,16 @@ export class IdeView extends Component {
|
|
|
707
767
|
const failed = result.reloaded === 'error';
|
|
708
768
|
if (failed) {
|
|
709
769
|
savedMsg.textContent = 'Saved (reload failed)';
|
|
710
|
-
savedMsg.classList.remove('hidden', 'text-green
|
|
711
|
-
savedMsg.classList.add('text-
|
|
770
|
+
savedMsg.classList.remove('hidden', 'text-green');
|
|
771
|
+
savedMsg.classList.add('text-amber');
|
|
712
772
|
} else if (reloaded) {
|
|
713
773
|
savedMsg.textContent = `Saved & reloaded ${result.reloaded}`;
|
|
714
|
-
savedMsg.classList.remove('hidden', 'text-
|
|
715
|
-
savedMsg.classList.add('text-green
|
|
774
|
+
savedMsg.classList.remove('hidden', 'text-amber');
|
|
775
|
+
savedMsg.classList.add('text-green');
|
|
716
776
|
} else {
|
|
717
777
|
savedMsg.textContent = 'Saved!';
|
|
718
|
-
savedMsg.classList.remove('hidden', 'text-
|
|
719
|
-
savedMsg.classList.add('text-green
|
|
778
|
+
savedMsg.classList.remove('hidden', 'text-amber');
|
|
779
|
+
savedMsg.classList.add('text-green');
|
|
720
780
|
}
|
|
721
781
|
setTimeout(() => savedMsg.classList.add('hidden'), 2500);
|
|
722
782
|
}
|
|
@@ -726,55 +786,186 @@ export class IdeView extends Component {
|
|
|
726
786
|
}
|
|
727
787
|
}
|
|
728
788
|
|
|
789
|
+
// ── Mode Toggle ──
|
|
790
|
+
|
|
791
|
+
_attachModeToggle() {
|
|
792
|
+
this.querySelectorAll('.mode-toggle-btn').forEach(btn => {
|
|
793
|
+
btn.addEventListener('click', () => {
|
|
794
|
+
const mode = btn.dataset.mode;
|
|
795
|
+
if (mode === this._viewMode) return;
|
|
796
|
+
if (mode === 'visual') this._switchToVisual();
|
|
797
|
+
else this._switchToSource();
|
|
798
|
+
});
|
|
799
|
+
});
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
_updateModeToggle() {
|
|
803
|
+
const toggle = this.querySelector('#modeToggle');
|
|
804
|
+
if (!toggle) return;
|
|
805
|
+
|
|
806
|
+
const show = this.currentFile && isAgentFile(this.currentFile.path);
|
|
807
|
+
toggle.classList.toggle('hidden', !show);
|
|
808
|
+
|
|
809
|
+
toggle.querySelectorAll('.mode-toggle-btn').forEach(btn => {
|
|
810
|
+
btn.classList.toggle('active', btn.dataset.mode === this._viewMode);
|
|
811
|
+
});
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
_switchToVisual() {
|
|
815
|
+
if (!this.currentFile) return;
|
|
816
|
+
|
|
817
|
+
// Get current Ace content and parse
|
|
818
|
+
const content = this.editor ? this.editor.getValue() : this.currentFile.content;
|
|
819
|
+
let parsed;
|
|
820
|
+
try {
|
|
821
|
+
parsed = jsyaml.load(content);
|
|
822
|
+
} catch (err) {
|
|
823
|
+
this._showToast(`Invalid YAML: ${err.message}`, 'error');
|
|
824
|
+
return;
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
828
|
+
this._showToast('YAML must be an object', 'error');
|
|
829
|
+
return;
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
const wasDirty = this.isDirty;
|
|
833
|
+
this._viewMode = 'visual';
|
|
834
|
+
this._updateModeToggle();
|
|
835
|
+
|
|
836
|
+
// Hide Ace, show composer
|
|
837
|
+
const editorContainer = this.querySelector('#editorContainer');
|
|
838
|
+
const composerContainer = this.querySelector('#composerContainer');
|
|
839
|
+
if (editorContainer) editorContainer.classList.add('hidden');
|
|
840
|
+
if (composerContainer) composerContainer.classList.remove('hidden');
|
|
841
|
+
|
|
842
|
+
// Create or get the composer element
|
|
843
|
+
let composer = composerContainer.querySelector('agent-composer');
|
|
844
|
+
if (!composer) {
|
|
845
|
+
composer = document.createElement('agent-composer');
|
|
846
|
+
composer.classList.add('block', 'h-full');
|
|
847
|
+
composerContainer.appendChild(composer);
|
|
848
|
+
composer.addEventListener('composer:change', () => {
|
|
849
|
+
if (this._loading) return;
|
|
850
|
+
if (!this.isDirty) {
|
|
851
|
+
this.isDirty = true;
|
|
852
|
+
this._updateDirtyState();
|
|
853
|
+
}
|
|
854
|
+
});
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
this._loading = true;
|
|
858
|
+
composer.data = parsed;
|
|
859
|
+
this._loading = false;
|
|
860
|
+
this.isDirty = wasDirty;
|
|
861
|
+
this._updateDirtyState();
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
_switchToSource() {
|
|
865
|
+
if (!this.currentFile) return;
|
|
866
|
+
|
|
867
|
+
const wasDirty = this.isDirty;
|
|
868
|
+
const composer = this.querySelector('agent-composer');
|
|
869
|
+
if (composer && this._viewMode === 'visual') {
|
|
870
|
+
const data = composer.getData();
|
|
871
|
+
const yaml = jsyaml.dump(data, { indent: 2, lineWidth: -1, noRefs: true, sortKeys: false });
|
|
872
|
+
|
|
873
|
+
this._loading = true;
|
|
874
|
+
if (this.editor) {
|
|
875
|
+
this.editor.setValue(yaml, -1);
|
|
876
|
+
}
|
|
877
|
+
this._loading = false;
|
|
878
|
+
this.currentFile.content = yaml;
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
this._viewMode = 'source';
|
|
882
|
+
this._updateModeToggle();
|
|
883
|
+
|
|
884
|
+
const editorContainer = this.querySelector('#editorContainer');
|
|
885
|
+
const composerContainer = this.querySelector('#composerContainer');
|
|
886
|
+
if (composerContainer) composerContainer.classList.add('hidden');
|
|
887
|
+
if (editorContainer) editorContainer.classList.remove('hidden');
|
|
888
|
+
|
|
889
|
+
this.isDirty = wasDirty;
|
|
890
|
+
this._updateDirtyState();
|
|
891
|
+
|
|
892
|
+
if (this.editor) {
|
|
893
|
+
this.editor.resize();
|
|
894
|
+
this.editor.focus();
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
_showToast(message, type = 'info') {
|
|
899
|
+
const existing = document.querySelector('#ideToast');
|
|
900
|
+
if (existing) existing.remove();
|
|
901
|
+
|
|
902
|
+
const toast = document.createElement('div');
|
|
903
|
+
toast.id = 'ideToast';
|
|
904
|
+
toast.className = `ide-toast ${type === 'error' ? 'error' : ''}`;
|
|
905
|
+
toast.textContent = message;
|
|
906
|
+
document.body.appendChild(toast);
|
|
907
|
+
setTimeout(() => toast.remove(), 4000);
|
|
908
|
+
}
|
|
909
|
+
|
|
729
910
|
template() {
|
|
730
911
|
return `
|
|
731
|
-
<div class="
|
|
912
|
+
<div class="ide-shell">
|
|
732
913
|
<!-- Toolbar -->
|
|
733
|
-
<div class="
|
|
734
|
-
<div class="flex items-center gap-2 text-sm text-
|
|
735
|
-
<i class="fas fa-code text-green
|
|
914
|
+
<div class="ide-toolbar">
|
|
915
|
+
<div class="flex items-center gap-2 text-sm text-secondary">
|
|
916
|
+
<i class="fas fa-code text-green"></i>
|
|
736
917
|
<span id="breadcrumb">Select a file to edit</span>
|
|
737
918
|
</div>
|
|
738
919
|
<div class="flex items-center gap-3">
|
|
739
|
-
|
|
740
|
-
|
|
920
|
+
<!-- Mode toggle (only for .agent.yaml files) -->
|
|
921
|
+
<div id="modeToggle" class="hidden mode-toggle">
|
|
922
|
+
<button class="mode-toggle-btn active" data-mode="source">
|
|
923
|
+
<i class="fas fa-code mr-1"></i>Source
|
|
924
|
+
</button>
|
|
925
|
+
<button class="mode-toggle-btn" data-mode="visual">
|
|
926
|
+
<i class="fas fa-palette mr-1"></i>Visual
|
|
927
|
+
</button>
|
|
928
|
+
</div>
|
|
929
|
+
<span id="dirtyIndicator" class="hidden text-amber text-xs flex items-center gap-1">
|
|
930
|
+
<i class="fas fa-circle text-2xs"></i> Unsaved
|
|
741
931
|
</span>
|
|
742
|
-
<span id="savedMsg" class="hidden text-green
|
|
743
|
-
<button id="saveBtn" class="
|
|
932
|
+
<span id="savedMsg" class="hidden text-green text-xs">Saved!</span>
|
|
933
|
+
<button id="saveBtn" class="btn btn-accent btn-sm opacity-50 cursor-not-allowed" disabled>
|
|
744
934
|
<i class="fas fa-save mr-1"></i> Save
|
|
745
935
|
</button>
|
|
746
936
|
</div>
|
|
747
937
|
</div>
|
|
748
938
|
|
|
749
939
|
<!-- Main content -->
|
|
750
|
-
<div class="
|
|
940
|
+
<div class="ide-main">
|
|
751
941
|
<!-- File tree sidebar -->
|
|
752
|
-
<div class="
|
|
753
|
-
<div class="
|
|
942
|
+
<div class="ide-tree">
|
|
943
|
+
<div class="ide-tree-header">
|
|
754
944
|
<span>Explorer</span>
|
|
755
|
-
<button id="newFileBtn" class="text-
|
|
945
|
+
<button id="newFileBtn" class="text-muted transition-colors" title="New Resource">
|
|
756
946
|
<i class="fas fa-plus text-xs"></i>
|
|
757
947
|
</button>
|
|
758
948
|
</div>
|
|
759
949
|
<div id="fileTree" class="py-1">
|
|
760
|
-
<div class="px-4 py-8 text-center text-
|
|
950
|
+
<div class="px-4 py-8 text-center text-muted text-sm">
|
|
761
951
|
<i class="fas fa-spinner fa-spin mr-2"></i> Loading...
|
|
762
952
|
</div>
|
|
763
953
|
</div>
|
|
764
954
|
</div>
|
|
765
955
|
|
|
766
|
-
<!-- Editor / Welcome -->
|
|
767
|
-
<div class="
|
|
768
|
-
<div id="welcomePanel" class="flex items-center justify-center h-full text-
|
|
956
|
+
<!-- Editor / Composer / Welcome -->
|
|
957
|
+
<div class="ide-editor">
|
|
958
|
+
<div id="welcomePanel" class="flex items-center justify-center h-full text-muted">
|
|
769
959
|
<div class="text-center">
|
|
770
|
-
<i class="fas fa-code text-4xl mb-4 text-
|
|
960
|
+
<i class="fas fa-code text-4xl mb-4 text-muted"></i>
|
|
771
961
|
<p class="text-lg">Select a file from the tree to begin editing</p>
|
|
772
|
-
<p class="text-sm mt-2 text-
|
|
962
|
+
<p class="text-sm mt-2 text-muted">Supports YAML, JSON, JavaScript, TypeScript, and more</p>
|
|
773
963
|
</div>
|
|
774
964
|
</div>
|
|
775
965
|
<div id="editorContainer" class="hidden h-full">
|
|
776
966
|
<div id="aceEditor" class="h-full w-full"></div>
|
|
777
967
|
</div>
|
|
968
|
+
<div id="composerContainer" class="hidden h-full overflow-hidden"></div>
|
|
778
969
|
</div>
|
|
779
970
|
</div>
|
|
780
971
|
</div>
|