@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.
- package/assets/chrome-extension/README.md +3 -3
- package/assets/chrome-extension/background.js +5 -5
- package/assets/chrome-extension/manifest.json +3 -3
- package/assets/chrome-extension/options.html +4 -4
- package/assets/chrome-extension/options.js +1 -1
- package/dist/acp/client.js +3 -3
- package/dist/acp/types.js +1 -1
- package/dist/agents/agent-paths.js +3 -3
- package/dist/agents/auth-profiles/paths.js +3 -3
- package/dist/agents/cli-runner/helpers.js +1 -1
- package/dist/agents/cli-runner.js +2 -2
- package/dist/agents/cloudflare-ai-gateway.js +31 -0
- package/dist/agents/compaction.js +16 -2
- package/dist/agents/context-window-guard.js +13 -10
- package/dist/agents/context.js +4 -4
- package/dist/agents/docs-path.js +1 -1
- package/dist/agents/minimax-vlm.js +1 -1
- package/dist/agents/model-auth.js +12 -1
- package/dist/agents/model-catalog.js +4 -4
- package/dist/agents/model-selection.js +10 -4
- package/dist/agents/models-config.js +3 -3
- package/dist/agents/models-config.providers.js +147 -39
- package/dist/agents/pi-embedded-helpers/openai.js +1 -1
- package/dist/agents/pi-embedded-runner/compact.js +8 -8
- package/dist/agents/pi-embedded-runner/model.js +2 -2
- package/dist/agents/pi-embedded-runner/run/attempt.js +6 -6
- package/dist/agents/pi-embedded-runner/run.js +4 -4
- package/dist/agents/pi-embedded-runner/tool-result-truncation.js +275 -0
- package/dist/agents/pi-embedded-runner/utils.js +1 -1
- package/dist/agents/pi-model-discovery.js +10 -0
- package/dist/agents/pi-tool-definition-adapter.js +50 -9
- package/dist/agents/pi-tools.before-tool-call.js +67 -0
- package/dist/agents/pi-tools.js +10 -5
- package/dist/agents/pi-tools.read.js +2 -2
- package/dist/agents/session-file-repair.js +83 -0
- package/dist/agents/session-transcript-repair.js +68 -0
- package/dist/agents/skills/frontmatter.js +1 -1
- package/dist/agents/skills/workspace.js +2 -2
- package/dist/agents/system-prompt.js +28 -4
- package/dist/agents/together-models.js +127 -0
- package/dist/agents/tool-images.js +1 -1
- package/dist/agents/tool-policy.js +1 -1
- package/dist/agents/tools/browser-tool.js +3 -3
- package/dist/agents/tools/image-tool.js +2 -2
- package/dist/agents/tools/memory-tool.js +94 -7
- package/dist/agents/tools/web-search.js +1 -1
- package/dist/agents/workspace.js +1 -5
- package/dist/auto-reply/commands-registry.data.js +1 -1
- package/dist/auto-reply/reply/commands-context-report.js +2 -2
- package/dist/auto-reply/reply/commands-session.js +2 -2
- package/dist/auto-reply/reply/get-reply-run.js +14 -4
- package/dist/auto-reply/reply/groups.js +1 -1
- package/dist/auto-reply/reply/inbound-context.js +4 -0
- package/dist/auto-reply/reply/inbound-meta.js +130 -0
- package/dist/auto-reply/reply/untrusted-context.js +15 -0
- package/dist/auto-reply/status.js +1 -1
- package/dist/browser/client-fetch.js +1 -1
- package/dist/browser/config.js +1 -1
- package/dist/browser/extension-relay.js +3 -3
- package/dist/browser/server-context.js +2 -2
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui.js +3 -3
- package/dist/channels/plugins/agent-tools/whatsapp-login.js +1 -17
- package/dist/channels/plugins/catalog.js +2 -2
- package/dist/channels/plugins/onboarding/imessage.js +1 -1
- package/dist/channels/plugins/onboarding/signal.js +1 -1
- package/dist/channels/plugins/onboarding/slack.js +4 -4
- package/dist/channels/plugins/onboarding/whatsapp.js +3 -3
- package/dist/channels/plugins/pairing-message.js +1 -1
- package/dist/cli/browser-cli-extension.js +2 -2
- package/dist/cli/docs-cli.js +1 -1
- package/dist/cli/gateway-cli/dev.js +1 -1
- package/dist/cli/memory-cli.js +25 -15
- package/dist/cli/nodes-cli/register.canvas.js +1 -1
- package/dist/cli/plugins-cli.js +1 -1
- package/dist/cli/run-main.js +2 -2
- package/dist/cli/security-cli.js +1 -1
- package/dist/cli/tagline.js +1 -1
- package/dist/cli/update-cli.js +4 -4
- package/dist/cli/webhooks-cli.js +5 -5
- package/dist/commands/agents.commands.add.js +1 -1
- package/dist/commands/auth-choice.apply.api-providers.js +305 -17
- package/dist/commands/auth-choice.apply.js +4 -1
- package/dist/commands/auth-choice.apply.plugin-provider.js +2 -2
- package/dist/commands/auth-choice.apply.xai.js +63 -0
- package/dist/commands/auth-choice.preferred-provider.js +7 -1
- package/dist/commands/configure.wizard.js +1 -1
- package/dist/commands/dashboard.js +1 -1
- package/dist/commands/docs.js +1 -1
- package/dist/commands/doctor-gateway-services.js +3 -3
- package/dist/commands/doctor-state-integrity.js +2 -14
- package/dist/commands/doctor-update.js +3 -3
- package/dist/commands/doctor.js +1 -1
- package/dist/commands/models/list.probe.js +2 -2
- package/dist/commands/models/list.registry.js +4 -4
- package/dist/commands/models/list.status-command.js +2 -2
- package/dist/commands/onboard-auth.config-core.js +366 -28
- package/dist/commands/onboard-auth.credentials.js +71 -9
- package/dist/commands/onboard-auth.js +3 -3
- package/dist/commands/onboard-auth.models.js +26 -24
- package/dist/commands/onboard-non-interactive/local/auth-choice.js +140 -6
- package/dist/commands/status-all/report-lines.js +1 -1
- package/dist/commands/status.command.js +1 -1
- package/dist/commands/uninstall.js +3 -3
- package/dist/compat/legacy-names.js +1 -1
- package/dist/config/io.js +3 -3
- package/dist/config/schema.js +1 -1
- package/dist/config/types.js +0 -1
- package/dist/config/types.memory.js +1 -0
- package/dist/config/version.js +4 -4
- package/dist/config/zod-schema.js +0 -6
- package/dist/daemon/constants.js +7 -7
- package/dist/daemon/inspect.js +6 -6
- package/dist/daemon/systemd-unit.js +1 -1
- package/dist/discord/monitor/message-handler.process.js +6 -4
- package/dist/gateway/client.js +0 -14
- package/dist/gateway/live-image-probe.js +1 -66
- package/dist/gateway/openai-http.js +2 -2
- package/dist/gateway/openresponses-http.js +4 -4
- package/dist/gateway/server-discovery.js +2 -2
- package/dist/gateway/server-http.js +1 -1
- package/dist/gateway/server.impl.js +2 -6
- package/dist/hooks/frontmatter.js +1 -1
- package/dist/hooks/hooks-status.js +1 -1
- package/dist/hooks/install.js +2 -2
- package/dist/hooks/loader.js +1 -1
- package/dist/hooks/workspace.js +3 -3
- package/dist/index.js +2 -2
- package/dist/infra/bonjour.js +3 -3
- package/dist/infra/path-env.js +3 -3
- package/dist/infra/provider-usage.fetch.minimax.js +1 -1
- package/dist/infra/restart.js +1 -1
- package/dist/infra/tailscale.js +1 -1
- package/dist/macos/relay.js +2 -2
- package/dist/media/input-files.js +1 -1
- package/dist/media/mime.js +4 -0
- package/dist/media/png-encode.js +74 -0
- package/dist/media-understanding/providers/image.js +2 -2
- package/dist/memory/backend-config.js +207 -0
- package/dist/memory/embeddings.js +1 -1
- package/dist/memory/index.js +0 -5
- package/dist/memory/manager.js +3 -25
- package/dist/memory/types.js +1 -0
- package/dist/node-host/runner.js +2 -2
- package/dist/pairing/pairing-messages.js +1 -1
- package/dist/plugins/discovery.js +1 -1
- package/dist/plugins/install.js +2 -2
- package/dist/plugins/update.js +1 -1
- package/dist/security/audit.js +2 -2
- package/dist/shared/text/reasoning-tags.js +52 -7
- package/dist/slack/monitor/message-handler/prepare.js +10 -4
- package/dist/slack/monitor/slash.js +10 -4
- package/dist/tailscale/detect.js +146 -0
- package/dist/telegram/bot-message-context.js +1 -1
- package/dist/test-helpers/workspace.js +11 -0
- package/dist/test-utils/channel-plugins.js +82 -0
- package/dist/test-utils/ports.js +73 -0
- package/dist/utils/shell-argv.js +61 -0
- package/dist/utils.js +10 -0
- package/dist/web/qr-image.js +1 -61
- package/dist/wizard/onboarding.finalize.js +7 -7
- package/dist/wizard/onboarding.js +3 -3
- package/docs/RELEASE_WORKFOTS_COMPARISON.md +3 -3
- package/docs/_config.yml +2 -2
- package/docs/_layouts/default.html +9 -9
- package/docs/concepts/typebox.md +1 -1
- package/docs/docs.json +1 -1
- package/docs/northflank.mdx +7 -7
- package/docs/railway.mdx +3 -3
- package/docs/render.mdx +5 -5
- package/docs/start/lore.md +2 -2
- package/extensions/bluebubbles/index.ts +2 -2
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/bluebubbles/src/accounts.ts +8 -8
- package/extensions/bluebubbles/src/actions.test.ts +22 -22
- package/extensions/bluebubbles/src/actions.ts +5 -5
- package/extensions/bluebubbles/src/attachments.ts +2 -2
- package/extensions/bluebubbles/src/channel.ts +16 -16
- package/extensions/bluebubbles/src/chat.ts +2 -2
- package/extensions/bluebubbles/src/media-send.ts +2 -2
- package/extensions/bluebubbles/src/monitor.test.ts +46 -46
- package/extensions/bluebubbles/src/monitor.ts +5 -5
- package/extensions/bluebubbles/src/onboarding.ts +7 -7
- package/extensions/bluebubbles/src/reactions.ts +2 -2
- package/extensions/bluebubbles/src/send.ts +2 -2
- package/extensions/copilot-proxy/README.md +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/index.ts +2 -2
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/diagnostics-otel/src/service.ts +3 -3
- package/extensions/discord/index.ts +2 -2
- package/extensions/discord/package.json +1 -1
- package/extensions/google-antigravity-auth/README.md +1 -1
- package/extensions/google-antigravity-auth/index.ts +1 -1
- package/extensions/google-antigravity-auth/package.json +1 -1
- package/extensions/google-gemini-cli-auth/README.md +1 -1
- package/extensions/google-gemini-cli-auth/oauth.ts +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/index.ts +3 -3
- package/extensions/googlechat/package.json +1 -1
- package/extensions/googlechat/src/accounts.ts +8 -8
- package/extensions/googlechat/src/actions.ts +6 -6
- package/extensions/googlechat/src/channel.ts +21 -21
- package/extensions/googlechat/src/monitor.ts +8 -8
- package/extensions/googlechat/src/onboarding.ts +10 -10
- package/extensions/imessage/index.ts +2 -2
- package/extensions/imessage/package.json +1 -1
- package/extensions/line/index.ts +2 -2
- package/extensions/line/package.json +1 -1
- package/extensions/line/src/card-command.ts +2 -2
- package/extensions/line/src/channel.logout.test.ts +4 -4
- package/extensions/line/src/channel.sendPayload.test.ts +8 -8
- package/extensions/line/src/channel.ts +3 -3
- package/extensions/llm-task/README.md +3 -3
- package/extensions/llm-task/index.ts +2 -2
- package/extensions/llm-task/package.json +1 -1
- package/extensions/llm-task/src/llm-task-tool.ts +4 -4
- package/extensions/lobster/README.md +6 -6
- package/extensions/lobster/index.ts +2 -2
- package/extensions/lobster/src/lobster-tool.test.ts +4 -4
- package/extensions/lobster/src/lobster-tool.ts +2 -2
- package/extensions/matrix/index.ts +2 -2
- package/extensions/matrix/package.json +1 -1
- package/extensions/matrix/src/matrix/client/config.ts +1 -1
- package/extensions/matrix/src/matrix/monitor/handler.ts +1 -1
- package/extensions/matrix/src/onboarding.ts +1 -1
- package/extensions/mattermost/index.ts +2 -2
- package/extensions/mattermost/package.json +1 -1
- package/extensions/mattermost/src/mattermost/accounts.ts +8 -8
- package/extensions/mattermost/src/mattermost/monitor-helpers.ts +5 -5
- package/extensions/mattermost/src/mattermost/monitor.ts +2 -2
- package/extensions/mattermost/src/onboarding-helpers.ts +3 -3
- package/extensions/mattermost/src/onboarding.ts +2 -2
- package/extensions/memory-core/index.ts +2 -2
- package/extensions/memory-core/package.json +1 -4
- package/extensions/memory-lancedb/index.ts +3 -3
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/msteams/index.ts +2 -2
- package/extensions/msteams/package.json +1 -1
- package/extensions/msteams/src/channel.directory.test.ts +2 -2
- package/extensions/msteams/src/channel.ts +2 -2
- package/extensions/msteams/src/graph-upload.ts +4 -4
- package/extensions/msteams/src/monitor-handler.ts +2 -2
- package/extensions/msteams/src/monitor.ts +2 -2
- package/extensions/msteams/src/onboarding.ts +9 -9
- package/extensions/msteams/src/reply-dispatcher.ts +2 -2
- package/extensions/msteams/src/send-context.ts +2 -2
- package/extensions/msteams/src/send.ts +4 -4
- package/extensions/nextcloud-talk/index.ts +2 -2
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nextcloud-talk/src/channel.ts +7 -7
- package/extensions/nextcloud-talk/src/inbound.ts +7 -7
- package/extensions/nextcloud-talk/src/onboarding.ts +1 -1
- package/extensions/nostr/README.md +2 -2
- package/extensions/nostr/index.ts +5 -5
- package/extensions/nostr/package.json +1 -1
- package/extensions/nostr/src/types.ts +4 -4
- package/extensions/open-prose/index.ts +2 -2
- package/extensions/qwen-portal-auth/README.md +1 -1
- package/extensions/signal/index.ts +2 -2
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/index.ts +2 -2
- package/extensions/slack/package.json +1 -1
- package/extensions/telegram/index.ts +2 -2
- package/extensions/telegram/package.json +1 -1
- package/extensions/telegram/src/channel.ts +2 -2
- package/extensions/tlon/README.md +2 -2
- package/extensions/tlon/index.ts +2 -2
- package/extensions/tlon/package.json +1 -1
- package/extensions/tlon/src/channel.ts +13 -13
- package/extensions/tlon/src/monitor/index.ts +3 -3
- package/extensions/tlon/src/onboarding.ts +3 -3
- package/extensions/tlon/src/types.ts +3 -3
- package/extensions/twitch/README.md +1 -1
- package/extensions/twitch/index.ts +2 -2
- package/extensions/twitch/package.json +1 -1
- package/extensions/twitch/src/config.ts +3 -3
- package/extensions/twitch/src/monitor.ts +3 -3
- package/extensions/twitch/src/onboarding.ts +9 -9
- package/extensions/twitch/src/outbound.test.ts +2 -2
- package/extensions/twitch/src/plugin.test.ts +2 -2
- package/extensions/twitch/src/plugin.ts +8 -8
- package/extensions/twitch/src/send.test.ts +2 -2
- package/extensions/twitch/src/send.ts +4 -4
- package/extensions/twitch/src/token.test.ts +8 -8
- package/extensions/twitch/src/token.ts +3 -3
- package/extensions/twitch/src/twitch-client.ts +3 -3
- package/extensions/twitch/src/types.ts +3 -3
- package/extensions/twitch/src/utils/markdown.ts +1 -1
- package/extensions/voice-call/README.md +3 -3
- package/extensions/voice-call/package.json +1 -1
- package/extensions/voice-call/src/core-bridge.ts +2 -2
- package/extensions/voice-call/src/response-generator.ts +1 -1
- package/extensions/whatsapp/index.ts +2 -2
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zalo/README.md +1 -1
- package/extensions/zalo/index.ts +2 -2
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalo/src/accounts.ts +8 -8
- package/extensions/zalo/src/actions.ts +4 -4
- package/extensions/zalo/src/channel.directory.test.ts +2 -2
- package/extensions/zalo/src/channel.ts +18 -18
- package/extensions/zalo/src/monitor.ts +9 -9
- package/extensions/zalo/src/monitor.webhook.test.ts +2 -2
- package/extensions/zalo/src/onboarding.ts +24 -24
- package/extensions/zalo/src/send.ts +2 -2
- package/extensions/zalouser/README.md +2 -2
- package/extensions/zalouser/index.ts +2 -2
- package/extensions/zalouser/package.json +1 -1
- package/extensions/zalouser/src/accounts.ts +9 -9
- package/extensions/zalouser/src/channel.ts +24 -24
- package/extensions/zalouser/src/monitor.ts +4 -4
- package/extensions/zalouser/src/onboarding.ts +28 -28
- package/package.json +13 -250
- package/skills/nano-banana-pro/scripts/generate_image.py +1 -1
- package/skills/tmux/scripts/find-sessions.sh +1 -1
- package/CHANGELOG.md +0 -200
- package/README-header.png +0 -0
- package/git-hooks/pre-commit +0 -4
- package/scripts/format-staged.js +0 -148
- package/scripts/postinstall.js +0 -300
- package/scripts/setup-git-hooks.js +0 -96
- package/skills/webgpu-threejs-tsl/REFERENCE.md +0 -283
- package/skills/webgpu-threejs-tsl/SKILL.md +0 -91
- package/skills/webgpu-threejs-tsl/docs/compute-shaders.md +0 -404
- package/skills/webgpu-threejs-tsl/docs/core-concepts.md +0 -453
- package/skills/webgpu-threejs-tsl/docs/materials.md +0 -353
- package/skills/webgpu-threejs-tsl/docs/post-processing.md +0 -434
- package/skills/webgpu-threejs-tsl/docs/wgsl-integration.md +0 -324
- package/skills/webgpu-threejs-tsl/examples/basic-setup.js +0 -87
- package/skills/webgpu-threejs-tsl/examples/custom-material.js +0 -170
- package/skills/webgpu-threejs-tsl/examples/earth-shader.js +0 -292
- package/skills/webgpu-threejs-tsl/examples/particle-system.js +0 -259
- package/skills/webgpu-threejs-tsl/examples/post-processing.js +0 -199
- package/skills/webgpu-threejs-tsl/templates/compute-shader.js +0 -305
- 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
|
-
};
|