profclaw 0.0.1-beta.1

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 (942) hide show
  1. package/.env.example +215 -0
  2. package/CHANGELOG.md +49 -0
  3. package/CONTRIBUTING.md +119 -0
  4. package/Dockerfile +107 -0
  5. package/LICENSE +661 -0
  6. package/README.md +196 -0
  7. package/config/agents.yml +55 -0
  8. package/config/budget.yml +15 -0
  9. package/config/pricing.yml +46 -0
  10. package/config/settings.yml +168 -0
  11. package/dist/adapters/claude-code.d.ts +46 -0
  12. package/dist/adapters/claude-code.js +215 -0
  13. package/dist/adapters/index.d.ts +4 -0
  14. package/dist/adapters/index.js +4 -0
  15. package/dist/adapters/ollama.d.ts +45 -0
  16. package/dist/adapters/ollama.js +277 -0
  17. package/dist/adapters/openclaw.d.ts +60 -0
  18. package/dist/adapters/openclaw.js +289 -0
  19. package/dist/adapters/registry.d.ts +56 -0
  20. package/dist/adapters/registry.js +163 -0
  21. package/dist/agents/executor.d.ts +78 -0
  22. package/dist/agents/executor.js +657 -0
  23. package/dist/agents/index.d.ts +10 -0
  24. package/dist/agents/index.js +27 -0
  25. package/dist/agents/stop-conditions.d.ts +108 -0
  26. package/dist/agents/stop-conditions.js +299 -0
  27. package/dist/agents/types.d.ts +185 -0
  28. package/dist/agents/types.js +14 -0
  29. package/dist/ai/embedding-service.d.ts +96 -0
  30. package/dist/ai/embedding-service.js +333 -0
  31. package/dist/auth/api-tokens.d.ts +71 -0
  32. package/dist/auth/api-tokens.js +235 -0
  33. package/dist/auth/auth-service.d.ts +75 -0
  34. package/dist/auth/auth-service.js +557 -0
  35. package/dist/auth/device-identity.d.ts +96 -0
  36. package/dist/auth/device-identity.js +250 -0
  37. package/dist/auth/github-oauth.d.ts +20 -0
  38. package/dist/auth/github-oauth.js +59 -0
  39. package/dist/auth/jira-oauth.d.ts +25 -0
  40. package/dist/auth/jira-oauth.js +75 -0
  41. package/dist/auth/linear-oauth.d.ts +21 -0
  42. package/dist/auth/linear-oauth.js +59 -0
  43. package/dist/auth/middleware.d.ts +44 -0
  44. package/dist/auth/middleware.js +190 -0
  45. package/dist/auth/pairing-codes.d.ts +109 -0
  46. package/dist/auth/pairing-codes.js +274 -0
  47. package/dist/auth/password.d.ts +53 -0
  48. package/dist/auth/password.js +126 -0
  49. package/dist/auth/qr-pairing.d.ts +36 -0
  50. package/dist/auth/qr-pairing.js +138 -0
  51. package/dist/auth/slack-oauth.d.ts +31 -0
  52. package/dist/auth/slack-oauth.js +80 -0
  53. package/dist/backup/index.d.ts +50 -0
  54. package/dist/backup/index.js +184 -0
  55. package/dist/browser/adapters.d.ts +25 -0
  56. package/dist/browser/adapters.js +32 -0
  57. package/dist/browser/cli.d.ts +19 -0
  58. package/dist/browser/cli.js +277 -0
  59. package/dist/browser/compression.d.ts +32 -0
  60. package/dist/browser/compression.js +269 -0
  61. package/dist/browser/extensions.d.ts +144 -0
  62. package/dist/browser/extensions.js +251 -0
  63. package/dist/browser/index.d.ts +37 -0
  64. package/dist/browser/index.js +43 -0
  65. package/dist/browser/refs.d.ts +46 -0
  66. package/dist/browser/refs.js +120 -0
  67. package/dist/browser/search.d.ts +36 -0
  68. package/dist/browser/search.js +193 -0
  69. package/dist/browser/service.d.ts +94 -0
  70. package/dist/browser/service.js +358 -0
  71. package/dist/browser/snapshot.d.ts +19 -0
  72. package/dist/browser/snapshot.js +250 -0
  73. package/dist/browser/tools.d.ts +259 -0
  74. package/dist/browser/tools.js +463 -0
  75. package/dist/browser/types.d.ts +134 -0
  76. package/dist/browser/types.js +17 -0
  77. package/dist/chat/agentic-executor.d.ts +108 -0
  78. package/dist/chat/agentic-executor.js +739 -0
  79. package/dist/chat/api-key-detector.d.ts +41 -0
  80. package/dist/chat/api-key-detector.js +290 -0
  81. package/dist/chat/auto-reply.d.ts +90 -0
  82. package/dist/chat/auto-reply.js +272 -0
  83. package/dist/chat/conversations.d.ts +91 -0
  84. package/dist/chat/conversations.js +297 -0
  85. package/dist/chat/execution/audit.d.ts +192 -0
  86. package/dist/chat/execution/audit.js +323 -0
  87. package/dist/chat/execution/executor.d.ts +56 -0
  88. package/dist/chat/execution/executor.js +654 -0
  89. package/dist/chat/execution/guardrails.d.ts +98 -0
  90. package/dist/chat/execution/guardrails.js +571 -0
  91. package/dist/chat/execution/index.d.ts +61 -0
  92. package/dist/chat/execution/index.js +129 -0
  93. package/dist/chat/execution/model-capability.d.ts +34 -0
  94. package/dist/chat/execution/model-capability.js +96 -0
  95. package/dist/chat/execution/process-pool.d.ts +110 -0
  96. package/dist/chat/execution/process-pool.js +290 -0
  97. package/dist/chat/execution/pty.d.ts +92 -0
  98. package/dist/chat/execution/pty.js +285 -0
  99. package/dist/chat/execution/rate-limiter.d.ts +87 -0
  100. package/dist/chat/execution/rate-limiter.js +305 -0
  101. package/dist/chat/execution/registry.d.ts +54 -0
  102. package/dist/chat/execution/registry.js +220 -0
  103. package/dist/chat/execution/sandbox.d.ts +109 -0
  104. package/dist/chat/execution/sandbox.js +684 -0
  105. package/dist/chat/execution/secrets.d.ts +45 -0
  106. package/dist/chat/execution/secrets.js +338 -0
  107. package/dist/chat/execution/security.d.ts +179 -0
  108. package/dist/chat/execution/security.js +739 -0
  109. package/dist/chat/execution/self-correction.d.ts +162 -0
  110. package/dist/chat/execution/self-correction.js +557 -0
  111. package/dist/chat/execution/session-manager.d.ts +79 -0
  112. package/dist/chat/execution/session-manager.js +356 -0
  113. package/dist/chat/execution/session-spawn/config.d.ts +37 -0
  114. package/dist/chat/execution/session-spawn/config.js +83 -0
  115. package/dist/chat/execution/session-spawn/index.d.ts +10 -0
  116. package/dist/chat/execution/session-spawn/index.js +10 -0
  117. package/dist/chat/execution/session-spawn/manager.d.ts +35 -0
  118. package/dist/chat/execution/session-spawn/manager.js +418 -0
  119. package/dist/chat/execution/session-spawn/types.d.ts +117 -0
  120. package/dist/chat/execution/session-spawn/types.js +16 -0
  121. package/dist/chat/execution/smart-prompts.d.ts +34 -0
  122. package/dist/chat/execution/smart-prompts.js +151 -0
  123. package/dist/chat/execution/stream-results.d.ts +65 -0
  124. package/dist/chat/execution/stream-results.js +156 -0
  125. package/dist/chat/execution/tool-router.d.ts +76 -0
  126. package/dist/chat/execution/tool-router.js +296 -0
  127. package/dist/chat/execution/tools/agents-list.d.ts +49 -0
  128. package/dist/chat/execution/tools/agents-list.js +165 -0
  129. package/dist/chat/execution/tools/browser.d.ts +12 -0
  130. package/dist/chat/execution/tools/browser.js +14 -0
  131. package/dist/chat/execution/tools/canvas.d.ts +61 -0
  132. package/dist/chat/execution/tools/canvas.js +150 -0
  133. package/dist/chat/execution/tools/complete-task.d.ts +72 -0
  134. package/dist/chat/execution/tools/complete-task.js +104 -0
  135. package/dist/chat/execution/tools/cron-tool.d.ts +204 -0
  136. package/dist/chat/execution/tools/cron-tool.js +680 -0
  137. package/dist/chat/execution/tools/discord-actions.d.ts +120 -0
  138. package/dist/chat/execution/tools/discord-actions.js +361 -0
  139. package/dist/chat/execution/tools/exec.d.ts +43 -0
  140. package/dist/chat/execution/tools/exec.js +223 -0
  141. package/dist/chat/execution/tools/file-ops.d.ts +175 -0
  142. package/dist/chat/execution/tools/file-ops.js +723 -0
  143. package/dist/chat/execution/tools/git.d.ts +143 -0
  144. package/dist/chat/execution/tools/git.js +395 -0
  145. package/dist/chat/execution/tools/github.d.ts +42 -0
  146. package/dist/chat/execution/tools/github.js +184 -0
  147. package/dist/chat/execution/tools/glinr-ops.d.ts +202 -0
  148. package/dist/chat/execution/tools/glinr-ops.js +694 -0
  149. package/dist/chat/execution/tools/image-analyze.d.ts +29 -0
  150. package/dist/chat/execution/tools/image-analyze.js +127 -0
  151. package/dist/chat/execution/tools/index.d.ts +64 -0
  152. package/dist/chat/execution/tools/index.js +245 -0
  153. package/dist/chat/execution/tools/integrations.d.ts +109 -0
  154. package/dist/chat/execution/tools/integrations.js +237 -0
  155. package/dist/chat/execution/tools/link-understand.d.ts +34 -0
  156. package/dist/chat/execution/tools/link-understand.js +307 -0
  157. package/dist/chat/execution/tools/maintenance.d.ts +29 -0
  158. package/dist/chat/execution/tools/maintenance.js +105 -0
  159. package/dist/chat/execution/tools/memory-tools.d.ts +76 -0
  160. package/dist/chat/execution/tools/memory-tools.js +278 -0
  161. package/dist/chat/execution/tools/openai-image-gen.d.ts +51 -0
  162. package/dist/chat/execution/tools/openai-image-gen.js +212 -0
  163. package/dist/chat/execution/tools/profclaw-ops.d.ts +204 -0
  164. package/dist/chat/execution/tools/profclaw-ops.js +665 -0
  165. package/dist/chat/execution/tools/session-spawn.d.ts +146 -0
  166. package/dist/chat/execution/tools/session-spawn.js +544 -0
  167. package/dist/chat/execution/tools/session-status.d.ts +38 -0
  168. package/dist/chat/execution/tools/session-status.js +185 -0
  169. package/dist/chat/execution/tools/sessions-list.d.ts +49 -0
  170. package/dist/chat/execution/tools/sessions-list.js +153 -0
  171. package/dist/chat/execution/tools/sessions-send.d.ts +48 -0
  172. package/dist/chat/execution/tools/sessions-send.js +207 -0
  173. package/dist/chat/execution/tools/sessions-spawn.d.ts +51 -0
  174. package/dist/chat/execution/tools/sessions-spawn.js +137 -0
  175. package/dist/chat/execution/tools/slack-actions.d.ts +90 -0
  176. package/dist/chat/execution/tools/slack-actions.js +272 -0
  177. package/dist/chat/execution/tools/subagent-orchestrate.d.ts +66 -0
  178. package/dist/chat/execution/tools/subagent-orchestrate.js +313 -0
  179. package/dist/chat/execution/tools/system.d.ts +121 -0
  180. package/dist/chat/execution/tools/system.js +415 -0
  181. package/dist/chat/execution/tools/telegram-actions.d.ts +126 -0
  182. package/dist/chat/execution/tools/telegram-actions.js +339 -0
  183. package/dist/chat/execution/tools/test-run.d.ts +43 -0
  184. package/dist/chat/execution/tools/test-run.js +391 -0
  185. package/dist/chat/execution/tools/tts-speak.d.ts +39 -0
  186. package/dist/chat/execution/tools/tts-speak.js +199 -0
  187. package/dist/chat/execution/tools/web-fetch.d.ts +42 -0
  188. package/dist/chat/execution/tools/web-fetch.js +247 -0
  189. package/dist/chat/execution/tools/web-search.d.ts +53 -0
  190. package/dist/chat/execution/tools/web-search.js +130 -0
  191. package/dist/chat/execution/types.d.ts +337 -0
  192. package/dist/chat/execution/types.js +8 -0
  193. package/dist/chat/execution/workflows/built-in.d.ts +10 -0
  194. package/dist/chat/execution/workflows/built-in.js +249 -0
  195. package/dist/chat/execution/workflows/executor.d.ts +13 -0
  196. package/dist/chat/execution/workflows/executor.js +259 -0
  197. package/dist/chat/execution/workflows/index.d.ts +5 -0
  198. package/dist/chat/execution/workflows/index.js +5 -0
  199. package/dist/chat/execution/workflows/trigger.d.ts +15 -0
  200. package/dist/chat/execution/workflows/trigger.js +111 -0
  201. package/dist/chat/execution/workflows/types.d.ts +80 -0
  202. package/dist/chat/execution/workflows/types.js +2 -0
  203. package/dist/chat/failover/error.d.ts +73 -0
  204. package/dist/chat/failover/error.js +412 -0
  205. package/dist/chat/failover/index.d.ts +10 -0
  206. package/dist/chat/failover/index.js +11 -0
  207. package/dist/chat/failover/model-fallback.d.ts +97 -0
  208. package/dist/chat/failover/model-fallback.js +328 -0
  209. package/dist/chat/failover/types.d.ts +47 -0
  210. package/dist/chat/failover/types.js +8 -0
  211. package/dist/chat/format/chunk.d.ts +59 -0
  212. package/dist/chat/format/chunk.js +253 -0
  213. package/dist/chat/format/index.d.ts +7 -0
  214. package/dist/chat/format/index.js +7 -0
  215. package/dist/chat/format/tool-result-formatter.d.ts +30 -0
  216. package/dist/chat/format/tool-result-formatter.js +177 -0
  217. package/dist/chat/group.d.ts +232 -0
  218. package/dist/chat/group.js +311 -0
  219. package/dist/chat/index.d.ts +21 -0
  220. package/dist/chat/index.js +30 -0
  221. package/dist/chat/memory.d.ts +108 -0
  222. package/dist/chat/memory.js +343 -0
  223. package/dist/chat/message-handler.d.ts +38 -0
  224. package/dist/chat/message-handler.js +274 -0
  225. package/dist/chat/proactive/index.d.ts +167 -0
  226. package/dist/chat/proactive/index.js +721 -0
  227. package/dist/chat/prompt-adapter.d.ts +52 -0
  228. package/dist/chat/prompt-adapter.js +245 -0
  229. package/dist/chat/providers/dingtalk/index.d.ts +69 -0
  230. package/dist/chat/providers/dingtalk/index.js +225 -0
  231. package/dist/chat/providers/discord/index.d.ts +264 -0
  232. package/dist/chat/providers/discord/index.js +657 -0
  233. package/dist/chat/providers/feishu/index.d.ts +97 -0
  234. package/dist/chat/providers/feishu/index.js +362 -0
  235. package/dist/chat/providers/googlechat/index.d.ts +269 -0
  236. package/dist/chat/providers/googlechat/index.js +634 -0
  237. package/dist/chat/providers/imessage/index.d.ts +61 -0
  238. package/dist/chat/providers/imessage/index.js +166 -0
  239. package/dist/chat/providers/index.d.ts +76 -0
  240. package/dist/chat/providers/index.js +430 -0
  241. package/dist/chat/providers/irc/index.d.ts +101 -0
  242. package/dist/chat/providers/irc/index.js +557 -0
  243. package/dist/chat/providers/line/index.d.ts +113 -0
  244. package/dist/chat/providers/line/index.js +434 -0
  245. package/dist/chat/providers/matrix/index.d.ts +161 -0
  246. package/dist/chat/providers/matrix/index.js +559 -0
  247. package/dist/chat/providers/mattermost/index.d.ts +106 -0
  248. package/dist/chat/providers/mattermost/index.js +425 -0
  249. package/dist/chat/providers/msteams/index.d.ts +198 -0
  250. package/dist/chat/providers/msteams/index.js +694 -0
  251. package/dist/chat/providers/nextcloud/index.d.ts +52 -0
  252. package/dist/chat/providers/nextcloud/index.js +156 -0
  253. package/dist/chat/providers/nostr/index.d.ts +60 -0
  254. package/dist/chat/providers/nostr/index.js +200 -0
  255. package/dist/chat/providers/qq/index.d.ts +57 -0
  256. package/dist/chat/providers/qq/index.js +260 -0
  257. package/dist/chat/providers/registry.d.ts +89 -0
  258. package/dist/chat/providers/registry.js +213 -0
  259. package/dist/chat/providers/signal/index.d.ts +88 -0
  260. package/dist/chat/providers/signal/index.js +357 -0
  261. package/dist/chat/providers/slack/index.d.ts +52 -0
  262. package/dist/chat/providers/slack/index.js +477 -0
  263. package/dist/chat/providers/synology/index.d.ts +50 -0
  264. package/dist/chat/providers/synology/index.js +138 -0
  265. package/dist/chat/providers/telegram/index.d.ts +148 -0
  266. package/dist/chat/providers/telegram/index.js +492 -0
  267. package/dist/chat/providers/tlon/index.d.ts +44 -0
  268. package/dist/chat/providers/tlon/index.js +243 -0
  269. package/dist/chat/providers/twitch/index.d.ts +79 -0
  270. package/dist/chat/providers/twitch/index.js +349 -0
  271. package/dist/chat/providers/types.d.ts +437 -0
  272. package/dist/chat/providers/types.js +14 -0
  273. package/dist/chat/providers/webchat/index.d.ts +38 -0
  274. package/dist/chat/providers/webchat/index.js +214 -0
  275. package/dist/chat/providers/wecom/index.d.ts +62 -0
  276. package/dist/chat/providers/wecom/index.js +228 -0
  277. package/dist/chat/providers/whatsapp/index.d.ts +147 -0
  278. package/dist/chat/providers/whatsapp/index.js +396 -0
  279. package/dist/chat/providers/zalo/index.d.ts +54 -0
  280. package/dist/chat/providers/zalo/index.js +158 -0
  281. package/dist/chat/providers/zalo-personal/index.d.ts +53 -0
  282. package/dist/chat/providers/zalo-personal/index.js +212 -0
  283. package/dist/chat/skills.d.ts +82 -0
  284. package/dist/chat/skills.js +410 -0
  285. package/dist/chat/system-prompts.d.ts +76 -0
  286. package/dist/chat/system-prompts.js +407 -0
  287. package/dist/chat/tool-handler.d.ts +57 -0
  288. package/dist/chat/tool-handler.js +336 -0
  289. package/dist/chat/tools.d.ts +373 -0
  290. package/dist/chat/tools.js +512 -0
  291. package/dist/cli/commands/agent.d.ts +3 -0
  292. package/dist/cli/commands/agent.js +108 -0
  293. package/dist/cli/commands/auth.d.ts +12 -0
  294. package/dist/cli/commands/auth.js +301 -0
  295. package/dist/cli/commands/browser.d.ts +3 -0
  296. package/dist/cli/commands/browser.js +138 -0
  297. package/dist/cli/commands/canvas.d.ts +3 -0
  298. package/dist/cli/commands/canvas.js +155 -0
  299. package/dist/cli/commands/channels.d.ts +3 -0
  300. package/dist/cli/commands/channels.js +167 -0
  301. package/dist/cli/commands/chat.d.ts +9 -0
  302. package/dist/cli/commands/chat.js +360 -0
  303. package/dist/cli/commands/completion.d.ts +3 -0
  304. package/dist/cli/commands/completion.js +170 -0
  305. package/dist/cli/commands/config.d.ts +3 -0
  306. package/dist/cli/commands/config.js +193 -0
  307. package/dist/cli/commands/cost.d.ts +3 -0
  308. package/dist/cli/commands/cost.js +134 -0
  309. package/dist/cli/commands/daemon.d.ts +3 -0
  310. package/dist/cli/commands/daemon.js +381 -0
  311. package/dist/cli/commands/devices.d.ts +3 -0
  312. package/dist/cli/commands/devices.js +150 -0
  313. package/dist/cli/commands/doctor.d.ts +3 -0
  314. package/dist/cli/commands/doctor.js +295 -0
  315. package/dist/cli/commands/logs.d.ts +3 -0
  316. package/dist/cli/commands/logs.js +139 -0
  317. package/dist/cli/commands/mcp.d.ts +15 -0
  318. package/dist/cli/commands/mcp.js +157 -0
  319. package/dist/cli/commands/memory.d.ts +3 -0
  320. package/dist/cli/commands/memory.js +170 -0
  321. package/dist/cli/commands/models.d.ts +3 -0
  322. package/dist/cli/commands/models.js +197 -0
  323. package/dist/cli/commands/nodes.d.ts +3 -0
  324. package/dist/cli/commands/nodes.js +193 -0
  325. package/dist/cli/commands/onboard.d.ts +13 -0
  326. package/dist/cli/commands/onboard.js +360 -0
  327. package/dist/cli/commands/plugin.d.ts +15 -0
  328. package/dist/cli/commands/plugin.js +226 -0
  329. package/dist/cli/commands/provider.d.ts +16 -0
  330. package/dist/cli/commands/provider.js +320 -0
  331. package/dist/cli/commands/security.d.ts +3 -0
  332. package/dist/cli/commands/security.js +180 -0
  333. package/dist/cli/commands/serve.d.ts +3 -0
  334. package/dist/cli/commands/serve.js +179 -0
  335. package/dist/cli/commands/session.d.ts +3 -0
  336. package/dist/cli/commands/session.js +172 -0
  337. package/dist/cli/commands/setup.d.ts +13 -0
  338. package/dist/cli/commands/setup.js +636 -0
  339. package/dist/cli/commands/skill.d.ts +15 -0
  340. package/dist/cli/commands/skill.js +191 -0
  341. package/dist/cli/commands/status.d.ts +3 -0
  342. package/dist/cli/commands/status.js +71 -0
  343. package/dist/cli/commands/summary.d.ts +3 -0
  344. package/dist/cli/commands/summary.js +160 -0
  345. package/dist/cli/commands/task.d.ts +3 -0
  346. package/dist/cli/commands/task.js +170 -0
  347. package/dist/cli/commands/ticket.d.ts +3 -0
  348. package/dist/cli/commands/ticket.js +421 -0
  349. package/dist/cli/commands/tools.d.ts +9 -0
  350. package/dist/cli/commands/tools.js +508 -0
  351. package/dist/cli/commands/tui.d.ts +3 -0
  352. package/dist/cli/commands/tui.js +158 -0
  353. package/dist/cli/commands/tunnel.d.ts +3 -0
  354. package/dist/cli/commands/tunnel.js +135 -0
  355. package/dist/cli/commands/webhooks.d.ts +3 -0
  356. package/dist/cli/commands/webhooks.js +191 -0
  357. package/dist/cli/index.d.ts +3 -0
  358. package/dist/cli/index.js +127 -0
  359. package/dist/cli/utils/api.d.ts +17 -0
  360. package/dist/cli/utils/api.js +63 -0
  361. package/dist/cli/utils/config.d.ts +31 -0
  362. package/dist/cli/utils/config.js +81 -0
  363. package/dist/cli/utils/output.d.ts +58 -0
  364. package/dist/cli/utils/output.js +148 -0
  365. package/dist/core/deployment.d.ts +30 -0
  366. package/dist/core/deployment.js +114 -0
  367. package/dist/core/sandbox-config.d.ts +63 -0
  368. package/dist/core/sandbox-config.js +148 -0
  369. package/dist/costs/budget.d.ts +28 -0
  370. package/dist/costs/budget.js +57 -0
  371. package/dist/costs/persistence.d.ts +77 -0
  372. package/dist/costs/persistence.js +210 -0
  373. package/dist/costs/pricing.d.ts +16 -0
  374. package/dist/costs/pricing.js +39 -0
  375. package/dist/costs/token-tracker.d.ts +34 -0
  376. package/dist/costs/token-tracker.js +141 -0
  377. package/dist/cron/heartbeat.d.ts +23 -0
  378. package/dist/cron/heartbeat.js +109 -0
  379. package/dist/cron/index.d.ts +22 -0
  380. package/dist/cron/index.js +37 -0
  381. package/dist/cron/issue-poller.d.ts +15 -0
  382. package/dist/cron/issue-poller.js +174 -0
  383. package/dist/cron/scheduler.d.ts +315 -0
  384. package/dist/cron/scheduler.js +1008 -0
  385. package/dist/cron/stale-checker.d.ts +16 -0
  386. package/dist/cron/stale-checker.js +61 -0
  387. package/dist/cron/templates.d.ts +107 -0
  388. package/dist/cron/templates.js +395 -0
  389. package/dist/diagnostics/exporters.d.ts +21 -0
  390. package/dist/diagnostics/exporters.js +138 -0
  391. package/dist/diagnostics/index.d.ts +10 -0
  392. package/dist/diagnostics/index.js +9 -0
  393. package/dist/diagnostics/middleware.d.ts +12 -0
  394. package/dist/diagnostics/middleware.js +58 -0
  395. package/dist/diagnostics/tracer.d.ts +133 -0
  396. package/dist/diagnostics/tracer.js +257 -0
  397. package/dist/discovery/index.d.ts +8 -0
  398. package/dist/discovery/index.js +7 -0
  399. package/dist/discovery/mdns.d.ts +40 -0
  400. package/dist/discovery/mdns.js +249 -0
  401. package/dist/gateway/index.d.ts +35 -0
  402. package/dist/gateway/index.js +36 -0
  403. package/dist/gateway/router.d.ts +110 -0
  404. package/dist/gateway/router.js +649 -0
  405. package/dist/gateway/types.d.ts +275 -0
  406. package/dist/gateway/types.js +2 -0
  407. package/dist/gateway/workflows.d.ts +37 -0
  408. package/dist/gateway/workflows.js +748 -0
  409. package/dist/hooks/agent-webhook.d.ts +277 -0
  410. package/dist/hooks/agent-webhook.js +197 -0
  411. package/dist/hooks/index.d.ts +13 -0
  412. package/dist/hooks/index.js +15 -0
  413. package/dist/hooks/prompt-submit.d.ts +45 -0
  414. package/dist/hooks/prompt-submit.js +111 -0
  415. package/dist/hooks/schemas.d.ts +563 -0
  416. package/dist/hooks/schemas.js +108 -0
  417. package/dist/hooks/session-end.d.ts +25 -0
  418. package/dist/hooks/session-end.js +153 -0
  419. package/dist/hooks/tool-use.d.ts +41 -0
  420. package/dist/hooks/tool-use.js +201 -0
  421. package/dist/hooks/types.d.ts +76 -0
  422. package/dist/hooks/types.js +7 -0
  423. package/dist/integrations/cloudflare-tunnel.d.ts +78 -0
  424. package/dist/integrations/cloudflare-tunnel.js +268 -0
  425. package/dist/integrations/github-client.d.ts +27 -0
  426. package/dist/integrations/github-client.js +79 -0
  427. package/dist/integrations/github-projects.d.ts +97 -0
  428. package/dist/integrations/github-projects.js +433 -0
  429. package/dist/integrations/github-ticket-sync.d.ts +82 -0
  430. package/dist/integrations/github-ticket-sync.js +352 -0
  431. package/dist/integrations/github.d.ts +11 -0
  432. package/dist/integrations/github.js +241 -0
  433. package/dist/integrations/jira-client.d.ts +30 -0
  434. package/dist/integrations/jira-client.js +67 -0
  435. package/dist/integrations/jira.d.ts +13 -0
  436. package/dist/integrations/jira.js +108 -0
  437. package/dist/integrations/linear-client.d.ts +23 -0
  438. package/dist/integrations/linear-client.js +52 -0
  439. package/dist/integrations/linear.d.ts +15 -0
  440. package/dist/integrations/linear.js +312 -0
  441. package/dist/integrations/tailscale.d.ts +68 -0
  442. package/dist/integrations/tailscale.js +173 -0
  443. package/dist/integrations/web-search.d.ts +112 -0
  444. package/dist/integrations/web-search.js +287 -0
  445. package/dist/intelligence/index.d.ts +8 -0
  446. package/dist/intelligence/index.js +8 -0
  447. package/dist/intelligence/ollama.d.ts +50 -0
  448. package/dist/intelligence/ollama.js +213 -0
  449. package/dist/intelligence/rules.d.ts +39 -0
  450. package/dist/intelligence/rules.js +308 -0
  451. package/dist/labels/index.d.ts +93 -0
  452. package/dist/labels/index.js +248 -0
  453. package/dist/mcp/browser-tools.d.ts +10 -0
  454. package/dist/mcp/browser-tools.js +16 -0
  455. package/dist/mcp/client.d.ts +54 -0
  456. package/dist/mcp/client.js +153 -0
  457. package/dist/mcp/index.d.ts +12 -0
  458. package/dist/mcp/index.js +13 -0
  459. package/dist/mcp/server.d.ts +40 -0
  460. package/dist/mcp/server.js +826 -0
  461. package/dist/mcp/tool-adapter.d.ts +49 -0
  462. package/dist/mcp/tool-adapter.js +193 -0
  463. package/dist/memory/experience-store.d.ts +121 -0
  464. package/dist/memory/experience-store.js +439 -0
  465. package/dist/memory/index.d.ts +8 -0
  466. package/dist/memory/index.js +25 -0
  467. package/dist/memory/memory-service.d.ts +312 -0
  468. package/dist/memory/memory-service.js +1172 -0
  469. package/dist/memory/memory-watcher.d.ts +116 -0
  470. package/dist/memory/memory-watcher.js +239 -0
  471. package/dist/middleware/logging.d.ts +34 -0
  472. package/dist/middleware/logging.js +184 -0
  473. package/dist/middleware/rate-limit.d.ts +29 -0
  474. package/dist/middleware/rate-limit.js +91 -0
  475. package/dist/notifications/in-app.d.ts +28 -0
  476. package/dist/notifications/in-app.js +53 -0
  477. package/dist/notifications/index.d.ts +3 -0
  478. package/dist/notifications/index.js +3 -0
  479. package/dist/notifications/push.d.ts +74 -0
  480. package/dist/notifications/push.js +175 -0
  481. package/dist/notifications/slack.d.ts +32 -0
  482. package/dist/notifications/slack.js +157 -0
  483. package/dist/plugins/clawhub.d.ts +70 -0
  484. package/dist/plugins/clawhub.js +260 -0
  485. package/dist/plugins/loader.d.ts +23 -0
  486. package/dist/plugins/loader.js +140 -0
  487. package/dist/plugins/marketplace.d.ts +77 -0
  488. package/dist/plugins/marketplace.js +275 -0
  489. package/dist/plugins/registry.d.ts +122 -0
  490. package/dist/plugins/registry.js +352 -0
  491. package/dist/plugins/sandbox.d.ts +77 -0
  492. package/dist/plugins/sandbox.js +287 -0
  493. package/dist/plugins/scaffolder.d.ts +28 -0
  494. package/dist/plugins/scaffolder.js +409 -0
  495. package/dist/plugins/sdk.d.ts +35 -0
  496. package/dist/plugins/sdk.js +8 -0
  497. package/dist/plugins/search/brave.d.ts +9 -0
  498. package/dist/plugins/search/brave.js +157 -0
  499. package/dist/plugins/search/duckduckgo.d.ts +9 -0
  500. package/dist/plugins/search/duckduckgo.js +171 -0
  501. package/dist/plugins/search/index.d.ts +13 -0
  502. package/dist/plugins/search/index.js +23 -0
  503. package/dist/plugins/search/searxng.d.ts +9 -0
  504. package/dist/plugins/search/searxng.js +170 -0
  505. package/dist/plugins/search/serper.d.ts +9 -0
  506. package/dist/plugins/search/serper.js +135 -0
  507. package/dist/plugins/search/tavily.d.ts +9 -0
  508. package/dist/plugins/search/tavily.js +146 -0
  509. package/dist/plugins/types.d.ts +174 -0
  510. package/dist/plugins/types.js +8 -0
  511. package/dist/projects/index.d.ts +133 -0
  512. package/dist/projects/index.js +897 -0
  513. package/dist/projects/types.d.ts +444 -0
  514. package/dist/projects/types.js +207 -0
  515. package/dist/providers/adapters/anthropic.d.ts +26 -0
  516. package/dist/providers/adapters/anthropic.js +306 -0
  517. package/dist/providers/adapters/base.d.ts +53 -0
  518. package/dist/providers/adapters/base.js +99 -0
  519. package/dist/providers/adapters/ollama.d.ts +30 -0
  520. package/dist/providers/adapters/ollama.js +292 -0
  521. package/dist/providers/ai-sdk.d.ts +178 -0
  522. package/dist/providers/ai-sdk.js +1552 -0
  523. package/dist/providers/core/index.d.ts +8 -0
  524. package/dist/providers/core/index.js +10 -0
  525. package/dist/providers/core/models.d.ts +31 -0
  526. package/dist/providers/core/models.js +949 -0
  527. package/dist/providers/core/types.d.ts +117 -0
  528. package/dist/providers/core/types.js +83 -0
  529. package/dist/providers/index.d.ts +7 -0
  530. package/dist/providers/index.js +7 -0
  531. package/dist/providers/registry.d.ts +93 -0
  532. package/dist/providers/registry.js +228 -0
  533. package/dist/providers/schema-utils.d.ts +23 -0
  534. package/dist/providers/schema-utils.js +545 -0
  535. package/dist/providers/types.d.ts +609 -0
  536. package/dist/providers/types.js +279 -0
  537. package/dist/queue/failure-handler.d.ts +93 -0
  538. package/dist/queue/failure-handler.js +379 -0
  539. package/dist/queue/index.d.ts +23 -0
  540. package/dist/queue/index.js +86 -0
  541. package/dist/queue/memory-queue.d.ts +30 -0
  542. package/dist/queue/memory-queue.js +429 -0
  543. package/dist/queue/notifications.d.ts +6 -0
  544. package/dist/queue/notifications.js +128 -0
  545. package/dist/queue/task-queue.d.ts +55 -0
  546. package/dist/queue/task-queue.js +518 -0
  547. package/dist/queue/webhook-queue.d.ts +47 -0
  548. package/dist/queue/webhook-queue.js +158 -0
  549. package/dist/routes/agents.d.ts +4 -0
  550. package/dist/routes/agents.js +45 -0
  551. package/dist/routes/auth.d.ts +19 -0
  552. package/dist/routes/auth.js +492 -0
  553. package/dist/routes/backup.d.ts +6 -0
  554. package/dist/routes/backup.js +71 -0
  555. package/dist/routes/chat.d.ts +10 -0
  556. package/dist/routes/chat.js +1678 -0
  557. package/dist/routes/clawhub.d.ts +8 -0
  558. package/dist/routes/clawhub.js +89 -0
  559. package/dist/routes/costs.d.ts +4 -0
  560. package/dist/routes/costs.js +78 -0
  561. package/dist/routes/cron.d.ts +11 -0
  562. package/dist/routes/cron.js +708 -0
  563. package/dist/routes/devices.d.ts +9 -0
  564. package/dist/routes/devices.js +490 -0
  565. package/dist/routes/discord.d.ts +15 -0
  566. package/dist/routes/discord.js +524 -0
  567. package/dist/routes/dlq.d.ts +4 -0
  568. package/dist/routes/dlq.js +64 -0
  569. package/dist/routes/gateway.d.ts +4 -0
  570. package/dist/routes/gateway.js +253 -0
  571. package/dist/routes/health.d.ts +29 -0
  572. package/dist/routes/health.js +296 -0
  573. package/dist/routes/hooks.d.ts +4 -0
  574. package/dist/routes/hooks.js +170 -0
  575. package/dist/routes/import.d.ts +9 -0
  576. package/dist/routes/import.js +540 -0
  577. package/dist/routes/index.d.ts +38 -0
  578. package/dist/routes/index.js +39 -0
  579. package/dist/routes/integrations.d.ts +10 -0
  580. package/dist/routes/integrations.js +200 -0
  581. package/dist/routes/labels.d.ts +8 -0
  582. package/dist/routes/labels.js +240 -0
  583. package/dist/routes/mcp.d.ts +14 -0
  584. package/dist/routes/mcp.js +125 -0
  585. package/dist/routes/memory.d.ts +10 -0
  586. package/dist/routes/memory.js +622 -0
  587. package/dist/routes/notifications.d.ts +9 -0
  588. package/dist/routes/notifications.js +154 -0
  589. package/dist/routes/oobe.d.ts +10 -0
  590. package/dist/routes/oobe.js +405 -0
  591. package/dist/routes/openapi.d.ts +9 -0
  592. package/dist/routes/openapi.js +537 -0
  593. package/dist/routes/plugins.d.ts +8 -0
  594. package/dist/routes/plugins.js +108 -0
  595. package/dist/routes/projects.d.ts +8 -0
  596. package/dist/routes/projects.js +592 -0
  597. package/dist/routes/push.d.ts +8 -0
  598. package/dist/routes/push.js +75 -0
  599. package/dist/routes/search.d.ts +4 -0
  600. package/dist/routes/search.js +189 -0
  601. package/dist/routes/security.d.ts +10 -0
  602. package/dist/routes/security.js +189 -0
  603. package/dist/routes/settings.d.ts +4 -0
  604. package/dist/routes/settings.js +119 -0
  605. package/dist/routes/setup.d.ts +11 -0
  606. package/dist/routes/setup.js +525 -0
  607. package/dist/routes/skills.d.ts +13 -0
  608. package/dist/routes/skills.js +152 -0
  609. package/dist/routes/slack.d.ts +12 -0
  610. package/dist/routes/slack.js +999 -0
  611. package/dist/routes/states.d.ts +8 -0
  612. package/dist/routes/states.js +123 -0
  613. package/dist/routes/stats.d.ts +6 -0
  614. package/dist/routes/stats.js +369 -0
  615. package/dist/routes/summaries.d.ts +4 -0
  616. package/dist/routes/summaries.js +344 -0
  617. package/dist/routes/sync.d.ts +13 -0
  618. package/dist/routes/sync.js +268 -0
  619. package/dist/routes/tasks.d.ts +4 -0
  620. package/dist/routes/tasks.js +473 -0
  621. package/dist/routes/telegram.d.ts +14 -0
  622. package/dist/routes/telegram.js +420 -0
  623. package/dist/routes/tickets.d.ts +4 -0
  624. package/dist/routes/tickets.js +1090 -0
  625. package/dist/routes/tokens.d.ts +4 -0
  626. package/dist/routes/tokens.js +83 -0
  627. package/dist/routes/tools.d.ts +14 -0
  628. package/dist/routes/tools.js +790 -0
  629. package/dist/routes/tunnels.d.ts +8 -0
  630. package/dist/routes/tunnels.js +145 -0
  631. package/dist/routes/users.d.ts +15 -0
  632. package/dist/routes/users.js +998 -0
  633. package/dist/routes/voice.d.ts +8 -0
  634. package/dist/routes/voice.js +127 -0
  635. package/dist/routes/webchat.d.ts +11 -0
  636. package/dist/routes/webchat.js +173 -0
  637. package/dist/routes/webhook-dedup.d.ts +11 -0
  638. package/dist/routes/webhook-dedup.js +49 -0
  639. package/dist/routes/webhooks.d.ts +4 -0
  640. package/dist/routes/webhooks.js +71 -0
  641. package/dist/routes/whatsapp.d.ts +14 -0
  642. package/dist/routes/whatsapp.js +391 -0
  643. package/dist/security/audit-scanner.d.ts +32 -0
  644. package/dist/security/audit-scanner.js +217 -0
  645. package/dist/security/fs-guard.d.ts +41 -0
  646. package/dist/security/fs-guard.js +206 -0
  647. package/dist/security/prompt-guard.d.ts +47 -0
  648. package/dist/security/prompt-guard.js +198 -0
  649. package/dist/security/ssrf-guard.d.ts +38 -0
  650. package/dist/security/ssrf-guard.js +266 -0
  651. package/dist/security/types.d.ts +92 -0
  652. package/dist/security/types.js +8 -0
  653. package/dist/server/route-loader.d.ts +15 -0
  654. package/dist/server/route-loader.js +135 -0
  655. package/dist/server.d.ts +5 -0
  656. package/dist/server.js +835 -0
  657. package/dist/settings/index.d.ts +841 -0
  658. package/dist/settings/index.js +451 -0
  659. package/dist/skills/compiler.d.ts +83 -0
  660. package/dist/skills/compiler.js +358 -0
  661. package/dist/skills/frontmatter.d.ts +33 -0
  662. package/dist/skills/frontmatter.js +175 -0
  663. package/dist/skills/index.d.ts +19 -0
  664. package/dist/skills/index.js +24 -0
  665. package/dist/skills/installer.d.ts +22 -0
  666. package/dist/skills/installer.js +220 -0
  667. package/dist/skills/loader.d.ts +72 -0
  668. package/dist/skills/loader.js +484 -0
  669. package/dist/skills/prompt-builder.d.ts +48 -0
  670. package/dist/skills/prompt-builder.js +135 -0
  671. package/dist/skills/registry.d.ts +115 -0
  672. package/dist/skills/registry.js +225 -0
  673. package/dist/skills/types.d.ts +202 -0
  674. package/dist/skills/types.js +24 -0
  675. package/dist/states/index.d.ts +64 -0
  676. package/dist/states/index.js +142 -0
  677. package/dist/storage/adapter.d.ts +146 -0
  678. package/dist/storage/adapter.js +2 -0
  679. package/dist/storage/index.d.ts +48 -0
  680. package/dist/storage/index.js +135 -0
  681. package/dist/storage/libsql.d.ts +99 -0
  682. package/dist/storage/libsql.js +1873 -0
  683. package/dist/storage/migrations.d.ts +65 -0
  684. package/dist/storage/migrations.js +289 -0
  685. package/dist/storage/schema.d.ts +10185 -0
  686. package/dist/storage/schema.js +1113 -0
  687. package/dist/summaries/extractor.d.ts +56 -0
  688. package/dist/summaries/extractor.js +377 -0
  689. package/dist/summaries/index.d.ts +13 -0
  690. package/dist/summaries/index.js +14 -0
  691. package/dist/summaries/storage.d.ts +51 -0
  692. package/dist/summaries/storage.js +101 -0
  693. package/dist/summaries/templates.d.ts +68 -0
  694. package/dist/summaries/templates.js +245 -0
  695. package/dist/sync/adapters/base.d.ts +42 -0
  696. package/dist/sync/adapters/base.js +142 -0
  697. package/dist/sync/adapters/github.d.ts +45 -0
  698. package/dist/sync/adapters/github.js +445 -0
  699. package/dist/sync/adapters/linear.d.ts +40 -0
  700. package/dist/sync/adapters/linear.js +434 -0
  701. package/dist/sync/config.d.ts +388 -0
  702. package/dist/sync/config.js +281 -0
  703. package/dist/sync/engine.d.ts +112 -0
  704. package/dist/sync/engine.js +623 -0
  705. package/dist/sync/index.d.ts +31 -0
  706. package/dist/sync/index.js +34 -0
  707. package/dist/sync/integration.d.ts +53 -0
  708. package/dist/sync/integration.js +231 -0
  709. package/dist/sync/types.d.ts +249 -0
  710. package/dist/sync/types.js +30 -0
  711. package/dist/tickets/index.d.ts +139 -0
  712. package/dist/tickets/index.js +1406 -0
  713. package/dist/tickets/types.d.ts +817 -0
  714. package/dist/tickets/types.js +310 -0
  715. package/dist/tools/adapters.d.ts +56 -0
  716. package/dist/tools/adapters.js +183 -0
  717. package/dist/tools/index.d.ts +66 -0
  718. package/dist/tools/index.js +105 -0
  719. package/dist/tools/types.d.ts +117 -0
  720. package/dist/tools/types.js +20 -0
  721. package/dist/types/agent.d.ts +101 -0
  722. package/dist/types/agent.js +2 -0
  723. package/dist/types/errors.d.ts +150 -0
  724. package/dist/types/errors.js +338 -0
  725. package/dist/types/index.d.ts +3 -0
  726. package/dist/types/index.js +3 -0
  727. package/dist/types/summary.d.ts +638 -0
  728. package/dist/types/summary.js +137 -0
  729. package/dist/types/task.d.ts +123 -0
  730. package/dist/types/task.js +46 -0
  731. package/dist/utils/ai-cache.d.ts +72 -0
  732. package/dist/utils/ai-cache.js +204 -0
  733. package/dist/utils/ai-inference.d.ts +57 -0
  734. package/dist/utils/ai-inference.js +190 -0
  735. package/dist/utils/ai-responder.d.ts +44 -0
  736. package/dist/utils/ai-responder.js +272 -0
  737. package/dist/utils/circuit-breaker.d.ts +139 -0
  738. package/dist/utils/circuit-breaker.js +281 -0
  739. package/dist/utils/config-loader.d.ts +12 -0
  740. package/dist/utils/config-loader.js +44 -0
  741. package/dist/utils/crypto.d.ts +10 -0
  742. package/dist/utils/crypto.js +59 -0
  743. package/dist/utils/env-validator.d.ts +44 -0
  744. package/dist/utils/env-validator.js +236 -0
  745. package/dist/utils/file-lock.d.ts +85 -0
  746. package/dist/utils/file-lock.js +204 -0
  747. package/dist/utils/logger.d.ts +153 -0
  748. package/dist/utils/logger.js +282 -0
  749. package/dist/utils/metrics.d.ts +183 -0
  750. package/dist/utils/metrics.js +345 -0
  751. package/dist/utils/security.d.ts +90 -0
  752. package/dist/utils/security.js +347 -0
  753. package/dist/voice/index.d.ts +79 -0
  754. package/dist/voice/index.js +144 -0
  755. package/dist/voice/stt/whisper.d.ts +13 -0
  756. package/dist/voice/stt/whisper.js +116 -0
  757. package/dist/voice/tts/elevenlabs.d.ts +18 -0
  758. package/dist/voice/tts/elevenlabs.js +178 -0
  759. package/dist/voice/tts/openai-tts.d.ts +19 -0
  760. package/dist/voice/tts/openai-tts.js +127 -0
  761. package/dist/voice/tts/system.d.ts +26 -0
  762. package/dist/voice/tts/system.js +146 -0
  763. package/dist/voice/wake-word.d.ts +44 -0
  764. package/dist/voice/wake-word.js +145 -0
  765. package/docker-compose.yml +222 -0
  766. package/package.json +154 -0
  767. package/profclaw.mjs +24 -0
  768. package/skills/1password/SKILL.md +155 -0
  769. package/skills/api-tester/SKILL.md +177 -0
  770. package/skills/apple-notes/SKILL.md +167 -0
  771. package/skills/apple-reminders/SKILL.md +178 -0
  772. package/skills/bear-notes/SKILL.md +166 -0
  773. package/skills/blogwatcher/SKILL.md +177 -0
  774. package/skills/camsnap/SKILL.md +130 -0
  775. package/skills/code-generation/SKILL.md +139 -0
  776. package/skills/code-review/SKILL.md +116 -0
  777. package/skills/coding-agent/SKILL.md +184 -0
  778. package/skills/cron-manager/SKILL.md +141 -0
  779. package/skills/debug-helper/SKILL.md +134 -0
  780. package/skills/docker-ops/SKILL.md +246 -0
  781. package/skills/file-manager/SKILL.md +160 -0
  782. package/skills/git-workflow/SKILL.md +171 -0
  783. package/skills/github-issues/SKILL.md +244 -0
  784. package/skills/gog/SKILL.md +191 -0
  785. package/skills/goplaces/SKILL.md +156 -0
  786. package/skills/healthcheck/SKILL.md +270 -0
  787. package/skills/himalaya/SKILL.md +165 -0
  788. package/skills/mcp-discovery/SKILL.md +109 -0
  789. package/skills/memory-manager/SKILL.md +151 -0
  790. package/skills/model-usage/SKILL.md +177 -0
  791. package/skills/nano-banana-pro/SKILL.md +214 -0
  792. package/skills/nano-pdf/SKILL.md +165 -0
  793. package/skills/notion/SKILL.md +147 -0
  794. package/skills/obsidian/SKILL.md +163 -0
  795. package/skills/openai-image-gen/SKILL.md +194 -0
  796. package/skills/openai-whisper/SKILL.md +98 -0
  797. package/skills/openai-whisper-api/SKILL.md +130 -0
  798. package/skills/openhue/SKILL.md +203 -0
  799. package/skills/oracle/SKILL.md +236 -0
  800. package/skills/phone-control/SKILL.md +201 -0
  801. package/skills/profclaw-assistant/SKILL.md +81 -0
  802. package/skills/profclaw-projects/SKILL.md +68 -0
  803. package/skills/profclaw-tickets/SKILL.md +91 -0
  804. package/skills/session-logs/SKILL.md +216 -0
  805. package/skills/sherpa-onnx-tts/SKILL.md +134 -0
  806. package/skills/skill-creator/SKILL.md +183 -0
  807. package/skills/songsee/SKILL.md +170 -0
  808. package/skills/spotify-player/SKILL.md +254 -0
  809. package/skills/summarize/SKILL.md +155 -0
  810. package/skills/system-admin/SKILL.md +179 -0
  811. package/skills/things-mac/SKILL.md +179 -0
  812. package/skills/tmux/SKILL.md +170 -0
  813. package/skills/trello/SKILL.md +154 -0
  814. package/skills/video-frames/SKILL.md +127 -0
  815. package/skills/weather/SKILL.md +186 -0
  816. package/skills/web-research/SKILL.md +128 -0
  817. package/skills/xurl/SKILL.md +198 -0
  818. package/ui/README.md +73 -0
  819. package/ui/dist/assets/ActivityView-CkPgKhwm.js +1 -0
  820. package/ui/dist/assets/AgentList-C3SVdeEz.js +1 -0
  821. package/ui/dist/assets/AnalyticsDashboard-DVU--vlP.js +1 -0
  822. package/ui/dist/assets/AreaChart-B5qMEGWj.js +1 -0
  823. package/ui/dist/assets/CartesianChart-B50bcUJi.js +36 -0
  824. package/ui/dist/assets/ChatView-BZFJs7w_.js +10 -0
  825. package/ui/dist/assets/CostsDashboard-ChfH8BlG.js +1 -0
  826. package/ui/dist/assets/EstimateSelect-CLpB4NQO.js +1 -0
  827. package/ui/dist/assets/FloatingChatbot-CBzBY9a0.js +2 -0
  828. package/ui/dist/assets/InviteCodeManagement-DsbdPa6W.js +2 -0
  829. package/ui/dist/assets/ProjectDetail-BEM3tFXg.js +2 -0
  830. package/ui/dist/assets/ProjectDetail-D1-0B2xV.css +1 -0
  831. package/ui/dist/assets/ProjectIcon-CN1FmFAk.js +1 -0
  832. package/ui/dist/assets/ProjectList-DSDaNhxQ.js +4 -0
  833. package/ui/dist/assets/Settings-dPVcqC_d.js +6 -0
  834. package/ui/dist/assets/StatusIndicator-DA3NAo_b.js +1 -0
  835. package/ui/dist/assets/SummaryDetail-Bjnf9lT8.js +27 -0
  836. package/ui/dist/assets/SummaryList-ENwKDBKW.js +1 -0
  837. package/ui/dist/assets/TaskDetail-DnwG6MzB.js +1 -0
  838. package/ui/dist/assets/TaskList-D9Ug_HiV.js +1 -0
  839. package/ui/dist/assets/TicketBoard-CviH1571.js +1 -0
  840. package/ui/dist/assets/TicketDetail-8Jk8O-33.js +1 -0
  841. package/ui/dist/assets/TicketList-B-iV4rRA.js +1 -0
  842. package/ui/dist/assets/UserManagement-CPZ8s7s2.js +2 -0
  843. package/ui/dist/assets/ViewSwitcher-BUyOOWDI.js +1 -0
  844. package/ui/dist/assets/alert-dialog-BOmnTkN-.js +7 -0
  845. package/ui/dist/assets/archive-D5my9zOG.js +1 -0
  846. package/ui/dist/assets/badge-B4ov81_m.js +1 -0
  847. package/ui/dist/assets/brain-C53ElFLD.js +1 -0
  848. package/ui/dist/assets/bug-D0TJoCYn.js +1 -0
  849. package/ui/dist/assets/calendar-BkWIhKa1.js +1 -0
  850. package/ui/dist/assets/chevron-up-BRTtndUZ.js +1 -0
  851. package/ui/dist/assets/circle-x-BN89YhbS.js +1 -0
  852. package/ui/dist/assets/constants-fc7TFI7u.js +1 -0
  853. package/ui/dist/assets/cpu-B41x1-vV.js +1 -0
  854. package/ui/dist/assets/database-D9Cnfmzj.js +1 -0
  855. package/ui/dist/assets/defineProperty-CoXUr7_6.js +2 -0
  856. package/ui/dist/assets/dialog-DrWB4EYD.js +1 -0
  857. package/ui/dist/assets/element-adapter-DL0DQilL.js +4 -0
  858. package/ui/dist/assets/ellipsis-NuUWekvu.js +1 -0
  859. package/ui/dist/assets/ellipsis-vertical-BueMfuCw.js +1 -0
  860. package/ui/dist/assets/file-code-HR9829Jc.js +1 -0
  861. package/ui/dist/assets/folder-open-C_7oYEqe.js +1 -0
  862. package/ui/dist/assets/funnel-B5gmNXGf.js +1 -0
  863. package/ui/dist/assets/git-branch-BRMiJmV3.js +1 -0
  864. package/ui/dist/assets/git-commit-horizontal-CXOUQeJI.js +1 -0
  865. package/ui/dist/assets/globe-CCspjvus.js +1 -0
  866. package/ui/dist/assets/hash-g3102kPC.js +1 -0
  867. package/ui/dist/assets/history-CNqcBBrV.js +1 -0
  868. package/ui/dist/assets/index-27mTPKuh.js +1 -0
  869. package/ui/dist/assets/index-BMx3fH-e.js +1 -0
  870. package/ui/dist/assets/index-C9jNQXzL.js +1 -0
  871. package/ui/dist/assets/index-CEZ6R2Uw.js +7 -0
  872. package/ui/dist/assets/index-DURTouJI.js +1 -0
  873. package/ui/dist/assets/index-WclMPci1.css +1 -0
  874. package/ui/dist/assets/index-kb4AJXUB.js +67 -0
  875. package/ui/dist/assets/layers-CLXiHN6o.js +1 -0
  876. package/ui/dist/assets/layout-dashboard-B07MFhBs.js +1 -0
  877. package/ui/dist/assets/lightbulb-B2dgG5ks.js +1 -0
  878. package/ui/dist/assets/link-2-BxNmr9hL.js +1 -0
  879. package/ui/dist/assets/markdown-renderer-CjU6hBcW.js +36 -0
  880. package/ui/dist/assets/message-square-Bf2-CVbt.js +1 -0
  881. package/ui/dist/assets/pencil-D096Ey62.js +1 -0
  882. package/ui/dist/assets/play-DfdcSI3x.js +1 -0
  883. package/ui/dist/assets/popover-BV0QJDQq.js +1 -0
  884. package/ui/dist/assets/progress-DjPEDJfI.js +1 -0
  885. package/ui/dist/assets/rocket-CPsTc-5G.js +1 -0
  886. package/ui/dist/assets/select-LsO16slr.js +1 -0
  887. package/ui/dist/assets/send-BDYBZDUZ.js +1 -0
  888. package/ui/dist/assets/server-B3k6noce.js +1 -0
  889. package/ui/dist/assets/settings-2-Cu4xTjhG.js +1 -0
  890. package/ui/dist/assets/sheet-BScLnPKX.js +1 -0
  891. package/ui/dist/assets/shield-check-CQqkwufI.js +1 -0
  892. package/ui/dist/assets/shield-off-ZFruH9KO.js +1 -0
  893. package/ui/dist/assets/skeleton-CtkIA_MU.js +1 -0
  894. package/ui/dist/assets/smartphone-DnoksVkc.js +1 -0
  895. package/ui/dist/assets/square-uD9ZHMfW.js +1 -0
  896. package/ui/dist/assets/switch-MQPnwGJK.js +1 -0
  897. package/ui/dist/assets/table-B8cqlywA.js +1 -0
  898. package/ui/dist/assets/tag-wEJQRWlV.js +1 -0
  899. package/ui/dist/assets/textarea-D5LJCOGl.js +1 -0
  900. package/ui/dist/assets/timer-mbGHegmr.js +1 -0
  901. package/ui/dist/assets/tooltip-Df1CunSp.js +1 -0
  902. package/ui/dist/assets/trash-2-B4oAXsX-.js +1 -0
  903. package/ui/dist/assets/trending-up-BGWxvlmZ.js +1 -0
  904. package/ui/dist/assets/wand-sparkles-CZy4xvL3.js +1 -0
  905. package/ui/dist/assets/wrench-ByZkjO6m.js +1 -0
  906. package/ui/dist/audio-worklets/vad-processor.js +132 -0
  907. package/ui/dist/brand/profclaw-appicon-192.png +0 -0
  908. package/ui/dist/brand/profclaw-appicon-512.png +0 -0
  909. package/ui/dist/brand/profclaw-appicon-shadow.svg +51 -0
  910. package/ui/dist/brand/profclaw-appicon.svg +50 -0
  911. package/ui/dist/brand/profclaw-favicon-coral-bg-128.png +0 -0
  912. package/ui/dist/brand/profclaw-favicon-coral-bg-64.png +0 -0
  913. package/ui/dist/brand/profclaw-favicon-coral-bg.svg +52 -0
  914. package/ui/dist/brand/profclaw-favicon-coral-body-128.png +0 -0
  915. package/ui/dist/brand/profclaw-favicon-coral-body.svg +41 -0
  916. package/ui/dist/brand/profclaw-favicon-shadow-128.png +0 -0
  917. package/ui/dist/brand/profclaw-favicon-shadow-64.png +0 -0
  918. package/ui/dist/brand/profclaw-favicon-shadow.svg +51 -0
  919. package/ui/dist/brand/profclaw-mark-coral-256.png +0 -0
  920. package/ui/dist/brand/profclaw-mark-coral-64.png +0 -0
  921. package/ui/dist/brand/profclaw-mark-coral.svg +31 -0
  922. package/ui/dist/brand/profclaw-mono-white.svg +18 -0
  923. package/ui/dist/brand/profclaw-text-dark.svg +18 -0
  924. package/ui/dist/brand/profclaw-text-light.svg +18 -0
  925. package/ui/dist/brand/profclaw-wordmark-dark.svg +48 -0
  926. package/ui/dist/brand/profclaw-wordmark-light.svg +48 -0
  927. package/ui/dist/brand/safari-pinned-tab.svg +15 -0
  928. package/ui/dist/favicon/android-chrome-192x192.png +0 -0
  929. package/ui/dist/favicon/android-chrome-384x384.png +0 -0
  930. package/ui/dist/favicon/android-chrome-512x512.png +0 -0
  931. package/ui/dist/favicon/apple-touch-icon.png +0 -0
  932. package/ui/dist/favicon/browserconfig.xml +9 -0
  933. package/ui/dist/favicon/favicon-16x16.png +0 -0
  934. package/ui/dist/favicon/favicon-32x32.png +0 -0
  935. package/ui/dist/favicon/favicon.ico +0 -0
  936. package/ui/dist/favicon/mstile-150x150.png +0 -0
  937. package/ui/dist/favicon/safari-pinned-tab.svg +46 -0
  938. package/ui/dist/favicon/site.webmanifest +22 -0
  939. package/ui/dist/index.html +32 -0
  940. package/ui/dist/manifest.json +49 -0
  941. package/ui/dist/sw.js +124 -0
  942. package/ui/dist/vite.svg +1 -0
