소스 정보
- 저장소
- sunflowermm/XRK-AGT
- 최근 소스 활동
- 2026년 8월 6일 17:43
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 146
- 포크
- 20
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/sunflowermm/XRK-AGT --skill xrk-crawl명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
编写或审查 core/*/www 静态页、校园 WebView 兼容、HttpResponse 前端解包时使用。Core www 走浏览器兼容层(xrk-www-compat)。含零配置静态与有 sign.json(纯静态/产物/反代,sign↔server 合并)挂载。
编写或审查 core/src 代码时,确保使用 Node 26 稳定 API,禁止旧写法(fetch/exec/错误/二进制)。AI 改 Core 前必读。
在 GitHub 搜索成熟开源实现、对比方案、读 issue/PR 时使用。架构选型、unfamiliar 领域、找业界最佳实践时主动调用。
SOC 직업 분류 기준
SKILL.md 표시 중
| name | xrk-crawl |
| description | 当你需要开发/排查 HTTP 抓取、SSRF、Playwright 受控浏览器、本地字体增强截图,或判断 web_fetch 与 browser 工作流如何选型时使用。 |
src/infrastructure/crawl/index.js — 插件、workflow、HTTP 只从这里 import(#infrastructure/crawl/index.js)。
import {
fetchWithPolicy,
runWebFetch,
buildWebFetchRuntime,
assertUrlSafeForFetch,
PlaywrightAgentSession,
launchOptionsFromBrowserRuntime,
toPlaywrightAgentLaunchOptions,
createLocalFontScreenshotHelper,
DEFAULT_DEVICE_SCALE_FACTOR,
DOM_TWEAK_LABEL_COLON_HALF,
} from '#infrastructure/crawl/index.js'
fetchWithPolicy 实现在 #utils/fetch-with-retry.js,由 crawl 门面 re-export。
| 场景 | 能力 | 实现文件(均在 src/infrastructure/crawl/) |
|---|---|---|
| 简单 API / 无需 JS 渲染 | fetchWithPolicy | #utils/fetch-with-retry.js |
| 正文提取、Readability、Firecrawl | runWebFetch | web-fetch-executor.js |
| 开放域检索 | runWebSearch | web-search-executor.js + web-search-registry.js |
| 零配置免费检索 | runParallelFreeSearch | web-search-parallel-free.js + web-search-mcp-client.js |
| 浏览器运行时 | buildBrowserRuntime | crawl-config.js(ai-workflow.crawl + renderer.playwright) |
| runtime → launch | toPlaywrightAgentLaunchOptions / launchOptionsFromBrowserRuntime | crawl-config.js |
MCP web_fetch / web_search | workflow/web.js | 内部用 crawl |
| JS 渲染、交互、截图 | PlaywrightAgentSession | playwright-session.js |
| MCP 受控浏览器 | workflow/browser.js | browser_* 工具 |
| 截图字体/样式与线上一致 | createLocalFontScreenshotHelper | page-screenshot-enhance.js |
选型:HTTP 能拿正文 → runWebFetch;要渲染或 PNG → Playwright。
业务/插件禁止手抄 executablePath / launchArgs / 只挑部分字段。统一:
// 推荐:配置链 + 业务覆盖(viewport / DPR)
await PlaywrightAgentSession.using(
launchOptionsFromBrowserRuntime({ deviceScaleFactor: 3, viewport: { width: 520, height: 960 } }),
async (session) => { /* ... */ }
)
// 已有 runtime 对象时
const rt = buildBrowserRuntime()
await PlaywrightAgentSession.launch(toPlaywrightAgentLaunchOptions(rt))
映射会带上:navigationTimeoutMs、ssrfPolicy、closeTimeoutMs、pageCrashRetries、opTimeoutMs、系统浏览器路径、launchArgs。
稳定性(底层默认,插件勿再造):
| 能力 | 说明 |
|---|---|
using(..., { crashRetries: 1 }) | 整轮 Target/Page crashed → 换新浏览器再跑 |
goto / gotoAndCapture | 页崩溃 → recreatePage 后重试(后者含重新导航) |
session.close() | softClosePlaywrightTree(AbortSignal.timeout 竞速),超时不卡死 |
waitUntil | 经 normalizePlaywrightWaitUntil:load(默认)/domcontentloaded/networkidle/commit;非法值回落 load。官方 DISCOURAGED networkidle,优先 load 或交互后断言就绪 |
反模式:同一重型(高 DPR + 字体)会话连开多档位 goto;在插件里硬编码 Chrome 路径 / soft-close / 崩溃正则;默认依赖 networkidle。
ssrf-policy.js:allowlist、legacy IP、DNS pinning、createPinnedDispatcherssrf-guard.js:对外 re-export assertUrlSafeForFetchfetch-guard.js:fetchWithSsrFGuard(每跳 pin DNS + 重定向环)browser-navigation-guard.js:gotoWithNavigationGuard(page.route 拦截)| 方法 | 说明 |
|---|---|
roleSnapshot() | ARIA ref 树 + storeRoleRefsOnPage |
runAct({ kind, ref, ... }) | 含 batch、scrollIntoView、fill fields |
listTabs / newTab / closeTab / focusTab | 多标签 |
getConsoleMessages / getNetworkRequests | 页面观测 |
armDialog / respondDialog | 弹窗 |
goto(url) | gotoWithNavigationGuard + 交互后 SSRF 复检 |
src/infrastructure/crawl/
index.js
ssrf-*.js / fetch-guard.js / browser-navigation-guard.js
playwright-session.js / pw-*.js / act-policy.js
web-fetch-*.js / web-search-*.js / crawl-config.js
page-screenshot-enhance.js
Schema:core/system-Core/commonconfig/system.js → ai-workflow.fields.crawl
默认模板:config/default_config/ai-workflow.yaml → crawl:
运行时数据:data/server_bots/{port}/ai-workflow.yaml → crawl.webFetch / crawl.webSearch / crawl.browser
优先级:调用方 overrides > ai-workflow.crawl > renderer.playwright(browser 启动)> 默认
单一实现:crawl-config.js — resolveWebFetchRuntime / resolveWebSearchConfig / buildBrowserRuntime
禁止在 crawl 模块内读取 process.env 做业务配置;凭据与参数一律写 data/server_bots/{port}/ai-workflow.yaml → crawl.*。
core/system-Core/workflow/web.js → web_fetch / web_searchcore/system-Core/workflow/browser.js → 全量 browser_*(见 docs/system-core.md)src/infrastructure/crawl/ 内并在 index.js 导出,不要在 Core 内复制一份。launch({ browserType: rt.browserType, ... }) 手抄字段——会丢掉 nav 超时与 SSRF。launchOptionsFromBrowserRuntime();高清截图另开会话并尽量 一次 goto。fetch-with-retry.js、web-fetch-executor.js 已用全局 fetch + AbortSignal.timeout;扩展时沿用,禁止 node-fetch。toBase64() / Uint8Array.fromBase64(),勿 toString('base64')。Error.isError / normalizeError(skill xrk-node-runtime)。docs/system-core.md(web / browser 章节)core/system-Core/plugin/ 下未写入 .gitignore 白名单的 .js 仍会加载,但不计入框架 baseline