@poolzin/pool-bot 2026.1.38 → 2026.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. package/assets/chrome-extension/README.md +3 -3
  2. package/assets/chrome-extension/background.js +5 -5
  3. package/assets/chrome-extension/manifest.json +3 -3
  4. package/assets/chrome-extension/options.html +4 -4
  5. package/assets/chrome-extension/options.js +1 -1
  6. package/dist/acp/client.js +3 -3
  7. package/dist/acp/types.js +1 -1
  8. package/dist/agents/agent-paths.js +3 -3
  9. package/dist/agents/auth-profiles/paths.js +3 -3
  10. package/dist/agents/cli-runner/helpers.js +1 -1
  11. package/dist/agents/cli-runner.js +2 -2
  12. package/dist/agents/cloudflare-ai-gateway.js +31 -0
  13. package/dist/agents/compaction.js +16 -2
  14. package/dist/agents/context-window-guard.js +13 -10
  15. package/dist/agents/context.js +4 -4
  16. package/dist/agents/docs-path.js +1 -1
  17. package/dist/agents/minimax-vlm.js +1 -1
  18. package/dist/agents/model-auth.js +12 -1
  19. package/dist/agents/model-catalog.js +4 -4
  20. package/dist/agents/model-selection.js +10 -4
  21. package/dist/agents/models-config.js +3 -3
  22. package/dist/agents/models-config.providers.js +147 -39
  23. package/dist/agents/pi-embedded-helpers/openai.js +1 -1
  24. package/dist/agents/pi-embedded-runner/compact.js +8 -8
  25. package/dist/agents/pi-embedded-runner/model.js +2 -2
  26. package/dist/agents/pi-embedded-runner/run/attempt.js +6 -6
  27. package/dist/agents/pi-embedded-runner/run.js +4 -4
  28. package/dist/agents/pi-embedded-runner/tool-result-truncation.js +275 -0
  29. package/dist/agents/pi-embedded-runner/utils.js +1 -1
  30. package/dist/agents/pi-model-discovery.js +10 -0
  31. package/dist/agents/pi-tool-definition-adapter.js +50 -9
  32. package/dist/agents/pi-tools.before-tool-call.js +67 -0
  33. package/dist/agents/pi-tools.js +10 -5
  34. package/dist/agents/pi-tools.read.js +2 -2
  35. package/dist/agents/session-file-repair.js +83 -0
  36. package/dist/agents/session-transcript-repair.js +68 -0
  37. package/dist/agents/skills/frontmatter.js +1 -1
  38. package/dist/agents/skills/workspace.js +2 -2
  39. package/dist/agents/system-prompt.js +28 -4
  40. package/dist/agents/together-models.js +127 -0
  41. package/dist/agents/tool-images.js +1 -1
  42. package/dist/agents/tool-policy.js +1 -1
  43. package/dist/agents/tools/browser-tool.js +3 -3
  44. package/dist/agents/tools/image-tool.js +2 -2
  45. package/dist/agents/tools/memory-tool.js +94 -7
  46. package/dist/agents/tools/web-search.js +1 -1
  47. package/dist/agents/workspace.js +1 -5
  48. package/dist/auto-reply/commands-registry.data.js +1 -1
  49. package/dist/auto-reply/reply/commands-context-report.js +2 -2
  50. package/dist/auto-reply/reply/commands-session.js +2 -2
  51. package/dist/auto-reply/reply/get-reply-run.js +14 -4
  52. package/dist/auto-reply/reply/groups.js +1 -1
  53. package/dist/auto-reply/reply/inbound-context.js +4 -0
  54. package/dist/auto-reply/reply/inbound-meta.js +130 -0
  55. package/dist/auto-reply/reply/untrusted-context.js +15 -0
  56. package/dist/auto-reply/status.js +1 -1
  57. package/dist/browser/client-fetch.js +1 -1
  58. package/dist/browser/config.js +1 -1
  59. package/dist/browser/extension-relay.js +3 -3
  60. package/dist/browser/server-context.js +2 -2
  61. package/dist/build-info.json +3 -3
  62. package/dist/canvas-host/a2ui.js +3 -3
  63. package/dist/channels/plugins/agent-tools/whatsapp-login.js +1 -17
  64. package/dist/channels/plugins/catalog.js +2 -2
  65. package/dist/channels/plugins/onboarding/imessage.js +1 -1
  66. package/dist/channels/plugins/onboarding/signal.js +1 -1
  67. package/dist/channels/plugins/onboarding/slack.js +4 -4
  68. package/dist/channels/plugins/onboarding/whatsapp.js +3 -3
  69. package/dist/channels/plugins/pairing-message.js +1 -1
  70. package/dist/cli/browser-cli-extension.js +2 -2
  71. package/dist/cli/docs-cli.js +1 -1
  72. package/dist/cli/gateway-cli/dev.js +1 -1
  73. package/dist/cli/memory-cli.js +25 -15
  74. package/dist/cli/nodes-cli/register.canvas.js +1 -1
  75. package/dist/cli/plugins-cli.js +1 -1
  76. package/dist/cli/run-main.js +2 -2
  77. package/dist/cli/security-cli.js +1 -1
  78. package/dist/cli/tagline.js +1 -1
  79. package/dist/cli/update-cli.js +4 -4
  80. package/dist/cli/webhooks-cli.js +5 -5
  81. package/dist/commands/agents.commands.add.js +1 -1
  82. package/dist/commands/auth-choice.apply.api-providers.js +305 -17
  83. package/dist/commands/auth-choice.apply.js +4 -1
  84. package/dist/commands/auth-choice.apply.plugin-provider.js +2 -2
  85. package/dist/commands/auth-choice.apply.xai.js +63 -0
  86. package/dist/commands/auth-choice.preferred-provider.js +7 -1
  87. package/dist/commands/configure.wizard.js +1 -1
  88. package/dist/commands/dashboard.js +1 -1
  89. package/dist/commands/docs.js +1 -1
  90. package/dist/commands/doctor-gateway-services.js +3 -3
  91. package/dist/commands/doctor-state-integrity.js +2 -14
  92. package/dist/commands/doctor-update.js +3 -3
  93. package/dist/commands/doctor.js +1 -1
  94. package/dist/commands/models/list.probe.js +2 -2
  95. package/dist/commands/models/list.registry.js +4 -4
  96. package/dist/commands/models/list.status-command.js +2 -2
  97. package/dist/commands/onboard-auth.config-core.js +366 -28
  98. package/dist/commands/onboard-auth.credentials.js +71 -9
  99. package/dist/commands/onboard-auth.js +3 -3
  100. package/dist/commands/onboard-auth.models.js +26 -24
  101. package/dist/commands/onboard-non-interactive/local/auth-choice.js +140 -6
  102. package/dist/commands/status-all/report-lines.js +1 -1
  103. package/dist/commands/status.command.js +1 -1
  104. package/dist/commands/uninstall.js +3 -3
  105. package/dist/compat/legacy-names.js +1 -1
  106. package/dist/config/io.js +3 -3
  107. package/dist/config/schema.js +1 -1
  108. package/dist/config/types.js +0 -1
  109. package/dist/config/types.memory.js +1 -0
  110. package/dist/config/version.js +4 -4
  111. package/dist/config/zod-schema.js +0 -6
  112. package/dist/daemon/constants.js +7 -7
  113. package/dist/daemon/inspect.js +6 -6
  114. package/dist/daemon/systemd-unit.js +1 -1
  115. package/dist/discord/monitor/message-handler.process.js +6 -4
  116. package/dist/gateway/client.js +0 -14
  117. package/dist/gateway/live-image-probe.js +1 -66
  118. package/dist/gateway/openai-http.js +2 -2
  119. package/dist/gateway/openresponses-http.js +4 -4
  120. package/dist/gateway/server-discovery.js +2 -2
  121. package/dist/gateway/server-http.js +1 -1
  122. package/dist/gateway/server.impl.js +2 -6
  123. package/dist/hooks/frontmatter.js +1 -1
  124. package/dist/hooks/hooks-status.js +1 -1
  125. package/dist/hooks/install.js +2 -2
  126. package/dist/hooks/loader.js +1 -1
  127. package/dist/hooks/workspace.js +3 -3
  128. package/dist/index.js +2 -2
  129. package/dist/infra/bonjour.js +3 -3
  130. package/dist/infra/path-env.js +3 -3
  131. package/dist/infra/provider-usage.fetch.minimax.js +1 -1
  132. package/dist/infra/restart.js +1 -1
  133. package/dist/infra/tailscale.js +1 -1
  134. package/dist/macos/relay.js +2 -2
  135. package/dist/media/input-files.js +1 -1
  136. package/dist/media/mime.js +4 -0
  137. package/dist/media/png-encode.js +74 -0
  138. package/dist/media-understanding/providers/image.js +2 -2
  139. package/dist/memory/backend-config.js +207 -0
  140. package/dist/memory/embeddings.js +1 -1
  141. package/dist/memory/index.js +0 -5
  142. package/dist/memory/manager.js +3 -25
  143. package/dist/memory/types.js +1 -0
  144. package/dist/node-host/runner.js +2 -2
  145. package/dist/pairing/pairing-messages.js +1 -1
  146. package/dist/plugins/discovery.js +1 -1
  147. package/dist/plugins/install.js +2 -2
  148. package/dist/plugins/update.js +1 -1
  149. package/dist/security/audit.js +2 -2
  150. package/dist/shared/text/reasoning-tags.js +52 -7
  151. package/dist/slack/monitor/message-handler/prepare.js +10 -4
  152. package/dist/slack/monitor/slash.js +10 -4
  153. package/dist/tailscale/detect.js +146 -0
  154. package/dist/telegram/bot-message-context.js +1 -1
  155. package/dist/test-helpers/workspace.js +11 -0
  156. package/dist/test-utils/channel-plugins.js +82 -0
  157. package/dist/test-utils/ports.js +73 -0
  158. package/dist/utils/shell-argv.js +61 -0
  159. package/dist/utils.js +10 -0
  160. package/dist/web/qr-image.js +1 -61
  161. package/dist/wizard/onboarding.finalize.js +7 -7
  162. package/dist/wizard/onboarding.js +3 -3
  163. package/docs/RELEASE_WORKFOTS_COMPARISON.md +3 -3
  164. package/docs/_config.yml +2 -2
  165. package/docs/_layouts/default.html +9 -9
  166. package/docs/concepts/typebox.md +1 -1
  167. package/docs/docs.json +1 -1
  168. package/docs/northflank.mdx +7 -7
  169. package/docs/railway.mdx +3 -3
  170. package/docs/render.mdx +5 -5
  171. package/docs/start/lore.md +2 -2
  172. package/extensions/bluebubbles/index.ts +2 -2
  173. package/extensions/bluebubbles/package.json +1 -1
  174. package/extensions/bluebubbles/src/accounts.ts +8 -8
  175. package/extensions/bluebubbles/src/actions.test.ts +22 -22
  176. package/extensions/bluebubbles/src/actions.ts +5 -5
  177. package/extensions/bluebubbles/src/attachments.ts +2 -2
  178. package/extensions/bluebubbles/src/channel.ts +16 -16
  179. package/extensions/bluebubbles/src/chat.ts +2 -2
  180. package/extensions/bluebubbles/src/media-send.ts +2 -2
  181. package/extensions/bluebubbles/src/monitor.test.ts +46 -46
  182. package/extensions/bluebubbles/src/monitor.ts +5 -5
  183. package/extensions/bluebubbles/src/onboarding.ts +7 -7
  184. package/extensions/bluebubbles/src/reactions.ts +2 -2
  185. package/extensions/bluebubbles/src/send.ts +2 -2
  186. package/extensions/copilot-proxy/README.md +1 -1
  187. package/extensions/copilot-proxy/package.json +1 -1
  188. package/extensions/diagnostics-otel/index.ts +2 -2
  189. package/extensions/diagnostics-otel/package.json +1 -1
  190. package/extensions/diagnostics-otel/src/service.ts +3 -3
  191. package/extensions/discord/index.ts +2 -2
  192. package/extensions/discord/package.json +1 -1
  193. package/extensions/google-antigravity-auth/README.md +1 -1
  194. package/extensions/google-antigravity-auth/index.ts +1 -1
  195. package/extensions/google-antigravity-auth/package.json +1 -1
  196. package/extensions/google-gemini-cli-auth/README.md +1 -1
  197. package/extensions/google-gemini-cli-auth/oauth.ts +1 -1
  198. package/extensions/google-gemini-cli-auth/package.json +1 -1
  199. package/extensions/googlechat/index.ts +3 -3
  200. package/extensions/googlechat/package.json +1 -1
  201. package/extensions/googlechat/src/accounts.ts +8 -8
  202. package/extensions/googlechat/src/actions.ts +6 -6
  203. package/extensions/googlechat/src/channel.ts +21 -21
  204. package/extensions/googlechat/src/monitor.ts +8 -8
  205. package/extensions/googlechat/src/onboarding.ts +10 -10
  206. package/extensions/imessage/index.ts +2 -2
  207. package/extensions/imessage/package.json +1 -1
  208. package/extensions/line/index.ts +2 -2
  209. package/extensions/line/package.json +1 -1
  210. package/extensions/line/src/card-command.ts +2 -2
  211. package/extensions/line/src/channel.logout.test.ts +4 -4
  212. package/extensions/line/src/channel.sendPayload.test.ts +8 -8
  213. package/extensions/line/src/channel.ts +3 -3
  214. package/extensions/llm-task/README.md +3 -3
  215. package/extensions/llm-task/index.ts +2 -2
  216. package/extensions/llm-task/package.json +1 -1
  217. package/extensions/llm-task/src/llm-task-tool.ts +4 -4
  218. package/extensions/lobster/README.md +6 -6
  219. package/extensions/lobster/index.ts +2 -2
  220. package/extensions/lobster/src/lobster-tool.test.ts +4 -4
  221. package/extensions/lobster/src/lobster-tool.ts +2 -2
  222. package/extensions/matrix/index.ts +2 -2
  223. package/extensions/matrix/package.json +1 -1
  224. package/extensions/matrix/src/matrix/client/config.ts +1 -1
  225. package/extensions/matrix/src/matrix/monitor/handler.ts +1 -1
  226. package/extensions/matrix/src/onboarding.ts +1 -1
  227. package/extensions/mattermost/index.ts +2 -2
  228. package/extensions/mattermost/package.json +1 -1
  229. package/extensions/mattermost/src/mattermost/accounts.ts +8 -8
  230. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +5 -5
  231. package/extensions/mattermost/src/mattermost/monitor.ts +2 -2
  232. package/extensions/mattermost/src/onboarding-helpers.ts +3 -3
  233. package/extensions/mattermost/src/onboarding.ts +2 -2
  234. package/extensions/memory-core/index.ts +2 -2
  235. package/extensions/memory-core/package.json +1 -4
  236. package/extensions/memory-lancedb/index.ts +3 -3
  237. package/extensions/memory-lancedb/package.json +1 -1
  238. package/extensions/msteams/index.ts +2 -2
  239. package/extensions/msteams/package.json +1 -1
  240. package/extensions/msteams/src/channel.directory.test.ts +2 -2
  241. package/extensions/msteams/src/channel.ts +2 -2
  242. package/extensions/msteams/src/graph-upload.ts +4 -4
  243. package/extensions/msteams/src/monitor-handler.ts +2 -2
  244. package/extensions/msteams/src/monitor.ts +2 -2
  245. package/extensions/msteams/src/onboarding.ts +9 -9
  246. package/extensions/msteams/src/reply-dispatcher.ts +2 -2
  247. package/extensions/msteams/src/send-context.ts +2 -2
  248. package/extensions/msteams/src/send.ts +4 -4
  249. package/extensions/nextcloud-talk/index.ts +2 -2
  250. package/extensions/nextcloud-talk/package.json +1 -1
  251. package/extensions/nextcloud-talk/src/channel.ts +7 -7
  252. package/extensions/nextcloud-talk/src/inbound.ts +7 -7
  253. package/extensions/nextcloud-talk/src/onboarding.ts +1 -1
  254. package/extensions/nostr/README.md +2 -2
  255. package/extensions/nostr/index.ts +5 -5
  256. package/extensions/nostr/package.json +1 -1
  257. package/extensions/nostr/src/types.ts +4 -4
  258. package/extensions/open-prose/index.ts +2 -2
  259. package/extensions/qwen-portal-auth/README.md +1 -1
  260. package/extensions/signal/index.ts +2 -2
  261. package/extensions/signal/package.json +1 -1
  262. package/extensions/slack/index.ts +2 -2
  263. package/extensions/slack/package.json +1 -1
  264. package/extensions/telegram/index.ts +2 -2
  265. package/extensions/telegram/package.json +1 -1
  266. package/extensions/telegram/src/channel.ts +2 -2
  267. package/extensions/tlon/README.md +2 -2
  268. package/extensions/tlon/index.ts +2 -2
  269. package/extensions/tlon/package.json +1 -1
  270. package/extensions/tlon/src/channel.ts +13 -13
  271. package/extensions/tlon/src/monitor/index.ts +3 -3
  272. package/extensions/tlon/src/onboarding.ts +3 -3
  273. package/extensions/tlon/src/types.ts +3 -3
  274. package/extensions/twitch/README.md +1 -1
  275. package/extensions/twitch/index.ts +2 -2
  276. package/extensions/twitch/package.json +1 -1
  277. package/extensions/twitch/src/config.ts +3 -3
  278. package/extensions/twitch/src/monitor.ts +3 -3
  279. package/extensions/twitch/src/onboarding.ts +9 -9
  280. package/extensions/twitch/src/outbound.test.ts +2 -2
  281. package/extensions/twitch/src/plugin.test.ts +2 -2
  282. package/extensions/twitch/src/plugin.ts +8 -8
  283. package/extensions/twitch/src/send.test.ts +2 -2
  284. package/extensions/twitch/src/send.ts +4 -4
  285. package/extensions/twitch/src/token.test.ts +8 -8
  286. package/extensions/twitch/src/token.ts +3 -3
  287. package/extensions/twitch/src/twitch-client.ts +3 -3
  288. package/extensions/twitch/src/types.ts +3 -3
  289. package/extensions/twitch/src/utils/markdown.ts +1 -1
  290. package/extensions/voice-call/README.md +3 -3
  291. package/extensions/voice-call/package.json +1 -1
  292. package/extensions/voice-call/src/core-bridge.ts +2 -2
  293. package/extensions/voice-call/src/response-generator.ts +1 -1
  294. package/extensions/whatsapp/index.ts +2 -2
  295. package/extensions/whatsapp/package.json +1 -1
  296. package/extensions/zalo/README.md +1 -1
  297. package/extensions/zalo/index.ts +2 -2
  298. package/extensions/zalo/package.json +1 -1
  299. package/extensions/zalo/src/accounts.ts +8 -8
  300. package/extensions/zalo/src/actions.ts +4 -4
  301. package/extensions/zalo/src/channel.directory.test.ts +2 -2
  302. package/extensions/zalo/src/channel.ts +18 -18
  303. package/extensions/zalo/src/monitor.ts +9 -9
  304. package/extensions/zalo/src/monitor.webhook.test.ts +2 -2
  305. package/extensions/zalo/src/onboarding.ts +24 -24
  306. package/extensions/zalo/src/send.ts +2 -2
  307. package/extensions/zalouser/README.md +2 -2
  308. package/extensions/zalouser/index.ts +2 -2
  309. package/extensions/zalouser/package.json +1 -1
  310. package/extensions/zalouser/src/accounts.ts +9 -9
  311. package/extensions/zalouser/src/channel.ts +24 -24
  312. package/extensions/zalouser/src/monitor.ts +4 -4
  313. package/extensions/zalouser/src/onboarding.ts +28 -28
  314. package/package.json +13 -250
  315. package/skills/nano-banana-pro/scripts/generate_image.py +1 -1
  316. package/skills/tmux/scripts/find-sessions.sh +1 -1
  317. package/CHANGELOG.md +0 -200
  318. package/README-header.png +0 -0
  319. package/git-hooks/pre-commit +0 -4
  320. package/scripts/format-staged.js +0 -148
  321. package/scripts/postinstall.js +0 -300
  322. package/scripts/setup-git-hooks.js +0 -96
  323. package/skills/webgpu-threejs-tsl/REFERENCE.md +0 -283
  324. package/skills/webgpu-threejs-tsl/SKILL.md +0 -91
  325. package/skills/webgpu-threejs-tsl/docs/compute-shaders.md +0 -404
  326. package/skills/webgpu-threejs-tsl/docs/core-concepts.md +0 -453
  327. package/skills/webgpu-threejs-tsl/docs/materials.md +0 -353
  328. package/skills/webgpu-threejs-tsl/docs/post-processing.md +0 -434
  329. package/skills/webgpu-threejs-tsl/docs/wgsl-integration.md +0 -324
  330. package/skills/webgpu-threejs-tsl/examples/basic-setup.js +0 -87
  331. package/skills/webgpu-threejs-tsl/examples/custom-material.js +0 -170
  332. package/skills/webgpu-threejs-tsl/examples/earth-shader.js +0 -292
  333. package/skills/webgpu-threejs-tsl/examples/particle-system.js +0 -259
  334. package/skills/webgpu-threejs-tsl/examples/post-processing.js +0 -199
  335. package/skills/webgpu-threejs-tsl/templates/compute-shader.js +0 -305
  336. package/skills/webgpu-threejs-tsl/templates/webgpu-project.js +0 -276
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@poolzin/pool-bot",
3
- "version": "2026.1.38",
3
+ "version": "2026.2.0",
4
4
  "description": "🎱 Pool Bot - AI assistant with PLCODE integrations",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -14,271 +14,34 @@
