github TypeScript analyzed 567a2f4

diguike/book-ling-agent

github

自己动手写 AI Agent — 从 Claude Code 开源架构到你的第一个编程助手

maintainer
diguike
licence
MIT
first seen
2026-07-05
last seen
2026-08-04
releases · 30d
0
short id

Drift inferred · capture-to-capture

  1. HIGH code analysis flagged hidden prompt content in diguike/book-ling-agent
  2. HIGH code analysis flagged hidden prompt content in diguike/book-ling-agent
  3. HIGH code analysis flagged hidden prompt content in diguike/book-ling-agent
capabilities 2 tools
transport stdio counts 2 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • list_tables
  • query
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 567a2f4 · analyzer v33 · 2w ago

skills & prompt files 1

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

code files: 132

filesystem 35

  • fs diguike-book-ling-agent-567a2f4/code/ch01/ling.ts :2 import { readFileSync } from "fs";
  • fs diguike-book-ling-agent-567a2f4/code/ch02/src/ling.ts :1 import { readFileSync } from "fs";
  • fs diguike-book-ling-agent-567a2f4/code/ch02/src/providers/factory.ts :1 import { readFileSync, existsSync } from "fs";
  • fs (weak) diguike-book-ling-agent-567a2f4/code/ch03/src/tools/__tests__/tools.test.ts :3 import { writeFile, readFile, unlink, mkdtemp, rm } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch03/src/tools/edit-file.ts :1 import { readFile, writeFile } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch03/src/tools/list-files.ts :1 import { readdir, stat } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch03/src/tools/read-file.ts :1 import { readFile } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch03/src/tools/write-file.ts :1 import { writeFile, mkdir } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch04/src/context/ling-md.ts :3 import { readFileSync, existsSync } from "fs";
  • fs diguike-book-ling-agent-567a2f4/code/ch04/src/context/project-detector.ts :3 import { readFileSync, existsSync, readdirSync, statSync } from "fs";
  • fs diguike-book-ling-agent-567a2f4/code/ch04/src/ling.ts :5 import { readFileSync } from "fs";
  • fs diguike-book-ling-agent-567a2f4/code/ch05/src/permissions/config.ts :1 import { readFileSync, existsSync } from "fs";
show 23 more
  • fs diguike-book-ling-agent-567a2f4/code/ch05/src/tools/edit-file.ts :1 import { readFile, writeFile } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch05/src/tools/list-files.ts :1 import { readdir, stat } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch05/src/tools/read-file.ts :1 import { readFile } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch05/src/tools/write-file.ts :1 import { writeFile, mkdir } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch06/src/permissions/config.ts :1 import { readFileSync, existsSync } from "fs";
  • fs diguike-book-ling-agent-567a2f4/code/ch06/src/tools/edit-file.ts :1 import { readFile, writeFile } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch06/src/tools/list-files.ts :1 import { readdir, stat } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch06/src/tools/read-file.ts :1 import { readFile } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch06/src/tools/write-file.ts :1 import { writeFile, mkdir } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch07/src/session/memory.ts :4 import * as fs from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch07/src/session/store.ts :4 import * as fs from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch08/src/hooks/config.ts :3 import { readFile } from "node:fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch08/src/mcp/loader.ts :3 import { readFile } from "node:fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch09/src/ling.ts :36 return fs.readFile(params.file_path as string, "utf-8");
  • fs diguike-book-ling-agent-567a2f4/code/ch09/src/providers/factory.ts :1 import { readFileSync, existsSync } from "fs";
  • fs diguike-book-ling-agent-567a2f4/code/ch10/src/cli/schema-validator.ts :3 import { readFileSync } from "node:fs";
  • fs diguike-book-ling-agent-567a2f4/code/ch10/src/permissions/config.ts :1 import { readFileSync, existsSync } from "fs";
  • fs diguike-book-ling-agent-567a2f4/code/ch10/src/providers/factory.ts :1 import { readFileSync, existsSync } from "fs";
  • fs (weak) diguike-book-ling-agent-567a2f4/code/ch10/src/tools/__tests__/tools.test.ts :3 import { writeFile, readFile, unlink, mkdtemp, rm } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch10/src/tools/edit-file.ts :1 import { readFile, writeFile } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch10/src/tools/list-files.ts :1 import { readdir, stat } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch10/src/tools/read-file.ts :1 import { readFile } from "fs/promises";
  • fs diguike-book-ling-agent-567a2f4/code/ch10/src/tools/write-file.ts :1 import { writeFile, mkdir } from "fs/promises";

