github TypeScript re-analysis due

pascalorg/editor

github

Create and share 3D architectural projects.

maintainer
pascalorg
license
MIT
first seen
2026-08-04
last seen
2026-09-04
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 46 tools
transport stdio · streamable-http · http counts 46 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • add_door
  • add_window
  • analyze_floorplan_image
  • analyze_room_photo
  • apply_patch
  • check_collisions
  • create_from_template
  • create_house_from_brief
  • create_level
  • create_project
  • create_roof
  • create_room
  • create_stair_between_levels
  • create_story_shell
  • create_wall
  • cut_opening
  • delete_node
  • delete_scene
  • describe_node
  • duplicate_level
  • export_glb
  • export_json
  • find_nodes
  • furnish_room
  • generate_variants
  • get_level_summary
  • get_node
  • get_project_status
  • get_scene
  • get_walls
  • get_zones
  • list_levels
  • list_scenes
  • list_templates
  • load_scene
  • measure
  • photo_to_scene
  • place_item
  • redo
  • rename_scene
  • save_scene
  • search_assets
  • set_zone
  • undo
  • validate_scene
  • verify_scene
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 19327a9 · analyzer v33 · 1d ago

skills & prompt files 8

danger signals3

code evidence vv1.0.0-beta.1 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 2081

filesystem 22

  • fs (weak) pascalorg-editor-19327a9/apps/editor/lib/api-put-empty-guard.test.ts :2 import { mkdtempSync, rmSync } from 'node:fs'
  • fs (weak) pascalorg-editor-19327a9/apps/ifc-converter/scripts/copy-web-ifc-wasm.mjs :11 import { copyFileSync, existsSync, mkdirSync, statSync } from 'node:fs'
  • fs (weak) pascalorg-editor-19327a9/packages/cli/scripts/smoke-packed-runtime.ts :2 import { mkdtemp, rm } from 'node:fs/promises'
  • fs (weak) pascalorg-editor-19327a9/packages/cli/scripts/stage-runtime.ts :2 import { chmod, cp, mkdir, readdir, readFile, realpath, rm, writeFile } from 'node:fs/promises'
  • fs (weak) pascalorg-editor-19327a9/packages/cli/src/cli.test.ts :2 import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'
  • fs (weak) pascalorg-editor-19327a9/packages/cli/src/diagnostics.test.ts :2 import { mkdir, mkdtemp, rm, stat, writeFile } from 'node:fs/promises'
  • fs pascalorg-editor-19327a9/packages/cli/src/diagnostics.ts :1 import { constants } from 'node:fs'
  • fs pascalorg-editor-19327a9/packages/cli/src/editor-process.ts :3 import { closeSync, openSync } from 'node:fs'
  • fs pascalorg-editor-19327a9/packages/cli/src/file-lock.ts :2 import { mkdir, open, readFile, rm, stat } from 'node:fs/promises'
  • fs pascalorg-editor-19327a9/packages/cli/src/json-files.ts :1 import { mkdir, readFile, rename, writeFile } from 'node:fs/promises'
  • fs pascalorg-editor-19327a9/packages/cli/src/mcp-connector.ts :1 import { readFile } from 'node:fs/promises'
  • fs (weak) pascalorg-editor-19327a9/packages/cli/src/runtime.test.ts :2 import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'
  • fs pascalorg-editor-19327a9/packages/cli/src/runtime.ts :1 import { cp, mkdir, readdir, rename, rm, stat } from 'node:fs/promises'
  • fs pascalorg-editor-19327a9/packages/cli/src/version.ts :1 import { readFileSync } from 'node:fs'
  • fs (weak) pascalorg-editor-19327a9/packages/core/src/architecture.test.ts :2 import { readdirSync, readFileSync } from 'node:fs'
  • fs (weak) pascalorg-editor-19327a9/packages/editor/scripts/generate-print-golden-house.ts :1 import { mkdir, writeFile } from 'node:fs/promises'
  • fs (weak) pascalorg-editor-19327a9/packages/mcp/scripts/smoke.ts :11 import { existsSync } from 'node:fs'
  • fs pascalorg-editor-19327a9/packages/mcp/src/bin/pascal-mcp.ts :5 import { readFileSync } from 'node:fs'
  • fs (weak) pascalorg-editor-19327a9/packages/mcp/src/operations/scene-operations.test.ts :2 import * as fs from 'node:fs/promises'
  • fs (weak) pascalorg-editor-19327a9/packages/mcp/src/storage/sqlite-scene-store.test.ts :3 import * as fs from 'node:fs/promises'
  • fs pascalorg-editor-19327a9/packages/mcp/src/storage/sqlite-scene-store.ts :2 import { mkdirSync } from 'node:fs'
  • fs pascalorg-editor-19327a9/packages/mcp/src/version.ts :1 import { readFileSync } from 'node:fs'

