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.
Files changed (477) hide show
  1. package/.env.example +14 -2
  2. package/CHANGELOG.md +37 -0
  3. package/CONTRIBUTING.md +20 -0
  4. package/Dockerfile +39 -23
  5. package/README.md +174 -40
  6. package/dist/agents/agent-summary.d.ts +44 -0
  7. package/dist/agents/agent-summary.js +176 -0
  8. package/dist/agents/auto-memory.d.ts +59 -0
  9. package/dist/agents/auto-memory.js +310 -0
  10. package/dist/agents/checkpoint-manager.d.ts +76 -0
  11. package/dist/agents/checkpoint-manager.js +156 -0
  12. package/dist/agents/circuit-breaker.d.ts +54 -0
  13. package/dist/agents/circuit-breaker.js +153 -0
  14. package/dist/agents/context-compactor.d.ts +70 -0
  15. package/dist/agents/context-compactor.js +361 -0
  16. package/dist/agents/conversation-branch.d.ts +55 -0
  17. package/dist/agents/conversation-branch.js +115 -0
  18. package/dist/agents/error-recovery.d.ts +44 -0
  19. package/dist/agents/error-recovery.js +197 -0
  20. package/dist/agents/events.d.ts +76 -0
  21. package/dist/agents/events.js +8 -0
  22. package/dist/agents/executor.d.ts +35 -1
  23. package/dist/agents/executor.js +573 -124
  24. package/dist/agents/file-snapshots.d.ts +72 -0
  25. package/dist/agents/file-snapshots.js +182 -0
  26. package/dist/agents/index.d.ts +2 -0
  27. package/dist/agents/orchestrator.d.ts +183 -0
  28. package/dist/agents/orchestrator.js +495 -0
  29. package/dist/agents/permissions.d.ts +63 -0
  30. package/dist/agents/permissions.js +138 -0
  31. package/dist/agents/plan-mode.d.ts +71 -0
  32. package/dist/agents/plan-mode.js +186 -0
  33. package/dist/agents/prompt-suggestions.d.ts +33 -0
  34. package/dist/agents/prompt-suggestions.js +208 -0
  35. package/dist/agents/rate-limit-monitor.d.ts +56 -0
  36. package/dist/agents/rate-limit-monitor.js +224 -0
  37. package/dist/agents/result-store.d.ts +37 -0
  38. package/dist/agents/result-store.js +104 -0
  39. package/dist/agents/session-diff.d.ts +43 -0
  40. package/dist/agents/session-diff.js +258 -0
  41. package/dist/agents/tool-loader.d.ts +65 -0
  42. package/dist/agents/tool-loader.js +273 -0
  43. package/dist/agents/transcript.d.ts +96 -0
  44. package/dist/agents/transcript.js +267 -0
  45. package/dist/agents/worktree-manager.d.ts +80 -0
  46. package/dist/agents/worktree-manager.js +203 -0
  47. package/dist/auth/middleware.js +14 -0
  48. package/dist/chat/agentic-executor.d.ts +7 -0
  49. package/dist/chat/agentic-executor.js +253 -30
  50. package/dist/chat/conversations.d.ts +2 -0
  51. package/dist/chat/conversations.js +8 -0
  52. package/dist/chat/execution/executor.d.ts +8 -0
  53. package/dist/chat/execution/executor.js +157 -103
  54. package/dist/chat/execution/index.js +5 -1
  55. package/dist/chat/execution/tool-router.js +40 -14
  56. package/dist/chat/execution/tools/canvas.d.ts +2 -2
  57. package/dist/chat/execution/tools/code-tools.d.ts +66 -0
  58. package/dist/chat/execution/tools/code-tools.js +353 -0
  59. package/dist/chat/execution/tools/complete-task.d.ts +2 -2
  60. package/dist/chat/execution/tools/cron-tool.d.ts +26 -10
  61. package/dist/chat/execution/tools/cron-tool.js +48 -3
  62. package/dist/chat/execution/tools/decompose-task.d.ts +58 -0
  63. package/dist/chat/execution/tools/decompose-task.js +166 -0
  64. package/dist/chat/execution/tools/exec.d.ts +5 -2
  65. package/dist/chat/execution/tools/exec.js +294 -155
  66. package/dist/chat/execution/tools/feed-tools.d.ts +77 -0
  67. package/dist/chat/execution/tools/feed-tools.js +142 -0
  68. package/dist/chat/execution/tools/file-ops.d.ts +1 -1
  69. package/dist/chat/execution/tools/github.d.ts +2 -2
  70. package/dist/chat/execution/tools/index.d.ts +14 -2
  71. package/dist/chat/execution/tools/index.js +86 -12
  72. package/dist/chat/execution/tools/integrations.d.ts +8 -8
  73. package/dist/chat/execution/tools/multi-patch.d.ts +53 -0
  74. package/dist/chat/execution/tools/multi-patch.js +373 -0
  75. package/dist/chat/execution/tools/openai-image-gen.d.ts +2 -2
  76. package/dist/chat/execution/tools/plan-tools.d.ts +80 -0
  77. package/dist/chat/execution/tools/plan-tools.js +134 -0
  78. package/dist/chat/execution/tools/profclaw-ops.d.ts +6 -6
  79. package/dist/chat/execution/tools/repl-tool.d.ts +46 -0
  80. package/dist/chat/execution/tools/repl-tool.js +207 -0
  81. package/dist/chat/execution/tools/sessions-send.d.ts +2 -2
  82. package/dist/chat/execution/tools/slack-actions.d.ts +2 -2
  83. package/dist/chat/execution/tools/system.d.ts +4 -4
  84. package/dist/chat/execution/tools/todo-tool.d.ts +72 -0
  85. package/dist/chat/execution/tools/todo-tool.js +152 -0
  86. package/dist/chat/execution/tools/tool-search.d.ts +50 -0
  87. package/dist/chat/execution/tools/tool-search.js +155 -0
  88. package/dist/chat/execution/types.d.ts +21 -14
  89. package/dist/chat/execution/workflows/executor.d.ts +11 -0
  90. package/dist/chat/execution/workflows/executor.js +99 -1
  91. package/dist/chat/execution/workflows/types.d.ts +35 -2
  92. package/dist/chat/format/index.d.ts +1 -0
  93. package/dist/chat/format/index.js +1 -0
  94. package/dist/chat/format/markdown-convert.d.ts +23 -0
  95. package/dist/chat/format/markdown-convert.js +149 -0
  96. package/dist/chat/index.d.ts +1 -1
  97. package/dist/chat/index.js +1 -1
  98. package/dist/chat/message-handler.js +58 -6
  99. package/dist/chat/proactive/index.d.ts +62 -0
  100. package/dist/chat/proactive/index.js +147 -0
  101. package/dist/chat/prompt-adapter.js +2 -0
  102. package/dist/chat/providers/irc/index.d.ts +2 -2
  103. package/dist/chat/providers/telegram/index.d.ts +2 -0
  104. package/dist/chat/providers/telegram/index.js +21 -2
  105. package/dist/chat/system-prompts.d.ts +3 -3
  106. package/dist/chat/system-prompts.js +116 -61
  107. package/dist/chat/tools.d.ts +6 -6
  108. package/dist/cli/commands/auth.js +64 -1
  109. package/dist/cli/commands/chat.js +1327 -138
  110. package/dist/cli/commands/doctor.js +222 -16
  111. package/dist/cli/commands/history.d.ts +3 -0
  112. package/dist/cli/commands/history.js +138 -0
  113. package/dist/cli/commands/import.d.ts +44 -0
  114. package/dist/cli/commands/import.js +526 -0
  115. package/dist/cli/commands/init.d.ts +13 -0
  116. package/dist/cli/commands/init.js +381 -0
  117. package/dist/cli/commands/onboard.js +210 -30
  118. package/dist/cli/commands/plan.d.ts +13 -0
  119. package/dist/cli/commands/plan.js +184 -0
  120. package/dist/cli/commands/serve.d.ts +7 -0
  121. package/dist/cli/commands/serve.js +77 -18
  122. package/dist/cli/commands/setup.js +84 -3
  123. package/dist/cli/commands/status.js +54 -0
  124. package/dist/cli/commands/tools.js +13 -13
  125. package/dist/cli/commands/tui.js +26 -1
  126. package/dist/cli/index.js +19 -0
  127. package/dist/cli/ink/App.d.ts +13 -0
  128. package/dist/cli/ink/App.js +6 -0
  129. package/dist/cli/ink/ChatApp.d.ts +60 -0
  130. package/dist/cli/ink/ChatApp.js +325 -0
  131. package/dist/cli/ink/DashboardApp.d.ts +3 -0
  132. package/dist/cli/ink/DashboardApp.js +143 -0
  133. package/dist/cli/ink/components/AgentStatus.d.ts +17 -0
  134. package/dist/cli/ink/components/AgentStatus.js +33 -0
  135. package/dist/cli/ink/components/ChannelList.d.ts +17 -0
  136. package/dist/cli/ink/components/ChannelList.js +33 -0
  137. package/dist/cli/ink/components/ConnectionStatus.d.ts +19 -0
  138. package/dist/cli/ink/components/ConnectionStatus.js +50 -0
  139. package/dist/cli/ink/components/CostBar.d.ts +19 -0
  140. package/dist/cli/ink/components/CostBar.js +35 -0
  141. package/dist/cli/ink/components/HookStatus.d.ts +15 -0
  142. package/dist/cli/ink/components/HookStatus.js +7 -0
  143. package/dist/cli/ink/components/PermissionPrompt.d.ts +21 -0
  144. package/dist/cli/ink/components/PermissionPrompt.js +51 -0
  145. package/dist/cli/ink/components/PlanView.d.ts +23 -0
  146. package/dist/cli/ink/components/PlanView.js +26 -0
  147. package/dist/cli/ink/components/ProviderList.d.ts +16 -0
  148. package/dist/cli/ink/components/ProviderList.js +16 -0
  149. package/dist/cli/ink/components/SessionHeader.d.ts +15 -0
  150. package/dist/cli/ink/components/SessionHeader.js +15 -0
  151. package/dist/cli/ink/components/StreamingMessage.d.ts +20 -0
  152. package/dist/cli/ink/components/StreamingMessage.js +27 -0
  153. package/dist/cli/ink/components/SuggestionBar.d.ts +15 -0
  154. package/dist/cli/ink/components/SuggestionBar.js +28 -0
  155. package/dist/cli/ink/components/SystemHealth.d.ts +20 -0
  156. package/dist/cli/ink/components/SystemHealth.js +39 -0
  157. package/dist/cli/ink/components/TaskList.d.ts +17 -0
  158. package/dist/cli/ink/components/TaskList.js +59 -0
  159. package/dist/cli/ink/components/ToolCall.d.ts +17 -0
  160. package/dist/cli/ink/components/ToolCall.js +43 -0
  161. package/dist/cli/ink/index.d.ts +23 -0
  162. package/dist/cli/ink/index.js +15 -0
  163. package/dist/cli/ink/keybindings.d.ts +35 -0
  164. package/dist/cli/ink/keybindings.js +105 -0
  165. package/dist/cli/ink/markdown-renderer.d.ts +47 -0
  166. package/dist/cli/ink/markdown-renderer.js +380 -0
  167. package/dist/cli/ink/output-styles.d.ts +39 -0
  168. package/dist/cli/ink/output-styles.js +119 -0
  169. package/dist/cli/interactive/auto-serve.d.ts +38 -0
  170. package/dist/cli/interactive/auto-serve.js +209 -0
  171. package/dist/cli/interactive/index.d.ts +25 -0
  172. package/dist/cli/interactive/index.js +23 -0
  173. package/dist/cli/interactive/picker.d.ts +28 -0
  174. package/dist/cli/interactive/picker.js +153 -0
  175. package/dist/cli/interactive/renderer.d.ts +26 -0
  176. package/dist/cli/interactive/renderer.js +555 -0
  177. package/dist/cli/interactive/repl.d.ts +14 -0
  178. package/dist/cli/interactive/repl.js +1516 -0
  179. package/dist/cli/interactive/stream-client.d.ts +59 -0
  180. package/dist/cli/interactive/stream-client.js +506 -0
  181. package/dist/cli/interactive/types.d.ts +121 -0
  182. package/dist/cli/interactive/types.js +10 -0
  183. package/dist/cli/utils/api.d.ts +9 -0
  184. package/dist/cli/utils/api.js +58 -2
  185. package/dist/cron/natural-language.d.ts +54 -0
  186. package/dist/cron/natural-language.js +569 -0
  187. package/dist/cron/scheduler.d.ts +34 -4
  188. package/dist/cron/scheduler.js +141 -9
  189. package/dist/cron/templates.d.ts +1 -1
  190. package/dist/cron/templates.js +219 -0
  191. package/dist/feeds/feed-engine.d.ts +149 -0
  192. package/dist/feeds/feed-engine.js +600 -0
  193. package/dist/feeds/index.d.ts +9 -0
  194. package/dist/feeds/index.js +8 -0
  195. package/dist/gateway/router.js +6 -1
  196. package/dist/hooks/built-in/audit-log.d.ts +11 -0
  197. package/dist/hooks/built-in/audit-log.js +84 -0
  198. package/dist/hooks/built-in/cost-warning.d.ts +10 -0
  199. package/dist/hooks/built-in/cost-warning.js +59 -0
  200. package/dist/hooks/built-in/dangerous-tool.d.ts +32 -0
  201. package/dist/hooks/built-in/dangerous-tool.js +80 -0
  202. package/dist/hooks/built-in/index.d.ts +14 -0
  203. package/dist/hooks/built-in/index.js +20 -0
  204. package/dist/hooks/index.d.ts +3 -0
  205. package/dist/hooks/index.js +6 -0
  206. package/dist/hooks/loader.d.ts +17 -0
  207. package/dist/hooks/loader.js +142 -0
  208. package/dist/hooks/registry.d.ts +62 -0
  209. package/dist/hooks/registry.js +127 -0
  210. package/dist/integrations/web-search.js +6 -3
  211. package/dist/memory/index.d.ts +1 -0
  212. package/dist/memory/index.js +2 -0
  213. package/dist/memory/memory-service.js +14 -13
  214. package/dist/memory/observational.d.ts +62 -0
  215. package/dist/memory/observational.js +396 -0
  216. package/dist/middleware/content-filter.d.ts +22 -0
  217. package/dist/middleware/content-filter.js +69 -0
  218. package/dist/middleware/request-validator.d.ts +159 -0
  219. package/dist/middleware/request-validator.js +93 -0
  220. package/dist/plugins/sdk.d.ts +22 -0
  221. package/dist/plugins/sdk.js +17 -1
  222. package/dist/projects/types.d.ts +10 -10
  223. package/dist/providers/ai-sdk.d.ts +11 -0
  224. package/dist/providers/ai-sdk.js +78 -19
  225. package/dist/providers/core/models.js +67 -1
  226. package/dist/providers/core/types.d.ts +3 -0
  227. package/dist/providers/index.d.ts +1 -0
  228. package/dist/providers/index.js +1 -0
  229. package/dist/providers/smart-router.d.ts +118 -0
  230. package/dist/providers/smart-router.js +685 -0
  231. package/dist/providers/types.d.ts +16 -16
  232. package/dist/routes/agents.js +50 -0
  233. package/dist/routes/auth.js +8 -1
  234. package/dist/routes/chat.js +259 -14
  235. package/dist/routes/costs.js +32 -0
  236. package/dist/routes/cron.js +80 -5
  237. package/dist/routes/feeds.d.ts +10 -0
  238. package/dist/routes/feeds.js +168 -0
  239. package/dist/routes/mcp.js +21 -0
  240. package/dist/routes/memory.js +130 -0
  241. package/dist/routes/skills.js +129 -0
  242. package/dist/routes/teams.d.ts +9 -0
  243. package/dist/routes/teams.js +210 -0
  244. package/dist/routes/tools.js +14 -0
  245. package/dist/routes/users.js +2 -0
  246. package/dist/server/route-loader.js +3 -1
  247. package/dist/server/stream-bridge.d.ts +19 -0
  248. package/dist/server/stream-bridge.js +38 -0
  249. package/dist/server.js +310 -36
  250. package/dist/skills/marketplace.d.ts +87 -0
  251. package/dist/skills/marketplace.js +268 -0
  252. package/dist/storage/index.d.ts +14 -0
  253. package/dist/storage/index.js +64 -3
  254. package/dist/storage/schema.d.ts +4 -4
  255. package/dist/storage/schema.js +1 -1
  256. package/dist/teams/index.d.ts +110 -0
  257. package/dist/teams/index.js +365 -0
  258. package/dist/tickets/types.d.ts +39 -39
  259. package/dist/types/summary.d.ts +5 -5
  260. package/dist/utils/auto-update.d.ts +23 -0
  261. package/dist/utils/auto-update.js +157 -0
  262. package/dist/utils/offline-detect.d.ts +55 -0
  263. package/dist/utils/offline-detect.js +121 -0
  264. package/dist/utils/pid-file.d.ts +36 -0
  265. package/dist/utils/pid-file.js +125 -0
  266. package/dist/utils/prevent-sleep.d.ts +27 -0
  267. package/dist/utils/prevent-sleep.js +95 -0
  268. package/dist/utils/sanitizer.d.ts +57 -0
  269. package/dist/utils/sanitizer.js +174 -0
  270. package/docker-compose.yml +13 -137
  271. package/package.json +31 -6
  272. package/skills/deploy-cloudflare/SKILL.md +62 -0
  273. package/skills/deploy-vercel/SKILL.md +67 -0
  274. package/skills/docker-deploy/SKILL.md +158 -0
  275. package/skills/full-stack-builder/SKILL.md +92 -0
  276. package/skills/humanizer/SKILL.md +488 -0
  277. package/skills/profclaw-assistant/SKILL.md +85 -56
  278. package/ui/dist/assets/ActivityView-Da6HQ8ws.js +1 -0
  279. package/ui/dist/assets/AgentList-H58R0kX3.js +1 -0
  280. package/ui/dist/assets/AnalyticsDashboard-B28AeRsc.js +1 -0
  281. package/ui/dist/assets/AreaChart-DwLzeAQ8.js +1 -0
  282. package/ui/dist/assets/CartesianChart-piKQsTAR.js +36 -0
  283. package/ui/dist/assets/ChatView-Dbj8rxU5.js +10 -0
  284. package/ui/dist/assets/CostsDashboard-C6F5df0F.js +1 -0
  285. package/ui/dist/assets/EstimateSelect-wga0rUKX.js +1 -0
  286. package/ui/dist/assets/FeedDashboard-Ef6FEzEf.js +1 -0
  287. package/ui/dist/assets/FloatingChatbot-0yhkUeCq.js +2 -0
  288. package/ui/dist/assets/InviteCodeManagement-tUXfx4Bc.js +2 -0
  289. package/ui/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  290. package/ui/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  291. package/ui/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  292. package/ui/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  293. package/ui/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  294. package/ui/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  295. package/ui/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  296. package/ui/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  297. package/ui/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  298. package/ui/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  299. package/ui/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  300. package/ui/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  301. package/ui/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  302. package/ui/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  303. package/ui/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  304. package/ui/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  305. package/ui/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  306. package/ui/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  307. package/ui/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  308. package/ui/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  309. package/ui/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  310. package/ui/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  311. package/ui/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  312. package/ui/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  313. package/ui/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  314. package/ui/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  315. package/ui/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  316. package/ui/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  317. package/ui/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  318. package/ui/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  319. package/ui/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  320. package/ui/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  321. package/ui/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  322. package/ui/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  323. package/ui/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  324. package/ui/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  325. package/ui/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  326. package/ui/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  327. package/ui/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  328. package/ui/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  329. package/ui/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  330. package/ui/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  331. package/ui/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  332. package/ui/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  333. package/ui/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  334. package/ui/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  335. package/ui/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  336. package/ui/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  337. package/ui/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  338. package/ui/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  339. package/ui/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  340. package/ui/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  341. package/ui/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  342. package/ui/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  343. package/ui/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  344. package/ui/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  345. package/ui/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  346. package/ui/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  347. package/ui/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  348. package/ui/dist/assets/MarketplacePage-DGrLtolR.js +1 -0
  349. package/ui/dist/assets/{ProjectDetail--gPfvATB.js → ProjectDetail-BgWvA6UP.js} +2 -2
  350. package/ui/dist/assets/ProjectIcon-TDuliqwg.js +1 -0
  351. package/ui/dist/assets/ProjectList-DXgM4187.js +1 -0
  352. package/ui/dist/assets/{Settings-1kaf7VHE.js → Settings-xA8Zhi3p.js} +3 -3
  353. package/ui/dist/assets/StatusIndicator-B8vfFAxg.js +1 -0
  354. package/ui/dist/assets/{SummaryDetail-DV3AmONk.js → SummaryDetail-eedRfTtF.js} +2 -2
  355. package/ui/dist/assets/SummaryList-CLNX2P84.js +1 -0
  356. package/ui/dist/assets/TaskDetail-BtWclNiR.js +1 -0
  357. package/ui/dist/assets/TaskList-JjODAgSc.js +1 -0
  358. package/ui/dist/assets/TeamsPage-CBK5iAyx.js +1 -0
  359. package/ui/dist/assets/TicketBoard-C9aJNNYp.js +1 -0
  360. package/ui/dist/assets/TicketDetail-CV5JmL31.js +1 -0
  361. package/ui/dist/assets/TicketList-68V4lzUz.js +1 -0
  362. package/ui/dist/assets/UserManagement-DKTb6UpE.js +2 -0
  363. package/ui/dist/assets/ViewSwitcher-BvdQht2Y.js +1 -0
  364. package/ui/dist/assets/alert-dialog-O6qBOv_f.js +1 -0
  365. package/ui/dist/assets/{archive-BsLa7brF.js → archive-CX7UvZpf.js} +1 -1
  366. package/ui/dist/assets/badge-BbfnwDJP.js +1 -0
  367. package/ui/dist/assets/{bug-CmZI7jqM.js → bug-3WX0394-.js} +1 -1
  368. package/ui/dist/assets/{calendar-Bf0t2B82.js → calendar-buq77TaS.js} +1 -1
  369. package/ui/dist/assets/{chevron-up-CoUsOvZj.js → chevron-up-4ymsBJRo.js} +1 -1
  370. package/ui/dist/assets/{circle-x-Dgw11LgT.js → circle-x-ByXtwR6Y.js} +1 -1
  371. package/ui/dist/assets/constants-CVdDh7p0.js +1 -0
  372. package/ui/dist/assets/{cpu-DiPMQICV.js → cpu-CiuoCeDY.js} +1 -1
  373. package/ui/dist/assets/{database-BwTfupDi.js → database-BWXSBg5a.js} +1 -1
  374. package/ui/dist/assets/dialog-lDg4NvMV.js +1 -0
  375. package/ui/dist/assets/dollar-sign-Dmijd6DP.js +1 -0
  376. package/ui/dist/assets/{ellipsis-UJx4Xnf6.js → ellipsis-vT-5SVIp.js} +1 -1
  377. package/ui/dist/assets/{ellipsis-vertical-DoULYEKn.js → ellipsis-vertical-B4tAX_bL.js} +1 -1
  378. package/ui/dist/assets/feature-markdown-DBo5Q7uq.js +289 -0
  379. package/ui/dist/assets/{file-code-B2UrJLwi.js → file-code-ChOWdKXf.js} +1 -1
  380. package/ui/dist/assets/{folder-open-BJi577JH.js → folder-open-CkOUbIiP.js} +1 -1
  381. package/ui/dist/assets/{funnel-PkaD_HSR.js → funnel-uZkoSPP-.js} +1 -1
  382. package/ui/dist/assets/{git-branch-C_K30am0.js → git-branch-CwvUxj7C.js} +1 -1
  383. package/ui/dist/assets/{git-commit-horizontal-IT6ecxWQ.js → git-commit-horizontal-lxPzCvhD.js} +1 -1
  384. package/ui/dist/assets/{globe-f-jjCa_g.js → globe-D_WpJdsj.js} +1 -1
  385. package/ui/dist/assets/{hash-DNEv8Elo.js → hash-CA0hJ7vh.js} +1 -1
  386. package/ui/dist/assets/{history-BQSBo_1Q.js → history-CEWMLELs.js} +1 -1
  387. package/ui/dist/assets/inbox-ehtOptTV.js +1 -0
  388. package/ui/dist/assets/{index-nS3EErDg.js → index-C1rhbml4.js} +3 -3
  389. package/ui/dist/assets/index-CR8gfCHv.js +1 -0
  390. package/ui/dist/assets/index-DVXMpWai.js +1 -0
  391. package/ui/dist/assets/index-DaDJMM2v.js +1 -0
  392. package/ui/dist/assets/index-Djdq_0xu.js +1 -0
  393. package/ui/dist/assets/index-M46Gcb8K.css +1 -0
  394. package/ui/dist/assets/index-sEBN7w8J.js +109 -0
  395. package/ui/dist/assets/layers-C6Mhf8Nk.js +1 -0
  396. package/ui/dist/assets/{layout-dashboard-CcKt1hXw.js → layout-dashboard-BRUM0kpT.js} +1 -1
  397. package/ui/dist/assets/{lightbulb-Jhp7FvbU.js → lightbulb-CN2q1O5l.js} +1 -1
  398. package/ui/dist/assets/{link-2-DdO7ostF.js → link-2-CC4E28yJ.js} +1 -1
  399. package/ui/dist/assets/markdown-renderer-C6ENbB0u.js +10 -0
  400. package/ui/dist/assets/markdown-renderer-CfVKi3_s.css +1 -0
  401. package/ui/dist/assets/{message-square-CBgH65X7.js → message-square-Bbb241am.js} +1 -1
  402. package/ui/dist/assets/package-CwT3IzFx.js +1 -0
  403. package/ui/dist/assets/{pencil-CYXCEPQh.js → pencil-CDmiHzoj.js} +1 -1
  404. package/ui/dist/assets/{play-d1ONaH0-.js → play-tjy5jMQX.js} +1 -1
  405. package/ui/dist/assets/popover-CFHZf3pE.js +1 -0
  406. package/ui/dist/assets/progress-BboUHuLf.js +1 -0
  407. package/ui/dist/assets/{rocket-DhvUetsk.js → rocket--8ZHgdXJ.js} +1 -1
  408. package/ui/dist/assets/select-n108rXny.js +1 -0
  409. package/ui/dist/assets/{send-P0r5D7td.js → send-Cu7MR2Qh.js} +1 -1
  410. package/ui/dist/assets/server-DmodxZp-.js +1 -0
  411. package/ui/dist/assets/{settings-2-ocj5uHGx.js → settings-2-CkRNqkxj.js} +1 -1
  412. package/ui/dist/assets/sheet-7aUJkyzU.js +1 -0
  413. package/ui/dist/assets/{shield-check-DfVdE34l.js → shield-check-ViI3nMKE.js} +1 -1
  414. package/ui/dist/assets/{shield-off-8l0J6R-8.js → shield-off-DN3tagkn.js} +1 -1
  415. package/ui/dist/assets/skeleton-C0E1Nfro.js +1 -0
  416. package/ui/dist/assets/{smartphone-77_g3SQn.js → smartphone-5FghiXpA.js} +1 -1
  417. package/ui/dist/assets/{square-Ckzsr3Rn.js → square-DiNSx8K7.js} +1 -1
  418. package/ui/dist/assets/star-DhdFVidS.js +1 -0
  419. package/ui/dist/assets/switch-CIgVbZqQ.js +1 -0
  420. package/ui/dist/assets/table-BC56FVMV.js +1 -0
  421. package/ui/dist/assets/{tag-C35mgoEv.js → tag-CH_vQliw.js} +1 -1
  422. package/ui/dist/assets/textarea-CxDiKFXZ.js +1 -0
  423. package/ui/dist/assets/{timer-DHJBS2w1.js → timer-CdGVTb60.js} +1 -1
  424. package/ui/dist/assets/tooltip-BuW9A5UO.js +1 -0
  425. package/ui/dist/assets/{trash-2-keO5tKPE.js → trash-2-CucZJL0N.js} +1 -1
  426. package/ui/dist/assets/trending-down-BCezC1z2.js +1 -0
  427. package/ui/dist/assets/{trending-up-BBv8KbrY.js → trending-up-C5OYX2k2.js} +1 -1
  428. package/ui/dist/assets/vendor-query-C0p7b53x.js +4 -0
  429. package/ui/dist/assets/vendor-react-Mc5_kfYG.js +12 -0
  430. package/ui/dist/assets/vendor-ui-CXPAUBFv.js +51 -0
  431. package/ui/dist/assets/{wand-sparkles-BusQ52ZK.js → wand-sparkles-BaH6pJnc.js} +1 -1
  432. package/ui/dist/assets/{wrench-02YaOSiK.js → wrench-CjxjP6ok.js} +1 -1
  433. package/ui/dist/index.html +5 -2
  434. package/ui/dist/assets/ActivityView-BeshZXmE.js +0 -1
  435. package/ui/dist/assets/AgentList-QVHeldPi.js +0 -1
  436. package/ui/dist/assets/AnalyticsDashboard-C9R97dXE.js +0 -1
  437. package/ui/dist/assets/AreaChart-B73gaiVQ.js +0 -1
  438. package/ui/dist/assets/CartesianChart-CXYL2R-A.js +0 -36
  439. package/ui/dist/assets/ChatView-qjZErlrp.js +0 -10
  440. package/ui/dist/assets/CostsDashboard-O4DCLy1i.js +0 -1
  441. package/ui/dist/assets/EstimateSelect-1hQf4Osk.js +0 -1
  442. package/ui/dist/assets/FloatingChatbot-BZBzrJxd.js +0 -2
  443. package/ui/dist/assets/InviteCodeManagement-LEoGqYeA.js +0 -2
  444. package/ui/dist/assets/ProjectIcon-Chd_ofsw.js +0 -1
  445. package/ui/dist/assets/ProjectList-BvUfVB6c.js +0 -4
  446. package/ui/dist/assets/StatusIndicator-pRfkNcdV.js +0 -1
  447. package/ui/dist/assets/SummaryList-B6kXiTxL.js +0 -1
  448. package/ui/dist/assets/TaskDetail-CV6CzbOS.js +0 -1
  449. package/ui/dist/assets/TaskList-DL7brQKd.js +0 -1
  450. package/ui/dist/assets/TicketBoard-CrkkFj7C.js +0 -1
  451. package/ui/dist/assets/TicketDetail-hnnYclpD.js +0 -1
  452. package/ui/dist/assets/TicketList-CsDAyQCL.js +0 -1
  453. package/ui/dist/assets/UserManagement-BGFQyTSr.js +0 -2
  454. package/ui/dist/assets/ViewSwitcher-CnL0OqA8.js +0 -1
  455. package/ui/dist/assets/alert-dialog-SKM6Gjz4.js +0 -7
  456. package/ui/dist/assets/badge-CVHH1a-v.js +0 -1
  457. package/ui/dist/assets/brain-6o_RHVpe.js +0 -1
  458. package/ui/dist/assets/constants-Q5Zivl-a.js +0 -1
  459. package/ui/dist/assets/dialog-BUqN9Psj.js +0 -1
  460. package/ui/dist/assets/index-BUmnwPQr.js +0 -1
  461. package/ui/dist/assets/index-BfF5G4Cw.js +0 -1
  462. package/ui/dist/assets/index-C8N375c2.js +0 -1
  463. package/ui/dist/assets/index-CuxnqVVz.css +0 -1
  464. package/ui/dist/assets/index-CzMM3QOk.js +0 -1
  465. package/ui/dist/assets/index-lJlNPFVJ.js +0 -67
  466. package/ui/dist/assets/layers-jFqVrWMD.js +0 -1
  467. package/ui/dist/assets/markdown-renderer-n1ToC4XQ.js +0 -36
  468. package/ui/dist/assets/popover-CrmZgoWu.js +0 -1
  469. package/ui/dist/assets/progress-uv4SPkL5.js +0 -1
  470. package/ui/dist/assets/select-CeQ8AHGy.js +0 -1
  471. package/ui/dist/assets/server-CVHTZB72.js +0 -1
  472. package/ui/dist/assets/sheet-DuQExSho.js +0 -1
  473. package/ui/dist/assets/skeleton-TFiFJ3nB.js +0 -1
  474. package/ui/dist/assets/switch-CAePkd6k.js +0 -1
  475. package/ui/dist/assets/table-ZjAZ7hkt.js +0 -1
  476. package/ui/dist/assets/textarea-DsVPnSgR.js +0 -1
  477. 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
