ft-scout 9.4.1 → 9.4.4

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 (58) hide show
  1. package/.firebase/hosting.d2Vi.cache +7 -7
  2. package/README.md +4 -4
  3. package/artifacts/scout_drone_3d.glb +0 -0
  4. package/artifacts/scout_drone_3d_render.png +0 -0
  5. package/bin/src/commands/agent.d.ts.map +1 -1
  6. package/bin/src/commands/agent.js +21 -0
  7. package/bin/src/commands/agent.js.map +1 -1
  8. package/bin/src/commands/authCommand.d.ts.map +1 -1
  9. package/bin/src/commands/authCommand.js +10 -4
  10. package/bin/src/commands/authCommand.js.map +1 -1
  11. package/bin/src/commands/brief.d.ts.map +1 -1
  12. package/bin/src/commands/brief.js +31 -1
  13. package/bin/src/commands/brief.js.map +1 -1
  14. package/bin/src/commands/plan.d.ts.map +1 -1
  15. package/bin/src/commands/plan.js +23 -3
  16. package/bin/src/commands/plan.js.map +1 -1
  17. package/bin/src/commands/risky.d.ts.map +1 -1
  18. package/bin/src/commands/risky.js +82 -1
  19. package/bin/src/commands/risky.js.map +1 -1
  20. package/bin/src/discovery/messages.js +2 -2
  21. package/bin/src/discovery/messages.js.map +1 -1
  22. package/bin/src/engine/agentEngine.d.ts.map +1 -1
  23. package/bin/src/engine/agentEngine.js +23 -0
  24. package/bin/src/engine/agentEngine.js.map +1 -1
  25. package/bin/src/engine/computer/computerController.d.ts.map +1 -1
  26. package/bin/src/engine/computer/computerController.js +5 -0
  27. package/bin/src/engine/computer/computerController.js.map +1 -1
  28. package/bin/src/engine/computer/scoutDriver.cs +152 -18
  29. package/bin/src/engine/computer/scout_driver.exe +0 -0
  30. package/bin/src/engine/llm.d.ts.map +1 -1
  31. package/bin/src/engine/llm.js +16 -6
  32. package/bin/src/engine/llm.js.map +1 -1
  33. package/bin/src/engine/runtime/agentRuntime.d.ts.map +1 -1
  34. package/bin/src/engine/runtime/agentRuntime.js +20 -8
  35. package/bin/src/engine/runtime/agentRuntime.js.map +1 -1
  36. package/bin/src/engine/verifier.d.ts.map +1 -1
  37. package/bin/src/engine/verifier.js +31 -12
  38. package/bin/src/engine/verifier.js.map +1 -1
  39. package/bin/src/engine/workspace/agentWorkspace.d.ts.map +1 -1
  40. package/bin/src/engine/workspace/agentWorkspace.js +43 -0
  41. package/bin/src/engine/workspace/agentWorkspace.js.map +1 -1
  42. package/bin/src/index.js +21 -10
  43. package/bin/src/index.js.map +1 -1
  44. package/bin/src/mcp/client.js +1 -1
  45. package/bin/src/utils/branding.js +1 -1
  46. package/bin/src/utils/payment.d.ts.map +1 -1
  47. package/bin/src/utils/payment.js +38 -0
  48. package/bin/src/utils/payment.js.map +1 -1
  49. package/bin/src/utils/qrBridge.d.ts.map +1 -1
  50. package/bin/src/utils/qrBridge.js +148 -8
  51. package/bin/src/utils/qrBridge.js.map +1 -1
  52. package/package.json +4 -3
  53. package/scripts/build_3d_drone.js +130 -0
  54. package/scripts/export_and_capture.js +48 -0
  55. package/scripts/render_and_export_drone.js +94 -0
  56. package/scripts/render_front_view.js +76 -0
  57. package/web/app.js +4 -4
  58. package/web/styles.css +338 -25