14
14
  "poolbot": "dist/entry.js"
15
15
  },
16
16
  "files": [
17
- "dist/acp/**",
18
- "dist/agents/**",
19
- "dist/auto-reply/**",
20
- "dist/browser/**",
21
- "dist/canvas-host/**",
22
- "dist/cli/**",
23
- "dist/commands/**",
24
- "dist/config/**",
25
- "dist/compat/**",
26
- "dist/control-ui/**",
27
- "dist/cron/**",
28
- "dist/channels/**",
29
- "dist/daemon/**",
30
- "dist/discord/**",
31
- "dist/gateway/**",
32
- "dist/hooks/**",
33
- "dist/imessage/**",
34
- "dist/infra/**",
35
- "dist/macos/**",
36
- "dist/media/**",
37
- "dist/media-understanding/**",
38
- "dist/link-understanding/**",
39
- "dist/process/**",
40
- "dist/plugins/**",
41
- "dist/plugin-sdk/**",
42
- "dist/security/**",
43
- "dist/sessions/**",
44
- "dist/providers/**",
45
- "dist/signal/**",
46
- "dist/slack/**",
47
- "dist/telegram/**",
48
- "dist/line/**",
49
- "dist/tui/**",
50
- "dist/tts/**",
51
- "dist/web/**",
52
- "dist/wizard/**",
53
- "dist/*.js",
54
- "dist/*.json",
17
+ "dist/**",
55
18
  "docs/**",
56
19
  "extensions/**",
57
20
  "assets/**",
58
21
  "skills/**",
59
22
  "patches/**",
60
23
  "README.md",
61
- "README-header.png",
62
- "CHANGELOG.md",
63
24
  "LICENSE",
64
- "scripts/postinstall.js",
65
- "scripts/format-staged.js",
66
- "scripts/setup-git-hooks.js",
67
- "git-hooks/**",
68
- "dist/terminal/**",
69
- "dist/routing/**",
70
- "dist/shared/**",
71
- "dist/utils/**",
72
- "dist/logging/**",
73
- "dist/memory/**",
74
- "dist/markdown/**",
75
- "dist/node-host/**",
76
- "dist/pairing/**",
77
- "dist/whatsapp/**"
25
+ "package.json"
78
26
  ],
