@kernel.chat/kbot 3.99.34 → 4.0.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.
@@ -0,0 +1,197 @@
1
+ // LLaDA2.0-Uni provider client
2
+ //
3
+ // LLaDA2.0-Uni (Inclusion AI, ArXiv:2604.20796, 2026-04-22) is a unified
4
+ // discrete-diffusion LLM that does multimodal *understanding* AND text-to-image
5
+ // generation in a single MoE model. It pairs a SigLIP-VQ semantic tokenizer
6
+ // with a diffusion decoder for high-fidelity 8-step image inference.
7
+ //
8
+ // Local serving status (as of 2026-04-25):
9
+ // The official repo (https://github.com/inclusionAI/LLaDA2.0-Uni) currently
10
+ // ships only Python inference scripts (`scripts/t2i_generate.py`,
11
+ // `scripts/mmu_understand.py`, `scripts/image_edit.py`) using the HF
12
+ // transformers loader. SGLang serving is on the README's TODO list but not
13
+ // yet released. Most users will wrap the Python entrypoints behind a small
14
+ // OpenAI-compatible FastAPI shim, or wait for the SGLang adapter.
15
+ //
16
+ // SPEC: refine when LLaDA's API stabilizes — currently assumes OpenAI-compatible
17
+ // shape on http://localhost:8000 (the conventional vllm / TGI / SGLang layout).
18
+ // All endpoints below are speculative until the upstream serving surface lands.
19
+ const DEFAULT_BASE_URL = process.env.KBOT_LLADA_URL || 'http://localhost:8000';
20
+ const DEFAULT_MODEL = 'llada2.0-uni';
21
+ /** Typed client for a LLaDA2.0-Uni HTTP server (OpenAI-compatible shape). */
22
+ export class LLaDAClient {
23
+ baseUrl;
24
+ apiKey;
25
+ timeoutMs;
26
+ fetchImpl;
27
+ constructor(opts = {}) {
28
+ this.baseUrl = (opts.baseUrl || DEFAULT_BASE_URL).replace(/\/+$/, '');
29
+ this.apiKey = opts.apiKey;
30
+ this.timeoutMs = opts.timeoutMs ?? 60_000;
31
+ // Bind so `this` in node's global fetch stays right.
32
+ this.fetchImpl = opts.fetchImpl ?? ((...a) => fetch(...a));
33
+ }
34
+ /** Build standard headers — Authorization only attached when an apiKey is set. */
35
+ headers() {
36
+ const h = { 'Content-Type': 'application/json' };
37
+ if (this.apiKey)
38
+ h.Authorization = `Bearer ${this.apiKey}`;
39
+ return h;
40
+ }
41
+ async post(path, body) {
42
+ const url = `${this.baseUrl}${path}`;
43
+ const ctrl = new AbortController();
44
+ const timer = setTimeout(() => ctrl.abort(), this.timeoutMs);
45
+ try {
46
+ const res = await this.fetchImpl(url, {
47
+ method: 'POST',
48
+ headers: this.headers(),
49
+ body: JSON.stringify(body),
50
+ signal: ctrl.signal,
51
+ });
52
+ if (!res.ok) {
53
+ const txt = await res.text().catch(() => '');
54
+ throw new Error(`LLaDA ${path} failed: ${res.status} ${res.statusText} ${txt}`.trim());
55
+ }
56
+ return (await res.json());
57
+ }
58
+ finally {
59
+ clearTimeout(timer);
60
+ }
61
+ }
62
+ /** Quick health probe. Resolves true when the server responds with 2xx. */
63
+ async isReachable() {
64
+ try {
65
+ const ctrl = new AbortController();
66
+ const timer = setTimeout(() => ctrl.abort(), 2000);
67
+ try {
68
+ // SPEC: refine when LLaDA's API stabilizes — try /v1/models, fall back to /health.
69
+ const res = await this.fetchImpl(`${this.baseUrl}/v1/models`, {
70
+ method: 'GET',
71
+ signal: ctrl.signal,
72
+ });
73
+ if (res.ok)
74
+ return true;
75
+ const res2 = await this.fetchImpl(`${this.baseUrl}/health`, {
76
+ method: 'GET',
77
+ signal: ctrl.signal,
78
+ });
79
+ return res2.ok;
80
+ }
81
+ finally {
82
+ clearTimeout(timer);
83
+ }
84
+ }
85
+ catch {
86
+ return false;
87
+ }
88
+ }
89
+ /**
90
+ * Text chat — OpenAI-compatible POST /v1/chat/completions.
91
+ * SPEC: refine when LLaDA's API stabilizes — currently assumes OpenAI-compatible shape.
92
+ */
93
+ async chat(req) {
94
+ const body = {
95
+ model: req.model || DEFAULT_MODEL,
96
+ messages: req.messages,
97
+ temperature: req.temperature ?? 0.7,
98
+ };
99
+ if (req.maxTokens !== undefined)
100
+ body.max_tokens = req.maxTokens;
101
+ if (req.thinkingSteps !== undefined) {
102
+ // LLaDA exposes `mode: "thinking"` + `thinking_steps` in its native API.
103
+ // We pass them as extra fields; servers that don't recognize them ignore.
104
+ body.mode = 'thinking';
105
+ body.thinking_steps = req.thinkingSteps;
106
+ }
107
+ const data = await this.post('/v1/chat/completions', body);
108
+ const text = data.choices?.[0]?.message?.content ?? '';
109
+ if (!text)
110
+ throw new Error('LLaDA chat returned no content');
111
+ const thinking = data.choices?.[0]?.message?.thinking ?? data.thinking;
112
+ return { text, thinking, raw: data };
113
+ }
114
+ /**
115
+ * Image generation. The native LLaDA call is `model.generate_image(...)`;
116
+ * we expose it via a POST /v1/images/generations shim that accepts the
117
+ * extra LLaDA-specific knobs (`steps`, `cfg_scale`, `thinking`).
118
+ * SPEC: refine when LLaDA's API stabilizes — assumes OpenAI-compatible shape.
119
+ */
120
+ async generateImage(req) {
121
+ const size = req.size || '1024x1024';
122
+ const [w, h] = parseSize(size);
123
+ const body = {
124
+ model: DEFAULT_MODEL,
125
+ prompt: req.prompt,
126
+ size,
127
+ n: 1,
128
+ // LLaDA-native fields (ignored by stricter OpenAI servers):
129
+ image_w: w,
130
+ image_h: h,
131
+ steps: req.steps ?? 8,
132
+ cfg_scale: req.cfgScale ?? 2.0,
133
+ };
134
+ if (req.thinking) {
135
+ body.mode = 'thinking';
136
+ body.thinking_steps = 32;
137
+ }
138
+ if (req.refImage) {
139
+ // SPEC: LLaDA uses `image_tokens` for editing. The likely server shim accepts
140
+ // either `input_image` (URL/data URL) or `image` and tokenizes server-side.
141
+ body.input_image = req.refImage;
142
+ body.image = req.refImage;
143
+ }
144
+ const data = await this.post('/v1/images/generations', body);
145
+ const item = data.data?.[0];
146
+ if (!item)
147
+ throw new Error('LLaDA image returned no data');
148
+ let url = item.url;
149
+ if (!url && item.b64_json)
150
+ url = `data:image/png;base64,${item.b64_json}`;
151
+ if (!url)
152
+ throw new Error('LLaDA image returned neither url nor b64_json');
153
+ const thinking = item.thinking ?? data.thinking;
154
+ return { url, thinking, raw: data };
155
+ }
156
+ /**
157
+ * Multimodal understanding: chat with an image attached.
158
+ * SPEC: refine when LLaDA's API stabilizes — uses OpenAI-vision content blocks.
159
+ */
160
+ async understand(req) {
161
+ if (!req.imageUrl && !req.imageData) {
162
+ throw new Error('LLaDA.understand requires imageUrl or imageData');
163
+ }
164
+ const imageUrl = req.imageUrl
165
+ ? req.imageUrl
166
+ : req.imageData.startsWith('data:')
167
+ ? req.imageData
168
+ : `data:image/png;base64,${req.imageData}`;
169
+ const messages = [
170
+ {
171
+ role: 'user',
172
+ content: [
173
+ { type: 'text', text: req.prompt },
174
+ { type: 'image_url', image_url: { url: imageUrl } },
175
+ ],
176
+ },
177
+ ];
178
+ const out = await this.chat({
179
+ model: req.model,
180
+ messages,
181
+ maxTokens: req.maxTokens ?? 1024,
182
+ temperature: 0.2,
183
+ });
184
+ return { text: out.text, raw: out.raw };
185
+ }
186
+ }
187
+ function parseSize(size) {
188
+ const m = /^(\d+)\s*x\s*(\d+)$/i.exec(size.trim());
189
+ if (!m)
190
+ return [1024, 1024];
191
+ return [Number(m[1]), Number(m[2])];
192
+ }
193
+ /** Convenience factory mirroring the rest of kbot's local-provider style. */
194
+ export function createLLaDAClient(opts = {}) {
195
+ return new LLaDAClient(opts);
196
+ }
197
+ //# sourceMappingURL=llada.js.map
@@ -50,6 +50,7 @@ export function registerBrowserTools() {
50
50
  });
