{
  "name": "loopgraph",
  "version": "0.9.0",
  "description": "受本体论启发的行为建模引擎：把「系统应该怎么运转」写成机器可校验的模型并绑定到真实代码，每次 PR 零 LLM 对账，防止实现与认知漂移。",
  "type": "module",
  "license": "MIT",
  "bin": {
    "loopgraph": "dist/cli/index.js"
  },
  "//files": "Ship the dist engine only; seeds/examples/research/docs are excluded so the published package carries no target-repo internals. .tsbuildinfo lives inside dist (see tsconfig.build.json) and is build state, not shipped code.",
  "files": [
    "dist",
    "!dist/**/*.map",
    "!dist/.tsbuildinfo"
  ],
  "engines": {
    "node": ">=22.0.0"
  },
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.29.0",
    "typescript": "5.9.3",
    "yaml": "^2.6.1",
    "zod": "^3.24.1"
  },
  "devDependencies": {
    "@biomejs/biome": "^1.9.4",
    "@changesets/cli": "^2.31.1",
    "@mermaid-js/mermaid-cli": "^11.16.0",
    "@types/node": "^22.10.5",
    "puppeteer": "^25.3.0",
    "tsx": "^4.19.2",
    "vitest": "^2.1.8"
  },
  "scripts": {
    "build": "tsc -p tsconfig.build.json",
    "build:clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.build.json",
    "verify:dist": "node scripts/verify-dist.mjs",
    "//prepublishOnly": "npm publish packs whatever dist/ holds and runs no build of its own. Kept even though `release` does the same work first: this fires on any publish path, including one that never goes through `release`.",
    "//release": "Repeats build+verify rather than leaning on prepublishOnly alone — a lifecycle hook is skippable (--ignore-scripts, a publisher that bypasses it), and the thing it guards is unpublishable once wrong.",
    "release": "pnpm run build:clean && pnpm run verify:dist && changeset publish",
    "//release:version": "changeset rewrites package.json with its own formatter, which disagrees with biome's — so the version bump lands lint-dirty and CI fails on the release PR it just opened. Formatting lives here rather than only in the workflow because a local `changeset version` produces the same broken commit. The trailing `lint` is the actual guarantee: it covers whatever else changesets touched, not just the file we thought to format.",
    "release:version": "changeset version && biome check --write package.json && pnpm run lint",
    "test": "vitest run",
    "test:watch": "vitest",
    "typecheck": "tsc --noEmit -p tsconfig.json",
    "lint": "biome check .",
    "lint:fix": "biome check --write ."
  }
}