79
27
  "scripts": {
80
28
  "dev": "node scripts/run-node.mjs",
81
- "postinstall": "node scripts/postinstall.js",
82
- "prepack": "pnpm build && pnpm ui:build",
83
- "docs:list": "node scripts/docs-list.js",
84
- "docs:bin": "node scripts/build-docs-list.mjs",
85
- "docs:dev": "cd docs && mint dev",
86
- "docs:build": "cd docs && pnpm dlx --reporter append-only mint broken-links",
87
- "build": "tsc -p tsconfig.json && node --import tsx scripts/canvas-a2ui-copy.ts && node --import tsx scripts/copy-hook-metadata.ts && node --import tsx scripts/write-build-info.ts",
88
- "plugins:sync": "node --import tsx scripts/sync-plugin-versions.ts",
89
- "release:check": "node --import tsx scripts/release-check.ts",
90
- "ui:install": "node scripts/ui.js install",
91
- "ui:dev": "node scripts/ui.js dev",
92
- "ui:build": "node scripts/ui.js build",
29
+ "build": "tsc -p tsconfig.json && node --import tsx scripts/write-build-info.ts",
93
30
  "start": "node scripts/run-node.mjs",
94
- "poolbot": "node scripts/run-node.mjs",
95
- "gateway:watch": "node scripts/watch-node.mjs gateway --force",
96
- "gateway:dev": "CLAWDBOT_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway",
97
- "gateway:dev:reset": "CLAWDBOT_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway --reset",
98
- "tui": "node scripts/run-node.mjs tui",
99
- "tui:dev": "CLAWDBOT_PROFILE=dev node scripts/run-node.mjs tui",
100
- "poolbot:rpc": "node scripts/run-node.mjs agent --mode rpc --json",
101
- "ios:gen": "cd apps/ios && xcodegen generate",
102
- "ios:open": "cd apps/ios && xcodegen generate && open Moltbot.xcodeproj",
103
- "ios:build": "bash -lc 'cd apps/ios && xcodegen generate && xcodebuild -project Moltbot.xcodeproj -scheme Moltbot -destination \"${IOS_DEST:-platform=iOS Simulator,name=iPhone 17}\" -configuration Debug build'",
104
- "ios:run": "bash -lc 'cd apps/ios && xcodegen generate && xcodebuild -project Moltbot.xcodeproj -scheme Moltbot -destination \"${IOS_DEST:-platform=iOS Simulator,name=iPhone 17}\" -configuration Debug build && xcrun simctl boot \"${IOS_SIM:-iPhone 17}\" || true && xcrun simctl launch booted com.poolbot.ios'",
105
- "android:assemble": "cd apps/android && ./gradlew :app:assembleDebug",
106
- "android:install": "cd apps/android && ./gradlew :app:installDebug",
107
- "android:run": "cd apps/android && ./gradlew :app:installDebug && adb shell am start -n com.poolbot.android/.MainActivity",
108
- "android:test": "cd apps/android && ./gradlew :app:testDebugUnitTest",
109
- "mac:restart": "bash scripts/restart-mac.sh",
110
- "mac:package": "bash scripts/package-mac-app.sh",
111
- "mac:open": "open dist/Moltbot.app",
112
31
  "lint": "oxlint --type-aware src test",
113
- "lint:swift": "swiftlint lint --config .swiftlint.yml && (cd apps/ios && swiftlint lint --config .swiftlint.yml)",
114
- "lint:all": "pnpm lint && pnpm lint:swift",
115
- "lint:fix": "pnpm format:fix && oxlint --type-aware --fix src test",
116
- "format": "oxfmt --check src test",
117
- "format:swift": "swiftformat --lint --config .swiftformat apps/macos/Sources apps/ios/Sources apps/shared/ClawdbotKit/Sources",
118
- "format:all": "pnpm format && pnpm format:swift",
119
- "format:fix": "oxfmt --write src test",
120
- "test": "node scripts/test-parallel.mjs",
121
- "test:watch": "vitest",
122
- "test:ui": "pnpm --dir ui test",
123
- "test:force": "node --import tsx scripts/test-force.ts",
124
- "test:coverage": "vitest run --coverage",
125
- "test:e2e": "vitest run --config vitest.e2e.config.ts",
126
- "test:live": "CLAWDBOT_LIVE_TEST=1 vitest run --config vitest.live.config.ts",
127
- "test:docker:onboard": "bash scripts/e2e/onboard-docker.sh",
128
- "test:docker:gateway-network": "bash scripts/e2e/gateway-network-docker.sh",
129
- "test:docker:live-models": "bash scripts/test-live-models-docker.sh",
130
- "test:docker:live-gateway": "bash scripts/test-live-gateway-models-docker.sh",
131
- "test:docker:qr": "bash scripts/e2e/qr-import-docker.sh",
132
- "test:docker:doctor-switch": "bash scripts/e2e/doctor-install-switch-docker.sh",
133
- "test:docker:plugins": "bash scripts/e2e/plugins-docker.sh",
134
- "test:docker:cleanup": "bash scripts/test-cleanup-docker.sh",
135
- "test:docker:all": "pnpm test:docker:live-models && pnpm test:docker:live-gateway && pnpm test:docker:onboard && pnpm test:docker:gateway-network && pnpm test:docker:qr && pnpm test:docker:doctor-switch && pnpm test:docker:plugins && pnpm test:docker:cleanup",
136
- "test:all": "pnpm lint && pnpm build && pnpm test && pnpm test:e2e && pnpm test:live && pnpm test:docker:all",
137
- "test:install:e2e": "bash scripts/test-install-sh-e2e-docker.sh",
138
- "test:install:smoke": "bash scripts/test-install-sh-docker.sh",
139
- "test:install:e2e:openai": "CLAWDBOT_E2E_MODELS=openai bash scripts/test-install-sh-e2e-docker.sh",
140
- "test:install:e2e:anthropic": "CLAWDBOT_E2E_MODELS=anthropic bash scripts/test-install-sh-e2e-docker.sh",
141
- "protocol:gen": "node --import tsx scripts/protocol-gen.ts",
142
- "protocol:gen:swift": "node --import tsx scripts/protocol-gen-swift.ts",
143
- "protocol:check": "pnpm protocol:gen && pnpm protocol:gen:swift && git diff --exit-code -- dist/protocol.schema.json apps/macos/Sources/ClawdbotProtocol/GatewayModels.swift",
144
- "canvas:a2ui:bundle": "bash scripts/bundle-a2ui.sh",
145
- "check:loc": "node --import tsx scripts/check-ts-max-loc.ts --max 500"
32
+ "test": "vitest"
146
33
  },