shell / exec 18

  • shell diguike-book-ling-agent-567a2f4/code/ch01/ling.ts :3 import { execSync } from "child_process";
  • shell diguike-book-ling-agent-567a2f4/code/ch02/src/ling.ts :2 import { execSync } from "child_process";
  • shell diguike-book-ling-agent-567a2f4/code/ch03/src/tools/bash.ts :1 import { exec } from "child_process";
  • shell diguike-book-ling-agent-567a2f4/code/ch03/src/tools/grep.ts :1 import { execFile } from "child_process";
  • shell diguike-book-ling-agent-567a2f4/code/ch04/src/context/project-detector.ts :4 import { execSync } from "child_process";
  • shell diguike-book-ling-agent-567a2f4/code/ch04/src/ling.ts :6 import { execSync } from "child_process";
  • shell diguike-book-ling-agent-567a2f4/code/ch05/src/tools/bash.ts :1 import { exec } from "child_process";
  • shell diguike-book-ling-agent-567a2f4/code/ch05/src/tools/grep.ts :1 import { execFile } from "child_process";
  • shell diguike-book-ling-agent-567a2f4/code/ch06/src/tools/bash.ts :1 import { exec } from "child_process";
  • shell diguike-book-ling-agent-567a2f4/code/ch06/src/tools/grep.ts :1 import { execFile } from "child_process";
  • shell diguike-book-ling-agent-567a2f4/code/ch07/src/ling.ts :6 import { execSync } from "child_process";
  • shell diguike-book-ling-agent-567a2f4/code/ch08/src/hooks/engine.ts :3 import { spawn } from "node:child_process";
show 6 more
  • shell diguike-book-ling-agent-567a2f4/code/ch08/src/mcp/client.ts :3 import { spawn, type ChildProcess } from "node:child_process";
  • shell diguike-book-ling-agent-567a2f4/code/ch09/src/agents/spawner.ts :18 async spawn(config: SubAgentConfig, task: string): Promise<SubAgentResult> {
  • shell diguike-book-ling-agent-567a2f4/code/ch09/src/agents/worktree.ts :2 import { execSync } from "node:child_process";
  • shell diguike-book-ling-agent-567a2f4/code/ch09/src/ling.ts :77 const { execSync } = await import("node:child_process");
  • shell diguike-book-ling-agent-567a2f4/code/ch10/src/tools/bash.ts :1 import { exec } from "child_process";
  • shell diguike-book-ling-agent-567a2f4/code/ch10/src/tools/grep.ts :1 import { execFile } from "child_process";

network 3

  • net diguike-book-ling-agent-567a2f4/code/ch05/src/providers/claude.ts :84 const res = await fetch("https://api.anthropic.com/v1/messages", {
  • net diguike-book-ling-agent-567a2f4/code/ch06/src/providers/claude.ts :92 const res = await fetch("https://api.anthropic.com/v1/messages", {
  • net diguike-book-ling-agent-567a2f4/code/ch08/src/hooks/engine.ts :167 const resp = await fetch(handler.url, {

secrets 13

  • secrets diguike-book-ling-agent-567a2f4/code/ch01/ling.ts :10 apiKey: process.env.LLM_API_KEY,
  • secrets diguike-book-ling-agent-567a2f4/code/ch02/src/providers/factory.ts :36 || process.env.LING_API_KEY
  • secrets diguike-book-ling-agent-567a2f4/code/ch03/src/ling.ts :6 apiKey: process.env.OPENAI_API_KEY,
  • secrets diguike-book-ling-agent-567a2f4/code/ch04/src/ling.ts :14 apiKey: process.env.LLM_API_KEY,
  • secrets diguike-book-ling-agent-567a2f4/code/ch05/src/providers/claude.ts :67 this.apiKey = opts.apiKey ?? process.env.ANTHROPIC_API_KEY ?? "";
  • secrets diguike-book-ling-agent-567a2f4/code/ch05/src/providers/openai.ts :22 apiKey: opts.apiKey ?? process.env.OPENAI_API_KEY,
  • secrets diguike-book-ling-agent-567a2f4/code/ch05/src/providers/volcano.ts :9 apiKey: process.env.VOLCANO_API_KEY,
  • secrets diguike-book-ling-agent-567a2f4/code/ch06/src/providers/claude.ts :74 this.apiKey = opts.apiKey ?? process.env.ANTHROPIC_API_KEY ?? "";
  • secrets diguike-book-ling-agent-567a2f4/code/ch06/src/providers/openai.ts :26 apiKey: opts.apiKey ?? process.env.OPENAI_API_KEY,
  • secrets diguike-book-ling-agent-567a2f4/code/ch06/src/providers/volcano.ts :9 apiKey: process.env.VOLCANO_API_KEY,
  • secrets diguike-book-ling-agent-567a2f4/code/ch07/src/ling.ts :11 apiKey: process.env.OPENAI_API_KEY,
  • secrets diguike-book-ling-agent-567a2f4/code/ch09/src/providers/factory.ts :36 || process.env.LING_API_KEY
show 1 more
  • secrets diguike-book-ling-agent-567a2f4/code/ch10/src/providers/factory.ts :36 || process.env.LING_API_KEY

database 1

  • db diguike-book-ling-agent-567a2f4/code/ch08/src/mcp-servers/sqlite-server.ts :5 import Database from "better-sqlite3";

tool registrations 2

  • list_tables diguike-book-ling-agent-567a2f4/code/ch08/src/mcp-servers/sqlite-server.ts :15
  • query diguike-book-ling-agent-567a2f4/code/ch08/src/mcp-servers/sqlite-server.ts :23

install hooks 1

  • prepublishOnly diguike-book-ling-agent-567a2f4/code/ch10/package.json :16 npm run build

declared dependencies 3

  • openai@^4.80.0
  • tsx@^4.19.0
  • typescript@^5.7.0