github TypeScript analyzed c4f8b83

kanetran29/uigraph

github

Your app generates its own verified UI transition graph — screens as nodes, guarded (event, effect) edges. Proof-gated verification, trust tiers, model-free MCP for AI agents.

maintainer
kanetran29
license
MIT
first seen
2026-07-13
last seen
2026-07-20
releases · 30d
0
short id

Drift inferred · capture-to-capture

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

capabilities 26 tools
transport stdio · http counts 26 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • describe_screen
  • diff
  • diff_since_last
  • gen_spec
  • get_coverage
  • get_freshness
  • get_frontier
  • get_graph
  • get_grounding
  • get_loop_status
  • get_proposal_graph
  • get_proposals
  • get_state
  • list_cases
  • list_scenarios
  • mark_unverifiable
  • next_to_verify
  • park_edge
  • plan_path
  • propose
  • reconcile_proposals
  • report_observation
  • set_scenario
  • unpark_edge
  • update_graph
  • withdraw_proposal
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit c4f8b83 · analyzer v33 · 3d ago

skills & prompt files 2

danger signals1

code evidence vv0.1.0 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 262

filesystem 24

  • fs kanetran29-uigraph-c4f8b83/packages/adapter-angular/src/index.ts :6 import { existsSync, readFileSync, readdirSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/adapter-next/src/index.ts :12 import { existsSync, readFileSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/adapter-next/src/layout-nav.ts :13 import { existsSync, readFileSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/adapter-react/src/index.ts :5 import { readFileSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/adapter-react/src/resolve.ts :9 import { readFileSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/adapter-vue/src/extract.ts :16 import { readFileSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/adapter-vue/src/index.ts :6 import { existsSync, readFileSync, readdirSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/adapter-vue/src/project.ts :4 import { readdirSync } from 'node:fs'
  • fs (weak) kanetran29-uigraph-c4f8b83/packages/cli/src/cli.test.ts :7 import { existsSync, mkdtempSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/cli/src/cli.ts :9 import { existsSync, realpathSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/cli/src/commands.ts :6 import { readFileSync, writeFileSync, mkdirSync, existsSync, statSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/cli/src/server.ts :7 import { existsSync, readFileSync, statSync } from 'node:fs'
  • fs (weak) kanetran29-uigraph-c4f8b83/packages/core/src/fingerprint.test.ts :2 import { mkdtempSync, mkdirSync, writeFileSync, rmSync, symlinkSync } from 'node:fs'
  • fs (weak) kanetran29-uigraph-c4f8b83/packages/core/src/node.test.ts :2 import { mkdtempSync, rmSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/core/src/node.ts :5 import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'
  • fs (weak) kanetran29-uigraph-c4f8b83/packages/core/src/registry.test.ts :2 import { mkdtempSync, rmSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/core/src/registry.ts :8 import { existsSync, mkdirSync, readFileSync, realpathSync, renameSync, writeFileSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/core/src/store.ts :11 import { mkdirSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/core/tsup.config.ts :7 import { existsSync, readFileSync, writeFileSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/mcp/src/kit.ts :7 import { existsSync, readFileSync } from 'node:fs'
  • fs (weak) kanetran29-uigraph-c4f8b83/packages/mcp/src/tools.test.ts :6 import { mkdtempSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/mcp/src/tools/diff.ts :6 import { existsSync } from 'node:fs'
  • fs kanetran29-uigraph-c4f8b83/packages/mcp/src/tools/loop.ts :7 import { existsSync } from 'node:fs'
  • fs (weak) kanetran29-uigraph-c4f8b83/scripts/gauntlet.ts :7 import { readFileSync } from 'node:fs'

shell / exec 2

  • shell kanetran29-uigraph-c4f8b83/packages/cli/src/cli.ts :8 import { spawn } from 'node:child_process'
  • shell (weak) kanetran29-uigraph-c4f8b83/scripts/check.mjs :6 import { spawnSync } from 'node:child_process'

network 7

  • net kanetran29-uigraph-c4f8b83/apps/dashboard/src/api.ts :30 const res = await fetch('/api/workspaces')
  • net (weak) kanetran29-uigraph-c4f8b83/examples/sample-form-app/src/api.ts :12 const res = await fetch('/api/signup', {
  • net (weak) kanetran29-uigraph-c4f8b83/examples/sample-gauntlet-react/src/pages/ProductDetail.tsx :21 await fetch('/api/checkout', { method: 'POST' })
  • net (weak) kanetran29-uigraph-c4f8b83/examples/sample-react-app/src/pages/Checkout.tsx :29 await fetch('/api/orders', { method: 'POST', body: JSON.stringify({ email, notes }) })
  • net (weak) kanetran29-uigraph-c4f8b83/packages/adapter-react/src/extract.test.ts :316 '/C.tsx': `import { useState } from 'react'\nimport { useNavigate } from 'react-router-dom'\nfunction Dialog(p){ return p.open ? <div>x</div> : null }\nexport default function C(){ const navigate = us
  • net (weak) kanetran29-uigraph-c4f8b83/packages/cli/src/cli.test.ts :14 import type { Server } from 'node:http'
  • net kanetran29-uigraph-c4f8b83/packages/cli/src/server.ts :6 import { createServer as createHttpServer, type IncomingMessage, type Server, type ServerResponse } from 'node:http'

tool registrations 26

  • get_graph kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :70
  • get_proposals kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :75
  • get_grounding kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :90
  • get_proposal_graph kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :101
  • describe_screen kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :106
  • get_coverage kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :115
  • next_to_verify kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :120
  • gen_spec kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :131
  • list_scenarios kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :144
  • set_scenario kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :149
  • get_state kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :158
  • list_cases kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :167
  • get_frontier kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :179
  • plan_path kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :187
  • update_graph kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :201
  • report_observation kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :212
  • propose kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :245
  • diff kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :279
  • diff_since_last kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :291
  • get_loop_status kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :296
  • get_freshness kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :301
  • reconcile_proposals kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :306
  • withdraw_proposal kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :311
  • mark_unverifiable kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :323
  • park_edge kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :335
  • unpark_edge kanetran29-uigraph-c4f8b83/packages/mcp/src/server.ts :347

declared dependencies 8

  • @types/node@catalog:
  • eslint@^10.5.0
  • playwright-core@^1.60.0
  • tsup@catalog:
  • tsx@catalog:
  • typescript@catalog:
  • typescript-eslint@^8.61.0
  • vitest@catalog:

perm:untrusted 1

  • untrusted (weak) kanetran29-uigraph-c4f8b83/packages/cli/src/cli.test.ts :623 const ga = (await (await fetch(`${base}/api/graph?ws=a`)).json()) as UiGraph