profclaw 2.0.0 → 2.3.0
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/.env.example +14 -2
- package/CHANGELOG.md +37 -0
- package/CONTRIBUTING.md +20 -0
- package/Dockerfile +39 -23
- package/README.md +174 -40
- package/dist/agents/agent-summary.d.ts +44 -0
- package/dist/agents/agent-summary.js +176 -0
- package/dist/agents/auto-memory.d.ts +59 -0
- package/dist/agents/auto-memory.js +310 -0
- package/dist/agents/checkpoint-manager.d.ts +76 -0
- package/dist/agents/checkpoint-manager.js +156 -0
- package/dist/agents/circuit-breaker.d.ts +54 -0
- package/dist/agents/circuit-breaker.js +153 -0
- package/dist/agents/context-compactor.d.ts +70 -0
- package/dist/agents/context-compactor.js +361 -0
- package/dist/agents/conversation-branch.d.ts +55 -0
- package/dist/agents/conversation-branch.js +115 -0
- package/dist/agents/error-recovery.d.ts +44 -0
- package/dist/agents/error-recovery.js +197 -0
- package/dist/agents/events.d.ts +76 -0
- package/dist/agents/events.js +8 -0
- package/dist/agents/executor.d.ts +35 -1
- package/dist/agents/executor.js +573 -124
- package/dist/agents/file-snapshots.d.ts +72 -0
- package/dist/agents/file-snapshots.js +182 -0
- package/dist/agents/index.d.ts +2 -0
- package/dist/agents/orchestrator.d.ts +183 -0
- package/dist/agents/orchestrator.js +495 -0
- package/dist/agents/permissions.d.ts +63 -0
- package/dist/agents/permissions.js +138 -0
- package/dist/agents/plan-mode.d.ts +71 -0
- package/dist/agents/plan-mode.js +186 -0
- package/dist/agents/prompt-suggestions.d.ts +33 -0
- package/dist/agents/prompt-suggestions.js +208 -0
- package/dist/agents/rate-limit-monitor.d.ts +56 -0
- package/dist/agents/rate-limit-monitor.js +224 -0
- package/dist/agents/result-store.d.ts +37 -0
- package/dist/agents/result-store.js +104 -0
- package/dist/agents/session-diff.d.ts +43 -0
- package/dist/agents/session-diff.js +258 -0
- package/dist/agents/tool-loader.d.ts +65 -0
- package/dist/agents/tool-loader.js +273 -0
- package/dist/agents/transcript.d.ts +96 -0
- package/dist/agents/transcript.js +267 -0
- package/dist/agents/worktree-manager.d.ts +80 -0
- package/dist/agents/worktree-manager.js +203 -0
- package/dist/auth/middleware.js +14 -0
- package/dist/chat/agentic-executor.d.ts +7 -0
- package/dist/chat/agentic-executor.js +253 -30
- package/dist/chat/conversations.d.ts +2 -0
- package/dist/chat/conversations.js +8 -0
- package/dist/chat/execution/executor.d.ts +8 -0
- package/dist/chat/execution/executor.js +157 -103
- package/dist/chat/execution/index.js +5 -1
- package/dist/chat/execution/tool-router.js +40 -14
- package/dist/chat/execution/tools/canvas.d.ts +2 -2
- package/dist/chat/execution/tools/code-tools.d.ts +66 -0
- package/dist/chat/execution/tools/code-tools.js +353 -0
- package/dist/chat/execution/tools/complete-task.d.ts +2 -2
- package/dist/chat/execution/tools/cron-tool.d.ts +26 -10
- package/dist/chat/execution/tools/cron-tool.js +48 -3
- package/dist/chat/execution/tools/decompose-task.d.ts +58 -0
- package/dist/chat/execution/tools/decompose-task.js +166 -0
- package/dist/chat/execution/tools/exec.d.ts +5 -2
- package/dist/chat/execution/tools/exec.js +294 -155
- package/dist/chat/execution/tools/feed-tools.d.ts +77 -0
- package/dist/chat/execution/tools/feed-tools.js +142 -0
- package/dist/chat/execution/tools/file-ops.d.ts +1 -1
- package/dist/chat/execution/tools/github.d.ts +2 -2
- package/dist/chat/execution/tools/index.d.ts +14 -2
- package/dist/chat/execution/tools/index.js +86 -12
- package/dist/chat/execution/tools/integrations.d.ts +8 -8
- package/dist/chat/execution/tools/multi-patch.d.ts +53 -0
- package/dist/chat/execution/tools/multi-patch.js +373 -0
- package/dist/chat/execution/tools/openai-image-gen.d.ts +2 -2
- package/dist/chat/execution/tools/plan-tools.d.ts +80 -0
- package/dist/chat/execution/tools/plan-tools.js +134 -0
- package/dist/chat/execution/tools/profclaw-ops.d.ts +6 -6
- package/dist/chat/execution/tools/repl-tool.d.ts +46 -0
- package/dist/chat/execution/tools/repl-tool.js +207 -0
- package/dist/chat/execution/tools/sessions-send.d.ts +2 -2
- package/dist/chat/execution/tools/slack-actions.d.ts +2 -2
- package/dist/chat/execution/tools/system.d.ts +4 -4
- package/dist/chat/execution/tools/todo-tool.d.ts +72 -0
- package/dist/chat/execution/tools/todo-tool.js +152 -0
- package/dist/chat/execution/tools/tool-search.d.ts +50 -0
- package/dist/chat/execution/tools/tool-search.js +155 -0
- package/dist/chat/execution/types.d.ts +21 -14
- package/dist/chat/execution/workflows/executor.d.ts +11 -0
- package/dist/chat/execution/workflows/executor.js +99 -1
- package/dist/chat/execution/workflows/types.d.ts +35 -2
- package/dist/chat/format/index.d.ts +1 -0
- package/dist/chat/format/index.js +1 -0
- package/dist/chat/format/markdown-convert.d.ts +23 -0
- package/dist/chat/format/markdown-convert.js +149 -0
- package/dist/chat/index.d.ts +1 -1
- package/dist/chat/index.js +1 -1
- package/dist/chat/message-handler.js +58 -6
- package/dist/chat/proactive/index.d.ts +62 -0
- package/dist/chat/proactive/index.js +147 -0
- package/dist/chat/prompt-adapter.js +2 -0
- package/dist/chat/providers/irc/index.d.ts +2 -2
- package/dist/chat/providers/telegram/index.d.ts +2 -0
- package/dist/chat/providers/telegram/index.js +21 -2
- package/dist/chat/system-prompts.d.ts +3 -3
- package/dist/chat/system-prompts.js +116 -61
- package/dist/chat/tools.d.ts +6 -6
- package/dist/cli/commands/auth.js +64 -1
- package/dist/cli/commands/chat.js +1327 -138
- package/dist/cli/commands/doctor.js +222 -16
- package/dist/cli/commands/history.d.ts +3 -0
- package/dist/cli/commands/history.js +138 -0
- package/dist/cli/commands/import.d.ts +44 -0
- package/dist/cli/commands/import.js +526 -0
- package/dist/cli/commands/init.d.ts +13 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/onboard.js +210 -30
- package/dist/cli/commands/plan.d.ts +13 -0
- package/dist/cli/commands/plan.js +184 -0
- package/dist/cli/commands/serve.d.ts +7 -0
- package/dist/cli/commands/serve.js +77 -18
- package/dist/cli/commands/setup.js +84 -3
- package/dist/cli/commands/status.js +54 -0
- package/dist/cli/commands/tools.js +13 -13
- package/dist/cli/commands/tui.js +26 -1
- package/dist/cli/index.js +19 -0
- package/dist/cli/ink/App.d.ts +13 -0
- package/dist/cli/ink/App.js +6 -0
- package/dist/cli/ink/ChatApp.d.ts +60 -0
- package/dist/cli/ink/ChatApp.js +325 -0
- package/dist/cli/ink/DashboardApp.d.ts +3 -0
- package/dist/cli/ink/DashboardApp.js +143 -0
- package/dist/cli/ink/components/AgentStatus.d.ts +17 -0
- package/dist/cli/ink/components/AgentStatus.js +33 -0
- package/dist/cli/ink/components/ChannelList.d.ts +17 -0
- package/dist/cli/ink/components/ChannelList.js +33 -0
- package/dist/cli/ink/components/ConnectionStatus.d.ts +19 -0
- package/dist/cli/ink/components/ConnectionStatus.js +50 -0
- package/dist/cli/ink/components/CostBar.d.ts +19 -0
- package/dist/cli/ink/components/CostBar.js +35 -0
- package/dist/cli/ink/components/HookStatus.d.ts +15 -0
- package/dist/cli/ink/components/HookStatus.js +7 -0
- package/dist/cli/ink/components/PermissionPrompt.d.ts +21 -0
- package/dist/cli/ink/components/PermissionPrompt.js +51 -0
- package/dist/cli/ink/components/PlanView.d.ts +23 -0
- package/dist/cli/ink/components/PlanView.js +26 -0
- package/dist/cli/ink/components/ProviderList.d.ts +16 -0
- package/dist/cli/ink/components/ProviderList.js +16 -0
- package/dist/cli/ink/components/SessionHeader.d.ts +15 -0
- package/dist/cli/ink/components/SessionHeader.js +15 -0
- package/dist/cli/ink/components/StreamingMessage.d.ts +20 -0
- package/dist/cli/ink/components/StreamingMessage.js +27 -0
- package/dist/cli/ink/components/SuggestionBar.d.ts +15 -0
- package/dist/cli/ink/components/SuggestionBar.js +28 -0
- package/dist/cli/ink/components/SystemHealth.d.ts +20 -0
- package/dist/cli/ink/components/SystemHealth.js +39 -0
- package/dist/cli/ink/components/TaskList.d.ts +17 -0
- package/dist/cli/ink/components/TaskList.js +59 -0
- package/dist/cli/ink/components/ToolCall.d.ts +17 -0
- package/dist/cli/ink/components/ToolCall.js +43 -0
- package/dist/cli/ink/index.d.ts +23 -0
- package/dist/cli/ink/index.js +15 -0
- package/dist/cli/ink/keybindings.d.ts +35 -0
- package/dist/cli/ink/keybindings.js +105 -0
- package/dist/cli/ink/markdown-renderer.d.ts +47 -0
- package/dist/cli/ink/markdown-renderer.js +380 -0
- package/dist/cli/ink/output-styles.d.ts +39 -0
- package/dist/cli/ink/output-styles.js +119 -0
- package/dist/cli/interactive/auto-serve.d.ts +38 -0
- package/dist/cli/interactive/auto-serve.js +209 -0
- package/dist/cli/interactive/index.d.ts +25 -0
- package/dist/cli/interactive/index.js +23 -0
- package/dist/cli/interactive/picker.d.ts +28 -0
- package/dist/cli/interactive/picker.js +153 -0
- package/dist/cli/interactive/renderer.d.ts +26 -0
- package/dist/cli/interactive/renderer.js +555 -0
- package/dist/cli/interactive/repl.d.ts +14 -0
- package/dist/cli/interactive/repl.js +1516 -0
- package/dist/cli/interactive/stream-client.d.ts +59 -0
- package/dist/cli/interactive/stream-client.js +506 -0
- package/dist/cli/interactive/types.d.ts +121 -0
- package/dist/cli/interactive/types.js +10 -0
- package/dist/cli/utils/api.d.ts +9 -0
- package/dist/cli/utils/api.js +58 -2
- package/dist/cron/natural-language.d.ts +54 -0
- package/dist/cron/natural-language.js +569 -0
- package/dist/cron/scheduler.d.ts +34 -4
- package/dist/cron/scheduler.js +141 -9
- package/dist/cron/templates.d.ts +1 -1
- package/dist/cron/templates.js +219 -0
- package/dist/feeds/feed-engine.d.ts +149 -0
- package/dist/feeds/feed-engine.js +600 -0
- package/dist/feeds/index.d.ts +9 -0
- package/dist/feeds/index.js +8 -0
- package/dist/gateway/router.js +6 -1
- package/dist/hooks/built-in/audit-log.d.ts +11 -0
- package/dist/hooks/built-in/audit-log.js +84 -0
- package/dist/hooks/built-in/cost-warning.d.ts +10 -0
- package/dist/hooks/built-in/cost-warning.js +59 -0
- package/dist/hooks/built-in/dangerous-tool.d.ts +32 -0
- package/dist/hooks/built-in/dangerous-tool.js +80 -0
- package/dist/hooks/built-in/index.d.ts +14 -0
- package/dist/hooks/built-in/index.js +20 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.js +6 -0
- package/dist/hooks/loader.d.ts +17 -0
- package/dist/hooks/loader.js +142 -0
- package/dist/hooks/registry.d.ts +62 -0
- package/dist/hooks/registry.js +127 -0
- package/dist/integrations/web-search.js +6 -3
- package/dist/memory/index.d.ts +1 -0
- package/dist/memory/index.js +2 -0
- package/dist/memory/memory-service.js +14 -13
- package/dist/memory/observational.d.ts +62 -0
- package/dist/memory/observational.js +396 -0
- package/dist/middleware/content-filter.d.ts +22 -0
- package/dist/middleware/content-filter.js +69 -0
- package/dist/middleware/request-validator.d.ts +159 -0
- package/dist/middleware/request-validator.js +93 -0
- package/dist/plugins/sdk.d.ts +22 -0
- package/dist/plugins/sdk.js +17 -1
- package/dist/projects/types.d.ts +10 -10
- package/dist/providers/ai-sdk.d.ts +11 -0
- package/dist/providers/ai-sdk.js +78 -19
- package/dist/providers/core/models.js +67 -1
- package/dist/providers/core/types.d.ts +3 -0
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.js +1 -0
- package/dist/providers/smart-router.d.ts +118 -0
- package/dist/providers/smart-router.js +685 -0
- package/dist/providers/types.d.ts +16 -16
- package/dist/routes/agents.js +50 -0
- package/dist/routes/auth.js +8 -1
- package/dist/routes/chat.js +259 -14
- package/dist/routes/costs.js +32 -0
- package/dist/routes/cron.js +80 -5
- package/dist/routes/feeds.d.ts +10 -0
- package/dist/routes/feeds.js +168 -0
- package/dist/routes/mcp.js +21 -0
- package/dist/routes/memory.js +130 -0
- package/dist/routes/skills.js +129 -0
- package/dist/routes/teams.d.ts +9 -0
- package/dist/routes/teams.js +210 -0
- package/dist/routes/tools.js +14 -0
- package/dist/routes/users.js +2 -0
- package/dist/server/route-loader.js +3 -1
- package/dist/server/stream-bridge.d.ts +19 -0
- package/dist/server/stream-bridge.js +38 -0
- package/dist/server.js +310 -36
- package/dist/skills/marketplace.d.ts +87 -0
- package/dist/skills/marketplace.js +268 -0
- package/dist/storage/index.d.ts +14 -0
- package/dist/storage/index.js +64 -3
- package/dist/storage/schema.d.ts +4 -4
- package/dist/storage/schema.js +1 -1
- package/dist/teams/index.d.ts +110 -0
- package/dist/teams/index.js +365 -0
- package/dist/tickets/types.d.ts +39 -39
- package/dist/types/summary.d.ts +5 -5
- package/dist/utils/auto-update.d.ts +23 -0
- package/dist/utils/auto-update.js +157 -0
- package/dist/utils/offline-detect.d.ts +55 -0
- package/dist/utils/offline-detect.js +121 -0
- package/dist/utils/pid-file.d.ts +36 -0
- package/dist/utils/pid-file.js +125 -0
- package/dist/utils/prevent-sleep.d.ts +27 -0
- package/dist/utils/prevent-sleep.js +95 -0
- package/dist/utils/sanitizer.d.ts +57 -0
- package/dist/utils/sanitizer.js +174 -0
- package/docker-compose.yml +13 -137
- package/package.json +31 -6
- package/skills/deploy-cloudflare/SKILL.md +62 -0
- package/skills/deploy-vercel/SKILL.md +67 -0
- package/skills/docker-deploy/SKILL.md +158 -0
- package/skills/full-stack-builder/SKILL.md +92 -0
- package/skills/humanizer/SKILL.md +488 -0
- package/skills/profclaw-assistant/SKILL.md +85 -56
- package/ui/dist/assets/ActivityView-Da6HQ8ws.js +1 -0
- package/ui/dist/assets/AgentList-H58R0kX3.js +1 -0
- package/ui/dist/assets/AnalyticsDashboard-B28AeRsc.js +1 -0
- package/ui/dist/assets/AreaChart-DwLzeAQ8.js +1 -0
- package/ui/dist/assets/CartesianChart-piKQsTAR.js +36 -0
- package/ui/dist/assets/ChatView-Dbj8rxU5.js +10 -0
- package/ui/dist/assets/CostsDashboard-C6F5df0F.js +1 -0
- package/ui/dist/assets/EstimateSelect-wga0rUKX.js +1 -0
- package/ui/dist/assets/FeedDashboard-Ef6FEzEf.js +1 -0
- package/ui/dist/assets/FloatingChatbot-0yhkUeCq.js +2 -0
- package/ui/dist/assets/InviteCodeManagement-tUXfx4Bc.js +2 -0
- package/ui/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/ui/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/ui/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/ui/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/ui/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/ui/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/ui/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/ui/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/ui/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/ui/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/ui/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/ui/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/ui/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/ui/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/ui/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/ui/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/ui/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/ui/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/ui/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/ui/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/ui/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/ui/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/ui/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/ui/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/ui/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/ui/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/ui/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/ui/dist/assets/MarketplacePage-DGrLtolR.js +1 -0
- package/ui/dist/assets/{ProjectDetail--gPfvATB.js → ProjectDetail-BgWvA6UP.js} +2 -2
- package/ui/dist/assets/ProjectIcon-TDuliqwg.js +1 -0
- package/ui/dist/assets/ProjectList-DXgM4187.js +1 -0
- package/ui/dist/assets/{Settings-1kaf7VHE.js → Settings-xA8Zhi3p.js} +3 -3
- package/ui/dist/assets/StatusIndicator-B8vfFAxg.js +1 -0
- package/ui/dist/assets/{SummaryDetail-DV3AmONk.js → SummaryDetail-eedRfTtF.js} +2 -2
- package/ui/dist/assets/SummaryList-CLNX2P84.js +1 -0
- package/ui/dist/assets/TaskDetail-BtWclNiR.js +1 -0
- package/ui/dist/assets/TaskList-JjODAgSc.js +1 -0
- package/ui/dist/assets/TeamsPage-CBK5iAyx.js +1 -0
- package/ui/dist/assets/TicketBoard-C9aJNNYp.js +1 -0
- package/ui/dist/assets/TicketDetail-CV5JmL31.js +1 -0
- package/ui/dist/assets/TicketList-68V4lzUz.js +1 -0
- package/ui/dist/assets/UserManagement-DKTb6UpE.js +2 -0
- package/ui/dist/assets/ViewSwitcher-BvdQht2Y.js +1 -0
- package/ui/dist/assets/alert-dialog-O6qBOv_f.js +1 -0
- package/ui/dist/assets/{archive-BsLa7brF.js → archive-CX7UvZpf.js} +1 -1
- package/ui/dist/assets/badge-BbfnwDJP.js +1 -0
- package/ui/dist/assets/{bug-CmZI7jqM.js → bug-3WX0394-.js} +1 -1
- package/ui/dist/assets/{calendar-Bf0t2B82.js → calendar-buq77TaS.js} +1 -1
- package/ui/dist/assets/{chevron-up-CoUsOvZj.js → chevron-up-4ymsBJRo.js} +1 -1
- package/ui/dist/assets/{circle-x-Dgw11LgT.js → circle-x-ByXtwR6Y.js} +1 -1
- package/ui/dist/assets/constants-CVdDh7p0.js +1 -0
- package/ui/dist/assets/{cpu-DiPMQICV.js → cpu-CiuoCeDY.js} +1 -1
- package/ui/dist/assets/{database-BwTfupDi.js → database-BWXSBg5a.js} +1 -1
- package/ui/dist/assets/dialog-lDg4NvMV.js +1 -0
- package/ui/dist/assets/dollar-sign-Dmijd6DP.js +1 -0
- package/ui/dist/assets/{ellipsis-UJx4Xnf6.js → ellipsis-vT-5SVIp.js} +1 -1
- package/ui/dist/assets/{ellipsis-vertical-DoULYEKn.js → ellipsis-vertical-B4tAX_bL.js} +1 -1
- package/ui/dist/assets/feature-markdown-DBo5Q7uq.js +289 -0
- package/ui/dist/assets/{file-code-B2UrJLwi.js → file-code-ChOWdKXf.js} +1 -1
- package/ui/dist/assets/{folder-open-BJi577JH.js → folder-open-CkOUbIiP.js} +1 -1
- package/ui/dist/assets/{funnel-PkaD_HSR.js → funnel-uZkoSPP-.js} +1 -1
- package/ui/dist/assets/{git-branch-C_K30am0.js → git-branch-CwvUxj7C.js} +1 -1
- package/ui/dist/assets/{git-commit-horizontal-IT6ecxWQ.js → git-commit-horizontal-lxPzCvhD.js} +1 -1
- package/ui/dist/assets/{globe-f-jjCa_g.js → globe-D_WpJdsj.js} +1 -1
- package/ui/dist/assets/{hash-DNEv8Elo.js → hash-CA0hJ7vh.js} +1 -1
- package/ui/dist/assets/{history-BQSBo_1Q.js → history-CEWMLELs.js} +1 -1
- package/ui/dist/assets/inbox-ehtOptTV.js +1 -0
- package/ui/dist/assets/{index-nS3EErDg.js → index-C1rhbml4.js} +3 -3
- package/ui/dist/assets/index-CR8gfCHv.js +1 -0
- package/ui/dist/assets/index-DVXMpWai.js +1 -0
- package/ui/dist/assets/index-DaDJMM2v.js +1 -0
- package/ui/dist/assets/index-Djdq_0xu.js +1 -0
- package/ui/dist/assets/index-M46Gcb8K.css +1 -0
- package/ui/dist/assets/index-sEBN7w8J.js +109 -0
- package/ui/dist/assets/layers-C6Mhf8Nk.js +1 -0
- package/ui/dist/assets/{layout-dashboard-CcKt1hXw.js → layout-dashboard-BRUM0kpT.js} +1 -1
- package/ui/dist/assets/{lightbulb-Jhp7FvbU.js → lightbulb-CN2q1O5l.js} +1 -1
- package/ui/dist/assets/{link-2-DdO7ostF.js → link-2-CC4E28yJ.js} +1 -1
- package/ui/dist/assets/markdown-renderer-C6ENbB0u.js +10 -0
- package/ui/dist/assets/markdown-renderer-CfVKi3_s.css +1 -0
- package/ui/dist/assets/{message-square-CBgH65X7.js → message-square-Bbb241am.js} +1 -1
- package/ui/dist/assets/package-CwT3IzFx.js +1 -0
- package/ui/dist/assets/{pencil-CYXCEPQh.js → pencil-CDmiHzoj.js} +1 -1
- package/ui/dist/assets/{play-d1ONaH0-.js → play-tjy5jMQX.js} +1 -1
- package/ui/dist/assets/popover-CFHZf3pE.js +1 -0
- package/ui/dist/assets/progress-BboUHuLf.js +1 -0
- package/ui/dist/assets/{rocket-DhvUetsk.js → rocket--8ZHgdXJ.js} +1 -1
- package/ui/dist/assets/select-n108rXny.js +1 -0
- package/ui/dist/assets/{send-P0r5D7td.js → send-Cu7MR2Qh.js} +1 -1
- package/ui/dist/assets/server-DmodxZp-.js +1 -0
- package/ui/dist/assets/{settings-2-ocj5uHGx.js → settings-2-CkRNqkxj.js} +1 -1
- package/ui/dist/assets/sheet-7aUJkyzU.js +1 -0
- package/ui/dist/assets/{shield-check-DfVdE34l.js → shield-check-ViI3nMKE.js} +1 -1
- package/ui/dist/assets/{shield-off-8l0J6R-8.js → shield-off-DN3tagkn.js} +1 -1
- package/ui/dist/assets/skeleton-C0E1Nfro.js +1 -0
- package/ui/dist/assets/{smartphone-77_g3SQn.js → smartphone-5FghiXpA.js} +1 -1
- package/ui/dist/assets/{square-Ckzsr3Rn.js → square-DiNSx8K7.js} +1 -1
- package/ui/dist/assets/star-DhdFVidS.js +1 -0
- package/ui/dist/assets/switch-CIgVbZqQ.js +1 -0
- package/ui/dist/assets/table-BC56FVMV.js +1 -0
- package/ui/dist/assets/{tag-C35mgoEv.js → tag-CH_vQliw.js} +1 -1
- package/ui/dist/assets/textarea-CxDiKFXZ.js +1 -0
- package/ui/dist/assets/{timer-DHJBS2w1.js → timer-CdGVTb60.js} +1 -1
- package/ui/dist/assets/tooltip-BuW9A5UO.js +1 -0
- package/ui/dist/assets/{trash-2-keO5tKPE.js → trash-2-CucZJL0N.js} +1 -1
- package/ui/dist/assets/trending-down-BCezC1z2.js +1 -0
- package/ui/dist/assets/{trending-up-BBv8KbrY.js → trending-up-C5OYX2k2.js} +1 -1
- package/ui/dist/assets/vendor-query-C0p7b53x.js +4 -0
- package/ui/dist/assets/vendor-react-Mc5_kfYG.js +12 -0
- package/ui/dist/assets/vendor-ui-CXPAUBFv.js +51 -0
- package/ui/dist/assets/{wand-sparkles-BusQ52ZK.js → wand-sparkles-BaH6pJnc.js} +1 -1
- package/ui/dist/assets/{wrench-02YaOSiK.js → wrench-CjxjP6ok.js} +1 -1
- package/ui/dist/index.html +5 -2
- package/ui/dist/assets/ActivityView-BeshZXmE.js +0 -1
- package/ui/dist/assets/AgentList-QVHeldPi.js +0 -1
- package/ui/dist/assets/AnalyticsDashboard-C9R97dXE.js +0 -1
- package/ui/dist/assets/AreaChart-B73gaiVQ.js +0 -1
- package/ui/dist/assets/CartesianChart-CXYL2R-A.js +0 -36
- package/ui/dist/assets/ChatView-qjZErlrp.js +0 -10
- package/ui/dist/assets/CostsDashboard-O4DCLy1i.js +0 -1
- package/ui/dist/assets/EstimateSelect-1hQf4Osk.js +0 -1
- package/ui/dist/assets/FloatingChatbot-BZBzrJxd.js +0 -2
- package/ui/dist/assets/InviteCodeManagement-LEoGqYeA.js +0 -2
- package/ui/dist/assets/ProjectIcon-Chd_ofsw.js +0 -1
- package/ui/dist/assets/ProjectList-BvUfVB6c.js +0 -4
- package/ui/dist/assets/StatusIndicator-pRfkNcdV.js +0 -1
- package/ui/dist/assets/SummaryList-B6kXiTxL.js +0 -1
- package/ui/dist/assets/TaskDetail-CV6CzbOS.js +0 -1
- package/ui/dist/assets/TaskList-DL7brQKd.js +0 -1
- package/ui/dist/assets/TicketBoard-CrkkFj7C.js +0 -1
- package/ui/dist/assets/TicketDetail-hnnYclpD.js +0 -1
- package/ui/dist/assets/TicketList-CsDAyQCL.js +0 -1
- package/ui/dist/assets/UserManagement-BGFQyTSr.js +0 -2
- package/ui/dist/assets/ViewSwitcher-CnL0OqA8.js +0 -1
- package/ui/dist/assets/alert-dialog-SKM6Gjz4.js +0 -7
- package/ui/dist/assets/badge-CVHH1a-v.js +0 -1
- package/ui/dist/assets/brain-6o_RHVpe.js +0 -1
- package/ui/dist/assets/constants-Q5Zivl-a.js +0 -1
- package/ui/dist/assets/dialog-BUqN9Psj.js +0 -1
- package/ui/dist/assets/index-BUmnwPQr.js +0 -1
- package/ui/dist/assets/index-BfF5G4Cw.js +0 -1
- package/ui/dist/assets/index-C8N375c2.js +0 -1
- package/ui/dist/assets/index-CuxnqVVz.css +0 -1
- package/ui/dist/assets/index-CzMM3QOk.js +0 -1
- package/ui/dist/assets/index-lJlNPFVJ.js +0 -67
- package/ui/dist/assets/layers-jFqVrWMD.js +0 -1
- package/ui/dist/assets/markdown-renderer-n1ToC4XQ.js +0 -36
- package/ui/dist/assets/popover-CrmZgoWu.js +0 -1
- package/ui/dist/assets/progress-uv4SPkL5.js +0 -1
- package/ui/dist/assets/select-CeQ8AHGy.js +0 -1
- package/ui/dist/assets/server-CVHTZB72.js +0 -1
- package/ui/dist/assets/sheet-DuQExSho.js +0 -1
- package/ui/dist/assets/skeleton-TFiFJ3nB.js +0 -1
- package/ui/dist/assets/switch-CAePkd6k.js +0 -1
- package/ui/dist/assets/table-ZjAZ7hkt.js +0 -1
- package/ui/dist/assets/textarea-DsVPnSgR.js +0 -1
- package/ui/dist/assets/tooltip-BYmQ331W.js +0 -1
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request Validation Middleware
|
|
3
|
+
*
|
|
4
|
+
* Zod-based body validation for critical API endpoints.
|
|
5
|
+
* Returns structured 400 errors with field-level details.
|
|
6
|
+
*/
|
|
7
|
+
import { type Context, type Next } from 'hono';
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
/**
|
|
10
|
+
* POST /api/chat/quick
|
|
11
|
+
*/
|
|
12
|
+
export declare const ChatQuickSchema: z.ZodObject<{
|
|
13
|
+
prompt: z.ZodString;
|
|
14
|
+
model: z.ZodOptional<z.ZodString>;
|
|
15
|
+
provider: z.ZodOptional<z.ZodString>;
|
|
16
|
+
systemPrompt: z.ZodOptional<z.ZodString>;
|
|
17
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
prompt: string;
|
|
20
|
+
model?: string | undefined;
|
|
21
|
+
provider?: string | undefined;
|
|
22
|
+
systemPrompt?: string | undefined;
|
|
23
|
+
temperature?: number | undefined;
|
|
24
|
+
}, {
|
|
25
|
+
prompt: string;
|
|
26
|
+
model?: string | undefined;
|
|
27
|
+
provider?: string | undefined;
|
|
28
|
+
systemPrompt?: string | undefined;
|
|
29
|
+
temperature?: number | undefined;
|
|
30
|
+
}>;
|
|
31
|
+
/**
|
|
32
|
+
* POST /api/chat/conversations/:id/messages
|
|
33
|
+
*/
|
|
34
|
+
export declare const ChatMessageSchema: z.ZodObject<{
|
|
35
|
+
content: z.ZodString;
|
|
36
|
+
model: z.ZodOptional<z.ZodString>;
|
|
37
|
+
provider: z.ZodOptional<z.ZodString>;
|
|
38
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
39
|
+
maxTokens: z.ZodOptional<z.ZodNumber>;
|
|
40
|
+
}, "strip", z.ZodTypeAny, {
|
|
41
|
+
content: string;
|
|
42
|
+
model?: string | undefined;
|
|
43
|
+
provider?: string | undefined;
|
|
44
|
+
maxTokens?: number | undefined;
|
|
45
|
+
temperature?: number | undefined;
|
|
46
|
+
}, {
|
|
47
|
+
content: string;
|
|
48
|
+
model?: string | undefined;
|
|
49
|
+
provider?: string | undefined;
|
|
50
|
+
maxTokens?: number | undefined;
|
|
51
|
+
temperature?: number | undefined;
|
|
52
|
+
}>;
|
|
53
|
+
/**
|
|
54
|
+
* POST /api/chat/conversations
|
|
55
|
+
*/
|
|
56
|
+
export declare const CreateConversationSchema: z.ZodObject<{
|
|
57
|
+
mode: z.ZodOptional<z.ZodEnum<["chat", "agentic"]>>;
|
|
58
|
+
presetId: z.ZodOptional<z.ZodString>;
|
|
59
|
+
title: z.ZodOptional<z.ZodString>;
|
|
60
|
+
taskId: z.ZodOptional<z.ZodString>;
|
|
61
|
+
ticketId: z.ZodOptional<z.ZodString>;
|
|
62
|
+
projectId: z.ZodOptional<z.ZodString>;
|
|
63
|
+
}, "strip", z.ZodTypeAny, {
|
|
64
|
+
taskId?: string | undefined;
|
|
65
|
+
title?: string | undefined;
|
|
66
|
+
mode?: "chat" | "agentic" | undefined;
|
|
67
|
+
ticketId?: string | undefined;
|
|
68
|
+
projectId?: string | undefined;
|
|
69
|
+
presetId?: string | undefined;
|
|
70
|
+
}, {
|
|
71
|
+
taskId?: string | undefined;
|
|
72
|
+
title?: string | undefined;
|
|
73
|
+
mode?: "chat" | "agentic" | undefined;
|
|
74
|
+
ticketId?: string | undefined;
|
|
75
|
+
projectId?: string | undefined;
|
|
76
|
+
presetId?: string | undefined;
|
|
77
|
+
}>;
|
|
78
|
+
/**
|
|
79
|
+
* POST /api/tasks
|
|
80
|
+
*/
|
|
81
|
+
export declare const CreateTaskSchema: z.ZodObject<{
|
|
82
|
+
title: z.ZodString;
|
|
83
|
+
input: z.ZodOptional<z.ZodString>;
|
|
84
|
+
priority: z.ZodOptional<z.ZodNumber>;
|
|
85
|
+
}, "strip", z.ZodTypeAny, {
|
|
86
|
+
title: string;
|
|
87
|
+
priority?: number | undefined;
|
|
88
|
+
input?: string | undefined;
|
|
89
|
+
}, {
|
|
90
|
+
title: string;
|
|
91
|
+
priority?: number | undefined;
|
|
92
|
+
input?: string | undefined;
|
|
93
|
+
}>;
|
|
94
|
+
/**
|
|
95
|
+
* POST /api/gateway/execute-secure
|
|
96
|
+
*/
|
|
97
|
+
export declare const GatewayExecuteSchema: z.ZodObject<{
|
|
98
|
+
task: z.ZodObject<{
|
|
99
|
+
id: z.ZodOptional<z.ZodString>;
|
|
100
|
+
title: z.ZodOptional<z.ZodString>;
|
|
101
|
+
input: z.ZodOptional<z.ZodString>;
|
|
102
|
+
}, "strip", z.ZodTypeAny, {
|
|
103
|
+
title?: string | undefined;
|
|
104
|
+
id?: string | undefined;
|
|
105
|
+
input?: string | undefined;
|
|
106
|
+
}, {
|
|
107
|
+
title?: string | undefined;
|
|
108
|
+
id?: string | undefined;
|
|
109
|
+
input?: string | undefined;
|
|
110
|
+
}>;
|
|
111
|
+
preferredAgent: z.ZodOptional<z.ZodString>;
|
|
112
|
+
workflow: z.ZodOptional<z.ZodString>;
|
|
113
|
+
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
114
|
+
priority: z.ZodOptional<z.ZodNumber>;
|
|
115
|
+
autonomous: z.ZodOptional<z.ZodBoolean>;
|
|
116
|
+
context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
117
|
+
}, "strip", z.ZodTypeAny, {
|
|
118
|
+
task: {
|
|
119
|
+
title?: string | undefined;
|
|
120
|
+
id?: string | undefined;
|
|
121
|
+
input?: string | undefined;
|
|
122
|
+
};
|
|
123
|
+
priority?: number | undefined;
|
|
124
|
+
autonomous?: boolean | undefined;
|
|
125
|
+
workflow?: string | undefined;
|
|
126
|
+
context?: Record<string, unknown> | undefined;
|
|
127
|
+
timeoutMs?: number | undefined;
|
|
128
|
+
preferredAgent?: string | undefined;
|
|
129
|
+
}, {
|
|
130
|
+
task: {
|
|
131
|
+
title?: string | undefined;
|
|
132
|
+
id?: string | undefined;
|
|
133
|
+
input?: string | undefined;
|
|
134
|
+
};
|
|
135
|
+
priority?: number | undefined;
|
|
136
|
+
autonomous?: boolean | undefined;
|
|
137
|
+
workflow?: string | undefined;
|
|
138
|
+
context?: Record<string, unknown> | undefined;
|
|
139
|
+
timeoutMs?: number | undefined;
|
|
140
|
+
preferredAgent?: string | undefined;
|
|
141
|
+
}>;
|
|
142
|
+
export type ChatQuickInput = z.infer<typeof ChatQuickSchema>;
|
|
143
|
+
export type ChatMessageInput = z.infer<typeof ChatMessageSchema>;
|
|
144
|
+
export type CreateConversationInput = z.infer<typeof CreateConversationSchema>;
|
|
145
|
+
export type CreateTaskInput = z.infer<typeof CreateTaskSchema>;
|
|
146
|
+
export type GatewayExecuteInput = z.infer<typeof GatewayExecuteSchema>;
|
|
147
|
+
/**
|
|
148
|
+
* Creates a Hono middleware that validates the JSON request body against a Zod schema.
|
|
149
|
+
*
|
|
150
|
+
* On success the parsed data is stored at `c.get('validatedBody')`.
|
|
151
|
+
* On failure a structured 400 is returned with per-field error details.
|
|
152
|
+
*
|
|
153
|
+
* Usage:
|
|
154
|
+
* app.post('/api/chat/quick', validateBody(ChatQuickSchema), async (c) => {
|
|
155
|
+
* const body = c.get('validatedBody') as ChatQuickInput;
|
|
156
|
+
* });
|
|
157
|
+
*/
|
|
158
|
+
export declare function validateBody<T>(schema: z.ZodSchema<T>): (c: Context, next: Next) => Promise<Response | void>;
|
|
159
|
+
//# sourceMappingURL=request-validator.d.ts.map
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request Validation Middleware
|
|
3
|
+
*
|
|
4
|
+
* Zod-based body validation for critical API endpoints.
|
|
5
|
+
* Returns structured 400 errors with field-level details.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
// ─── Schemas ─────────────────────────────────────────────────────────────────
|
|
9
|
+
/**
|
|
10
|
+
* POST /api/chat/quick
|
|
11
|
+
*/
|
|
12
|
+
export const ChatQuickSchema = z.object({
|
|
13
|
+
prompt: z.string().min(1).max(100_000),
|
|
14
|
+
model: z.string().max(100).optional(),
|
|
15
|
+
provider: z.string().max(50).optional(),
|
|
16
|
+
systemPrompt: z.string().max(10_000).optional(),
|
|
17
|
+
temperature: z.number().min(0).max(2).optional(),
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* POST /api/chat/conversations/:id/messages
|
|
21
|
+
*/
|
|
22
|
+
export const ChatMessageSchema = z.object({
|
|
23
|
+
content: z.string().min(1).max(100_000),
|
|
24
|
+
model: z.string().max(100).optional(),
|
|
25
|
+
provider: z.string().max(50).optional(),
|
|
26
|
+
temperature: z.number().min(0).max(2).optional(),
|
|
27
|
+
maxTokens: z.number().int().positive().optional(),
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* POST /api/chat/conversations
|
|
31
|
+
*/
|
|
32
|
+
export const CreateConversationSchema = z.object({
|
|
33
|
+
mode: z.enum(['chat', 'agentic']).optional(),
|
|
34
|
+
presetId: z.string().max(100).optional(),
|
|
35
|
+
title: z.string().max(200).optional(),
|
|
36
|
+
taskId: z.string().max(100).optional(),
|
|
37
|
+
ticketId: z.string().max(100).optional(),
|
|
38
|
+
projectId: z.string().max(100).optional(),
|
|
39
|
+
});
|
|
40
|
+
/**
|
|
41
|
+
* POST /api/tasks
|
|
42
|
+
*/
|
|
43
|
+
export const CreateTaskSchema = z.object({
|
|
44
|
+
title: z.string().min(1).max(500),
|
|
45
|
+
input: z.string().min(1).max(100_000).optional(),
|
|
46
|
+
priority: z.number().int().min(1).max(10).optional(),
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* POST /api/gateway/execute-secure
|
|
50
|
+
*/
|
|
51
|
+
export const GatewayExecuteSchema = z.object({
|
|
52
|
+
task: z.object({
|
|
53
|
+
id: z.string().max(100).optional(),
|
|
54
|
+
title: z.string().min(1).max(500).optional(),
|
|
55
|
+
input: z.string().max(100_000).optional(),
|
|
56
|
+
}),
|
|
57
|
+
preferredAgent: z.string().max(100).optional(),
|
|
58
|
+
workflow: z.string().max(50).optional(),
|
|
59
|
+
timeoutMs: z.number().int().min(0).max(600_000).optional(),
|
|
60
|
+
priority: z.number().int().min(1).max(10).optional(),
|
|
61
|
+
autonomous: z.boolean().optional(),
|
|
62
|
+
context: z.record(z.unknown()).optional(),
|
|
63
|
+
});
|
|
64
|
+
// ─── Middleware factory ───────────────────────────────────────────────────────
|
|
65
|
+
/**
|
|
66
|
+
* Creates a Hono middleware that validates the JSON request body against a Zod schema.
|
|
67
|
+
*
|
|
68
|
+
* On success the parsed data is stored at `c.get('validatedBody')`.
|
|
69
|
+
* On failure a structured 400 is returned with per-field error details.
|
|
70
|
+
*
|
|
71
|
+
* Usage:
|
|
72
|
+
* app.post('/api/chat/quick', validateBody(ChatQuickSchema), async (c) => {
|
|
73
|
+
* const body = c.get('validatedBody') as ChatQuickInput;
|
|
74
|
+
* });
|
|
75
|
+
*/
|
|
76
|
+
export function validateBody(schema) {
|
|
77
|
+
return async (c, next) => {
|
|
78
|
+
const body = await c.req.json().catch(() => null);
|
|
79
|
+
if (body === null || typeof body !== 'object' || Array.isArray(body)) {
|
|
80
|
+
return c.json({ error: 'Invalid JSON body' }, 400);
|
|
81
|
+
}
|
|
82
|
+
const result = schema.safeParse(body);
|
|
83
|
+
if (!result.success) {
|
|
84
|
+
return c.json({
|
|
85
|
+
error: 'Validation failed',
|
|
86
|
+
details: result.error.flatten().fieldErrors,
|
|
87
|
+
}, 400);
|
|
88
|
+
}
|
|
89
|
+
c.set('validatedBody', result.data);
|
|
90
|
+
await next();
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=request-validator.js.map
|
package/dist/plugins/sdk.d.ts
CHANGED
|
@@ -27,9 +27,31 @@ export interface ProfClawPlugin {
|
|
|
27
27
|
skills?: Array<{
|
|
28
28
|
id: string;
|
|
29
29
|
name: string;
|
|
30
|
+
description?: string;
|
|
30
31
|
}>;
|
|
31
32
|
searchProvider?: unknown;
|
|
32
33
|
activate?(): Promise<void>;
|
|
33
34
|
deactivate?(): Promise<void>;
|
|
35
|
+
/** Middleware hooks for intercepting tool execution */
|
|
36
|
+
hooks?: {
|
|
37
|
+
beforeToolExec?: (toolName: string, args: Record<string, unknown>) => Promise<Record<string, unknown>>;
|
|
38
|
+
afterToolExec?: (toolName: string, result: unknown) => Promise<unknown>;
|
|
39
|
+
beforePrompt?: (prompt: string) => Promise<string>;
|
|
40
|
+
};
|
|
34
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Helper for plugin authors to define a plugin with type safety.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* import { definePlugin } from '@profclaw/sdk';
|
|
48
|
+
*
|
|
49
|
+
* export default definePlugin({
|
|
50
|
+
* metadata: { id: 'my-plugin', name: 'My Plugin', version: '1.0.0' },
|
|
51
|
+
* tools: [myCustomTool],
|
|
52
|
+
* activate: async () => console.log('Plugin loaded!'),
|
|
53
|
+
* });
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare function definePlugin(plugin: ProfClawPlugin): ProfClawPlugin;
|
|
35
57
|
//# sourceMappingURL=sdk.d.ts.map
|
package/dist/plugins/sdk.js
CHANGED
|
@@ -4,5 +4,21 @@
|
|
|
4
4
|
* Public types and interfaces for building profClaw plugins.
|
|
5
5
|
* Third-party plugins implement ProfClawPlugin to extend the system.
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Helper for plugin authors to define a plugin with type safety.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { definePlugin } from '@profclaw/sdk';
|
|
13
|
+
*
|
|
14
|
+
* export default definePlugin({
|
|
15
|
+
* metadata: { id: 'my-plugin', name: 'My Plugin', version: '1.0.0' },
|
|
16
|
+
* tools: [myCustomTool],
|
|
17
|
+
* activate: async () => console.log('Plugin loaded!'),
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function definePlugin(plugin) {
|
|
22
|
+
return plugin;
|
|
23
|
+
}
|
|
8
24
|
//# sourceMappingURL=sdk.js.map
|
package/dist/projects/types.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ export declare const ProjectExternalLinkSchema: z.ZodObject<{
|
|
|
28
28
|
id: string;
|
|
29
29
|
createdAt: string;
|
|
30
30
|
projectId: string;
|
|
31
|
-
platform: "jira" | "linear" | "github" | "
|
|
31
|
+
platform: "jira" | "linear" | "github" | "monday" | "plane";
|
|
32
32
|
externalId: string;
|
|
33
33
|
syncEnabled: boolean;
|
|
34
34
|
syncDirection: "push" | "bidirectional" | "pull";
|
|
@@ -39,7 +39,7 @@ export declare const ProjectExternalLinkSchema: z.ZodObject<{
|
|
|
39
39
|
id: string;
|
|
40
40
|
createdAt: string;
|
|
41
41
|
projectId: string;
|
|
42
|
-
platform: "jira" | "linear" | "github" | "
|
|
42
|
+
platform: "jira" | "linear" | "github" | "monday" | "plane";
|
|
43
43
|
externalId: string;
|
|
44
44
|
externalUrl?: string | undefined;
|
|
45
45
|
syncEnabled?: boolean | undefined;
|
|
@@ -136,11 +136,11 @@ export declare const CreateProjectSchema: z.ZodObject<{
|
|
|
136
136
|
externalId: z.ZodString;
|
|
137
137
|
externalUrl: z.ZodOptional<z.ZodString>;
|
|
138
138
|
}, "strip", z.ZodTypeAny, {
|
|
139
|
-
platform: "jira" | "linear" | "github" | "
|
|
139
|
+
platform: "jira" | "linear" | "github" | "monday" | "plane";
|
|
140
140
|
externalId: string;
|
|
141
141
|
externalUrl?: string | undefined;
|
|
142
142
|
}, {
|
|
143
|
-
platform: "jira" | "linear" | "github" | "
|
|
143
|
+
platform: "jira" | "linear" | "github" | "monday" | "plane";
|
|
144
144
|
externalId: string;
|
|
145
145
|
externalUrl?: string | undefined;
|
|
146
146
|
}>>;
|
|
@@ -157,7 +157,7 @@ export declare const CreateProjectSchema: z.ZodObject<{
|
|
|
157
157
|
boardView?: boolean | undefined;
|
|
158
158
|
lead?: string | undefined;
|
|
159
159
|
externalLink?: {
|
|
160
|
-
platform: "jira" | "linear" | "github" | "
|
|
160
|
+
platform: "jira" | "linear" | "github" | "monday" | "plane";
|
|
161
161
|
externalId: string;
|
|
162
162
|
externalUrl?: string | undefined;
|
|
163
163
|
} | undefined;
|
|
@@ -174,7 +174,7 @@ export declare const CreateProjectSchema: z.ZodObject<{
|
|
|
174
174
|
boardView?: boolean | undefined;
|
|
175
175
|
lead?: string | undefined;
|
|
176
176
|
externalLink?: {
|
|
177
|
-
platform: "jira" | "linear" | "github" | "
|
|
177
|
+
platform: "jira" | "linear" | "github" | "monday" | "plane";
|
|
178
178
|
externalId: string;
|
|
179
179
|
externalUrl?: string | undefined;
|
|
180
180
|
} | undefined;
|
|
@@ -197,11 +197,11 @@ export declare const UpdateProjectSchema: z.ZodObject<Omit<{
|
|
|
197
197
|
externalId: z.ZodString;
|
|
198
198
|
externalUrl: z.ZodOptional<z.ZodString>;
|
|
199
199
|
}, "strip", z.ZodTypeAny, {
|
|
200
|
-
platform: "jira" | "linear" | "github" | "
|
|
200
|
+
platform: "jira" | "linear" | "github" | "monday" | "plane";
|
|
201
201
|
externalId: string;
|
|
202
202
|
externalUrl?: string | undefined;
|
|
203
203
|
}, {
|
|
204
|
-
platform: "jira" | "linear" | "github" | "
|
|
204
|
+
platform: "jira" | "linear" | "github" | "monday" | "plane";
|
|
205
205
|
externalId: string;
|
|
206
206
|
externalUrl?: string | undefined;
|
|
207
207
|
}>>>;
|
|
@@ -217,7 +217,7 @@ export declare const UpdateProjectSchema: z.ZodObject<Omit<{
|
|
|
217
217
|
boardView?: boolean | undefined;
|
|
218
218
|
lead?: string | undefined;
|
|
219
219
|
externalLink?: {
|
|
220
|
-
platform: "jira" | "linear" | "github" | "
|
|
220
|
+
platform: "jira" | "linear" | "github" | "monday" | "plane";
|
|
221
221
|
externalId: string;
|
|
222
222
|
externalUrl?: string | undefined;
|
|
223
223
|
} | undefined;
|
|
@@ -233,7 +233,7 @@ export declare const UpdateProjectSchema: z.ZodObject<Omit<{
|
|
|
233
233
|
boardView?: boolean | undefined;
|
|
234
234
|
lead?: string | undefined;
|
|
235
235
|
externalLink?: {
|
|
236
|
-
platform: "jira" | "linear" | "github" | "
|
|
236
|
+
platform: "jira" | "linear" | "github" | "monday" | "plane";
|
|
237
237
|
externalId: string;
|
|
238
238
|
externalUrl?: string | undefined;
|
|
239
239
|
} | undefined;
|
|
@@ -53,6 +53,17 @@ declare class AIProviderManager {
|
|
|
53
53
|
provider: ProviderType;
|
|
54
54
|
model: string;
|
|
55
55
|
};
|
|
56
|
+
/**
|
|
57
|
+
* Get the default model for a provider, respecting runtime config.
|
|
58
|
+
* For Azure, uses the deployment name instead of the static "gpt-4o".
|
|
59
|
+
*/
|
|
60
|
+
getDefaultModelForProvider(provider: ProviderType): string;
|
|
61
|
+
/**
|
|
62
|
+
* Resolve a model name to an Azure deployment.
|
|
63
|
+
* Azure uses deployment names (e.g. "gpt4o") instead of model IDs (e.g. "gpt-4o").
|
|
64
|
+
* Checks: configured deployment name → env var → strip dashes from model name.
|
|
65
|
+
*/
|
|
66
|
+
private resolveToAzureDeployment;
|
|
56
67
|
getModel(provider: ProviderType, modelId: string): Promise<LanguageModel>;
|
|
57
68
|
getModelInfo(modelId: string): ModelInfo | undefined;
|
|
58
69
|
getModelsForProvider(provider: ProviderType): ModelInfo[];
|
package/dist/providers/ai-sdk.js
CHANGED
|
@@ -26,8 +26,12 @@ async function withRetry(fn, maxRetries = AI_MAX_RETRIES) {
|
|
|
26
26
|
return await fn();
|
|
27
27
|
}
|
|
28
28
|
catch (error) {
|
|
29
|
-
const
|
|
30
|
-
|
|
29
|
+
const msg = error instanceof Error ? error.message : '';
|
|
30
|
+
// Don't retry quota exhaustion — it won't resolve with backoff
|
|
31
|
+
const isQuotaError = /quota|exceeded your current|billing/i.test(msg);
|
|
32
|
+
const isRetryable = !isQuotaError &&
|
|
33
|
+
error instanceof Error &&
|
|
34
|
+
(/429|503|rate.limit|too.many|service.unavailable|ECONNRESET|ETIMEDOUT|fetch.failed/i.test(msg));
|
|
31
35
|
if (!isRetryable || attempt === maxRetries)
|
|
32
36
|
throw error;
|
|
33
37
|
const delay = Math.min(1000 * 2 ** attempt, 10000);
|
|
@@ -49,7 +53,7 @@ const PROVIDER_DEFAULT_MODEL = {
|
|
|
49
53
|
anthropic: 'claude-sonnet-4-5-20250929',
|
|
50
54
|
openai: 'gpt-4o',
|
|
51
55
|
google: 'gemini-2.0-flash',
|
|
52
|
-
azure: 'gpt-4o',
|
|
56
|
+
azure: 'gpt-4o', // Resolved at runtime via deploymentName config
|
|
53
57
|
groq: 'llama-3.3-70b-versatile',
|
|
54
58
|
cerebras: 'llama-3.3-70b',
|
|
55
59
|
fireworks: 'accounts/fireworks/models/llama-v3p1-70b-instruct',
|
|
@@ -172,17 +176,17 @@ class AIProviderManager {
|
|
|
172
176
|
enabled: true,
|
|
173
177
|
});
|
|
174
178
|
}
|
|
175
|
-
// Azure OpenAI (supports both
|
|
179
|
+
// Azure OpenAI (supports both base URL and resource name modes)
|
|
176
180
|
if (process.env.AZURE_OPENAI_API_KEY) {
|
|
177
|
-
// Check if using Foundry (custom base URL) or standard (resource name)
|
|
178
181
|
const baseUrl = process.env.AZURE_OPENAI_BASE_URL || process.env.AZURE_OPENAI_ENDPOINT;
|
|
179
|
-
const resourceName = process.env.AZURE_OPENAI_RESOURCE_NAME;
|
|
182
|
+
const resourceName = process.env.AZURE_OPENAI_RESOURCE_NAME || process.env.AZURE_RESOURCE_NAME;
|
|
180
183
|
if (baseUrl || resourceName) {
|
|
181
184
|
this.configure('azure', {
|
|
182
185
|
type: 'azure',
|
|
183
186
|
apiKey: process.env.AZURE_OPENAI_API_KEY,
|
|
187
|
+
// Prefer explicit base URL over resource name (resource name constructs URL automatically)
|
|
184
188
|
baseUrl: baseUrl,
|
|
185
|
-
resourceName: resourceName,
|
|
189
|
+
resourceName: baseUrl ? undefined : resourceName, // Don't use resourceName if baseUrl is set
|
|
186
190
|
deploymentName: process.env.AZURE_OPENAI_DEPLOYMENT_NAME,
|
|
187
191
|
apiVersion: process.env.AZURE_OPENAI_API_VERSION,
|
|
188
192
|
enabled: true,
|
|
@@ -689,7 +693,7 @@ class AIProviderManager {
|
|
|
689
693
|
}
|
|
690
694
|
}
|
|
691
695
|
resolveModel(modelOrAlias) {
|
|
692
|
-
// Check if it's a full provider/model path
|
|
696
|
+
// Check if it's a full provider/model path (e.g. "azure/gpt4o", "ollama/llama3.2")
|
|
693
697
|
if (modelOrAlias.includes('/')) {
|
|
694
698
|
const [provider, model] = modelOrAlias.split('/');
|
|
695
699
|
return { provider: provider, model };
|
|
@@ -700,15 +704,35 @@ class AIProviderManager {
|
|
|
700
704
|
// For Azure, use the configured deployment name instead of the default alias model
|
|
701
705
|
if (alias.provider === 'azure') {
|
|
702
706
|
const azureConfig = this.configs.get('azure');
|
|
703
|
-
|
|
704
|
-
|
|
707
|
+
const azureModel = azureConfig?.defaultModel
|
|
708
|
+
|| azureConfig?.deploymentName
|
|
709
|
+
|| process.env.AZURE_OPENAI_DEPLOYMENT_NAME;
|
|
710
|
+
if (azureModel) {
|
|
711
|
+
return { provider: 'azure', model: azureModel };
|
|
705
712
|
}
|
|
706
713
|
}
|
|
707
|
-
|
|
714
|
+
// If the alias points to a configured provider, use it directly
|
|
715
|
+
if (this.isConfigured(alias.provider)) {
|
|
716
|
+
return alias;
|
|
717
|
+
}
|
|
718
|
+
// If the alias provider isn't configured, try Azure as a fallback
|
|
719
|
+
// (Azure can serve OpenAI models like gpt-4o via deployment names)
|
|
720
|
+
if (this.isConfigured('azure') && (alias.provider === 'openai')) {
|
|
721
|
+
return this.resolveToAzureDeployment(modelOrAlias);
|
|
722
|
+
}
|
|
708
723
|
}
|
|
709
724
|
// Try to find in catalog
|
|
710
725
|
const catalogModel = MODEL_CATALOG.find((m) => m.id === modelOrAlias);
|
|
711
726
|
if (catalogModel) {
|
|
727
|
+
// If the catalog provider is configured, use it
|
|
728
|
+
if (this.isConfigured(catalogModel.provider)) {
|
|
729
|
+
return { provider: catalogModel.provider, model: catalogModel.id };
|
|
730
|
+
}
|
|
731
|
+
// OpenAI models can be served by Azure via deployment names
|
|
732
|
+
if (catalogModel.provider === 'openai' && this.isConfigured('azure')) {
|
|
733
|
+
return this.resolveToAzureDeployment(modelOrAlias);
|
|
734
|
+
}
|
|
735
|
+
// Fallback: use catalog as-is (will fail at API call time with clear error)
|
|
712
736
|
return { provider: catalogModel.provider, model: catalogModel.id };
|
|
713
737
|
}
|
|
714
738
|
// Default to the auto-selected default provider
|
|
@@ -717,6 +741,38 @@ class AIProviderManager {
|
|
|
717
741
|
const defaultModel = defaultConfig?.defaultModel || modelOrAlias;
|
|
718
742
|
return { provider: this.defaultProvider, model: defaultModel };
|
|
719
743
|
}
|
|
744
|
+
/**
|
|
745
|
+
* Get the default model for a provider, respecting runtime config.
|
|
746
|
+
* For Azure, uses the deployment name instead of the static "gpt-4o".
|
|
747
|
+
*/
|
|
748
|
+
getDefaultModelForProvider(provider) {
|
|
749
|
+
if (provider === 'azure') {
|
|
750
|
+
const config = this.configs.get('azure');
|
|
751
|
+
return config?.deploymentName
|
|
752
|
+
|| config?.defaultModel
|
|
753
|
+
|| process.env.AZURE_OPENAI_DEPLOYMENT_NAME
|
|
754
|
+
|| PROVIDER_DEFAULT_MODEL.azure
|
|
755
|
+
|| 'gpt-4o';
|
|
756
|
+
}
|
|
757
|
+
return PROVIDER_DEFAULT_MODEL[provider] || 'llama3.2';
|
|
758
|
+
}
|
|
759
|
+
/**
|
|
760
|
+
* Resolve a model name to an Azure deployment.
|
|
761
|
+
* Azure uses deployment names (e.g. "gpt4o") instead of model IDs (e.g. "gpt-4o").
|
|
762
|
+
* Checks: configured deployment name → env var → strip dashes from model name.
|
|
763
|
+
*/
|
|
764
|
+
resolveToAzureDeployment(modelOrAlias) {
|
|
765
|
+
const azureConfig = this.configs.get('azure');
|
|
766
|
+
// Use configured deployment name if it looks like it matches the requested model
|
|
767
|
+
const deployment = azureConfig?.deploymentName
|
|
768
|
+
|| process.env.AZURE_OPENAI_DEPLOYMENT_NAME;
|
|
769
|
+
if (deployment) {
|
|
770
|
+
return { provider: 'azure', model: deployment };
|
|
771
|
+
}
|
|
772
|
+
// Try stripping dashes (gpt-4o → gpt4o) as Azure often uses this convention
|
|
773
|
+
const stripped = modelOrAlias.replace(/-/g, '');
|
|
774
|
+
return { provider: 'azure', model: stripped };
|
|
775
|
+
}
|
|
720
776
|
async getModel(provider, modelId) {
|
|
721
777
|
await this.ensureProvider(provider);
|
|
722
778
|
const key = this.providerKey(provider);
|
|
@@ -758,9 +814,12 @@ class AIProviderManager {
|
|
|
758
814
|
// Azure uses .chat() method for deployment-based access
|
|
759
815
|
if (provider === 'azure') {
|
|
760
816
|
let deployment = modelId;
|
|
761
|
-
if (
|
|
817
|
+
if (deployment === 'default' || !deployment) {
|
|
762
818
|
const azureConfig = this.configs.get('azure');
|
|
763
|
-
deployment = azureConfig?.defaultModel
|
|
819
|
+
deployment = azureConfig?.defaultModel
|
|
820
|
+
|| azureConfig?.deploymentName
|
|
821
|
+
|| process.env.AZURE_OPENAI_DEPLOYMENT_NAME
|
|
822
|
+
|| 'default';
|
|
764
823
|
if (deployment === 'default') {
|
|
765
824
|
throw new Error('Azure deployment not configured. Set defaultModel in Azure config or AZURE_OPENAI_DEPLOYMENT_NAME.');
|
|
766
825
|
}
|
|
@@ -793,7 +852,7 @@ class AIProviderManager {
|
|
|
793
852
|
// Resolve model
|
|
794
853
|
const modelRef = request.model
|
|
795
854
|
? this.resolveModel(request.model)
|
|
796
|
-
: { provider: this.defaultProvider, model:
|
|
855
|
+
: { provider: this.defaultProvider, model: this.getDefaultModelForProvider(this.defaultProvider) };
|
|
797
856
|
const model = await this.getModel(modelRef.provider, modelRef.model);
|
|
798
857
|
// Convert messages to AI SDK format
|
|
799
858
|
const messages = request.messages.map((msg) => ({
|
|
@@ -851,7 +910,7 @@ class AIProviderManager {
|
|
|
851
910
|
// Resolve model
|
|
852
911
|
const modelRef = request.model
|
|
853
912
|
? this.resolveModel(request.model)
|
|
854
|
-
: { provider: this.defaultProvider, model:
|
|
913
|
+
: { provider: this.defaultProvider, model: this.getDefaultModelForProvider(this.defaultProvider) };
|
|
855
914
|
const model = await this.getModel(modelRef.provider, modelRef.model);
|
|
856
915
|
// Convert messages
|
|
857
916
|
const messages = request.messages.map((msg) => ({
|
|
@@ -931,7 +990,7 @@ class AIProviderManager {
|
|
|
931
990
|
// Resolve model
|
|
932
991
|
const modelRef = request.model
|
|
933
992
|
? this.resolveModel(request.model)
|
|
934
|
-
: { provider: this.defaultProvider, model:
|
|
993
|
+
: { provider: this.defaultProvider, model: this.getDefaultModelForProvider(this.defaultProvider) };
|
|
935
994
|
const model = await this.getModel(modelRef.provider, modelRef.model);
|
|
936
995
|
// Check if model supports native tools
|
|
937
996
|
const toolSupport = this.modelSupportsTools(modelRef.model || modelRef.provider + '/' + modelRef.model);
|
|
@@ -1078,7 +1137,7 @@ class AIProviderManager {
|
|
|
1078
1137
|
modelSupportsTools(modelOrAlias) {
|
|
1079
1138
|
const modelRef = modelOrAlias
|
|
1080
1139
|
? this.resolveModel(modelOrAlias)
|
|
1081
|
-
: { provider: this.defaultProvider, model:
|
|
1140
|
+
: { provider: this.defaultProvider, model: this.getDefaultModelForProvider(this.defaultProvider) };
|
|
1082
1141
|
// Azure OpenAI: All GPT-4, GPT-4o, and GPT-3.5-turbo models support function calling
|
|
1083
1142
|
// We check provider first since Azure deployment names won't be in MODEL_CATALOG
|
|
1084
1143
|
if (modelRef.provider === 'azure') {
|
|
@@ -1123,7 +1182,7 @@ class AIProviderManager {
|
|
|
1123
1182
|
// Resolve model
|
|
1124
1183
|
const modelRef = request.model
|
|
1125
1184
|
? this.resolveModel(request.model)
|
|
1126
|
-
: { provider: this.defaultProvider, model:
|
|
1185
|
+
: { provider: this.defaultProvider, model: this.getDefaultModelForProvider(this.defaultProvider) };
|
|
1127
1186
|
const model = await this.getModel(modelRef.provider, modelRef.model);
|
|
1128
1187
|
// Check if model supports native tool calling
|
|
1129
1188
|
const toolSupport = this.modelSupportsTools(request.model);
|
|
@@ -1297,7 +1356,7 @@ class AIProviderManager {
|
|
|
1297
1356
|
// Resolve model
|
|
1298
1357
|
const modelRef = request.model
|
|
1299
1358
|
? this.resolveModel(request.model)
|
|
1300
|
-
: { provider: this.defaultProvider, model:
|
|
1359
|
+
: { provider: this.defaultProvider, model: this.getDefaultModelForProvider(this.defaultProvider) };
|
|
1301
1360
|
const model = await this.getModel(modelRef.provider, modelRef.model);
|
|
1302
1361
|
// Convert messages
|
|
1303
1362
|
const messages = toAiMessages(request.messages);
|