@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
@@ -1,199 +0,0 @@
1
- /**
2
- * Post-Processing Pipeline Example
3
- *
4
- * Demonstrates TSL post-processing:
5
- * - Bloom effect
6
- * - Custom vignette
7
- * - Color grading
8
- * - Effect chaining
9
- *
10
- * Based on Three.js webgpu_postprocessing examples (MIT License)
11
- * https://github.com/mrdoob/three.js
12
- */
13
-
14
- import * as THREE from 'three/webgpu';
15
- import {
16
- Fn,
17
- float,
18
- vec2,
19
- vec3,
20
- vec4,
21
- color,
22
- uniform,
23
- pass,
24
- screenUV,
25
- screenSize,
26
- time,
27
- oscSine,
28
- mix,
29
- smoothstep,
30
- texture,
31
- grayscale,
32
- saturation
33
- } from 'three/tsl';
34
- import { bloom } from 'three/addons/tsl/display/BloomNode.js';
35
- import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
36
-
37
- let camera, scene, renderer, controls;
38
- let postProcessing;
39
-
40
- // Effect uniforms
41
- const bloomStrength = uniform(1.0);
42
- const bloomThreshold = uniform(0.5);
43
- const vignetteIntensity = uniform(0.5);
44
- const saturationAmount = uniform(1.2);
45
- const colorTint = uniform(new THREE.Color(1.0, 0.95, 0.9));
46
-
47
- async function init() {
48
- // Camera
49
- camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 100);
50
- camera.position.set(0, 2, 8);
51
-
52
- // Scene
53
- scene = new THREE.Scene();
54
- scene.background = new THREE.Color(0x111111);
55
-
56
- // Add objects with emissive materials (for bloom)
57
- createScene();
58
-
59
- // Renderer
60
- renderer = new THREE.WebGPURenderer({ antialias: true });
61
- renderer.setSize(window.innerWidth, window.innerHeight);
62
- renderer.setPixelRatio(window.devicePixelRatio);
63
- document.body.appendChild(renderer.domElement);
64
- await renderer.init();
65
-
66
- // Create post-processing pipeline
67
- setupPostProcessing();
68
-
69
- // Controls
70
- controls = new OrbitControls(camera, renderer.domElement);
71
- controls.enableDamping = true;
72
- controls.target.set(0, 1, 0);
73
-
74
- // Events
75
- window.addEventListener('resize', onWindowResize);
76
-
77
- renderer.setAnimationLoop(animate);
78
- }
79
-
80
- function createScene() {
81
- // Floor
82
- const floorGeometry = new THREE.PlaneGeometry(20, 20);
83
- const floorMaterial = new THREE.MeshStandardNodeMaterial({
84
- color: 0x222222
85
- });
86
- const floor = new THREE.Mesh(floorGeometry, floorMaterial);
87
- floor.rotation.x = -Math.PI / 2;
88
- scene.add(floor);
89
-
90
- // Emissive spheres (will bloom)
91
- const sphereGeometry = new THREE.SphereGeometry(0.5, 32, 32);
92
-
93
- const colors = [0xff0044, 0x00ff88, 0x4488ff, 0xffaa00, 0xff00ff];
94
-
95
- for (let i = 0; i < 5; i++) {
96
- const material = new THREE.MeshStandardNodeMaterial();
97
-
98
- // Base color
99
- material.colorNode = color(colors[i]).mul(0.3);
100
-
101
- // Animated emissive
102
- material.emissiveNode = Fn(() => {
103
- const pulse = oscSine(time.mul(1.0 + i * 0.2)).mul(0.5).add(0.5);
104
- return color(colors[i]).mul(pulse.mul(2.0).add(0.5));
105
- })();
106
-
107
- material.roughnessNode = float(0.2);
108
- material.metalnessNode = float(0.8);
109
-
110
- const sphere = new THREE.Mesh(sphereGeometry, material);
111
- sphere.position.set(
112
- Math.cos((i / 5) * Math.PI * 2) * 3,
113
- 1 + Math.sin(i) * 0.5,
114
- Math.sin((i / 5) * Math.PI * 2) * 3
115
- );
116
- scene.add(sphere);
117
- }
118
-
119
- // Central reflective sphere
120
- const centerMaterial = new THREE.MeshStandardNodeMaterial();
121
- centerMaterial.colorNode = color(0x888888);
122
- centerMaterial.roughnessNode = float(0.1);
123
- centerMaterial.metalnessNode = float(1.0);
124
-
125
- const centerSphere = new THREE.Mesh(new THREE.SphereGeometry(1, 64, 64), centerMaterial);
126
- centerSphere.position.y = 1;
127
- scene.add(centerSphere);
128
-
129
- // Lights
130
- const ambientLight = new THREE.AmbientLight(0x404040, 0.5);
131
- scene.add(ambientLight);
132
-
133
- const pointLight = new THREE.PointLight(0xffffff, 50);
134
- pointLight.position.set(5, 10, 5);
135
- scene.add(pointLight);
136
- }
137
-
138
- function setupPostProcessing() {
139
- // Create post-processing instance
140
- postProcessing = new THREE.PostProcessing(renderer);
141
-
142
- // Create scene pass
143
- const scenePass = pass(scene, camera);
144
- const sceneColor = scenePass.getTextureNode('output');
145
-
146
- // --- Effect Chain ---
147
-
148
- // 1. Bloom
149
- const bloomPass = bloom(sceneColor);
150
- bloomPass.threshold = bloomThreshold;
151
- bloomPass.strength = bloomStrength;
152
- bloomPass.radius = uniform(0.5);
153
-
154
- // Add bloom to scene
155
- let output = sceneColor.add(bloomPass);
156
-
157
- // 2. Color Grading
158
- output = saturation(output, saturationAmount);
159
- output = output.mul(colorTint);
160
-
161
- // 3. Vignette (custom effect)
162
- const vignette = Fn(() => {
163
- const uv = screenUV;
164
- const dist = uv.sub(0.5).length();
165
- return float(1.0).sub(dist.mul(vignetteIntensity).pow(2.0)).saturate();
166
- });
167
-
168
- output = output.mul(vignette());
169
-
170
- // 4. Optional: Scanlines
171
- const scanlines = Fn(() => {
172
- const scanline = screenUV.y.mul(screenSize.y).mul(0.5).sin().mul(0.05).add(0.95);
173
- return scanline;
174
- });
175
-
176
- // Uncomment for CRT effect:
177
- // output = output.mul(scanlines());
178
-
179
- // Set final output
180
- postProcessing.outputNode = output;
181
- }
182
-
183
- function onWindowResize() {
184
- camera.aspect = window.innerWidth / window.innerHeight;
185
- camera.updateProjectionMatrix();
186
- renderer.setSize(window.innerWidth, window.innerHeight);
187
- }
188
-
189
- function animate() {
190
- controls.update();
191
-
192
- // Render with post-processing
193
- postProcessing.render();
194
- }
195
-
196
- init();
197
-
198
- // Export uniforms for external control (e.g., GUI)
199
- export { bloomStrength, bloomThreshold, vignetteIntensity, saturationAmount, colorTint };
@@ -1,305 +0,0 @@
1
- /**
2
- * Compute Shader Template
3
- *
4
- * A template for GPU compute shaders with:
5
- * - Storage buffer setup
6
- * - Initialize and update shaders
7
- * - Visualization with instanced mesh
8
- *
9
- * Usage:
10
- * 1. Modify PARTICLE_COUNT and buffer types
11
- * 2. Implement your initialization logic
12
- * 3. Implement your update logic
13
- * 4. Customize visualization
14
- */
15
-
16
- import * as THREE from 'three/webgpu';
17
- import {
18
- Fn,
19
- If,
20
- Loop,
21
- float,
22
- int,
23
- vec2,
24
- vec3,
25
- vec4,
26
- color,
27
- uniform,
28
- instancedArray,
29
- instanceIndex,
30
- hash,
31
- time,
32
- deltaTime
33
- } from 'three/tsl';
34
-
35
- import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
36
-
37
- // ============================================
38
- // CONFIGURATION
39
- // ============================================
40
-
41
- const PARTICLE_COUNT = 50000;
42
-
43
- // ============================================
44
- // STORAGE BUFFERS
45
- // ============================================
46
-
47
- // Define your storage buffers here
48
- // Available types: 'float', 'vec2', 'vec3', 'vec4', 'int', 'uint'
49
-
50
- const positions = instancedArray(PARTICLE_COUNT, 'vec3');
51
- const velocities = instancedArray(PARTICLE_COUNT, 'vec3');
52
- // Add more buffers as needed:
53
- // const colors = instancedArray(PARTICLE_COUNT, 'vec3');
54
- // const lifetimes = instancedArray(PARTICLE_COUNT, 'float');
55
- // const states = instancedArray(PARTICLE_COUNT, 'uint');
56
-
57
- // ============================================
58
- // UNIFORMS
59
- // ============================================
60
-
61
- const dt = uniform(0);
62
- // Add your uniforms here:
63
- // const gravity = uniform(-9.8);
64
- // const attractorPosition = uniform(new THREE.Vector3());
65
- // const forceStrength = uniform(1.0);
66
-
67
- // ============================================
68
- // COMPUTE SHADERS
69
- // ============================================
70
-
71
- /**
72
- * Initialize particles
73
- * Called once at startup
74
- */
75
- const computeInit = Fn(() => {
76
- const position = positions.element(instanceIndex);
77
- const velocity = velocities.element(instanceIndex);
78
-
79
- // ========================================
80
- // IMPLEMENT YOUR INITIALIZATION HERE
81
- // ========================================
82
-
83
- // Example: Random positions in a cube
84
- position.x.assign(hash(instanceIndex).sub(0.5).mul(10));
85
- position.y.assign(hash(instanceIndex.add(1)).sub(0.5).mul(10));
86
- position.z.assign(hash(instanceIndex.add(2)).sub(0.5).mul(10));
87
-
88
- // Example: Zero velocity
89
- velocity.assign(vec3(0));
90
- })().compute(PARTICLE_COUNT);
91
-
92
- /**
93
- * Update particles each frame
94
- * Called every frame in animation loop
95
- */
96
- const computeUpdate = Fn(() => {
97
- const position = positions.element(instanceIndex);
98
- const velocity = velocities.element(instanceIndex);
99
-
100
- // ========================================
101
- // IMPLEMENT YOUR UPDATE LOGIC HERE
102
- // ========================================
103
-
104
- // Example: Simple gravity
105
- velocity.y.addAssign(float(-9.8).mul(dt));
106
-
107
- // Example: Update position
108
- position.addAssign(velocity.mul(dt));
109
-
110
- // Example: Ground bounce
111
- If(position.y.lessThan(0), () => {
112
- position.y.assign(0);
113
- velocity.y.assign(velocity.y.negate().mul(0.8));
114
- });
115
-
116
- // Example: Boundary wrapping
117
- // If(position.x.abs().greaterThan(5), () => {
118
- // position.x.assign(position.x.negate());
119
- // });
120
- })().compute(PARTICLE_COUNT);
121
-
122
- /**
123
- * Optional: Additional compute pass (e.g., for interactions)
124
- */
125
- const computeInteraction = Fn(() => {
126
- const position = positions.element(instanceIndex);
127
- const velocity = velocities.element(instanceIndex);
128
-
129
- // ========================================
130
- // IMPLEMENT INTERACTION LOGIC HERE
131
- // ========================================
132
-
133
- // Example: Attract to point
134
- // const toTarget = attractorPosition.sub(position);
135
- // const dist = toTarget.length();
136
- // const force = toTarget.normalize().mul(forceStrength).div(dist.add(0.1));
137
- // velocity.addAssign(force.mul(dt));
138
- })().compute(PARTICLE_COUNT);
139
-
140
- // ============================================
141
- // VISUALIZATION
142
- // ============================================
143
-
144
- function createVisualization(scene) {
145
- // Choose visualization type:
146
- // - Points (fastest, simplest)
147
- // - Instanced Mesh (more control)
148
-
149
- // Option 1: Points
150
- // return createPointsVisualization(scene);
151
-
152
- // Option 2: Instanced Mesh
153
- return createInstancedVisualization(scene);
154
- }
155
-
156
- function createPointsVisualization(scene) {
157
- const geometry = new THREE.BufferGeometry();
158
- geometry.setAttribute(
159
- 'position',
160
- new THREE.Float32BufferAttribute(new Float32Array(PARTICLE_COUNT * 3), 3)
161
- );
162
-
163
- const material = new THREE.PointsNodeMaterial();
164
-
165
- // Position from compute buffer
166
- material.positionNode = positions.element(instanceIndex);
167
-
168
- // ========================================
169
- // CUSTOMIZE POINT APPEARANCE HERE
170
- // ========================================
171
-
172
- material.sizeNode = float(3.0);
173
-
174
- material.colorNode = Fn(() => {
175
- // Example: Color based on velocity
176
- const velocity = velocities.element(instanceIndex);
177
- const speed = velocity.length();
178
- return mix(color(0x0066ff), color(0xff6600), speed.div(5).saturate());
179
- })();
180
-
181
- const points = new THREE.Points(geometry, material);
182
- scene.add(points);
183
- return points;
184
- }
185
-
186
- function createInstancedVisualization(scene) {
187
- // Geometry for each instance
188
- const geometry = new THREE.SphereGeometry(0.05, 8, 8);
189
- // Or use simpler geometry for better performance:
190
- // const geometry = new THREE.IcosahedronGeometry(0.05, 0);
191
-
192
- const material = new THREE.MeshStandardNodeMaterial();
193
-
194
- // Position from compute buffer
195
- material.positionNode = positions.element(instanceIndex);
196
-
197
- // ========================================
198
- // CUSTOMIZE MESH APPEARANCE HERE
199
- // ========================================
200
-
201
- material.colorNode = Fn(() => {
202
- // Example: Color based on position
203
- const position = positions.element(instanceIndex);
204
- return color(0x0088ff).add(position.mul(0.05));
205
- })();
206
-
207
- material.roughnessNode = float(0.5);
208
- material.metalnessNode = float(0.2);
209
-
210
- const mesh = new THREE.InstancedMesh(geometry, material, PARTICLE_COUNT);
211
- scene.add(mesh);
212
- return mesh;
213
- }
214
-
215
- // ============================================
216
- // MAIN SETUP
217
- // ============================================
218
-
219
- let camera, scene, renderer, controls;
220
- let visualization;
221
-
222
- async function init() {
223
- // Scene
224
- scene = new THREE.Scene();
225
- scene.background = new THREE.Color(0x111122);
226
-
227
- // Camera
228
- camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 100);
229
- camera.position.set(0, 5, 15);
230
-
231
- // Lights
232
- const ambientLight = new THREE.AmbientLight(0x404040);
233
- scene.add(ambientLight);
234
-
235
- const directionalLight = new THREE.DirectionalLight(0xffffff, 1);
236
- directionalLight.position.set(5, 10, 5);
237
- scene.add(directionalLight);
238
-
239
- // Optional: Ground plane
240
- const ground = new THREE.Mesh(
241
- new THREE.PlaneGeometry(20, 20),
242
- new THREE.MeshStandardNodeMaterial({ color: 0x333333 })
243
- );
244
- ground.rotation.x = -Math.PI / 2;
245
- scene.add(ground);
246
-
247
- // Renderer
248
- renderer = new THREE.WebGPURenderer({ antialias: true });
249
- renderer.setSize(window.innerWidth, window.innerHeight);
250
- renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
251
- document.body.appendChild(renderer.domElement);
252
- await renderer.init();
253
-
254
- // Initialize particles
255
- await renderer.computeAsync(computeInit);
256
-
257
- // Create visualization
258
- visualization = createVisualization(scene);
259
-
260
- // Controls
261
- controls = new OrbitControls(camera, renderer.domElement);
262
- controls.enableDamping = true;
263
- controls.target.set(0, 2, 0);
264
-
265
- // Events
266
- window.addEventListener('resize', onWindowResize);
267
-
268
- // Start
269
- renderer.setAnimationLoop(animate);
270
- }
271
-
272
- function onWindowResize() {
273
- camera.aspect = window.innerWidth / window.innerHeight;
274
- camera.updateProjectionMatrix();
275
- renderer.setSize(window.innerWidth, window.innerHeight);
276
- }
277
-
278
- const clock = new THREE.Clock();
279
-
280
- function animate() {
281
- // Update delta time uniform
282
- dt.value = Math.min(clock.getDelta(), 0.1);
283
-
284
- // Run compute shaders
285
- renderer.compute(computeUpdate);
286
- // renderer.compute(computeInteraction);
287
-
288
- // Update controls
289
- controls.update();
290
-
291
- // Render
292
- renderer.render(scene, camera);
293
- }
294
-
295
- init().catch(console.error);
296
-
297
- // Export for external control
298
- export {
299
- positions,
300
- velocities,
301
- dt,
302
- computeInit,
303
- computeUpdate,
304
- computeInteraction
305
- };