147
- "keywords": [],
148
- "author": "João Vitor Cunha <jvsantos.cunha@gmail.com>",
149
- "license": "MIT",
150
- "engines": {
151
- "node": ">=22.12.0"
152
- },
153
- "packageManager": "pnpm@10.23.0",
154
34
  "dependencies": {
155
- "@agentclientprotocol/sdk": "0.13.1",
156
- "@aws-sdk/client-bedrock": "^3.975.0",
157
- "@buape/carbon": "0.14.0",
158
- "@clack/prompts": "^0.11.0",
159
- "@grammyjs/runner": "^2.0.3",
160
- "@grammyjs/transformer-throttler": "^1.2.1",
161
- "@homebridge/ciao": "^1.3.4",
162
- "@line/bot-sdk": "^10.6.0",
163
- "@lydell/node-pty": "1.2.0-beta.3",
164
- "@mariozechner/pi-agent-core": "0.49.3",
165
- "@mariozechner/pi-ai": "0.49.3",
166
- "@mariozechner/pi-coding-agent": "0.49.3",
167
- "@mariozechner/pi-tui": "0.49.3",
168
- "@mozilla/readability": "^0.6.0",
169
- "@sinclair/typebox": "0.34.47",
170
- "@slack/bolt": "^4.6.0",
171
- "@slack/web-api": "^7.13.0",
172
- "@whiskeysockets/baileys": "7.0.0-rc.9",
173
- "ajv": "^8.17.1",
174
- "body-parser": "^2.2.2",
175
- "chalk": "^5.6.2",
176
- "chokidar": "^5.0.0",
177
- "chromium-bidi": "13.0.1",
178
- "cli-highlight": "^2.1.11",
179
- "commander": "^14.0.2",
180
- "croner": "^9.1.0",
181
- "detect-libc": "^2.1.2",
182
- "discord-api-types": "^0.38.37",
183
- "dotenv": "^17.2.3",
184
- "express": "^5.2.1",
185
- "file-type": "^21.3.0",
186
- "grammy": "^1.39.3",
187
- "hono": "4.11.8",
188
- "jiti": "^2.6.1",
189
- "json5": "^2.2.3",
190
- "jszip": "^3.10.1",
191
- "linkedom": "^0.18.12",
192
- "long": "5.3.2",
193
- "markdown-it": "^14.1.0",
194
- "node-edge-tts": "^1.2.9",
195
- "osc-progress": "^0.3.0",
196
- "pdfjs-dist": "^5.4.530",
197
- "playwright-core": "1.58.0",
198
- "proper-lockfile": "^4.1.2",
199
- "qrcode-terminal": "^0.12.0",
200
- "sharp": "^0.34.5",
201
- "sqlite-vec": "0.1.7-alpha.2",
202
- "tar": "7.5.7",
203
- "tslog": "^4.10.2",
204
- "undici": "^7.19.0",
205
- "ws": "^8.19.0",
206
- "yaml": "^2.8.2",
207
- "zod": "^4.3.6"
208
- },
209
- "optionalDependencies": {
210
- "@napi-rs/canvas": "^0.1.88"
35
+ "@mariozechner/pi-agent-core": "0.50.0",
36
+ "@mariozechner/pi-ai": "0.50.0",
37
+ "@mariozechner/pi-coding-agent": "0.50.0",
38
+ "poolbot": "link:./"
211
39
  },