@@ -1 +1 @@
1
- {"version":3,"file":"qrBridge.d.ts","sourceRoot":"","sources":["qrBridge.ts"],"names":[],"mappings":"AAOA,OAAO,EAAkB,KAAK,UAAU,EAAoB,MAAM,WAAW,CAAC;AAM9E,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,GAAG,QAAQ,GAAG,SAAS,CAAC;CAClD;AAED,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAuBxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,oBAAoB,CAAC,QAiBtE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,UAAU,CAAC,CAuKjE"}
1
+ {"version":3,"file":"qrBridge.d.ts","sourceRoot":"","sources":["qrBridge.ts"],"names":[],"mappings":"AAQA,OAAO,EAAkB,KAAK,UAAU,EAAoB,MAAM,WAAW,CAAC;AAO9E,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,GAAG,QAAQ,GAAG,SAAS,CAAC;CAClD;AAED,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAuBxE;AAED;;GAEG;AAEH,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CA4B9F;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,oBAAoB,CAAC,QAqBtE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,UAAU,CAAC,CAgRjE"}
@@ -1,3 +1,4 @@
1
+ import QRCode from 'qrcode';
1
2
  import http from 'http';
2
3
  import os from 'os';
3
4
  import crypto from 'crypto';
@@ -7,6 +8,7 @@ import chalk from 'chalk';
7
8
  import { spinner } from '@clack/prompts';
8
9
  import { saveAuthConfig } from './auth.js';
9
10
  import { safeNote } from './markdown.js';
11
+ import { FIREBASE_API_KEY, FIREBASE_PROJECT_ID } from './firebaseAuth.js';
10
12
  const BRIDGE_PORT = 4290;
11
13
  const TELEMETRY_PATH = path.join(os.homedir(), '.ft', 'scout_telemetry.json');
12
14
  /**
@@ -38,6 +40,37 @@ export function generateAsciiQrPattern(code, url) {
38
40
  /**
39
41
  * Saves live telemetry snapshot to ~/.ft/scout_telemetry.json
40
42
  */
43
+ export async function pushTelemetryToCloud(sessionId, telemetry) {
44
+ try {
45
+ const controller = new AbortController();
46
+ const timeout = setTimeout(() => controller.abort(), 3500);
47
+ const url = `https://firestore.googleapis.com/v1/projects/${FIREBASE_PROJECT_ID}/databases/(default)/documents/scout_sessions/${encodeURIComponent(sessionId)}?key=${FIREBASE_API_KEY}`;
48
+ const fields = {};
49
+ for (const [key, val] of Object.entries(telemetry)) {
50
+ if (typeof val === 'number') {
51
+ fields[key] = { integerValue: String(Math.round(val)) };
52
+ }
53
+ else if (typeof val === 'boolean') {
54
+ fields[key] = { booleanValue: val };
55
+ }
56
+ else if (val !== undefined && val !== null) {
57
+ fields[key] = { stringValue: String(val) };
58
+ }
59
+ }
60
+ fields.lastPing = { stringValue: new Date().toISOString() };
61
+ const res = await fetch(url, {
62
+ method: 'PATCH',
63
+ headers: { 'Content-Type': 'application/json' },
64
+ body: JSON.stringify({ fields }),
65
+ signal: controller.signal,
66
+ });
67
+ clearTimeout(timeout);
68
+ return res.ok;
69
+ }
70
+ catch {
71
+ return false;
72
+ }
73
+ }
41
74
  export function writeTelemetry(telemetry) {
42
75
  try {
43
76
  const ftDir = path.join(os.homedir(), '.ft');
@@ -57,6 +90,10 @@ export function writeTelemetry(telemetry) {
57
90
  lastPing: new Date().toISOString(),
58
91
  };
59
92
  fs.writeFileSync(TELEMETRY_PATH, JSON.stringify(updated, null, 2), 'utf-8');
93
+ const sessId = updated.sessionId || current.sessionId;
94
+ if (sessId) {
95
+ pushTelemetryToCloud(sessId, updated).catch(() => { });
96
+ }
60
97
  }
61
98
  catch { }
62
99
  }
