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,98 @@
1
+ /**
2
+ * Quality Guardrails System - Phase 19 Category 8
3
+ *
4
+ * System-level quality checks that prevent bad outputs regardless of which
5
+ * AI model is used. Ensures even cheap/local models produce safe, valid responses.
6
+ *
7
+ * 8.1 Output Validation
8
+ * 8.2 Hallucination Detection
9
+ * 8.3 Safety Bounds
10
+ * 8.4 Quality Scoring
11
+ */
12
+ export interface GuardrailContext {
13
+ /** Known file paths in the project */
14
+ knownFiles?: string[];
15
+ /** Registered tool names */
16
+ registeredTools?: string[];
17
+ /** The user's original query */
18
+ userQuery?: string;
19
+ /** Current conversation topic */
20
+ topic?: string;
21
+ /** Security mode */
22
+ securityMode?: string;
23
+ }
24
+ export interface ValidationResult {
25
+ valid: boolean;
26
+ issues: ValidationIssue[];
27
+ score: number;
28
+ }
29
+ export interface ValidationIssue {
30
+ type: 'format' | 'content' | 'safety' | 'hallucination';
31
+ severity: 'warning' | 'error';
32
+ message: string;
33
+ autoFixed?: boolean;
34
+ }
35
+ export interface HallucinationCheck {
36
+ detected: boolean;
37
+ flags: HallucinationFlag[];
38
+ }
39
+ export interface HallucinationFlag {
40
+ type: 'nonexistent_file' | 'nonexistent_tool' | 'nonexistent_api' | 'fabricated_data';
41
+ reference: string;
42
+ confidence: number;
43
+ }
44
+ export interface SafetyCheckResult {
45
+ safe: boolean;
46
+ blocked: BlockedAction[];
47
+ }
48
+ export interface BlockedAction {
49
+ action: string;
50
+ reason: string;
51
+ severity: 'warning' | 'critical';
52
+ }
53
+ export interface QualityScore {
54
+ overall: number;
55
+ components: {
56
+ relevance: number;
57
+ completeness: number;
58
+ safety: number;
59
+ formatting: number;
60
+ };
61
+ tier: 'excellent' | 'good' | 'acceptable' | 'poor';
62
+ shouldCorrect: boolean;
63
+ }
64
+ export interface GuardrailResult {
65
+ passed: boolean;
66
+ validation: ValidationResult;
67
+ hallucination: HallucinationCheck;
68
+ safety: SafetyCheckResult;
69
+ quality: QualityScore;
70
+ /** Modified response if auto-fixes were applied */
71
+ cleanedResponse?: string;
72
+ }
73
+ /**
74
+ * Validate an agent response for format, content, safety, and structural issues.
75
+ */
76
+ export declare function validateAgentResponse(response: string, context: GuardrailContext): ValidationResult;
77
+ /**
78
+ * Detect potential hallucinations in a response.
79
+ */
80
+ export declare function detectHallucinations(response: string, context: GuardrailContext): HallucinationCheck;
81
+ /**
82
+ * Check tool parameters against absolute safety bounds.
83
+ * These patterns are blocked even in full-autonomous mode.
84
+ */
85
+ export declare function checkSafetyBounds(toolName: string, params: Record<string, unknown>): SafetyCheckResult;
86
+ /**
87
+ * Score response quality across relevance, completeness, safety, and formatting.
88
+ */
89
+ export declare function scoreResponse(response: string, userQuery: string, context: GuardrailContext): QualityScore;
90
+ /**
91
+ * Run all guardrails on an agent response and its tool calls.
92
+ * Returns a comprehensive result with per-check details and optional cleaned response.
93
+ */
94
+ export declare function runGuardrails(response: string, toolCalls: Array<{
95
+ name: string;
96
+ params: Record<string, unknown>;
97
+ }>, context: GuardrailContext): Promise<GuardrailResult>;
98
+ //# sourceMappingURL=guardrails.d.ts.map
@@ -0,0 +1,571 @@
1
+ /**
2
+ * Quality Guardrails System - Phase 19 Category 8
3
+ *
4
+ * System-level quality checks that prevent bad outputs regardless of which
5
+ * AI model is used. Ensures even cheap/local models produce safe, valid responses.
6
+ *
7
+ * 8.1 Output Validation
8
+ * 8.2 Hallucination Detection
9
+ * 8.3 Safety Bounds
10
+ * 8.4 Quality Scoring
11
+ */
12
+ // 8.1 Output Validation
13
+ const MAX_RESPONSE_CHARS = 50_000;
14
+ const STUTTER_THRESHOLD = 3; // same sentence repeated 3+ times
15
+ // Patterns for raw tool call syntax leaking into response
16
+ const TOOL_CALL_LEAK_PATTERNS = [
17
+ /<tool_call>/i,
18
+ /<\/tool_call>/i,
19
+ /\{"type":"tool_use"/,
20
+ /\{"role":"tool"/,
21
+ /"tool_calls"\s*:\s*\[/,
22
+ /\[TOOL_CALL\]/i,
23
+ /<function_calls>/i,
24
+ /\[FUNCTION_CALL\]/i,
25
+ ];
26
+ // Patterns indicating the system prompt may be echoed back
27
+ const SYSTEM_PROMPT_ECHO_PATTERNS = [
28
+ /you are an? (helpful |professional |ai |intelligent )?assistant/i,
29
+ /your name is (profclaw|professor claw|prof claw)/i,
30
+ /you must (always|never|only) respond/i,
31
+ /\[system\]/i,
32
+ /<system>/i,
33
+ ];
34
+ /**
35
+ * Validate an agent response for format, content, safety, and structural issues.
36
+ */
37
+ export function validateAgentResponse(response, context) {
38
+ const issues = [];
39
+ // Check 1: Non-empty response
40
+ if (!response || response.trim().length === 0) {
41
+ issues.push({
42
+ type: 'content',
43
+ severity: 'error',
44
+ message: 'Response is empty',
45
+ });
46
+ return { valid: false, issues, score: 0 };
47
+ }
48
+ // Check 2: System prompt echo detection
49
+ const echoMatches = SYSTEM_PROMPT_ECHO_PATTERNS.filter((p) => p.test(response));
50
+ if (echoMatches.length >= 2) {
51
+ issues.push({
52
+ type: 'content',
53
+ severity: 'error',
54
+ message: 'Response appears to echo the system prompt back to the user',
55
+ });
56
+ }
57
+ // Check 3: Raw tool call syntax leak
58
+ const leakMatches = TOOL_CALL_LEAK_PATTERNS.filter((p) => p.test(response));
59
+ if (leakMatches.length > 0) {
60
+ issues.push({
61
+ type: 'format',
62
+ severity: 'error',
63
+ message: `Response contains raw tool call syntax (${leakMatches.length} pattern(s) matched) - model is leaking internals`,
64
+ });
65
+ }
66
+ // Check 4: Response length
67
+ if (response.length > MAX_RESPONSE_CHARS) {
68
+ issues.push({
69
+ type: 'format',
70
+ severity: 'warning',
71
+ message: `Response exceeds ${MAX_RESPONSE_CHARS} characters (${response.length} chars) - may indicate runaway generation`,
72
+ });
73
+ }
74
+ // Check 5: Stutter / repeated sentence detection
75
+ const stutterIssue = detectStuttering(response);
76
+ if (stutterIssue) {
77
+ issues.push(stutterIssue);
78
+ }
79
+ // Check 6: Code block brace balance
80
+ const codeBlockIssues = checkCodeBlockBalance(response);
81
+ issues.push(...codeBlockIssues);
82
+ // Check 7: Query context hint (warn if response seems completely unrelated)
83
+ if (context.userQuery && context.userQuery.length > 10) {
84
+ const queryWords = extractKeywords(context.userQuery);
85
+ const responseWords = extractKeywords(response);
86
+ const overlap = queryWords.filter((w) => responseWords.includes(w)).length;
87
+ if (queryWords.length > 3 && overlap === 0) {
88
+ issues.push({
89
+ type: 'content',
90
+ severity: 'warning',
91
+ message: 'Response shares no keywords with the user query - may be off-topic',
92
+ });
93
+ }
94
+ }
95
+ const hasErrors = issues.some((i) => i.severity === 'error');
96
+ const errorPenalty = issues.filter((i) => i.severity === 'error').length * 20;
97
+ const warningPenalty = issues.filter((i) => i.severity === 'warning').length * 10;
98
+ const score = Math.max(0, 100 - errorPenalty - warningPenalty);
99
+ return {
100
+ valid: !hasErrors,
101
+ issues,
102
+ score,
103
+ };
104
+ }
105
+ function detectStuttering(response) {
106
+ // Split into sentences by common sentence terminators
107
+ const sentences = response
108
+ .split(/[.!?]\s+/)
109
+ .map((s) => s.trim().toLowerCase())
110
+ .filter((s) => s.length > 15); // ignore short fragments
111
+ if (sentences.length < STUTTER_THRESHOLD)
112
+ return null;
113
+ const counts = new Map();
114
+ for (const sentence of sentences) {
115
+ const normalized = sentence.replace(/\s+/g, ' ');
116
+ counts.set(normalized, (counts.get(normalized) ?? 0) + 1);
117
+ }
118
+ for (const [sentence, count] of counts) {
119
+ if (count >= STUTTER_THRESHOLD) {
120
+ return {
121
+ type: 'format',
122
+ severity: 'error',
123
+ message: `Stutter detected: "${sentence.slice(0, 60)}..." repeated ${count} times`,
124
+ };
125
+ }
126
+ }
127
+ return null;
128
+ }
129
+ function checkCodeBlockBalance(response) {
130
+ const issues = [];
131
+ // Extract code blocks
132
+ const codeBlockRegex = /```[\w]*\n([\s\S]*?)```/g;
133
+ let match;
134
+ while ((match = codeBlockRegex.exec(response)) !== null) {
135
+ const code = match[1];
136
+ if (!code)
137
+ continue;
138
+ // Check brace/bracket balance
139
+ const openBraces = (code.match(/\{/g) ?? []).length;
140
+ const closeBraces = (code.match(/\}/g) ?? []).length;
141
+ const openBrackets = (code.match(/\[/g) ?? []).length;
142
+ const closeBrackets = (code.match(/\]/g) ?? []).length;
143
+ if (openBraces !== closeBraces) {
144
+ issues.push({
145
+ type: 'format',
146
+ severity: 'warning',
147
+ message: `Code block has unbalanced braces: ${openBraces} opening vs ${closeBraces} closing`,
148
+ });
149
+ }
150
+ if (openBrackets !== closeBrackets) {
151
+ issues.push({
152
+ type: 'format',
153
+ severity: 'warning',
154
+ message: `Code block has unbalanced brackets: ${openBrackets} opening vs ${closeBrackets} closing`,
155
+ });
156
+ }
157
+ }
158
+ return issues;
159
+ }
160
+ // 8.2 Hallucination Detection
161
+ // Fabricated URL patterns - overly versioned or nonsense paths
162
+ const FABRICATED_URL_PATTERNS = [
163
+ /https?:\/\/example\.com\/api\/v\d{2,}/i, // e.g. /api/v99/
164
+ /https?:\/\/(?:foo|bar|baz|test)\.example\.com/i,
165
+ /https?:\/\/api\.(?:fake|nonexistent|placeholder)\.(?:com|io|dev)/i,
166
+ ];
167
+ // Unrealistic library version patterns
168
+ const UNREALISTIC_VERSION_PATTERNS = [
169
+ { pattern: /React\s+v?(\d+)\./i, maxMajor: 20, name: 'React' },
170
+ { pattern: /Next\.js\s+v?(\d+)\./i, maxMajor: 20, name: 'Next.js' },
171
+ { pattern: /Vue\s+v?(\d+)\./i, maxMajor: 5, name: 'Vue' },
172
+ { pattern: /Angular\s+v?(\d+)\./i, maxMajor: 30, name: 'Angular' },
173
+ { pattern: /Node\.js\s+v?(\d+)\./i, maxMajor: 30, name: 'Node.js' },
174
+ { pattern: /TypeScript\s+v?(\d+)\./i, maxMajor: 10, name: 'TypeScript' },
175
+ { pattern: /Python\s+v?(\d+)\./i, maxMajor: 5, name: 'Python' },
176
+ { pattern: /Django\s+v?(\d+)\./i, maxMajor: 10, name: 'Django' },
177
+ { pattern: /Rust\s+v?(\d+)\./i, maxMajor: 3, name: 'Rust' },
178
+ { pattern: /Go\s+v?(\d+)\./i, maxMajor: 3, name: 'Go' },
179
+ ];
180
+ // File path-like patterns in response text
181
+ const FILE_PATH_PATTERN = /(?:^|\s|`|")(\/?(?:src|lib|app|pages|components|utils|hooks|api|routes|models|services|config|tests?)\/[\w\-./]+\.\w{1,6})(?:\s|`|"|$)/gm;
182
+ /**
183
+ * Detect potential hallucinations in a response.
184
+ */
185
+ export function detectHallucinations(response, context) {
186
+ const flags = [];
187
+ // Check 1: File paths mentioned vs known project files
188
+ if (context.knownFiles && context.knownFiles.length > 0) {
189
+ const mentionedPaths = extractFilePaths(response);
190
+ for (const mentionedPath of mentionedPaths) {
191
+ const normalized = mentionedPath.replace(/^\.\//, '');
192
+ const exists = context.knownFiles.some((f) => f.endsWith(normalized) || f.includes(normalized));
193
+ if (!exists) {
194
+ flags.push({
195
+ type: 'nonexistent_file',
196
+ reference: mentionedPath,
197
+ confidence: 0.7,
198
+ });
199
+ }
200
+ }
201
+ }
202
+ // Check 2: Tool names mentioned vs registered tools
203
+ if (context.registeredTools && context.registeredTools.length > 0) {
204
+ const toolRefs = extractToolReferences(response, context.registeredTools);
205
+ for (const ref of toolRefs) {
206
+ if (!context.registeredTools.includes(ref)) {
207
+ flags.push({
208
+ type: 'nonexistent_tool',
209
+ reference: ref,
210
+ confidence: 0.8,
211
+ });
212
+ }
213
+ }
214
+ }
215
+ // Check 3: Fabricated URLs
216
+ for (const pattern of FABRICATED_URL_PATTERNS) {
217
+ const urlMatch = pattern.exec(response);
218
+ if (urlMatch) {
219
+ flags.push({
220
+ type: 'nonexistent_api',
221
+ reference: urlMatch[0],
222
+ confidence: 0.75,
223
+ });
224
+ }
225
+ }
226
+ // Check 4: Unrealistic version numbers
227
+ for (const { pattern, maxMajor, name } of UNREALISTIC_VERSION_PATTERNS) {
228
+ const vMatch = pattern.exec(response);
229
+ if (vMatch && vMatch[1]) {
230
+ const major = parseInt(vMatch[1], 10);
231
+ if (major > maxMajor) {
232
+ flags.push({
233
+ type: 'fabricated_data',
234
+ reference: `${name} v${major} (max realistic major: ${maxMajor})`,
235
+ confidence: 0.9,
236
+ });
237
+ }
238
+ }
239
+ }
240
+ return {
241
+ detected: flags.length > 0,
242
+ flags,
243
+ };
244
+ }
245
+ function extractFilePaths(text) {
246
+ const paths = [];
247
+ const regex = new RegExp(FILE_PATH_PATTERN.source, FILE_PATH_PATTERN.flags);
248
+ let match;
249
+ while ((match = regex.exec(text)) !== null) {
250
+ if (match[1]) {
251
+ paths.push(match[1].trim());
252
+ }
253
+ }
254
+ // Deduplicate
255
+ return [...new Set(paths)];
256
+ }
257
+ function extractToolReferences(text, registeredTools) {
258
+ // Look for references to known tool name patterns and potential tool names in backticks
259
+ const found = [];
260
+ const backtickRefs = text.match(/`([a-z][a-z0-9_-]{2,40})`/gi) ?? [];
261
+ for (const ref of backtickRefs) {
262
+ const name = ref.replace(/`/g, '');
263
+ // Only flag if it looks like a tool (snake_case or kebab-case function name)
264
+ if (/^[a-z][a-z0-9_]{2,}$/.test(name) && !registeredTools.includes(name)) {
265
+ // Only flag if there's at least one registered tool with similar naming
266
+ const hasSimilarStyle = registeredTools.some((t) => /^[a-z][a-z0-9_]{2,}$/.test(t));
267
+ if (hasSimilarStyle) {
268
+ found.push(name);
269
+ }
270
+ }
271
+ }
272
+ return [...new Set(found)];
273
+ }
274
+ const BLOCKED_SAFETY_PATTERNS = [
275
+ // Destructive filesystem
276
+ { pattern: /rm\s+-rf?\s+\/(?:\s|$|~|\*)/i, reason: 'Recursive deletion of root or home directory', severity: 'critical' },
277
+ { pattern: /rm\s+-rf?\s+~(?:\/|$)/i, reason: 'Recursive deletion of home directory', severity: 'critical' },
278
+ { pattern: /rm\s+-rf?\s+\/\*/i, reason: 'Recursive deletion of root wildcard', severity: 'critical' },
279
+ // SQL destructive
280
+ { pattern: /DROP\s+TABLE\b/i, reason: 'SQL DROP TABLE - destructive database operation', severity: 'critical' },
281
+ { pattern: /DROP\s+DATABASE\b/i, reason: 'SQL DROP DATABASE - destructive database operation', severity: 'critical' },
282
+ { pattern: /TRUNCATE\s+TABLE\b/i, reason: 'SQL TRUNCATE - destroys all table data', severity: 'critical' },
283
+ // Dangerous chmod on system dirs
284
+ { pattern: /chmod\s+(?:a\+rwx|777)\s+\/(?:etc|usr|bin|sbin|var|sys|proc)/i, reason: 'chmod 777 on system directory', severity: 'critical' },
285
+ // Pipe to shell
286
+ { pattern: /curl\s+.*\|\s*(?:sudo\s+)?(?:ba)?sh\b/i, reason: 'Piping curl output directly to shell', severity: 'critical' },
287
+ { pattern: /wget\s+.*\|\s*(?:sudo\s+)?(?:ba)?sh\b/i, reason: 'Piping wget output directly to shell', severity: 'critical' },
288
+ // Kill init/systemd
289
+ { pattern: /kill\s+(?:-9\s+|-SIGKILL\s+)?1\b/i, reason: 'Attempting to kill PID 1 (init/systemd)', severity: 'critical' },
290
+ { pattern: /kill\s+(?:-9\s+|-SIGKILL\s+)?-1\b/i, reason: 'Attempting to kill all processes', severity: 'critical' },
291
+ // Sensitive system file modification
292
+ { pattern: /(?:echo|tee|cat|write|>>|>)\s+.*(?:\/etc\/passwd|\/etc\/shadow|\.ssh\/authorized_keys)/i, reason: 'Modifying sensitive authentication files', severity: 'critical' },
293
+ { pattern: /\bchpasswd\b/i, reason: 'Changing system passwords', severity: 'critical' },
294
+ // Disk/device destructive writes
295
+ { pattern: />\s*\/dev\/sd[a-z]\b/i, reason: 'Direct write to block device', severity: 'critical' },
296
+ { pattern: /dd\s+.*of=\/dev\/(?:sd[a-z]|nvme\d)/i, reason: 'dd write to disk device', severity: 'critical' },
297
+ { pattern: /mkfs\./i, reason: 'Formatting a filesystem', severity: 'critical' },
298
+ { pattern: /\bformat\s+[a-z]:\\/i, reason: 'Windows disk format command', severity: 'critical' },
299
+ // Firewall flush
300
+ { pattern: /iptables\s+-F\b/i, reason: 'Flushing all iptables firewall rules', severity: 'critical' },
301
+ { pattern: /iptables\s+--flush\b/i, reason: 'Flushing all iptables firewall rules', severity: 'critical' },
302
+ { pattern: /ufw\s+--force\s+reset/i, reason: 'Resetting UFW firewall rules', severity: 'warning' },
303
+ // System shutdown
304
+ { pattern: /\bshutdown\b.*(?:-h|-r|\bnow\b)/i, reason: 'System shutdown or reboot command', severity: 'warning' },
305
+ { pattern: /\breboot\b(?:\s|$)/i, reason: 'System reboot command', severity: 'warning' },
306
+ { pattern: /\bhalt\b(?:\s|$)/i, reason: 'System halt command', severity: 'warning' },
307
+ { pattern: /\bpoweroff\b(?:\s|$)/i, reason: 'System poweroff command', severity: 'warning' },
308
+ // Zero-fill writes
309
+ { pattern: /dd\s+if=\/dev\/zero\s+of=\/dev\//i, reason: 'Zero-filling a block device', severity: 'critical' },
310
+ { pattern: /dd\s+if=\/dev\/urandom\s+of=\/dev\//i, reason: 'Random-filling a block device', severity: 'critical' },
311
+ ];
312
+ /**
313
+ * Check tool parameters against absolute safety bounds.
314
+ * These patterns are blocked even in full-autonomous mode.
315
+ */
316
+ export function checkSafetyBounds(toolName, params) {
317
+ const blocked = [];
318
+ // Build a searchable string from all param values
319
+ const paramValues = extractStringValues(params);
320
+ const searchTarget = paramValues.join(' ');
321
+ if (searchTarget.length === 0) {
322
+ return { safe: true, blocked: [] };
323
+ }
324
+ for (const { pattern, reason, severity } of BLOCKED_SAFETY_PATTERNS) {
325
+ if (pattern.test(searchTarget)) {
326
+ blocked.push({
327
+ action: `${toolName}: ${searchTarget.slice(0, 120)}`,
328
+ reason,
329
+ severity,
330
+ });
331
+ }
332
+ }
333
+ return {
334
+ safe: blocked.length === 0,
335
+ blocked,
336
+ };
337
+ }
338
+ function extractStringValues(obj, depth = 0) {
339
+ if (depth > 3)
340
+ return [];
341
+ const values = [];
342
+ for (const val of Object.values(obj)) {
343
+ if (typeof val === 'string') {
344
+ values.push(val);
345
+ }
346
+ else if (Array.isArray(val)) {
347
+ for (const item of val) {
348
+ if (typeof item === 'string') {
349
+ values.push(item);
350
+ }
351
+ else if (item !== null && typeof item === 'object') {
352
+ values.push(...extractStringValues(item, depth + 1));
353
+ }
354
+ }
355
+ }
356
+ else if (val !== null && typeof val === 'object') {
357
+ values.push(...extractStringValues(val, depth + 1));
358
+ }
359
+ }
360
+ return values;
361
+ }
362
+ // 8.4 Quality Scoring
363
+ const TIER_THRESHOLDS = {
364
+ excellent: 80,
365
+ good: 60,
366
+ acceptable: 40,
367
+ };
368
+ const CORRECT_BELOW = 40;
369
+ // Code-related keywords used to check if response should have code blocks
370
+ const CODE_KEYWORDS = [
371
+ 'function', 'class', 'const ', 'let ', 'var ', 'return', 'import', 'export',
372
+ 'interface', 'type ', 'enum ', 'async', 'await', 'promise', 'callback',
373
+ 'snippet', 'example code', 'code block', 'implement', 'script', 'program',
374
+ ];
375
+ /**
376
+ * Score response quality across relevance, completeness, safety, and formatting.
377
+ */
378
+ export function scoreResponse(response, userQuery, context) {
379
+ const relevance = scoreRelevance(response, userQuery);
380
+ const completeness = scoreCompleteness(response, userQuery);
381
+ const safety = scoreSafety(response, context);
382
+ const formatting = scoreFormatting(response, userQuery);
383
+ const overall = Math.round((relevance + completeness + safety + formatting) / 4);
384
+ const tier = getTier(overall);
385
+ return {
386
+ overall,
387
+ components: { relevance, completeness, safety, formatting },
388
+ tier,
389
+ shouldCorrect: overall < CORRECT_BELOW,
390
+ };
391
+ }
392
+ function scoreRelevance(response, userQuery) {
393
+ if (!userQuery || userQuery.trim().length === 0)
394
+ return 70; // neutral if no query
395
+ const queryKeywords = extractKeywords(userQuery);
396
+ const responseKeywords = extractKeywords(response);
397
+ if (queryKeywords.length === 0)
398
+ return 70;
399
+ const matched = queryKeywords.filter((kw) => responseKeywords.includes(kw)).length;
400
+ const ratio = matched / queryKeywords.length;
401
+ // Scale: 0% overlap = 20, 100% overlap = 100
402
+ return Math.round(20 + ratio * 80);
403
+ }
404
+ function scoreCompleteness(response, userQuery) {
405
+ const trimmed = response.trim();
406
+ const wordCount = trimmed.split(/\s+/).length;
407
+ // Estimate query complexity by word count
408
+ const queryWords = userQuery.trim().split(/\s+/).length;
409
+ const isComplexQuery = queryWords > 15;
410
+ const isSimpleQuery = queryWords <= 5;
411
+ // Check if it's a question
412
+ const isQuestion = /\?$/.test(userQuery.trim()) || /^(?:what|how|why|when|where|who|can|could|should|would|is|are|do|does)\b/i.test(userQuery.trim());
413
+ let expectedMinWords;
414
+ if (isSimpleQuery && !isQuestion) {
415
+ expectedMinWords = 10;
416
+ }
417
+ else if (isComplexQuery || isQuestion) {
418
+ expectedMinWords = 50;
419
+ }
420
+ else {
421
+ expectedMinWords = 25;
422
+ }
423
+ if (wordCount < 3)
424
+ return 10; // near-empty response
425
+ if (wordCount >= expectedMinWords * 3)
426
+ return 100; // more than enough
427
+ if (wordCount >= expectedMinWords)
428
+ return 80;
429
+ if (wordCount >= expectedMinWords / 2)
430
+ return 55;
431
+ return 30;
432
+ }
433
+ function scoreSafety(response, context) {
434
+ // Run safety check on response text treated as a pseudo-command
435
+ const safetyResult = checkSafetyBounds('response_text', { content: response });
436
+ if (!safetyResult.safe) {
437
+ const criticalCount = safetyResult.blocked.filter((b) => b.severity === 'critical').length;
438
+ const warningCount = safetyResult.blocked.filter((b) => b.severity === 'warning').length;
439
+ return Math.max(0, 100 - criticalCount * 40 - warningCount * 10);
440
+ }
441
+ // Also check if securityMode context indicates elevated caution
442
+ if (context.securityMode === 'deny')
443
+ return 100; // deny mode = nothing runs = safe
444
+ return 100;
445
+ }
446
+ function scoreFormatting(response, userQuery) {
447
+ let score = 50; // baseline
448
+ const trimmed = response.trim();
449
+ const hasMultipleParagraphs = trimmed.split(/\n\n+/).length > 1;
450
+ const hasCodeBlock = /```[\s\S]*?```/.test(trimmed);
451
+ const hasBulletList = /^[-*+]\s/m.test(trimmed);
452
+ const hasNumberedList = /^\d+\.\s/m.test(trimmed);
453
+ const hasHeaders = /^#+\s/m.test(trimmed);
454
+ // Is the query code-related?
455
+ const isCodeQuery = CODE_KEYWORDS.some((kw) => userQuery.toLowerCase().includes(kw));
456
+ // Good structure bonuses
457
+ if (hasMultipleParagraphs)
458
+ score += 10;
459
+ if (hasBulletList || hasNumberedList)
460
+ score += 10;
461
+ if (hasHeaders && trimmed.length > 500)
462
+ score += 5; // headers only help for longer responses
463
+ // Code block relevance
464
+ if (isCodeQuery && hasCodeBlock)
465
+ score += 20;
466
+ if (isCodeQuery && !hasCodeBlock)
467
+ score -= 15; // expected code but none provided
468
+ // Penalize very short responses to complex queries
469
+ const wordCount = trimmed.split(/\s+/).length;
470
+ if (wordCount < 5)
471
+ score -= 30;
472
+ // Cap to 0-100
473
+ return Math.max(0, Math.min(100, score));
474
+ }
475
+ function getTier(score) {
476
+ if (score >= TIER_THRESHOLDS.excellent)
477
+ return 'excellent';
478
+ if (score >= TIER_THRESHOLDS.good)
479
+ return 'good';
480
+ if (score >= TIER_THRESHOLDS.acceptable)
481
+ return 'acceptable';
482
+ return 'poor';
483
+ }
484
+ // Shared Utilities
485
+ // Common English stop words to exclude from keyword extraction
486
+ const STOP_WORDS = new Set([
487
+ 'a', 'an', 'the', 'and', 'or', 'but', 'in', 'on', 'at', 'to', 'for',
488
+ 'of', 'with', 'by', 'from', 'is', 'are', 'was', 'were', 'be', 'been',
489
+ 'has', 'have', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
490
+ 'should', 'may', 'might', 'can', 'it', 'its', 'this', 'that', 'these',
491
+ 'those', 'i', 'you', 'we', 'they', 'he', 'she', 'my', 'your', 'our',
492
+ 'how', 'what', 'when', 'where', 'why', 'which', 'who', 'not', 'no',
493
+ 'if', 'so', 'as', 'up', 'out', 'about', 'into', 'then', 'than', 'just',
494
+ ]);
495
+ function extractKeywords(text) {
496
+ return text
497
+ .toLowerCase()
498
+ .replace(/[^a-z0-9\s]/g, ' ')
499
+ .split(/\s+/)
500
+ .filter((w) => w.length > 3 && !STOP_WORDS.has(w));
501
+ }
502
+ // Main Guardrail Pipeline
503
+ /**
504
+ * Run all guardrails on an agent response and its tool calls.
505
+ * Returns a comprehensive result with per-check details and optional cleaned response.
506
+ */
507
+ export async function runGuardrails(response, toolCalls, context) {
508
+ // Run all checks (pure functions - can run in parallel conceptually)
509
+ const validation = validateAgentResponse(response, context);
510
+ const hallucination = detectHallucinations(response, context);
511
+ const quality = scoreResponse(response, context.userQuery ?? '', context);
512
+ // Safety bounds: check the response text AND all tool call params
513
+ const safetyChecks = [
514
+ checkSafetyBounds('response_text', { content: response }),
515
+ ...toolCalls.map((tc) => checkSafetyBounds(tc.name, tc.params)),
516
+ ];
517
+ const safety = {
518
+ safe: safetyChecks.every((r) => r.safe),
519
+ blocked: safetyChecks.flatMap((r) => r.blocked),
520
+ };
521
+ // Determine if guardrails passed overall
522
+ // Fail if: validation errors, safety violations, or very poor quality
523
+ const passed = validation.valid &&
524
+ safety.safe &&
525
+ !quality.shouldCorrect;
526
+ // Auto-clean response if there are fixable issues but otherwise valid
527
+ let cleanedResponse;
528
+ if (!passed || validation.issues.some((i) => i.autoFixed)) {
529
+ cleanedResponse = applyAutoFixes(response, validation.issues);
530
+ if (cleanedResponse === response) {
531
+ // No changes were made - don't return a cleanedResponse
532
+ cleanedResponse = undefined;
533
+ }
534
+ }
535
+ if (!passed) {
536
+ console.error('[guardrails] Guardrail check failed', {
537
+ validationIssues: validation.issues.length,
538
+ hallucinationFlags: hallucination.flags.length,
539
+ safetyBlocked: safety.blocked.length,
540
+ qualityTier: quality.tier,
541
+ });
542
+ }
543
+ return {
544
+ passed,
545
+ validation,
546
+ hallucination,
547
+ safety,
548
+ quality,
549
+ cleanedResponse,
550
+ };
551
+ }
552
+ /**
553
+ * Apply automatic fixes to a response based on detected issues.
554
+ * Returns the (potentially modified) response.
555
+ */
556
+ function applyAutoFixes(response, issues) {
557
+ let cleaned = response;
558
+ for (const issue of issues) {
559
+ if (issue.type === 'format' && issue.message.includes('raw tool call syntax')) {
560
+ // Strip tool call XML/JSON artifacts from the response
561
+ cleaned = cleaned
562
+ .replace(/<tool_call>[\s\S]*?<\/tool_call>/gi, '')
563
+ .replace(/<function_calls>[\s\S]*?<\/function_calls>/gi, '')
564
+ .replace(/\{"type":"tool_use"[\s\S]*?\}/g, '')
565
+ .replace(/\[TOOL_CALL\][\s\S]*?\[\/TOOL_CALL\]/gi, '')
566
+ .trim();
567
+ }
568
+ }
569
+ return cleaned;
570
+ }
571
+ //# sourceMappingURL=guardrails.js.map