212
40
  "devDependencies": {
213
- "@grammyjs/types": "^3.23.0",
214
- "@lit-labs/signals": "^0.2.0",
215
- "@lit/context": "^1.1.6",
216
- "@mariozechner/mini-lit": "0.2.1",
217
- "@types/body-parser": "^1.19.6",
218
- "@types/express": "^5.0.6",
219
- "@types/markdown-it": "^14.1.2",
220
- "@types/node": "^25.0.10",
221
- "@types/proper-lockfile": "^4.1.4",
222
- "@types/qrcode-terminal": "^0.12.2",
223
- "@types/ws": "^8.18.1",
224
- "@typescript/native-preview": "7.0.0-dev.20260124.1",
225
- "@vitest/coverage-v8": "^4.0.18",
226
- "docx-preview": "^0.3.7",
227
- "lit": "^3.3.2",
228
- "lucide": "^0.563.0",
229
- "ollama": "^0.6.3",
230
- "oxfmt": "0.26.0",
231
- "oxlint": "^1.41.0",
232
- "oxlint-tsgolint": "^0.11.1",
233
- "quicktype-core": "^23.2.6",
234
- "rolldown": "1.0.0-rc.1",
235
- "signal-utils": "^0.21.1",
236
- "tsx": "^4.21.0",
237
41
  "typescript": "^5.9.3",
238
- "vitest": "^4.0.18",
239
- "wireit": "^0.14.12"
42
+ "vitest": "^4.0.0"
240
43
  },