@@ -0,0 +1,281 @@
1
+ /**
2
+ * Circuit Breaker Implementation
3
+ *
4
+ * Protects against cascading failures by "opening" the circuit
5
+ * when error rates exceed thresholds, preventing further requests
6
+ * until the service has time to recover.
7
+ */
8
+ import { AppError, ErrorCategory, ErrorSeverity } from '../types/errors.js';
9
+ /**
10
+ * Circuit breaker states
11
+ */
12
+ export var CircuitState;
13
+ (function (CircuitState) {
14
+ /** Circuit is closed, requests flow normally */
15
+ CircuitState["CLOSED"] = "CLOSED";
16
+ /** Circuit is open, requests are blocked */
17
+ CircuitState["OPEN"] = "OPEN";
18
+ /** Circuit is testing if service recovered */
19
+ CircuitState["HALF_OPEN"] = "HALF_OPEN";
20
+ })(CircuitState || (CircuitState = {}));
21
+ /**
22
+ * Circuit breaker error
23
+ */
24
+ export class CircuitBreakerError extends AppError {
25
+ constructor(name, state) {
26
+ super(`Circuit breaker '${name}' is ${state}`, {
27
+ category: ErrorCategory.EXTERNAL_API,
28
+ severity: ErrorSeverity.MEDIUM,
29
+ retryable: state === CircuitState.HALF_OPEN,
30
+ statusCode: 503,
31
+ metadata: { circuitName: name, circuitState: state },
32
+ });
33
+ }
34
+ }
35
+ /**
36
+ * Circuit Breaker implementation
37
+ */
38
+ export class CircuitBreaker {
39
+ config;
40
+ state = CircuitState.CLOSED;
41
+ failureCount = 0;
42
+ successCount = 0;
43
+ totalRequests = 0;
44
+ lastFailureTime;
45
+ lastSuccessTime;
46
+ stateChangedAt = new Date();
47
+ failures = [];
48
+ resetTimer;
49
+ constructor(config) {
50
+ this.config = config;
51
+ }
52
+ /**
53
+ * Execute a function through the circuit breaker
54
+ */
55
+ async execute(fn) {
56
+ this.totalRequests++;
57
+ // Check circuit state
58
+ if (this.state === CircuitState.OPEN) {
59
+ // Check if we should attempt recovery
60
+ const timeSinceOpen = Date.now() - this.stateChangedAt.getTime();
61
+ if (timeSinceOpen >= this.config.resetTimeout) {
62
+ this.transitionTo(CircuitState.HALF_OPEN);
63
+ }
64
+ else {
65
+ throw new CircuitBreakerError(this.config.name, this.state);
66
+ }
67
+ }
68
+ try {
69
+ // Apply timeout if configured
70
+ const result = this.config.timeout
71
+ ? await this.withTimeout(fn, this.config.timeout)
72
+ : await fn();
73
+ this.onSuccess();
74
+ return result;
75
+ }
76
+ catch (error) {
77
+ this.onFailure(error);
78
+ throw error;
79
+ }
80
+ }
81
+ /**
82
+ * Execute function with timeout
83
+ */
84
+ async withTimeout(fn, timeoutMs) {
85
+ return Promise.race([
86
+ fn(),
87
+ new Promise((_, reject) => setTimeout(() => reject(new AppError(`Operation timed out after ${timeoutMs}ms`, {
88
+ category: ErrorCategory.TIMEOUT,
89
+ retryable: true,
90
+ statusCode: 504,
91
+ })), timeoutMs)),
92
+ ]);
93
+ }
94
+ /**
95
+ * Handle successful execution
96
+ */
97
+ onSuccess() {
98
+ this.lastSuccessTime = new Date();
99
+ if (this.state === CircuitState.HALF_OPEN) {
100
+ this.successCount++;
101
+ if (this.successCount >= this.config.successThreshold) {
102
+ this.transitionTo(CircuitState.CLOSED);
103
+ }
104
+ }
105
+ else if (this.state === CircuitState.CLOSED) {
106
+ // Reset failure count on success in closed state
107
+ this.failureCount = 0;
108
+ this.failures = [];
109
+ }
110
+ }
111
+ /**
112
+ * Handle failed execution
113
+ */
114
+ onFailure(error) {
115
+ this.lastFailureTime = new Date();
116
+ this.failureCount++;
117
+ this.failures.push(new Date());
118
+ // Clean up old failures outside the window
119
+ const cutoff = Date.now() - this.config.failureWindow;
120
+ this.failures = this.failures.filter((f) => f.getTime() > cutoff);
121
+ // Check if we should open the circuit
122
+ if (this.state === CircuitState.HALF_OPEN) {
123
+ // Any failure in half-open state reopens the circuit
124
+ this.transitionTo(CircuitState.OPEN);
125
+ }
126
+ else if (this.state === CircuitState.CLOSED) {
127
+ // Check if failures exceed threshold within window
128
+ if (this.failures.length >= this.config.failureThreshold) {
129
+ this.transitionTo(CircuitState.OPEN);
130
+ }
131
+ }
132
+ console.error(`[CircuitBreaker:${this.config.name}] Failure recorded. ` +
133
+ `Count: ${this.failures.length}/${this.config.failureThreshold} ` +
134
+ `State: ${this.state}`, error);
135
+ }
136
+ /**
137
+ * Transition to a new state
138
+ */
139
+ transitionTo(newState) {
140
+ const oldState = this.state;
141
+ this.state = newState;
142
+ this.stateChangedAt = new Date();
143
+ if (newState === CircuitState.CLOSED) {
144
+ // Reset counters when closing
145
+ this.failureCount = 0;
146
+ this.successCount = 0;
147
+ this.failures = [];
148
+ }
149
+ else if (newState === CircuitState.HALF_OPEN) {
150
+ // Reset success counter when entering half-open
151
+ this.successCount = 0;
152
+ }
153
+ else if (newState === CircuitState.OPEN) {
154
+ // Schedule automatic transition to half-open
155
+ if (this.resetTimer) {
156
+ clearTimeout(this.resetTimer);
157
+ }
158
+ this.resetTimer = setTimeout(() => {
159
+ if (this.state === CircuitState.OPEN) {
160
+ this.transitionTo(CircuitState.HALF_OPEN);
161
+ }
162
+ }, this.config.resetTimeout);
163
+ }
164
+ console.log(`[CircuitBreaker:${this.config.name}] State changed: ${oldState} → ${newState}`);
165
+ }
166
+ /**
167
+ * Get current statistics
168
+ */
169
+ getStats() {
170
+ return {
171
+ state: this.state,
172
+ failureCount: this.failureCount,
173
+ successCount: this.successCount,
174
+ totalRequests: this.totalRequests,
175
+ lastFailureTime: this.lastFailureTime,
176
+ lastSuccessTime: this.lastSuccessTime,
177
+ stateChangedAt: this.stateChangedAt,
178
+ };
179
+ }
180
+ /**
181
+ * Manually reset the circuit breaker
182
+ */
183
+ reset() {
184
+ if (this.resetTimer) {
185
+ clearTimeout(this.resetTimer);
186
+ }
187
+ this.state = CircuitState.CLOSED;
188
+ this.failureCount = 0;
189
+ this.successCount = 0;
190
+ this.failures = [];
191
+ this.stateChangedAt = new Date();
192
+ console.log(`[CircuitBreaker:${this.config.name}] Manually reset`);
193
+ }
194
+ /**
195
+ * Manually open the circuit breaker
196
+ */
197
+ open() {
198
+ this.transitionTo(CircuitState.OPEN);
199
+ }
200
+ /**
201
+ * Get current state
202
+ */
203
+ getState() {
204
+ return this.state;
205
+ }
206
+ }
207
+ /**
208
+ * Circuit breaker registry for managing multiple breakers
209
+ */
210
+ class CircuitBreakerRegistry {
211
+ breakers = new Map();
212
+ /**
213
+ * Get or create a circuit breaker
214
+ */
215
+ getOrCreate(name, config) {
216
+ let breaker = this.breakers.get(name);
217
+ if (!breaker) {
218
+ const defaultConfig = {
219
+ name,
220
+ failureThreshold: 5,
221
+ failureWindow: 60000, // 1 minute
222
+ resetTimeout: 30000, // 30 seconds
223
+ successThreshold: 2,
224
+ timeout: 10000, // 10 seconds
225
+ ...config,
226
+ };
227
+ breaker = new CircuitBreaker(defaultConfig);
228
+ this.breakers.set(name, breaker);
229
+ }
230
+ return breaker;
231
+ }
232
+ /**
233
+ * Get all circuit breakers
234
+ */
235
+ getAll() {
236
+ return new Map(this.breakers);
237
+ }
238
+ /**
239
+ * Get stats for all breakers
240
+ */
241
+ getAllStats() {
242
+ const stats = {};
243
+ for (const [name, breaker] of this.breakers) {
244
+ stats[name] = breaker.getStats();
245
+ }
246
+ return stats;
247
+ }
248
+ /**
249
+ * Reset a specific breaker
250
+ */
251
+ reset(name) {
252
+ this.breakers.get(name)?.reset();
253
+ }
254
+ /**
255
+ * Reset all breakers
256
+ */
257
+ resetAll() {
258
+ for (const breaker of this.breakers.values()) {
259
+ breaker.reset();
260
+ }
261
+ }
262
+ }
263
+ // Singleton registry
264
+ export const circuitBreakers = new CircuitBreakerRegistry();
265
+ /**
266
+ * Decorator to wrap a function with a circuit breaker
267
+ */
268
+ export function withCircuitBreaker(name, config) {
269
+ return function (_target, _propertyKey, descriptor) {
270
+ const original = descriptor.value;
271
+ if (!original) {
272
+ return descriptor;
273
+ }
274
+ descriptor.value = async function (...args) {
275
+ const breaker = circuitBreakers.getOrCreate(name, config);
276
+ return breaker.execute(() => original.apply(this, args));
277
+ };
278
+ return descriptor;
279
+ };
280
+ }
281
+ //# sourceMappingURL=circuit-breaker.js.map
@@ -0,0 +1,12 @@
1
+ import fs from 'fs';
2
+ /**
3
+ * Loads and parses a YAML configuration file
4
+ * @param fileName Name of the file in the config/ directory
5
+ * @returns Parsed configuration object
6
+ */
7
+ export declare function loadConfig<T>(fileName: string): T;
8
+ /**
9
+ * Watch a config file for changes and reload (optional)
10
+ */
11
+ export declare function watchConfig<T>(fileName: string, onUpdate: (config: T) => void): fs.FSWatcher;
12
+ //# sourceMappingURL=config-loader.d.ts.map
@@ -0,0 +1,44 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import yaml from 'js-yaml';
4
+ import { logger } from './logger.js';
5
+ /**
6
+ * Loads and parses a YAML configuration file
7
+ * @param fileName Name of the file in the config/ directory
8
+ * @returns Parsed configuration object
9
+ */
10
+ export function loadConfig(fileName) {
11
+ try {
12
+ const configPath = path.resolve(process.cwd(), 'config', fileName);
13
+ if (!fs.existsSync(configPath)) {
14
+ logger.warn(`Config file not found: ${configPath}, using defaults`);
15
+ return {};
16
+ }
17
+ const fileContents = fs.readFileSync(configPath, 'utf8');
18
+ // Interpolate environment variables: ${VAR_NAME} or ${VAR_NAME:-default}
19
+ const interpolated = fileContents.replace(/\${(\w+)(?::-([^}]*))?}/g, (_, name, defaultValue) => {
20
+ return process.env[name] || defaultValue || '';
21
+ });
22
+ const config = yaml.load(interpolated);
23
+ logger.debug(`Loaded configuration from ${fileName}`);
24
+ return config;
25
+ }
26
+ catch (error) {
27
+ logger.error(`Error loading config file ${fileName}:`, error);
28
+ return {};
29
+ }
30
+ }
31
+ /**
32
+ * Watch a config file for changes and reload (optional)
33
+ */
34
+ export function watchConfig(fileName, onUpdate) {
35
+ const configPath = path.resolve(process.cwd(), 'config', fileName);
36
+ return fs.watch(configPath, (eventType) => {
37
+ if (eventType === 'change') {
38
+ logger.info(`Config file changed: ${fileName}, reloading...`);
39
+ const newConfig = loadConfig(fileName);
40
+ onUpdate(newConfig);
41
+ }
42
+ });
43
+ }
44
+ //# sourceMappingURL=config-loader.js.map
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Encrypt sensitive data
3
+ * @returns Base64 string containing [iv]:[authTag]:[encryptedData]
4
+ */
5
+ export declare function encrypt(text: string): string;
6
+ /**
7
+ * Decrypt sensitive data
8
+ */
9
+ export declare function decrypt(encryptedText: string): string;
10
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1,59 @@
1
+ import { createCipheriv, createDecipheriv, randomBytes } from 'crypto';
2
+ import { logger } from './logger.js';
3
+ const ALGORITHM = 'aes-256-gcm';
4
+ const IV_LENGTH = 12; // Recommended for GCM
5
+ /**
6
+ * Get the encryption key from environment variable
7
+ */
8
+ function getEncryptionKey() {
9
+ const key = process.env.ENCRYPTION_KEY;
10
+ if (!key) {
11
+ if (process.env.NODE_ENV === 'production') {
12
+ throw new Error('ENCRYPTION_KEY environment variable is required in production');
13
+ }
14
+ // Fallback for development/testing
15
+ return Buffer.from('default_development_key_32_bytes_long_12345678');
16
+ }
17
+ // Key must be 32 bytes for aes-256-gcm
18
+ const bufferedKey = Buffer.from(key, 'hex');
19
+ if (bufferedKey.length !== 32) {
20
+ throw new Error('ENCRYPTION_KEY must be a 32-byte hex string');
21
+ }
22
+ return bufferedKey;
23
+ }
24
+ /**
25
+ * Encrypt sensitive data
26
+ * @returns Base64 string containing [iv]:[authTag]:[encryptedData]
27
+ */
28
+ export function encrypt(text) {
29
+ const iv = randomBytes(IV_LENGTH);
30
+ const cipher = createCipheriv(ALGORITHM, getEncryptionKey(), iv);
31
+ const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);
32
+ const authTag = cipher.getAuthTag();
33
+ return `${iv.toString('base64')}:${authTag.toString('base64')}:${encrypted.toString('base64')}`;
34
+ }
35
+ /**
36
+ * Decrypt sensitive data
37
+ */
38
+ export function decrypt(encryptedText) {
39
+ try {
40
+ const [ivBase64, authTagBase64, dataBase64] = encryptedText.split(':');
41
+ if (!ivBase64 || !authTagBase64 || !dataBase64) {
42
+ throw new Error('Invalid encrypted text format');
43
+ }
44
+ const iv = Buffer.from(ivBase64, 'base64');
45
+ const authTag = Buffer.from(authTagBase64, 'base64');
46
+ const encrypted = Buffer.from(dataBase64, 'base64');
47
+ const decipher = createDecipheriv(ALGORITHM, getEncryptionKey(), iv);
48
+ decipher.setAuthTag(authTag);
49
+ return decipher.update(encrypted) + decipher.final('utf8');
50
+ }
51
+ catch (error) {
52
+ logger.error('[Crypto] Decryption failed:', error);
53
+ // If decryption fails, it might be due to a key mismatch or corrupted data.
54
+ // In some cases, we might want to return the original text if it's not encrypted (migration path),
55
+ // but for security it's better to throw.
56
+ throw new Error('Failed to decrypt data');
57
+ }
58
+ }
59
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Environment Variable Validator
3
+ *
4
+ * Validates required and optional environment variables at startup.
5
+ * Fails fast with clear error messages if required variables are missing.
6
+ */
7
+ export interface EnvVarSpec {
8
+ name: string;
9
+ required: boolean;
10
+ default?: string;
11
+ description: string;
12
+ secret?: boolean;
13
+ validate?: (value: string) => boolean | string;
14
+ }
15
+ export interface ValidationResult {
16
+ valid: boolean;
17
+ errors: string[];
18
+ warnings: string[];
19
+ loaded: Record<string, string>;
20
+ }
21
+ /**
22
+ * All environment variables used by the application
23
+ */
24
+ export declare const ENV_SPEC: EnvVarSpec[];
25
+ /**
26
+ * Validate all environment variables
27
+ */
28
+ export declare function validateEnvironment(options?: {
29
+ exitOnError?: boolean;
30
+ logResults?: boolean;
31
+ }): ValidationResult;
32
+ /**
33
+ * Get a summary of configured integrations
34
+ */
35
+ export declare function getConfiguredIntegrations(): string[];
36
+ /**
37
+ * Get a summary of configured AI providers
38
+ */
39
+ export declare function getConfiguredAIProviders(): string[];
40
+ /**
41
+ * Generate .env.example content
42
+ */
43
+ export declare function generateEnvExample(): string;
44
+ //# sourceMappingURL=env-validator.d.ts.map
@@ -0,0 +1,236 @@
1
+ /**
2
+ * Environment Variable Validator
3
+ *
4
+ * Validates required and optional environment variables at startup.
5
+ * Fails fast with clear error messages if required variables are missing.
6
+ */
7
+ import { createContextualLogger } from './logger.js';
8
+ const log = createContextualLogger('EnvValidator');
9
+ /**
10
+ * All environment variables used by the application
11
+ */
12
+ export const ENV_SPEC = [
13
+ // Server
14
+ { name: 'PORT', required: false, default: '3000', description: 'HTTP server port' },
15
+ { name: 'NODE_ENV', required: false, default: 'development', description: 'Node environment (development/production/test)' },
16
+ // Storage
17
+ { name: 'STORAGE_TIER', required: false, default: 'local', description: 'Storage backend: memory, local (file), libsql' },
18
+ { name: 'LIBSQL_URL', required: false, description: 'LibSQL database URL (required if STORAGE_TIER=libsql)' },
19
+ { name: 'LIBSQL_AUTH_TOKEN', required: false, secret: true, description: 'LibSQL auth token for Turso cloud' },
20
+ { name: 'DATA_PATH', required: false, default: './data', description: 'Path for file-based storage' },
21
+ // Redis/Queue
22
+ { name: 'REDIS_URL', required: false, description: 'Redis URL for task queue (optional, enables background jobs)' },
23
+ // Cron
24
+ { name: 'ENABLE_CRON', required: false, default: 'true', description: 'Enable scheduled job execution' },
25
+ // CORS
26
+ { name: 'CORS_ORIGIN', required: false, description: 'Allowed CORS origin (comma-separated for multiple)' },
27
+ // AI Providers
28
+ { name: 'ANTHROPIC_API_KEY', required: false, secret: true, description: 'Anthropic API key for Claude models' },
29
+ { name: 'OPENAI_API_KEY', required: false, secret: true, description: 'OpenAI API key for GPT models' },
30
+ { name: 'GOOGLE_AI_API_KEY', required: false, secret: true, description: 'Google AI API key for Gemini models' },
31
+ { name: 'AZURE_OPENAI_API_KEY', required: false, secret: true, description: 'Azure OpenAI API key' },
32
+ { name: 'AZURE_OPENAI_ENDPOINT', required: false, description: 'Azure OpenAI endpoint URL' },
33
+ { name: 'OLLAMA_URL', required: false, default: 'http://localhost:11434', description: 'Ollama server URL for local models' },
34
+ // Integrations - GitHub
35
+ { name: 'GITHUB_CLIENT_ID', required: false, description: 'GitHub OAuth app client ID' },
36
+ { name: 'GITHUB_CLIENT_SECRET', required: false, secret: true, description: 'GitHub OAuth app client secret' },
37
+ { name: 'GITHUB_TOKEN', required: false, secret: true, description: 'GitHub personal access token' },
38
+ { name: 'GITHUB_WEBHOOK_SECRET', required: false, secret: true, description: 'GitHub webhook signature secret' },
39
+ // Integrations - JIRA
40
+ { name: 'JIRA_CLIENT_ID', required: false, description: 'JIRA OAuth client ID' },
41
+ { name: 'JIRA_CLIENT_SECRET', required: false, secret: true, description: 'JIRA OAuth client secret' },
42
+ { name: 'JIRA_CLOUD_ID', required: false, description: 'JIRA Cloud instance ID' },
43
+ // Integrations - Linear
44
+ { name: 'LINEAR_API_KEY', required: false, secret: true, description: 'Linear API key' },
45
+ { name: 'LINEAR_WEBHOOK_SECRET', required: false, secret: true, description: 'Linear webhook signature secret' },
46
+ // Integrations - Slack
47
+ { name: 'SLACK_BOT_TOKEN', required: false, secret: true, description: 'Slack bot OAuth token' },
48
+ { name: 'SLACK_SIGNING_SECRET', required: false, secret: true, description: 'Slack request signing secret' },
49
+ { name: 'SLACK_APP_TOKEN', required: false, secret: true, description: 'Slack app-level token (for Socket Mode)' },
50
+ // Integrations - Discord
51
+ { name: 'DISCORD_BOT_TOKEN', required: false, secret: true, description: 'Discord bot token' },
52
+ { name: 'DISCORD_APPLICATION_ID', required: false, description: 'Discord application ID' },
53
+ { name: 'DISCORD_PUBLIC_KEY', required: false, description: 'Discord public key for verification' },
54
+ { name: 'DISCORD_CLIENT_SECRET', required: false, secret: true, description: 'Discord client secret for OAuth' },
55
+ // Integrations - Telegram
56
+ { name: 'TELEGRAM_BOT_TOKEN', required: false, secret: true, description: 'Telegram bot token from BotFather' },
57
+ // Integrations - WhatsApp
58
+ { name: 'WHATSAPP_ACCESS_TOKEN', required: false, secret: true, description: 'WhatsApp Business API access token' },
59
+ { name: 'WHATSAPP_PHONE_NUMBER_ID', required: false, description: 'WhatsApp Business phone number ID' },
60
+ { name: 'WHATSAPP_VERIFY_TOKEN', required: false, secret: true, description: 'WhatsApp webhook verify token' },
61
+ // Search
62
+ { name: 'SEARXNG_URL', required: false, default: 'https://searx.tiekoetter.com', description: 'SearXNG instance for web search' },
63
+ // Embeddings
64
+ { name: 'EMBEDDING_PROVIDER', required: false, default: 'local', description: 'Embedding provider: local, openai, voyage' },
65
+ { name: 'VOYAGE_API_KEY', required: false, secret: true, description: 'Voyage AI API key for embeddings' },
66
+ ];
67
+ /**
68
+ * Validate all environment variables
69
+ */
70
+ export function validateEnvironment(options = {}) {
71
+ const { exitOnError = false, logResults = true } = options;
72
+ const result = {
73
+ valid: true,
74
+ errors: [],
75
+ warnings: [],
76
+ loaded: {},
77
+ };
78
+ for (const spec of ENV_SPEC) {
79
+ const value = process.env[spec.name];
80
+ if (!value && spec.required) {
81
+ result.valid = false;
82
+ result.errors.push(`Missing required environment variable: ${spec.name} - ${spec.description}`);
83
+ }
84
+ else if (!value && spec.default) {
85
+ // Apply default
86
+ process.env[spec.name] = spec.default;
87
+ result.loaded[spec.name] = spec.default;
88
+ if (logResults) {
89
+ log.debug(`Using default for ${spec.name}: ${spec.secret ? '[HIDDEN]' : spec.default}`);
90
+ }
91
+ }
92
+ else if (value) {
93
+ result.loaded[spec.name] = value;
94
+ // Run custom validation if provided
95
+ if (spec.validate) {
96
+ const validateResult = spec.validate(value);
97
+ if (validateResult !== true) {
98
+ result.valid = false;
99
+ result.errors.push(`Invalid value for ${spec.name}: ${validateResult}`);
100
+ }
101
+ }
102
+ }
103
+ }
104
+ // Cross-validation checks
105
+ if (process.env.STORAGE_TIER === 'libsql' && !process.env.LIBSQL_URL) {
106
+ result.valid = false;
107
+ result.errors.push('STORAGE_TIER=libsql requires LIBSQL_URL to be set');
108
+ }
109
+ // Warnings for missing optional but recommended vars
110
+ const hasAnyAIKey = process.env.ANTHROPIC_API_KEY ||
111
+ process.env.OPENAI_API_KEY ||
112
+ process.env.GOOGLE_AI_API_KEY;
113
+ if (!hasAnyAIKey) {
114
+ result.warnings.push('No AI provider configured. Set ANTHROPIC_API_KEY, OPENAI_API_KEY, or GOOGLE_AI_API_KEY for AI features.');
115
+ }
116
+ // Log results
117
+ if (logResults) {
118
+ if (result.errors.length > 0) {
119
+ log.error('Environment validation failed:');
120
+ result.errors.forEach(err => log.error(` ❌ ${err}`));
121
+ }
122
+ if (result.warnings.length > 0) {
123
+ result.warnings.forEach(warn => log.warn(` ⚠️ ${warn}`));
124
+ }
125
+ if (result.valid && result.errors.length === 0) {
126
+ log.info('Environment validation passed ✓');
127
+ }
128
+ }
129
+ // Exit if configured to do so
130
+ if (!result.valid && exitOnError) {
131
+ log.error('Server startup aborted due to environment errors. Fix the issues above and restart.');
132
+ process.exit(1);
133
+ }
134
+ return result;
135
+ }
136
+ /**
137
+ * Get a summary of configured integrations
138
+ */
139
+ export function getConfiguredIntegrations() {
140
+ const integrations = [];
141
+ if (process.env.GITHUB_TOKEN || process.env.GITHUB_CLIENT_ID)
142
+ integrations.push('GitHub');
143
+ if (process.env.JIRA_CLIENT_ID)
144
+ integrations.push('JIRA');
145
+ if (process.env.LINEAR_API_KEY)
146
+ integrations.push('Linear');
147
+ if (process.env.SLACK_BOT_TOKEN)
148
+ integrations.push('Slack');
149
+ if (process.env.DISCORD_BOT_TOKEN)
150
+ integrations.push('Discord');
151
+ if (process.env.TELEGRAM_BOT_TOKEN)
152
+ integrations.push('Telegram');
153
+ if (process.env.WHATSAPP_ACCESS_TOKEN)
154
+ integrations.push('WhatsApp');
155
+ return integrations;
156
+ }
157
+ /**
158
+ * Get a summary of configured AI providers
159
+ */
160
+ export function getConfiguredAIProviders() {
161
+ const providers = [];
162
+ if (process.env.ANTHROPIC_API_KEY)
163
+ providers.push('Anthropic (Claude)');
164
+ if (process.env.OPENAI_API_KEY)
165
+ providers.push('OpenAI (GPT)');
166
+ if (process.env.GOOGLE_AI_API_KEY)
167
+ providers.push('Google (Gemini)');
168
+ if (process.env.AZURE_OPENAI_API_KEY)
169
+ providers.push('Azure OpenAI');
170
+ if (process.env.OLLAMA_URL)
171
+ providers.push('Ollama (local)');
172
+ return providers;
173
+ }
174
+ /**
175
+ * Generate .env.example content
176
+ */
177
+ export function generateEnvExample() {
178
+ const lines = [
179
+ '# profClaw Environment Configuration',
180
+ '# Generated from ENV_SPEC in src/utils/env-validator.ts',
181
+ '# Copy this file to .env and fill in your values',
182
+ '',
183
+ ];
184
+ let currentCategory = '';
185
+ for (const spec of ENV_SPEC) {
186
+ // Add category headers based on name patterns
187
+ const category = spec.name.split('_')[0];
188
+ if (category !== currentCategory) {
189
+ currentCategory = category;
190
+ lines.push('');
191
+ lines.push(`# ─── ${getCategory(spec.name)} ───`);
192
+ }
193
+ // Add description and example
194
+ lines.push(`# ${spec.description}`);
195
+ if (spec.default) {
196
+ lines.push(`${spec.name}=${spec.default}`);
197
+ }
198
+ else if (spec.secret) {
199
+ lines.push(`# ${spec.name}=your_secret_here`);
200
+ }
201
+ else {
202
+ lines.push(`# ${spec.name}=`);
203
+ }
204
+ }
205
+ return lines.join('\n');
206
+ }
207
+ function getCategory(name) {
208
+ const prefix = name.split('_')[0];
209
+ const categories = {
210
+ PORT: 'Server',
211
+ NODE: 'Server',
212
+ STORAGE: 'Storage',
213
+ LIBSQL: 'Storage',
214
+ DATA: 'Storage',
215
+ REDIS: 'Queue',
216
+ ENABLE: 'Features',
217
+ CORS: 'Security',
218
+ ANTHROPIC: 'AI Providers',
219
+ OPENAI: 'AI Providers',
220
+ GOOGLE: 'AI Providers',
221
+ AZURE: 'AI Providers',
222
+ OLLAMA: 'AI Providers',
223
+ GITHUB: 'GitHub Integration',
224
+ JIRA: 'JIRA Integration',
225
+ LINEAR: 'Linear Integration',
226
+ SLACK: 'Slack Integration',
227
+ DISCORD: 'Discord Integration',
228
+ TELEGRAM: 'Telegram Integration',
229
+ WHATSAPP: 'WhatsApp Integration',
230
+ SEARXNG: 'Search',
231
+ EMBEDDING: 'Embeddings',
232
+ VOYAGE: 'Embeddings',
233
+ };
234
+ return categories[prefix] || 'Other';
235
+ }
236
+ //# sourceMappingURL=env-validator.js.map