Create and share 3D architectural projects.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
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
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
- skill pascalorg-editor-19327a9/.agents/skills/open-pr/SKILL.md
- skill pascalorg-editor-19327a9/.agents/skills/open-pr2/SKILL.md
- skill pascalorg-editor-19327a9/.agents/skills/review-architecture/SKILL.md
- agent-rules pascalorg-editor-19327a9/AGENTS.md
- agent-rules pascalorg-editor-19327a9/apps/editor/AGENTS.md
- agent-rules pascalorg-editor-19327a9/apps/editor/CLAUDE.md
- agent-rules pascalorg-editor-19327a9/apps/ifc-converter/AGENTS.md
- agent-rules pascalorg-editor-19327a9/apps/ifc-converter/CLAUDE.md
danger signals3
- suspicious endpoint 169.254.169.254 (cloud metadata) pascalorg-editor-19327a9/apps/editor/lib/graph-schema.test.ts :99
'http://169.254.169.254/latest/meta-data', - suspicious endpoint 169.254.169.254 (cloud metadata) pascalorg-editor-19327a9/packages/core/src/schema/asset-url.test.ts :42
['http://169.254.169.254/latest/meta-data/', 'http on link-local (cloud metadata)'], - suspicious endpoint 169.254.169.254 (cloud metadata) pascalorg-editor-19327a9/packages/mcp/src/lib/safe-fetch.test.ts :29
const url = 'http://169.254.169.254/latest/meta-data/'
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(