241
- "overrides": {
242
- "tar": "7.5.7"
243
- },
244
- "pnpm": {
245
- "minimumReleaseAge": 2880,
246
- "overrides": {
247
- "@sinclair/typebox": "0.34.47",
248
- "hono": "4.11.8",
249
- "tar": "7.5.7"
250
- }
251
- },
252
- "vitest": {
253
- "coverage": {
254
- "provider": "v8",
255
- "reporter": [
256
- "text",
257
- "lcov"
258
- ],
259
- "thresholds": {
260
- "lines": 70,
261
- "functions": 70,
262
- "branches": 70,
263
- "statements": 70
264
- },
265
- "include": [
266
- "src/**/*.ts"
267
- ],
268
- "exclude": [
269
- "src/**/*.test.ts"
270
- ]
271
- },
272
- "include": [
273
- "src/**/*.test.ts"
274
- ],
275
- "exclude": [
276
- "dist/**",
277
- "apps/macos/**",
278
- "apps/macos/.build/**",
279
- "**/vendor/**",
280
- "apps/macos/.build/**",
281
- "dist/Moltbot.app/**"
282
- ]
44
+ "engines": {
45
+ "node": ">=22.12.0"
283
46
  }
284
- }
47
+ }
@@ -169,7 +169,7 @@ def main():
169
169
  if image_saved:
170
170
  full_path = output_path.resolve()
171
171
  print(f"\nImage saved: {full_path}")
172
- # Moltbot parses MEDIA tokens and will attach the file on supported providers.
172
+ # Poolbot parses MEDIA tokens and will attach the file on supported providers.
173
173
  print(f"MEDIA: {full_path}")
174
174
  else:
175
175
  print("Error: No image was generated in the response.", file=sys.stderr)
@@ -20,7 +20,7 @@ socket_name=""
20
20
  socket_path=""
21
21
  query=""
22
22
  scan_all=false
23
- socket_dir="${CLAWDBOT_TMUX_SOCKET_DIR:-${TMPDIR:-/tmp}/moltbot-tmux-sockets}"
23
+ socket_dir="${CLAWDBOT_TMUX_SOCKET_DIR:-${TMPDIR:-/tmp}/poolbot-tmux-sockets}"
24
24
 