51
51
  registerTool({
52
52
  name: 'browser_snapshot',
53
+ deprecated: true,
53
54
  description: 'Get the current page\'s accessibility tree (structured text representation).',
54
55
  parameters: {},
55
56
  tier: 'free',
@@ -253,6 +253,7 @@ export function registerComputerTools() {
253
253
  // ── Permission & lock check ──
254
254
  registerTool({
255
255
  name: 'computer_check',
256
+ deprecated: true,
256
257
  description: 'Check computer use permissions and acquire the session lock. Call this before any other computer use tool. Returns permission status and any required setup steps.',
257
258
  parameters: {},
258
259
  tier: 'free',
@@ -277,6 +278,7 @@ export function registerComputerTools() {
277
278
  // ── App approval ──
278
279
  registerTool({
279
280
  name: 'app_approve',
281
+ deprecated: true,
280
282
  description: 'Approve an app for computer use in this session. Must be called before interacting with an app. Shows a warning for sensitive apps (terminals, Finder, System Settings).',
281
283
  parameters: {
282
284
  app: { type: 'string', description: 'App name (e.g., "Safari", "Finder", "Xcode")', required: true },
@@ -456,6 +458,7 @@ export function registerComputerTools() {
456
458
  // ── Mouse click ──
457
459
  registerTool({
458
460
  name: 'mouse_click',
461
+ deprecated: true,
459
462
  description: 'Click at specific screen coordinates.',
460
463
  parameters: {
461
464
  x: { type: 'number', description: 'X coordinate', required: true },
@@ -873,6 +876,7 @@ export function registerComputerTools() {
873
876
  });
874
877
  registerTool({
875
878
  name: 'window_resize',
879
+ deprecated: true,
876
880
  description: 'Resize a window of a specific app.',
877
881
  parameters: {
878
882
  app: { type: 'string', description: 'App name', required: true },
@@ -926,6 +930,7 @@ export function registerComputerTools() {
926
930
  });
927
931
  registerTool({
928
932
  name: 'window_move',
933
+ deprecated: true,
929
934
  description: 'Move a window to specific screen coordinates.',
930
935
  parameters: {
931
936
  app: { type: 'string', description: 'App name', required: true },
@@ -1080,6 +1085,7 @@ export function registerComputerTools() {
1080
1085
  // ── Release lock ──
1081
1086
  registerTool({
1082
1087
  name: 'computer_release',
1088
+ deprecated: true,
1083
1089
  description: 'Release the computer use lock and end the session. Call when done with computer use.',
1084
1090
  parameters: {},
1085
1091
  tier: 'free',
@@ -428,6 +428,7 @@ export function registerContainerTools() {
428
428
  // ── License Check ─────────────────────────────────────────────────
429
429
  registerTool({
430
430
  name: 'license_check',
431
+ deprecated: true,
431
432
  description: 'Check license compatibility across a project\'s dependency tree.',
432
433
  parameters: {
433
434
  path: { type: 'string', description: 'Project directory path', required: true },
@@ -683,6 +683,7 @@ function evolveDesign(source, mutationIndex) {
683
683
  export function registerCreativeTools() {
684
684
  registerTool({
685
685
  name: 'generate_art',
686
+ deprecated: true,
686
687
  description: 'Generate a self-contained p5.js sketch as an HTML file from a text description. Creates generative art that can be opened directly in a browser.',
687
688
  parameters: {
688
689
  description: { type: 'string', description: 'Text description of the desired artwork (e.g., "flowing ocean waves at sunset")', required: true },
@@ -706,6 +707,7 @@ export function registerCreativeTools() {
706
707
  });
707
708
  registerTool({
708
709
  name: 'generate_shader',
710
+ deprecated: true,
709
711
  description: 'Generate a Shadertoy-compatible GLSL fragment shader from a text description. Creates animated procedural graphics using noise, raymarching, voronoi, or kaleidoscopic techniques.',
710
712
  parameters: {
711
713
  description: { type: 'string', description: 'Text description of the desired shader effect (e.g., "molten lava flowing through cracks")', required: true },
@@ -723,6 +725,7 @@ export function registerCreativeTools() {
723
725
  });
724
726
  registerTool({
725
727
  name: 'generate_music_pattern',
728
+ deprecated: true,
726
729
  description: 'Generate a music pattern as Sonic Pi code or a MIDI-like JSON structure. Creates melodies, bass lines, and drum patterns based on genre and description.',
727
730
  parameters: {
728
731
  description: { type: 'string', description: 'Text description of the desired music (e.g., "upbeat jazz with walking bass")', required: true },
@@ -748,6 +751,7 @@ export function registerCreativeTools() {
748
751
  });
749
752
  registerTool({
750
753
  name: 'generate_svg',
754
+ deprecated: true,
751
755
  description: 'Generate algorithmic SVG art from a text description. Creates generative patterns including concentric circles, mesh networks, Mondrian grids, spirographs, or wave patterns.',
752
756
  parameters: {
753
757
  description: { type: 'string', description: 'Text description of the desired SVG artwork', required: true },
@@ -772,6 +776,7 @@ export function registerCreativeTools() {
772
776
  });
773
777
  registerTool({
774
778
  name: 'evolve_design',
779
+ deprecated: true,
775
780
  description: 'Take an existing design file (HTML, SVG, GLSL, CSS, etc.) and generate N mutations by tweaking numeric values, colors, and structure. Outputs each variant as a separate file. Useful for exploring design spaces.',
776
781
  parameters: {
777
782
  source_path: { type: 'string', description: 'Path to the source design file to mutate', required: true },
@@ -307,6 +307,7 @@ export function registerDeployTools() {
307
307
  // ── deploy ─────────────────────────────────────────────────────────
308
308
  registerTool({
309
309
  name: 'deploy',
310
+ deprecated: true,
310
311
  description: 'Deploy the current project. Auto-detects platform from config files (vercel.json, netlify.toml, wrangler.toml, fly.toml, railway.json). Supports Vercel, Netlify, Cloudflare Workers/Pages, Fly.io, and Railway.',
311
312
  parameters: {
312
313
  path: { type: 'string', description: 'Project directory (default: cwd)' },
@@ -968,6 +968,7 @@ export function registerEmergentTools() {
968
968
  // ══════════════════════════════════════════════════════════════════════════
969
969
  registerTool({
970
970
  name: 'question',
971
+ deprecated: true,
971
972
  description: 'Generate the most important unanswered questions based on kbot\'s knowledge graph and memory. Not questions the user asked — questions that SHOULD be asked based on what is known and what is missing.',
972
973
  parameters: {
973
974
  domain: { type: 'string', description: 'Optional domain focus (e.g., "biology", "physics", "social")' },
@@ -186,6 +186,7 @@ export function registerGamedevTools() {
186
186
  };
187
187
  registerTool({
188
188
  name: 'scaffold_game',
189
+ deprecated: true,
189
190
  description: 'Generate project scaffolding for a game engine. Supports godot, unity, unreal, bevy, phaser, three (Three.js), playcanvas, and defold. Writes real config files, entry points, and gitignore.',
190
191
  parameters: {
191
192
  engine: { type: 'string', description: 'Game engine: godot, unity, unreal, bevy, phaser, three, playcanvas, defold', required: true },
@@ -359,6 +360,7 @@ export function registerGamedevTools() {
359
360
  };
360
361
  registerTool({
361
362
  name: 'game_config',
363
+ deprecated: true,
362
364
  description: 'Generate or modify game engine config files. Auto-detects engine from project directory. Supports project, build, input, physics, rendering, and audio config types.',
363
365
  parameters: {
364
366
  engine: { type: 'string', description: 'Engine: godot, unity, unreal, bevy, phaser, three, playcanvas, defold (auto-detected if path provided)' },
@@ -438,6 +440,7 @@ export function registerGamedevTools() {
438
440
  ];
439
441
  registerTool({
440
442
  name: 'shader_debug',
443
+ deprecated: true,
441
444
  description: 'Static analysis of shader code for performance issues, errors, and optimization opportunities. Supports GLSL, HLSL, and WGSL. Reports branching, precision, overdraw, math optimization, and texture access patterns.',
442
445
  parameters: {
443
446
  source: { type: 'string', description: 'Shader source code or file path', required: true },
@@ -906,6 +909,7 @@ void fragment() {
906
909
  };
907
910
  registerTool({
908
911
  name: 'material_graph',
912
+ deprecated: true,
909
913
  description: 'Generate material/shader code for game engines. Supports PBR, toon, water, foliage, glass, and emissive materials for Three.js, Godot, and Unity.',
910
914
  parameters: {
911
915
  material_type: { type: 'string', description: 'Material type: pbr, toon, water, foliage, glass, emissive', required: true },
@@ -1264,6 +1268,7 @@ void fragment() {
1264
1268
  }
1265
1269
  registerTool({
1266
1270
  name: 'mesh_generate',
1271
+ deprecated: true,
1267
1272
  description: 'Procedural OBJ mesh generation. Supports plane, cube, sphere, cylinder, torus, heightmap, and terrain shapes with configurable parameters. Outputs valid OBJ with vertices, normals, and UVs.',
1268
1273
  parameters: {
1269
1274
  shape: { type: 'string', description: 'Shape: plane, cube, sphere, cylinder, torus, heightmap, terrain', required: true },
@@ -1298,6 +1303,7 @@ void fragment() {
1298
1303
  // ── Tool 6: Sprite Atlas Packer ────────────────────────────────────
1299
1304
  registerTool({
1300
1305
  name: 'sprite_pack',
1306
+ deprecated: true,
1301
1307
  description: 'Pack multiple sprite images into a single texture atlas with metadata. Uses maxrects bin-packing for optimal layout. Outputs atlas image via ImageMagick and JSON/engine-specific metadata.',
1302
1308
  parameters: {
1303
1309
  input_dir: { type: 'string', description: 'Directory containing sprite images (png/jpg/webp)', required: true },
@@ -1610,6 +1616,7 @@ void fragment() {
1610
1616
  // ── Tool 7: Physics Setup Generator ──────────────────────────────────
1611
1617
  registerTool({
1612
1618
  name: 'physics_setup',
1619
+ deprecated: true,
1613
1620
  description: 'Generate complete physics configuration code for game engines. Supports rigidbody, softbody, ragdoll (full humanoid skeleton), vehicle (suspension/wheels/steering), cloth, and joint systems across 7 physics engines.',
1614
1621
  parameters: {
1615
1622
  type: { type: 'string', description: 'Physics type: rigidbody, softbody, ragdoll, vehicle, cloth, joints', required: true },
@@ -2902,6 +2909,7 @@ const JOINT_CONFIG = ${JSON.stringify({
2902
2909
  // ── Tool 8: Particle System Generator ────────────────────────────────
2903
2910
  registerTool({
2904
2911
  name: 'particle_system',
2912
+ deprecated: true,
2905
2913
  description: 'Generate engine-specific particle system code for common visual effects. Supports fire, smoke, rain, snow, sparks, magic, explosion, dust, bubbles, leaves, and confetti effects across 6 game engines.',
2906
2914
  parameters: {
2907
2915
  effect: { type: 'string', description: 'Effect type: fire, smoke, rain, snow, sparks, magic, explosion, dust, bubbles, leaves, confetti', required: true },
@@ -3612,6 +3620,7 @@ ${effect === 'fire' || effect === 'smoke' ? ` // Grow over lifetime
3612
3620
  // ── Tool 9: Procedural Level Generator ───────────────────────────────
3613
3621
  registerTool({
3614
3622
  name: 'level_generate',
3623
+ deprecated: true,
3615
3624
  description: 'Generate procedural game levels with BSP dungeon, platformer terrain, maze, overworld, or arena layouts. Supports seeded PRNG for reproducibility and outputs in JSON, Tiled, or ASCII formats.',
3616
3625
  parameters: {
3617
3626
  type: { type: 'string', description: 'Level type: dungeon, platformer, overworld, maze, arena', required: true },
@@ -4173,6 +4182,7 @@ ${effect === 'fire' || effect === 'smoke' ? ` // Grow over lifetime
4173
4182
  // ── Tool 10: Tilemap Auto-Tiling Generator ──────────────────────────
4174
4183
  registerTool({
4175
4184
  name: 'tilemap_generate',
4185
+ deprecated: true,
4176
4186
  description: 'Generate bitmask-based auto-tiling rules and tilemap data. Supports blob 47-tile, Wang 16-tile, and simple 4-tile tilesets with terrain definitions for grass, stone, water, sand, snow, and lava.',
4177
4187
  parameters: {
4178
4188
  tileset_type: { type: 'string', description: 'Tileset type: blob_47, wang_16, simple_4', required: true },
@@ -4553,6 +4563,7 @@ tile_${i}/terrain_peering/left = ${cardW ? 0 : -1}`;
4553
4563
  // ── Tool 11: Navigation Mesh Configuration ──────────────────────────
4554
4564
  registerTool({
4555
4565
  name: 'navmesh_config',
4566
+ deprecated: true,
4556
4567
  description: 'Generate engine-specific navigation mesh configuration and pathfinding helper code. Supports humanoid, vehicle, flying, and small creature agent types with appropriate defaults across 5 navigation systems.',
4557
4568
  parameters: {
4558
4569
  engine: { type: 'string', description: 'Navigation engine: godot, unity, unreal, recast, three (default: recast)' },
@@ -5662,6 +5673,7 @@ export class NavigationSystem {
5662
5673
  // ── Tool 12: game_audio ──────────────────────────────────────────────
5663
5674
  registerTool({
5664
5675
  name: 'game_audio',
5676
+ deprecated: true,
5665
5677
  description: 'Generate game audio systems: spatial 3D audio, adaptive music layers, sound banks, Howler.js setup, or Web Audio API graphs. Produces complete, working audio code for any game engine.',
5666
5678
  parameters: {
5667
5679
  system: { type: 'string', description: 'Audio system type: spatial, music_layers, sound_bank, howler, web_audio', required: true },
@@ -7122,6 +7134,7 @@ export class AudioEngine {
7122
7134
  // ── Tool 13: netcode_scaffold ───────────────────────────────────────
7123
7135
  registerTool({
7124
7136
  name: 'netcode_scaffold',
7137
+ deprecated: true,
7125
7138
  description: 'Generate multiplayer netcode scaffolding: server, client, and shared types. Supports WebSocket/WebRTC transports with Colyseus, Socket.IO, Geckos.io, Nakama, or raw implementations. Includes lobby, matchmaking, state sync, input prediction, chat, and reconnection features.',
7126
7139
  parameters: {
7127
7140
  architecture: { type: 'string', description: 'Network architecture: client_server, peer_to_peer, relay', required: true },
@@ -8542,6 +8555,7 @@ ${hasReconnect ? ' if (this.reconnectTimer) clearTimeout(this.reconnectTimer)
8542
8555
  // ── Tool 14: game_build ─────────────────────────────────────────────
8543
8556
  registerTool({
8544
8557
  name: 'game_build',
8558
+ deprecated: true,
8545
8559
  description: 'Generate CI/CD pipelines and build configurations for game distribution. Supports Steam, itch.io, web, iOS, and Android targets with GitHub Actions or GitLab CI.',
8546
8560
  parameters: {
8547
8561
  engine: { type: 'string', description: 'Game engine or framework (e.g., godot, unity, unreal, three, phaser, bevy, web)' },
@@ -9044,6 +9058,7 @@ export default defineConfig({
9044
9058
  // ── Tool 15: game_test ──────────────────────────────────────────────
9045
9059
  registerTool({
9046
9060
  name: 'game_test',
9061
+ deprecated: true,
9047
9062
  description: 'Generate game testing and profiling utilities: FPS profiler, memory tracker, input recorder/replayer, screenshot regression tests, and performance budgets with runtime validation.',
9048
9063
  parameters: {
9049
9064
  test_type: { type: 'string', description: 'Test type: fps_profiler, memory_tracker, input_recorder, screenshot_test, performance_budget', required: true },
@@ -10352,6 +10367,7 @@ export class PerformanceBudget {
10352
10367
  // ── Tool 16: ecs_generate ───────────────────────────────────────────
10353
10368
  registerTool({
10354
10369
  name: 'ecs_generate',
10370
+ deprecated: true,
10355
10371
  description: 'Generate Entity Component System (ECS) code: components, systems, and entity archetypes. Produces idiomatic code for Bevy (Rust), bitecs (TypeScript), Unity DOTS (C#), miniplex (TypeScript), or ecsy (TypeScript).',
10356
10372
  parameters: {
10357
10373
  framework: { type: 'string', description: 'ECS framework: bevy, unity_dots, bitecs, miniplex, ecsy', required: true },
@@ -1287,6 +1287,7 @@ export function registerHackerToolkitTools() {
1287
1287
  // ─────────────────────────────────────────────────────────────────────────────
1288
1288
  registerTool({
1289
1289
  name: 'jwt_analyze',
1290
+ deprecated: true,
1290
1291
  description: 'Analyze JWT tokens. Decode header/payload/signature, verify signatures with a secret, test for algorithm confusion (alg:none), and try common weak secrets.',
1291
1292
  parameters: {
1292
1293
  token: { type: 'string', description: 'JWT token to analyze', required: true },
@@ -1653,6 +1654,7 @@ export function registerHackerToolkitTools() {
1653
1654
  // ─────────────────────────────────────────────────────────────────────────────
1654
1655
  registerTool({
1655
1656
  name: 'cors_check',
1657
+ deprecated: true,
1656
1658
  description: 'Detect CORS misconfigurations. Tests for arbitrary origin reflection, null origin acceptance, credentials with wildcard, and subdomain wildcard matching.',
1657
1659
  parameters: {
1658
1660
  url: { type: 'string', description: 'URL to check for CORS misconfigurations', required: true },
@@ -1946,6 +1948,7 @@ export function registerHackerToolkitTools() {
1946
1948
  // ─────────────────────────────────────────────────────────────────────────────
1947
1949
  registerTool({
1948
1950
  name: 'exploit_search',
1951
+ deprecated: true,
1949
1952
  description: 'Search for known exploits and CVEs. Queries the NVD (National Vulnerability Database) API for CVE data. Returns CVE IDs, descriptions, CVSS scores, and references.',
1950
1953
  parameters: {
1951
1954
  query: { type: 'string', description: 'CVE ID (e.g., CVE-2024-1234), software name, or keyword', required: true },
@@ -2739,6 +2742,7 @@ export function registerHackerToolkitTools() {
2739
2742
  // ─────────────────────────────────────────────────────────────────────────────
2740
2743
  registerTool({
2741
2744
  name: 'ssl_analyze',
2745
+ deprecated: true,
2742
2746
  description: 'Deep SSL/TLS analysis using Node.js tls module. Returns protocol version, cipher suite, certificate details (issuer, subject, validity, SANs), certificate chain, HSTS status, and potential security issues.',
2743
2747
  parameters: {
2744
2748
  host: { type: 'string', description: 'Hostname to analyze', required: true },
@@ -3012,6 +3016,7 @@ export function registerHackerToolkitTools() {
3012
3016
  // ─────────────────────────────────────────────────────────────────────────────
3013
3017
  registerTool({
3014
3018
  name: 'forensics_analyze',
3019
+ deprecated: true,
3015
3020
  description: 'File forensics analysis. Identify file type by magic bytes, extract printable ASCII strings, get file metadata, hex dump, and calculate Shannon entropy (high entropy = encrypted/compressed).',
3016
3021
  parameters: {
3017
3022
  file_path: { type: 'string', description: 'Path to file to analyze', required: true },
@@ -3469,6 +3474,7 @@ export function registerHackerToolkitTools() {
3469
3474
  // ─────────────────────────────────────────────────────────────────────────────
3470
3475
  registerTool({
3471
3476
  name: 'security_headers_generate',
3477
+ deprecated: true,
3472
3478
  description: 'Generate complete security header configurations for various frameworks. Includes CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, and more. Returns framework-specific code ready to copy-paste.',
3473
3479
  parameters: {
3474
3480
  framework: { type: 'string', description: 'Framework: express, nextjs, nginx, apache, cloudflare, generic', default: 'generic' },
@@ -8,14 +8,14 @@ export declare const imageThoughtfulInputSchema: z.ZodObject<{
8
8
  reference_image_url: z.ZodOptional<z.ZodString>;
9
9
  }, "strip", z.ZodTypeAny, {
10
10
  prompt: string;
11
- aspect_ratio: "1:1" | "16:9" | "9:16" | "4:3" | "3:4";
12
11
  thinking_steps: number;
12
+ aspect_ratio: "1:1" | "16:9" | "9:16" | "4:3" | "3:4";
13
13
  style_hints?: string | undefined;
14
14
  reference_image_url?: string | undefined;
15
15
  }, {
16
16
  prompt: string;
17
- aspect_ratio?: "1:1" | "16:9" | "9:16" | "4:3" | "3:4" | undefined;
18
17
  thinking_steps?: number | undefined;
18
+ aspect_ratio?: "1:1" | "16:9" | "9:16" | "4:3" | "3:4" | undefined;
19
19
  style_hints?: string | undefined;
20
20
  reference_image_url?: string | undefined;
21
21
  }>;
@@ -18,6 +18,8 @@ export interface ToolDefinition {
18
18
  timeout?: number;
19
19
  /** Max result size in bytes (default: 50_000 = 50KB) */
20
20
  maxResultSize?: number;
21
+ /** Marked deprecated as of v4.0; scheduled for removal in 4.1.0. */
22
+ deprecated?: boolean;
21
23
  }
22
24
  export interface ToolCall {
23
25
  id: string;