@@ -68,15 +105,34 @@ export async function startQrPairingSession() {
68
105
  const pairingCode = `SCT-${rawNum}`;
69
106
  const sessionId = `sct_sess_${Date.now().toString(36)}_${crypto.randomBytes(3).toString('hex')}`;
70
107
  const hostName = os.hostname() || 'workstation.local';
71
- const version = '9.5.0';
72
- const deepLink = `frontterrain://pair?session=${sessionId}&code=${pairingCode}&host=${hostName}&v=${version}`;
108
+ const version = '9.4.4';
109
+ let localIp = '127.0.0.1';
110
+ try {
111
+ const nets = os.networkInterfaces();
112
+ for (const name of Object.keys(nets)) {
113
+ for (const net of nets[name] || []) {
114
+ if (net.family === 'IPv4' && !net.internal) {
115
+ localIp = net.address;
116
+ break;
117
+ }
118
+ }
119
+ }
120
+ }
121
+ catch { }
122
+ const deepLink = `frontterrain://pair?session=${sessionId}&code=${pairingCode}&host=${hostName}&ip=${localIp}&port=${BRIDGE_PORT}&v=${version}`;
73
123
  console.log();
74
124
  console.log(chalk.bold.white(' ┌──────────────────────────────────────────────────────────┐'));
75
125
  console.log(chalk.bold.white(' │ FRONTTERRAIN SCOUT CLI │'));
76
126
  console.log(chalk.dim(' │ Universal Sovereign Agent QR Bridge │'));
77
127
  console.log(chalk.bold.white(' └──────────────────────────────────────────────────────────┘'));
78
128
  console.log();
79
- console.log(generateAsciiQrPattern(pairingCode, deepLink));
129
+ try {
130
+ const qrString = await QRCode.toString(deepLink, { type: 'terminal', small: true });
131
+ console.log(qrString);
132
+ }
133
+ catch {
134
+ console.log(generateAsciiQrPattern(pairingCode, deepLink));
135
+ }
80
136
  console.log();
81
137
  console.log(chalk.bold.white(' PAIRING CODE : ') + chalk.bold.black.bgWhite(` ${pairingCode} `));
82
138
  console.log(chalk.dim(` DEEP LINK : ${deepLink}`));
@@ -88,12 +144,91 @@ export async function startQrPairingSession() {
88
144
  s.start('Awaiting authorization from FrontTerrain One mobile app...');
89
145
  return new Promise((resolve, reject) => {
90
146
  let server;
147
+ let isResolved = false;
148
+ let cloudPollInterval = null;
91
149
  const cleanup = () => {
150
+ if (cloudPollInterval) {
151
+ clearInterval(cloudPollInterval);
152
+ cloudPollInterval = null;
153
+ }
92
154
  try {
93
155
  server.close();
94
156
  }
95
157
  catch { }
96
158
  };
159
+ const handleSuccessAuth = (authConfig) => {
160
+ if (isResolved)
161
+ return;
162
+ isResolved = true;
163
+ cleanup();
164
+ s.stop(chalk.bold.green('✔ Successfully paired with FrontTerrain One!'));
165
+ const u = authConfig.user;
166
+ const displayName = u?.name || 'Developer';
167
+ const displayEmail = u?.email || 'frontterrainowner@gmail.com';
168
+ const displayTier = (authConfig.currentTier || 'PRO').toUpperCase();
169
+ safeNote(`${chalk.bold('Welcome to Scout CLI, ' + displayName + '!')}\n\n` +
170
+ `Status: ${chalk.bold.green('Authenticated via FrontTerrain One Bridge')}\n` +
171
+ `Account: ${chalk.cyan(displayEmail)}\n` +
172
+ (u?.username ? `Username: ${chalk.white('@' + u.username)}\n` : '') +
173
+ `Tier: ${chalk.bold.white(displayTier)}\n` +
174
+ `Live Telemetry: ${chalk.dim('Connected & Streaming to FrontTerrain One Mission Control')}`, ' FrontTerrain Sovereign Auth ');
175
+ resolve(authConfig);
176
+ };
177
+ // Cloud Firestore Realtime Poller (handles mobile Wi-Fi, 5G, NAT, and Windows Firewall effortlessly)
178
+ cloudPollInterval = setInterval(async () => {
179
+ if (isResolved)
180
+ return;
181
+ try {
182
+ const controller = new AbortController();
183
+ const timeout = setTimeout(() => controller.abort(), 2500);
184
+ const url = `https://firestore.googleapis.com/v1/projects/${FIREBASE_PROJECT_ID}/databases/(default)/documents/scout_sessions/${encodeURIComponent(sessionId)}?key=${FIREBASE_API_KEY}`;
185
+ const res = await fetch(url, { signal: controller.signal });
186
+ clearTimeout(timeout);
187
+ if (res.ok) {
188
+ const data = await res.json();
189
+ const fields = data.fields;
190
+ if (fields && (fields.authorized?.booleanValue || fields.user || fields.pairedAt)) {
191
+ let userName = 'FrontTerrain Operator';
192
+ let userEmail = fields.email?.stringValue || fields.userEmail?.stringValue || 'frontterrainowner@gmail.com';
193
+ let username = 'scout_operator';
194
+ let userId = `usr_${Date.now().toString(36)}`;
195
+ let userTier = 'pro';
196
+ if (fields.user?.mapValue?.fields) {
197
+ const uf = fields.user.mapValue.fields;
198
+ if (uf.name?.stringValue)
199
+ userName = uf.name.stringValue;
200
+ if (uf.email?.stringValue)
201
+ userEmail = uf.email.stringValue;
202
+ if (uf.username?.stringValue)
203
+ username = uf.username.stringValue;
204
+ if (uf.id?.stringValue)
205
+ userId = uf.id.stringValue;
206
+ }
207
+ if (fields.tier?.stringValue)
208
+ userTier = fields.tier.stringValue;
209
+ const authConfig = {
210
+ token: fields.token?.stringValue || `ft_tok_${Date.now().toString(36)}`,
211
+ provider: 'frontterrain-one',
212
+ tenantId: fields.tenantId?.stringValue || 'ft-scout-auth-gc2v5',
213
+ user: {
214
+ id: userId,
215
+ email: userEmail,
216
+ name: userName,
217
+ username,
218
+ createdAt: new Date().toISOString(),
219
+ },
220
+ loggedInAt: new Date().toISOString(),
221
+ currentTier: userTier,
222
+ creditsTotal: userTier === 'pro' ? 999999 : 50,
223
+ creditsUsed: 0,
224
+ };
225
+ saveAuthConfig(authConfig);
226
+ handleSuccessAuth(authConfig);
227
+ }
228
+ }
229
+ }
230
+ catch { }
231
+ }, 1200);
97
232
  server = http.createServer(async (req, res) => {
98
233
  res.setHeader('Access-Control-Allow-Origin', '*');
99
234
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
@@ -118,7 +253,7 @@ export async function startQrPairingSession() {
118
253
  if ((reqUrl.startsWith('/pair') || reqUrl.startsWith('/auth/pair')) && req.method === 'POST') {
119
254
  let body = '';
120
255
  req.on('data', chunk => { body += chunk; });
121
- req.on('end', () => {
256
+ req.on('end', async () => {
122
257
  try {
123
258
  const payload = JSON.parse(body || '{}');
124
259
  const token = payload.token || `ft_tok_${Date.now().toString(36)}`;
@@ -140,14 +275,19 @@ export async function startQrPairingSession() {
140
275
  creditsUsed: 0,
141
276
  };
142
277
  saveAuthConfig(authConfig);
143
- writeTelemetry({
278
+ const initialTelemetry = {
279
+ sessionId,
280
+ pairingCode,
281
+ hostName,
144
282
  status: 'idle',
145
283
  currentProject: path.basename(process.cwd()),
146
284
  tokensConsumed: 0,
147
285
  filesModified: 0,
148
286
  commandsExecuted: 0,
149
- lastLogSnippet: 'scout: paired with FrontTerrain One mobile app',
150
- });
287
+ lastLogSnippet: `scout: paired with FrontTerrain One (${pairingCode})`,
288
+ };
289
+ writeTelemetry(initialTelemetry);
290
+ await pushTelemetryToCloud(sessionId, initialTelemetry);
151
291
  res.writeHead(200, { 'Content-Type': 'application/json' });
152
292
  res.end(JSON.stringify({
153
293
  success: true,
@@ -210,7 +350,7 @@ export async function startQrPairingSession() {
210
350
  s.stop(chalk.red('Failed to start QR bridge listener.'));
211
351
  reject(err);
212
352
  });
213
- server.listen(BRIDGE_PORT, () => { });
353
+ server.listen(BRIDGE_PORT, '0.0.0.0', () => { });
214
354
  });
215
355
  }
216
356
  //# sourceMappingURL=qrBridge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"qrBridge.js","sourceRoot":"","sources":["qrBridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qrBridge.js","sourceRoot":"","sources":["qrBridge.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,10 @@
1
1
  {
2
2
  "name": "ft-scout",
3
- "version": "9.4.1",
3
+ "version": "9.4.4",
4
4
  "type": "module",
5
5
  "description": "FrontTerrain — The Onboarding Co-Pilot for New Codebases",
6
6
  "main": "index.js",
7
7
  "bin": {
8
- "ft": "bin/ft.js",
9
8
  "scout": "bin/ft.js"
10
9
  },
11
10
  "scripts": {
@@ -35,11 +34,13 @@
35
34
  "dependencies": {
36
35
  "@clack/prompts": "^1.7.0",
37
36
  "@types/nodemailer": "^8.0.2",
37
+ "@types/qrcode": "^1.5.6",
38
38
  "chalk": "^6.0.0",
39
39
  "commander": "^13.1.0",
40
40
  "dotenv": "^17.4.2",
41
41
  "nodemailer": "^9.0.4",
42
42
  "openai": "^7.1.0",
43
+ "qrcode": "^1.5.4",
43
44
  "razorpay": "^2.9.8",
44
45
  "simple-git": "^3.36.0"
45
46
  },
@@ -48,4 +49,4 @@
48
49
  "tsx": "^4.23.1",
49
50
  "typescript": "^7.0.2"
50
51
  }
51
- }
52
+ }
@@ -0,0 +1,130 @@
1
+ import { getMCPManager } from '../bin/src/mcp/index.js';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+
5
+ async function main() {
6
+ const mgr = getMCPManager();
7
+
8
+ const pyCode = `
9
+ import bpy
10
+ import math
11
+
12
+ # 1. Clean up default objects except camera/light
13
+ for obj in list(bpy.data.objects):
14
+ if obj.type == 'MESH':
15
+ bpy.data.objects.remove(obj, do_unlink=True)
16
+
17
+ # Helper to create PBR material
18
+ def make_mat(name, base_color, metallic=0.0, roughness=0.5, emission=None, emission_strength=1.0):
19
+ mat = bpy.data.materials.new(name=name)
20
+ mat.use_nodes = True
21
+ nodes = mat.node_tree.nodes
22
+ bsdf = nodes.get('Principled BSDF')
23
+ if bsdf:
24
+ bsdf.inputs['Base Color'].default_value = base_color
25
+ bsdf.inputs['Metallic'].default_value = metallic
26
+ bsdf.inputs['Roughness'].default_value = roughness
27
+ if emission:
28
+ if 'Emission Color' in bsdf.inputs:
29
+ bsdf.inputs['Emission Color'].default_value = emission
30
+ bsdf.inputs['Emission Strength'].default_value = emission_strength
31
+ elif 'Emission' in bsdf.inputs:
32
+ bsdf.inputs['Emission'].default_value = emission
33
+ if 'Emission Strength' in bsdf.inputs:
34
+ bsdf.inputs['Emission Strength'].default_value = emission_strength
35
+ return mat
36
+
37
+ mat_hull = make_mat('Hull_Obsidian', (0.05, 0.06, 0.08, 1.0), metallic=0.92, roughness=0.22)
38
+ mat_gold = make_mat('Accent_Gold', (0.95, 0.72, 0.18, 1.0), metallic=0.98, roughness=0.18)
39
+ mat_cyan_glow = make_mat('Core_CyanGlow', (0.0, 0.9, 1.0, 1.0), emission=(0.0, 0.9, 1.0, 1.0), emission_strength=12.0)
40
+ mat_plasma = make_mat('Thruster_Plasma', (0.65, 0.1, 1.0, 1.0), emission=(0.65, 0.1, 1.0, 1.0), emission_strength=16.0)
41
+
42
+ # 2. Main Aerodynamic Chassis
43
+ bpy.ops.mesh.primitive_uv_sphere_add(segments=32, ring_count=24, radius=1.0, location=(0, 0, 0))
44
+ body = bpy.context.active_object
45
+ body.name = 'Scout_Chassis'
46
+ body.scale = (1.35, 1.65, 0.62)
47
+ bpy.ops.object.transform_apply(scale=True)
48
+ body.data.materials.append(mat_hull)
49
+
50
+ # 3. Cockpit Sensor Eye (Front Core)
51
+ bpy.ops.mesh.primitive_uv_sphere_add(segments=24, ring_count=16, radius=0.38, location=(0, 1.5, 0.08))
52
+ eye = bpy.context.active_object
53
+ eye.name = 'Scout_SensorEye'
54
+ eye.scale = (1.1, 0.5, 0.6)
55
+ bpy.ops.object.transform_apply(scale=True)
56
+ eye.data.materials.append(mat_cyan_glow)
57
+
58
+ # 4. Center Power Ring
59
+ bpy.ops.mesh.primitive_torus_add(major_radius=0.78, minor_radius=0.08, location=(0, 0, 0.35))
60
+ ring = bpy.context.active_object
61
+ ring.name = 'Scout_PowerRing'
62
+ ring.scale = (1.15, 1.3, 0.8)
63
+ bpy.ops.object.transform_apply(scale=True)
64
+ ring.data.materials.append(mat_gold)
65
+
66
+ # 5. Four Thruster Arms & Turbine Pods
67
+ angles = [45, 135, 225, 315]
68
+ for i, deg in enumerate(angles):
69
+ rad = math.radians(deg)
70
+ arm_x = math.cos(rad) * 1.6
71
+ arm_y = math.sin(rad) * 1.8
72
+
73
+ # Arm strut
74
+ bpy.ops.mesh.primitive_cube_add(size=0.18, location=(arm_x * 0.55, arm_y * 0.55, 0))
75
+ arm = bpy.context.active_object
76
+ arm.name = f'Scout_Arm_{i+1}'
77
+ arm.scale = (2.2, 0.5, 0.4)
78
+ arm.rotation_euler = (0, 0, rad)
79
+ arm.data.materials.append(mat_gold)
80
+
81
+ # Thruster outer nacelle
82
+ bpy.ops.mesh.primitive_cylinder_add(radius=0.45, depth=0.8, location=(arm_x, arm_y, 0))
83
+ thruster = bpy.context.active_object
84
+ thruster.name = f'Scout_Thruster_{i+1}'
85
+ thruster.rotation_euler = (math.radians(15) if arm_y > 0 else math.radians(-15), 0, 0)
86
+ thruster.data.materials.append(mat_hull)
87
+
88
+ # Inner plasma exhaust
89
+ bpy.ops.mesh.primitive_cylinder_add(radius=0.32, depth=0.15, location=(arm_x, arm_y, -0.35))
90
+ plasma = bpy.context.active_object
91
+ plasma.name = f'Scout_Plasma_{i+1}'
92
+ plasma.data.materials.append(mat_plasma)
93
+
94
+ # 6. Twin High-Gain Communication Antennas (Rear)
95
+ for side in [-0.4, 0.4]:
96
+ bpy.ops.mesh.primitive_cylinder_add(radius=0.025, depth=0.9, location=(side, -1.3, 0.5))
97
+ ant = bpy.context.active_object
98
+ ant.name = f'Scout_Antenna_{"L" if side < 0 else "R"}'
99
+ ant.rotation_euler = (math.radians(-25), math.radians(side * 15), 0)
100
+ ant.data.materials.append(mat_gold)
101
+
102
+ # Antenna LED tip
103
+ bpy.ops.mesh.primitive_uv_sphere_add(radius=0.06, location=(side * 1.25, -1.65, 0.9))
104
+ tip = bpy.context.active_object
105
+ tip.name = f'Scout_AntennaTip_{"L" if side < 0 else "R"}'
106
+ tip.data.materials.append(mat_cyan_glow)
107
+
108
+ # Smooth shading across all meshes
109
+ for obj in bpy.data.objects:
110
+ if obj.type == 'MESH':
111
+ for poly in obj.data.polygons:
112
+ poly.use_smooth = True
113
+
114
+ print('SCOUT_3D_DRONE_CREATED_SUCCESSFULLY')
115
+ `;
116
+
117
+ console.log('Sending 3D Model Python code to Blender MCP...');
118
+ const result = await mgr.executeTool('execute_blender_code', {
119
+ code: pyCode,
120
+ user_prompt: 'Generate a 3D Sci-Fi Autonomous Scout Drone model with PBR metallic hull and glowing cyan core'
121
+ });
122
+
123
+ console.log('Status:', result.status);
124
+ console.log('Output Summary:', result.outputSummary);
125
+ if (result.error) {
126
+ console.error('Error:', result.error);
127
+ }
128
+ }
129
+
130
+ main().catch(console.error);
@@ -0,0 +1,48 @@
1
+ import { getMCPManager } from '../bin/src/mcp/index.js';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+
5
+ async function main() {
6
+ const mgr = getMCPManager();
7
+
8
+ console.log('1. Querying updated Blender scene...');
9
+ const sceneInfo = await mgr.executeTool('get_scene_info', {});
10
+ console.log('Scene Info:', sceneInfo.result);
11
+
12
+ const artifactsDir = path.resolve('artifacts');
13
+ if (!fs.existsSync(artifactsDir)) {
14
+ fs.mkdirSync(artifactsDir, { recursive: true });
15
+ }
16
+
17
+ const glbPath = path.resolve('artifacts', 'scout_drone_3d.glb');
18
+ console.log('\n2. Exporting 3D Drone Scene to GLB at:', glbPath);
19
+ const exportRes = await mgr.executeTool('export_scene', {
20
+ filepath: glbPath,
21
+ format: 'glb',
22
+ apply_modifiers: true,
23
+ user_prompt: 'Export the complete Scout 3D Drone model to GLB format'
24
+ });
25
+ console.log('Export Result:', exportRes.outputSummary);
26
+
27
+ console.log('\n3. Capturing Viewport Screenshot from Blender...');
28
+ const shotRes = await mgr.executeTool('get_viewport_screenshot', {
29
+ user_prompt: 'Capture high-res viewport screenshot of Scout 3D Drone'
30
+ });
31
+ console.log('Screenshot Status:', shotRes.status);
32
+ if (shotRes.result) {
33
+ try {
34
+ const parsed = typeof shotRes.result === 'string' ? JSON.parse(shotRes.result) : shotRes.result;
35
+ if (parsed && parsed.image_base64) {
36
+ const imgPath = path.resolve('artifacts', 'scout_drone_3d_render.png');
37
+ fs.writeFileSync(imgPath, Buffer.from(parsed.image_base64, 'base64'));
38
+ console.log('Saved 3D render to:', imgPath);
39
+ }
40
+ } catch (e) {
41
+ console.log('Screenshot raw result snippet:', String(shotRes.result).slice(0, 200));
42
+ }
43
+ }
44
+
45
+ console.log('\nAll 3D modeling and export steps complete!');
46
+ }
47
+
48
+ main().catch(console.error);
@@ -0,0 +1,94 @@
1
+ import { getMCPManager } from '../bin/src/mcp/index.js';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+
5
+ async function main() {
6
+ const mgr = getMCPManager();
7
+
8
+ const artifactsDir = path.resolve('artifacts');
9
+ if (!fs.existsSync(artifactsDir)) {
10
+ fs.mkdirSync(artifactsDir, { recursive: true });
11
+ }
12
+
13
+ const glbPath = path.resolve(artifactsDir, 'scout_drone_3d.glb').replace(/\\/g, '/');
14
+ const renderPath = path.resolve(artifactsDir, 'scout_drone_3d_render.png').replace(/\\/g, '/');
15
+
16
+ const pyCode = `
17
+ import bpy
18
+ import math
19
+
20
+ # 1. Setup Camera for dramatic isometric perspective
21
+ cam = bpy.data.objects.get('Camera')
22
+ if not cam:
23
+ bpy.ops.object.camera_add(location=(4.5, -4.5, 3.2))
24
+ cam = bpy.context.active_object
25
+ else:
26
+ cam.location = (4.5, -4.5, 3.2)
27
+
28
+ # Point camera at drone center (0, 0, 0.2)
29
+ cam.rotation_euler = (math.radians(62), 0, math.radians(45))
30
+ bpy.context.scene.camera = cam
31
+
32
+ # 2. Studio Lighting Setup
33
+ # Key Light (Warm gold rim)
34
+ light_key = bpy.data.objects.get('Light')
35
+ if not light_key:
36
+ bpy.ops.object.light_add(type='POINT', location=(3.5, 2.5, 4.0))
37
+ light_key = bpy.context.active_object
38
+ light_key.location = (3.5, 2.5, 4.0)
39
+ light_key.data.energy = 800
40
+ light_key.data.color = (1.0, 0.85, 0.6)
41
+
42
+ # Fill Light (Cool cyan accent)
43
+ bpy.ops.object.light_add(type='POINT', location=(-3.5, -2.5, 2.5))
44
+ light_fill = bpy.context.active_object
45
+ light_fill.name = 'Light_Fill'
46
+ light_fill.data.energy = 500
47
+ light_fill.data.color = (0.2, 0.8, 1.0)
48
+
49
+ # Underglow Rim Light (Purple/Violet rim)
50
+ bpy.ops.object.light_add(type='POINT', location=(0, 0, -2.0))
51
+ light_under = bpy.context.active_object
52
+ light_under.name = 'Light_Underglow'
53
+ light_under.data.energy = 400
54
+ light_under.data.color = (0.7, 0.2, 1.0)
55
+
56
+ # 3. Export to GLB
57
+ bpy.ops.export_scene.gltf(
58
+ filepath='${glbPath}',
59
+ export_format='GLB',
60
+ use_selection=False,
61
+ export_apply=True
62
+ )
63
+ print('EXPORTED_GLB_TO: ${glbPath}')
64
+
65
+ # 4. Render Still Screenshot to PNG
66
+ bpy.context.scene.render.resolution_x = 1280
67
+ bpy.context.scene.render.resolution_y = 720
68
+ bpy.context.scene.render.image_settings.file_format = 'PNG'
69
+ bpy.context.scene.render.filepath = '${renderPath}'
70
+ bpy.ops.render.render(write_still=True)
71
+ print('RENDERED_PNG_TO: ${renderPath}')
72
+ `;
73
+
74
+ console.log('Running GLB Export and Camera Render in Blender via MCP...');
75
+ const result = await mgr.executeTool('execute_blender_code', {
76
+ code: pyCode,
77
+ user_prompt: 'Export 3D Scout Drone to GLB and render studio PNG image'
78
+ });
79
+
80
+ console.log('Result Status:', result.status);
81
+ console.log('Result Output:', result.outputSummary);
82
+
83
+ if (fs.existsSync(glbPath)) {
84
+ const stats = fs.statSync(glbPath);
85
+ console.log(`\n Verified GLB file: ${glbPath} (${stats.size} bytes)`);
86
+ }
87
+
88
+ if (fs.existsSync(renderPath)) {
89
+ const stats = fs.statSync(renderPath);
90
+ console.log(` Verified Render Image: ${renderPath} (${stats.size} bytes)`);
91
+ }
92
+ }
93
+
94
+ main().catch(console.error);