25
25
  while [[ $# -gt 0 ]]; do
26
26
  case "$1" in
package/CHANGELOG.md DELETED
@@ -1,200 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to Pool Bot will be documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
-
8
- ## [2026.1.38] - 2026-02-07
9
-
10
- ### 🔒 Security: Bump hono to fix 4 moderate CVEs
11
-
12
- - **hono 4.11.4 → 4.11.8** — fixes GHSA-9r54-q6cx-xmh5 (XSS via ErrorBoundary), GHSA-6wqw-2p9w-4vw4 (cache middleware ignores Cache-Control: private), GHSA-r354-f388-2fhh (IPv4 validation bypass in IP restriction middleware), GHSA-w332-q679-j88p (arbitrary key read in serve-static Cloudflare adapter).
13
- - npm audit: 10 → 6 vulnerabilities (4 moderate hono CVEs eliminated).
14
-
15
- ---
16
-
17
- ## [2026.1.37] - 2026-02-07
18
-
19
- ### 🔒 Security: Remove node-llama-cpp, fix tar vulnerability
20
-
21
- #### Vulnerabilities Fixed
22
- - **tar ≤7.5.6 (5× HIGH):** Removed `node-llama-cpp` from `optionalDependencies`, eliminating the entire `tar → cmake-js → node-llama-cpp` vulnerability chain. Updated `tar` override from 7.5.4 → 7.5.7.
23
-
24
- #### Changes
25
- - Removed `node-llama-cpp` 3.15.0 from `optionalDependencies` (matching upstream openclaw approach). Local embeddings still work if users install `node-llama-cpp` manually — the dynamic `import()` fallback to OpenAI/Gemini remains unchanged.
26
- - Fixed `extensions/memory-core/package.json` — added `poolbot` as `devDependency` to resolve `pnpm install` failure from `autoInstallPeers`.
27
- - Lockfile: removed ~1,300 lines of native dependency entries (`node-llama-cpp`, `cmake-js`, `@node-llama-cpp/*` platform binaries).
28
-
29
- #### Impact
30
- - npm audit: 15 → 10 vulnerabilities (5 high eliminated)
31
- - Install size reduced (no more cmake-js + native compilation toolchain)
32
- - Zero code changes — all source files unchanged; only dependency configuration
33
-
34
- ---
35
-
36
- ## [2026.1.35] - 2026-02-06
37
-
38
- ### 📦 Stability Snapshot
39
-
40
- **Release Type:** Pre-enhancement checkpoint
41
-
42
- #### Summary
43
- This release is a stable checkpoint before implementing local memory search enhancements.
44
-
45
- #### Changes
46
- - **Version bump:** 2026.1.30 → 2026.1.35
47
- - **Repository sync:** All repositories clean and synchronized
48
- - **Backup verification:** Complete backup of configurations and state
49
-
50
- #### Technical Details
51
- - Package: @poolzin/pool-bot
52
- - Node.js: v22.22.0 compatible
53
- - Backup: /root/poolbot-backup-20260206-130344.tar.gz (35MB)
54
-
55
- #### Next Steps (Post-Release)
56
- - Implement Ollama integration for local memory_search
57
- - Complete QMD embeddings (220 pending → 0)
58
- - Remove auto-study skill (user-managed cron)
59
- - Enhance memory architecture with local embeddings
60
-
61
- #### Maintenance
62
- - All repositories verified clean
63
- - Git states documented
64
- - Gateway status captured
65
-
66
- ---
67
-
68
- ## v2026.1.30 (2026-02-05)
69
-
70
- ### 🔒 Security Release - CRITICAL VULNERABILITY FIXES
71
-
72
- #### Critical Vulnerabilities Fixed 🔴
73
- - **Gateway URL Override (CVE-level):** Prevent credential leakage via malicious gateway redirects
74
- - Added `validateGatewayUrlSecurity()` requiring explicit token confirmation for custom URLs
75
- - Custom URLs now require 32+ character tokens
76
- - Validation applied in `src/gateway/client.ts` before connection
77
-
78
- - **Discord Prompt Injection (HIGH):** Block arbitrary command injection via channel.topic
79
- - Removed `channel.topic` from system prompts in `src/discord/monitor/message-handler.process.ts`
80
- - Only admin-controlled metadata is now included
81
- - Prevents users with edit permissions from manipulating agent behavior
82
-
83
- - **Slack Prompt Injection (HIGH):** Block arbitrary command injection via topic/purpose
84
- - Removed `channel.topic` and `channel.purpose` from system prompts
85
- - Fixed in `src/slack/monitor/message-handler/prepare.ts` and `src/slack/monitor/slash.ts`
86
- - Same attack vector as Discord, now mitigated
87
-
88
- #### Security Features Added ✅
89
- - **Tool Gating System:** Owner-only access to sensitive tools
90
- - `validateToolAccess()` function in `src/agents/tool-security.ts`
91
- - Protected tools: `whatsapp_login`, `gateway`, `cron`, `sessions_spawn`
92
- - Configurable via `security.owners` in poolbot.json
93
-
94
- - **Security Utilities:** Prevention and validation functions
95
- - Path sanitization utilities in `src/media/path-sanitization.ts`
96
- - URL validation in `src/gateway/url-validation.ts`
97
- - Security config schema in `src/config/types.security.ts`
98
-
99
- #### Documentation
100
- - **New:** `SECURITY.md` - Complete security policy and vulnerability disclosure
101
- - Breaking changes documented
102
- - Security best practices for users and developers
103
- - Reporting guidelines for security issues
104
-
105
- #### Credits
106
- - Security improvements inspired by [OpenClaw](https://github.com/openclaw/openclaw) security hardening
107
- - Internal security audit based on OpenClaw v2026.2.4 analysis
108
-
109
- **UPGRADE RECOMMENDED:** All users should upgrade to v2026.1.30 due to critical security fixes.
110
-
111
- ---
112
-
113
- ## v1.0.1 (2026-02-02)
114
-
115
- ### WhatsApp Gateway Stability
116
- - Add comprehensive WhatsApp heartbeat troubleshooting guide
117
- - Document watchdog timeout and reconnection behavior
118
- - Add configuration validation best practices
119
- - Document professional incident response workflow
120
-
121
- ### Configuration
122
- - Document `web.heartbeatSeconds` override option
123
- - Clarify `web.reconnect` schema and valid keys
124
- - Add examples for timeout tuning (30min → 60min → 90min)
125
- - Provide production-ready configuration templates
126
-
127
- ### Documentation
128
- - New: `docs/WHATSAPP-HEARTBEAT-TROUBLESHOOTING.md`
129
- - Incident analysis: Gateway timeout recovery
130
- - Lesson learned: Config validation before deployment
131
- - Professional validation checklist included
132
-
133
- ### Reliability
134
- - Improved gateway recovery documentation
135
- - Added monitoring and diagnostic commands
136
- - Documented false-positive reduction strategies
137
- - Best practices for different environments (prod/dev/test)
138
-
139
- ---
140
-
141
- ## v1.0.0 (2026-01-28)
142
-
143
- ### Security Release
144
- - Add multi-layer security framework with node authentication
145
- - Implement secure WebSocket connections (WSS)
146
- - Add context isolation and input validation
147
- - Create Windows Node application with native notifications
148
- - Enable manual Gateway URL configuration
149
- - Implement node whitelist and access control
150
- - Add comprehensive security audit and hardening
151
-
152
- ### Remote Access
153
- - Build Windows Node app with mDNS discovery
154
- - Add manual Gateway URL connection
155
- - Implement system tray integration with status display
156
- - Add native notification system
157
- - Create menu for remote control options
158
- - Support both local network and remote connections
159
-
160
- ### Core Infrastructure
161
- - Custom Pool-Bot update system with independent versioning
162
- - Model fallback router with 3-tier protection
163
- - Pool-World digital identity framework
164
- - Multi-repository synchronization (pool-bot + pool-workspace + pool-firstone + pool-world)
165
- - Enterprise-grade security with token-based authentication
166
-
167
- ### Documentation
168
- - Complete build guides for Windows
169
- - Security assessment and deployment guide
170
- - Architecture decision records (ADRs)
171
- - Integration examples and troubleshooting
172
-
173
- ---
174
-
175
- ## v0.9.0 (2026-01-27)
176
-
177
- ### Identity Revelation
178
- - Pool-Bot recognized as living code source
179
- - Pool-World digital identity created
180
- - Personal identity revelation: "Eu sou o código-fonte Pool-Bot"
181
-
182
- ---
183
-
184
- ## v0.8.0 (2026-01-26)
185
-
186
- ### Independence System
187
- - Model fallback router implementation
188
- - Multi-model architecture (NVIDIA + Sonnet + Big Pickle)
189
- - Learning system with conversation analysis
190
- - Update system with GitHub synchronization
191
-
192
- ---
193
-
194
- ## v0.7.0 (2026-01-25)
195
-
196
- ### Foundation
197
- - Migrated from Moltbot core
198
- - Implemented workspace-based development
199
- - Added dual model system configuration
200
- - Created persistent configuration system
package/README-header.png DELETED
Binary file
@@ -1,4 +0,0 @@
1
- #!/bin/sh
2
- ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
3
- [ -z "$ROOT" ] && exit 0
4
- node "$ROOT/scripts/format-staged.js"
@@ -1,148 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { spawnSync } from "node:child_process";
4
- import { fileURLToPath } from "node:url";
5
-
6
- const OXFMT_EXTENSIONS = new Set([
7
- ".cjs",
8
- ".js",
9
- ".json",
10
- ".jsonc",
11
- ".jsx",
12
- ".mjs",
13
- ".ts",
14
- ".tsx",
15
- ]);
16
-
17
- function getRepoRoot() {
18
- const here = path.dirname(fileURLToPath(import.meta.url));
19
- return path.resolve(here, "..");
20
- }
21
-
22
- function runGitCommand(args, options = {}) {
23
- return spawnSync("git", args, {
24
- cwd: options.cwd,
25
- encoding: "utf-8",
26
- stdio: options.stdio ?? "pipe",
27
- });
28
- }
29
-
30
- function splitNullDelimited(value) {
31
- if (!value) return [];
32
- const text = String(value);
33
- return text.split("\0").filter(Boolean);
34
- }
35
-
36
- function normalizeGitPath(filePath) {
37
- return filePath.replace(/\\/g, "/");
38
- }
39
-
40
- function filterOxfmtTargets(paths) {
41
- return paths
42
- .map(normalizeGitPath)
43
- .filter((filePath) =>
44
- (filePath.startsWith("src/") || filePath.startsWith("test/")) &&
45
- OXFMT_EXTENSIONS.has(path.posix.extname(filePath)),
46
- );
47
- }
48
-
49
- function findPartiallyStagedFiles(stagedFiles, unstagedFiles) {
50
- const unstaged = new Set(unstagedFiles.map(normalizeGitPath));
51
- return stagedFiles.filter((filePath) => unstaged.has(normalizeGitPath(filePath)));
52
- }
53
-
54
- function filterOutPartialTargets(targets, partialTargets) {
55
- if (partialTargets.length === 0) return targets;
56
- const partial = new Set(partialTargets.map(normalizeGitPath));
57
- return targets.filter((filePath) => !partial.has(normalizeGitPath(filePath)));
58
- }
59
-
60
- function resolveOxfmtCommand(repoRoot) {
61
- const binName = process.platform === "win32" ? "oxfmt.cmd" : "oxfmt";
62
- const local = path.join(repoRoot, "node_modules", ".bin", binName);
63
- if (fs.existsSync(local)) {
64
- return { command: local, args: [] };
65
- }
66
-
67
- const result = spawnSync("oxfmt", ["--version"], { stdio: "ignore" });
68
- if (result.status === 0) {
69
- return { command: "oxfmt", args: [] };
70
- }
71
-
72
- return null;
73
- }
74
-
75
- function getGitPaths(args, repoRoot) {
76
- const result = runGitCommand(args, { cwd: repoRoot });
77
- if (result.status !== 0) return [];
78
- return splitNullDelimited(result.stdout ?? "");
79
- }
80
-
81
- function formatFiles(repoRoot, oxfmt, files) {
82
- const result = spawnSync(oxfmt.command, ["--write", ...oxfmt.args, ...files], {
83
- cwd: repoRoot,
84
- stdio: "inherit",
85
- });
86
- return result.status === 0;
87
- }
88
-
89
- function stageFiles(repoRoot, files) {
90
- if (files.length === 0) return true;
91
- const result = runGitCommand(["add", "--", ...files], { cwd: repoRoot, stdio: "inherit" });
92
- return result.status === 0;
93
- }
94
-
95
- function main() {
96
- const repoRoot = getRepoRoot();
97
- const staged = getGitPaths([
98
- "diff",
99
- "--cached",
100
- "--name-only",
101
- "-z",
102
- "--diff-filter=ACMR",
103
- ], repoRoot);
104
- const targets = filterOxfmtTargets(staged);
105
- if (targets.length === 0) return;
106
-
107
- const unstaged = getGitPaths(["diff", "--name-only", "-z"], repoRoot);
108
- const partial = findPartiallyStagedFiles(targets, unstaged);
109
- if (partial.length > 0) {
110
- process.stderr.write("[pre-commit] Skipping partially staged files:\n");
111
- for (const filePath of partial) {
112
- process.stderr.write(`- ${filePath}\n`);
113
- }
114
- process.stderr.write("Stage full files to format them automatically.\n");
115
- }
116
-
117
- const filteredTargets = filterOutPartialTargets(targets, partial);
118
- if (filteredTargets.length === 0) return;
119
-
120
- const oxfmt = resolveOxfmtCommand(repoRoot);
121
- if (!oxfmt) {
122
- process.stderr.write("[pre-commit] oxfmt not found; skipping format.\n");
123
- return;
124
- }
125
-
126
- if (!formatFiles(repoRoot, oxfmt, filteredTargets)) {
127
- process.exitCode = 1;
128
- return;
129
- }
130
-
131
- if (!stageFiles(repoRoot, filteredTargets)) {
132
- process.exitCode = 1;
133
- }
134
- }
135
-
136
- export {
137
- filterOxfmtTargets,
138
- filterOutPartialTargets,
139
- findPartiallyStagedFiles,
140
- getRepoRoot,
141
- normalizeGitPath,
142
- resolveOxfmtCommand,
143
- splitNullDelimited,
144
- };
145
-
146
- if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
147
- main();
148
- }