shell / exec 10

  • shell (weak) pascalorg-editor-19327a9/packages/cli/scripts/smoke-packed-runtime.ts :1 import { spawn } from 'node:child_process'
  • shell (weak) pascalorg-editor-19327a9/packages/cli/scripts/stage-runtime.ts :1 import { spawn } from 'node:child_process'
  • shell pascalorg-editor-19327a9/packages/cli/src/bin/pascal.ts :2 import { spawn } from 'node:child_process'
  • shell pascalorg-editor-19327a9/packages/cli/src/browser.ts :1 import { spawn } from 'node:child_process'
  • shell (weak) pascalorg-editor-19327a9/packages/cli/src/cli.test.ts :87 const child = Bun.spawn([process.execPath, executable, ...args], {
  • shell pascalorg-editor-19327a9/packages/cli/src/command-install.ts :1 import { spawn } from 'node:child_process'
  • shell pascalorg-editor-19327a9/packages/cli/src/editor-process.ts :1 import { type ChildProcess, execFile, spawn } from 'node:child_process'
  • shell (weak) pascalorg-editor-19327a9/packages/core/src/schema/__bench__/node-parsers.bench.ts :332 const proc = Bun.spawnSync(['bun', 'run', import.meta.path, ...args])
  • shell (weak) pascalorg-editor-19327a9/packages/core/src/schema/compiled-node-parsers.test.ts :290 const proc = Bun.spawnSync(['bun', '-e', source], { cwd: dir })
  • shell pascalorg-editor-19327a9/packages/mcp/src/storage/sqlite-driver.ts :15 exec(sql: string): void

network 16

  • net pascalorg-editor-19327a9/apps/editor/app/scene/[id]/page.tsx :27 const response = await fetch(`${base}/api/scenes/${encodeURIComponent(id)}`, {
  • net pascalorg-editor-19327a9/apps/editor/app/scenes/page.tsx :23 const response = await fetch(`${base}/api/scenes?limit=50`, {
  • net pascalorg-editor-19327a9/apps/editor/components/save-button.tsx :31 const response = await fetch('/api/scenes', {
  • net pascalorg-editor-19327a9/apps/editor/components/scene-loader.tsx :153 const response = await fetch(`/api/scenes/${meta.id}`, {
  • net pascalorg-editor-19327a9/apps/ifc-converter/components/IfcConverter.tsx :169 const response = await fetch(url)
  • net pascalorg-editor-19327a9/packages/capture-viewer/src/capture-runtime.tsx :353 void fetch(rewriteLoopbackAssetUrl(url), { signal: abort.signal })
  • net (weak) pascalorg-editor-19327a9/packages/cli/scripts/smoke-packed-runtime.ts :3 import http from 'node:http'
  • net pascalorg-editor-19327a9/packages/cli/src/editor-process.ts :5 import net from 'node:net'
  • net pascalorg-editor-19327a9/packages/cli/src/projects.ts :13 const response = await fetch(`http://127.0.0.1:${state.port}/api/scenes?limit=500`, {
  • net (weak) pascalorg-editor-19327a9/packages/cli/src/runtime.test.ts :3 import http from 'node:http'
  • net pascalorg-editor-19327a9/packages/editor/src/lib/floorplan/floorplan-pdfkit-renderer.ts :626 const response = await fetch(url)
  • net pascalorg-editor-19327a9/packages/mcp/src/lib/safe-fetch.ts :1 import { isIPv4, isIPv6 } from 'node:net'
  • net pascalorg-editor-19327a9/packages/mcp/src/tools/photo-to-scene/photo-to-scene.ts :113 // SSRF-safe fetch (see packages/mcp/src/lib/safe-fetch.ts).
  • net pascalorg-editor-19327a9/packages/mcp/src/tools/vision/analyze-room-photo.ts :61 // SSRF-safe fetch (see packages/mcp/src/lib/safe-fetch.ts).
  • net (weak) pascalorg-editor-19327a9/packages/mcp/src/transports/http.test.ts :53 await fetch(`http://127.0.0.1:${port}/mcp`, {
  • net pascalorg-editor-19327a9/packages/mcp/src/transports/http.ts :2 import { createServer, type IncomingMessage, type ServerResponse } from 'node:http'

secrets 5

  • secrets (weak) pascalorg-editor-19327a9/apps/editor/lib/api-put-empty-guard.test.ts :38 PASCAL_SCENE_API_TOKEN: process.env.PASCAL_SCENE_API_TOKEN,
  • secrets (weak) pascalorg-editor-19327a9/apps/editor/lib/scene-api-security.test.ts :18 delete process.env.PASCAL_SCENE_API_TOKEN
  • secrets pascalorg-editor-19327a9/apps/editor/lib/scene-api-security.ts :66 const token = process.env.PASCAL_SCENE_API_TOKEN
  • secrets (weak) pascalorg-editor-19327a9/packages/cli/src/runtime.test.ts :352 const token = process.env.PASCAL_MCP_HTTP_TOKEN
  • secrets pascalorg-editor-19327a9/packages/mcp/src/transports/http.ts :56 const authToken = options.authToken ?? process.env.PASCAL_MCP_HTTP_TOKEN

tool registrations 46

  • apply_patch pascalorg-editor-19327a9/packages/mcp/src/tools/apply-patch.ts :22
  • check_collisions pascalorg-editor-19327a9/packages/mcp/src/tools/check-collisions.ts :23
  • create_story_shell pascalorg-editor-19327a9/packages/mcp/src/tools/construction-tools.ts :254
  • create_roof pascalorg-editor-19327a9/packages/mcp/src/tools/construction-tools.ts :350
  • create_stair_between_levels pascalorg-editor-19327a9/packages/mcp/src/tools/construction-tools.ts :455
  • create_level pascalorg-editor-19327a9/packages/mcp/src/tools/create-level.ts :31
  • create_wall pascalorg-editor-19327a9/packages/mcp/src/tools/create-wall.ts :28
  • cut_opening pascalorg-editor-19327a9/packages/mcp/src/tools/cut-opening.ts :26
  • delete_node pascalorg-editor-19327a9/packages/mcp/src/tools/delete-node.ts :20
  • describe_node pascalorg-editor-19327a9/packages/mcp/src/tools/describe-node.ts :65
  • duplicate_level pascalorg-editor-19327a9/packages/mcp/src/tools/duplicate-level.ts :22
  • export_glb pascalorg-editor-19327a9/packages/mcp/src/tools/export-glb.ts :13
  • export_json pascalorg-editor-19327a9/packages/mcp/src/tools/export-json.ts :14
  • find_nodes pascalorg-editor-19327a9/packages/mcp/src/tools/find-nodes.ts :72
  • get_node pascalorg-editor-19327a9/packages/mcp/src/tools/get-node.ts :17
  • get_scene pascalorg-editor-19327a9/packages/mcp/src/tools/get-scene.ts :14
  • measure pascalorg-editor-19327a9/packages/mcp/src/tools/measure.ts :88
  • photo_to_scene pascalorg-editor-19327a9/packages/mcp/src/tools/photo-to-scene/photo-to-scene.ts :353
  • place_item pascalorg-editor-19327a9/packages/mcp/src/tools/place-item.ts :27
  • redo pascalorg-editor-19327a9/packages/mcp/src/tools/redo.ts :16
  • search_assets pascalorg-editor-19327a9/packages/mcp/src/tools/room-tools.ts :407
  • create_room pascalorg-editor-19327a9/packages/mcp/src/tools/room-tools.ts :431
  • add_door pascalorg-editor-19327a9/packages/mcp/src/tools/room-tools.ts :487
  • add_window pascalorg-editor-19327a9/packages/mcp/src/tools/room-tools.ts :533
  • furnish_room pascalorg-editor-19327a9/packages/mcp/src/tools/room-tools.ts :578
  • create_project pascalorg-editor-19327a9/packages/mcp/src/tools/scene-lifecycle/create-project.ts :38
  • delete_scene pascalorg-editor-19327a9/packages/mcp/src/tools/scene-lifecycle/delete-scene.ts :17
  • get_project_status pascalorg-editor-19327a9/packages/mcp/src/tools/scene-lifecycle/get-project-status.ts :36
  • list_scenes pascalorg-editor-19327a9/packages/mcp/src/tools/scene-lifecycle/list-scenes.ts :35
  • load_scene pascalorg-editor-19327a9/packages/mcp/src/tools/scene-lifecycle/load-scene.ts :33
  • rename_scene pascalorg-editor-19327a9/packages/mcp/src/tools/scene-lifecycle/rename-scene.ts :27
  • save_scene pascalorg-editor-19327a9/packages/mcp/src/tools/scene-lifecycle/save-scene.ts :61
  • list_levels pascalorg-editor-19327a9/packages/mcp/src/tools/scene-query.ts :498
  • get_level_summary pascalorg-editor-19327a9/packages/mcp/src/tools/scene-query.ts :541
  • get_walls pascalorg-editor-19327a9/packages/mcp/src/tools/scene-query.ts :559
  • get_zones pascalorg-editor-19327a9/packages/mcp/src/tools/scene-query.ts :580
  • verify_scene pascalorg-editor-19327a9/packages/mcp/src/tools/scene-query.ts :601
  • set_zone pascalorg-editor-19327a9/packages/mcp/src/tools/set-zone.ts :23
  • create_from_template pascalorg-editor-19327a9/packages/mcp/src/tools/templates/create-from-template.ts :74
  • create_house_from_brief pascalorg-editor-19327a9/packages/mcp/src/tools/templates/create-house-from-brief.ts :78
  • list_templates pascalorg-editor-19327a9/packages/mcp/src/tools/templates/list-templates.ts :24
  • undo pascalorg-editor-19327a9/packages/mcp/src/tools/undo.ts :16
  • validate_scene pascalorg-editor-19327a9/packages/mcp/src/tools/validate-scene.ts :19
  • generate_variants pascalorg-editor-19327a9/packages/mcp/src/tools/variants/generate-variants.ts :59
  • analyze_floorplan_image pascalorg-editor-19327a9/packages/mcp/src/tools/vision/analyze-floorplan-image.ts :122
  • analyze_room_photo pascalorg-editor-19327a9/packages/mcp/src/tools/vision/analyze-room-photo.ts :103

install hooks 9

  • postinstall pascalorg-editor-19327a9/apps/ifc-converter/package.json :9 node scripts/copy-web-ifc-wasm.mjs
  • prepublishOnly pascalorg-editor-19327a9/packages/capture-protocol/package.json :25 npm run build
  • prepublishOnly pascalorg-editor-19327a9/packages/capture-viewer/package.json :23 npm run build
  • prepublishOnly pascalorg-editor-19327a9/packages/cli/package.json :30 bun run check-types && bun run build && bun run test && bun run build-runtime && bun run stage-runtime && bun run smoke-runtime
  • prepublishOnly pascalorg-editor-19327a9/packages/core/package.json :70 npm run build
  • prepublishOnly pascalorg-editor-19327a9/packages/ifc-converter/package.json :23 npm run build
  • prepublishOnly pascalorg-editor-19327a9/packages/mcp/package.json :55 bun run build && bun test
  • prepublishOnly pascalorg-editor-19327a9/packages/nodes/package.json :23 bun run build && bun test
  • prepublishOnly pascalorg-editor-19327a9/packages/viewer/package.json :23 npm run build

declared dependencies 14

  • @biomejs/biome@^2.4.16
  • @typescript/native-preview@7.0.0-dev.20260624.1
  • dotenv-cli@^11.0.0
  • turbo@^2.9.17
  • typescript@6.0.3
  • ultracite@^7.8.2
  • @tailwindcss/oxide-darwin-arm64@4.3.0
  • @tailwindcss/oxide-darwin-x64@4.3.0
  • @tailwindcss/oxide-linux-arm64-gnu@4.3.0
  • @tailwindcss/oxide-linux-x64-gnu@4.3.0
  • lightningcss-darwin-arm64@1.32.0
  • lightningcss-darwin-x64@1.32.0
  • lightningcss-linux-arm64-gnu@1.32.0
  • lightningcss-linux-x64-gnu@1.32.0

clipboard 1

  • navigator.clipboard pascalorg-editor-19327a9/packages/editor/src/lib/scene-clipboard.ts :401 if (typeof navigator === 'undefined' || !navigator.clipboard?.writeText) {

obfuscation 2

  • dynamic require()/import() pascalorg-editor-19327a9/packages/core/src/schema/compiled-node-parsers.test.ts :258 const parsers = await import(${JSON.stringify(`${dir}/compiled-node-parsers.ts`)})
  • dynamic require()/import() pascalorg-editor-19327a9/packages/editor/src/lib/structured-clone-fallback.test.ts :11 await import(`./structured-clone-fallback?${Math.random()}`)

transport_posture 2

  • network-listening, binds all interfaces, no auth detected pascalorg-editor-19327a9/packages/cli/scripts/smoke-packed-runtime.ts :149 server.listen({ host: '::', port: 3000, ipv6Only: false }, resolve)
  • binds all interfaces (0.0.0.0) pascalorg-editor-19327a9/packages/mcp/src/transports/http.test.ts :67 await expect(connectHttp(() => server, 0, { host: '0.0.0.0' })).rejects.toThrow(