@@ -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
@@ -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
- export {};
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
@@ -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" | "plane" | "monday";
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" | "plane" | "monday";
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" | "plane" | "monday";
139
+ platform: "jira" | "linear" | "github" | "monday" | "plane";
140
140
  externalId: string;
141
141
  externalUrl?: string | undefined;
142
142
  }, {
143
- platform: "jira" | "linear" | "github" | "plane" | "monday";
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" | "plane" | "monday";
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" | "plane" | "monday";
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" | "plane" | "monday";
200
+ platform: "jira" | "linear" | "github" | "monday" | "plane";
201
201
  externalId: string;
202
202
  externalUrl?: string | undefined;
203
203
  }, {
204
- platform: "jira" | "linear" | "github" | "plane" | "monday";
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" | "plane" | "monday";
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" | "plane" | "monday";
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[];
@@ -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 isRetryable = error instanceof Error &&
30
- (/429|503|rate.limit|too.many|service.unavailable|ECONNRESET|ETIMEDOUT|fetch.failed/i.test(error.message));
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 standard and Foundry modes)
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
- if (azureConfig?.defaultModel) {
704
- return { provider: 'azure', model: azureConfig.defaultModel };
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
- return alias;
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 (modelId === 'default') {
817
+ if (deployment === 'default' || !deployment) {
762
818
  const azureConfig = this.configs.get('azure');
763
- deployment = azureConfig?.defaultModel || modelId;
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: PROVIDER_DEFAULT_MODEL[this.defaultProvider] || 'llama3.2' };
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: PROVIDER_DEFAULT_MODEL[this.defaultProvider] || 'llama3.2' };
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: PROVIDER_DEFAULT_MODEL[this.defaultProvider] || 'llama3.2' };
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: PROVIDER_DEFAULT_MODEL[this.defaultProvider] || 'llama3.2' };
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: PROVIDER_DEFAULT_MODEL[this.defaultProvider] || 'llama3.2' };
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: PROVIDER_DEFAULT_MODEL[this.defaultProvider] || 'llama3.2' };
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);