{"_id":"@57blocks_agb/ab-core","_rev":"3-1c4637bcc56a5aa59f89f310dfc226e1","name":"@57blocks_agb/ab-core","dist-tags":{"latest":"0.0.3"},"versions":{"0.0.1":{"name":"@57blocks_agb/ab-core","version":"0.0.1","license":"UNLICENSED","_id":"@57blocks_agb/ab-core@0.0.1","maintainers":[{"name":"evanliu57","email":"evan@57blocks.com"}],"dist":{"shasum":"c209534d48221325c33cab0f2b9cd32f812a08d3","tarball":"https://registry.npmjs.org/@57blocks_agb/ab-core/-/ab-core-0.0.1.tgz","fileCount":20,"integrity":"sha512-tTCJlFkqj1wYkOQlG53I739dUuCyHtOWltJfp4XDGH2tHV4bgG3YczckGGdUrKaPETKurWPYcyAcWRu8SLBOOA==","signatures":[{"sig":"MEUCIBohK+eEHwfLEpLTNulZl3HUTMuVTvofpCuzU0VWJtFDAiEAo4KLaBWarR1qCZEWSQC8Yq87kc7IFZYxYHOKAaLAOZw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97800},"main":"./dist/index.js","type":"module","_from":"file:57blocks_agb-ab-core-0.0.1.tgz","types":"./dist/index.d.ts","scripts":{"test":"vitest run --passWithNoTests","build":"tsc -b","typecheck":"tsc -b"},"_npmUser":{"name":"evanliu57","email":"evan@57blocks.com"},"_resolved":"/private/var/folders/nz/j1h1h9wd01sggb8x9jtbjzr00000gn/T/d87834deb1e12b46a68375665e06725b/57blocks_agb-ab-core-0.0.1.tgz","_integrity":"sha512-tTCJlFkqj1wYkOQlG53I739dUuCyHtOWltJfp4XDGH2tHV4bgG3YczckGGdUrKaPETKurWPYcyAcWRu8SLBOOA==","_npmVersion":"11.16.0","description":"`ab-gate` 与 `ab-run` 唯一的共同耦合面。**只放两者都要用的东西**， 放不进这个判据的一律留在各自包里。","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ab-core_0.0.1_1788141331233_0.3157544643037866","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@57blocks_agb/ab-core","version":"0.0.2","license":"UNLICENSED","_id":"@57blocks_agb/ab-core@0.0.2","maintainers":[{"name":"evanliu57","email":"evan@57blocks.com"}],"dist":{"shasum":"d315794e6f990cf1c0983b57909b8eed51c258a6","tarball":"https://registry.npmjs.org/@57blocks_agb/ab-core/-/ab-core-0.0.2.tgz","fileCount":20,"integrity":"sha512-PSaHpGl30WtGROUm3FXNI+52+UGIKWujtSJ60wh5qYPHYG9PcEY3l39JJLB1gnEXUTk6YVsAv0nb9klk33QHRQ==","signatures":[{"sig":"MEUCIBGfzsxpwJsXWCINPjnAx4N9ZwCmryaaUB+mvXAkFk98AiEArbSByUZ4WFoOb1EYjMGeOV28Blyu42N/XONcDzO/hlo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCfIgJlton+HlzRj+6xLQsYKtEsABOHquIRwy2jNfoqhAIhANjZhSrhLWxv8n1SnJOFnEnsHfDFc1xXXr2gl0o9Famk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99423},"main":"./dist/index.js","type":"module","_from":"file:57blocks_agb-ab-core-0.0.2.tgz","types":"./dist/index.d.ts","scripts":{"test":"vitest run --passWithNoTests","build":"tsc -b","typecheck":"tsc -b"},"_npmUser":{"name":"evanliu57","email":"evan@57blocks.com"},"_resolved":"/private/var/folders/nz/j1h1h9wd01sggb8x9jtbjzr00000gn/T/5e3ea71a3db2c4a13658fd57d68e9129/57blocks_agb-ab-core-0.0.2.tgz","_integrity":"sha512-PSaHpGl30WtGROUm3FXNI+52+UGIKWujtSJ60wh5qYPHYG9PcEY3l39JJLB1gnEXUTk6YVsAv0nb9klk33QHRQ==","_npmVersion":"11.16.0","description":"`ab-gate` 与 `ab-run` 唯一的共同耦合面。**只放两者都要用的东西**， 放不进这个判据的一律留在各自包里。","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ab-core_0.0.2_1788229921666_0.48774435645626757","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"_id":"@57blocks_agb/ab-core@0.0.3","dist":{"shasum":"c84668711ec1b8977a0b2888bcf56b727810dbce","tarball":"https://registry.npmjs.org/@57blocks_agb/ab-core/-/ab-core-0.0.3.tgz","fileCount":23,"integrity":"sha512-obFEkGrtOsXxyKGL/YfKgRtYsG6xYjV5YL9k8Nv9scMRh5DJUsZKuQHu9E0uTG7f1CFCV5o3c3sLqasXJG7yiQ==","signatures":[{"sig":"MEUCIAxDon4zHMXdFpCFGK8e1EYW/MaAqrHPjdc7q47tN3SNAiEAxT/+OQrRoabSZjctXTkc6FhJ69apov1crjmL6iSUYLs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIA8HHhL7JR4Epm3W3WaOvE8bh5hxAA3WZVy3XtUR4LnsAiEA6H6kVaPNSQQMZKRz9iCJseKkrjR8winUJlZ0BHRGYVg="}],"unpackedSize":117475},"main":"./dist/index.js","name":"@57blocks_agb/ab-core","type":"module","_from":"file:57blocks_agb-ab-core-0.0.3.tgz","types":"./dist/index.d.ts","license":"UNLICENSED","scripts":{"test":"vitest run --passWithNoTests","build":"tsc -b","typecheck":"tsc -b"},"version":"0.0.3","_npmUser":{"name":"evanliu57","email":"evan@57blocks.com"},"_resolved":"/private/var/folders/nz/j1h1h9wd01sggb8x9jtbjzr00000gn/T/b6e75ff03bd8c9b98a166414a308e76d/57blocks_agb-ab-core-0.0.3.tgz","_integrity":"sha512-obFEkGrtOsXxyKGL/YfKgRtYsG6xYjV5YL9k8Nv9scMRh5DJUsZKuQHu9E0uTG7f1CFCV5o3c3sLqasXJG7yiQ==","_npmVersion":"11.16.0","description":"`ab-gate` 与 `ab-run` 唯一的共同耦合面。**只放两者都要用的东西**， 放不进这个判据的一律留在各自包里。","directories":{},"maintainers":[{"name":"evanliu57","email":"evan@57blocks.com"}],"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ab-core_0.0.3_1788494354208_0.16016680907845093"}}},"time":{"created":"2026-08-31T01:55:31.082Z","modified":"2026-09-04T03:59:14.486Z","0.0.1":"2026-08-31T01:55:31.399Z","0.0.2":"2026-09-01T02:32:01.760Z","0.0.3":"2026-09-04T03:59:14.296Z"},"license":"UNLICENSED","description":"`ab-gate` 与 `ab-run` 唯一的共同耦合面。**只放两者都要用的东西**， 放不进这个判据的一律留在各自包里。","maintainers":[{"name":"evanliu57","email":"evan@57blocks.com"}],"readme":"# ab-core\n\n`ab-gate` 与 `ab-run` 唯一的共同耦合面。**只放两者都要用的东西**，\n放不进这个判据的一律留在各自包里。\n\n它不做任何事 —— 没有 CLI，没有 IO 副作用（除了写 JSONL），只有契约与纯判定。\n\n## 里面有什么\n\n| 模块 | 内容 | 谁在用 |\n|---|---|---|\n| `types.ts` | `Gate` / `GateContext` 契约、`StackProfile` 词汇表、`RunMeta` | 两边 |\n| `jsonl.ts` | 采集事件 schema + 落盘 | ab-gate 写，`ab-gate report` 读 |\n| `env-blocker.ts` | 「这是环境问题还是代码问题」的分类器 | ab-gate（boot 诊断）、ab-run（域会话短路） |\n| `skill-predicate.ts` | Skill 注入谓词 `when:` 的语法 | ab-run（求值）、skills 构建脚本（校验） |\n\n## 三条要知道的\n\n### 事件 schema 只加字段，不改字段\n\n`EVENT_SCHEMA_VERSION` 在第 1 周定死。第 8 周的数据要能和第 1 周的一起分析，\n所以字段只增不改、不删。\n\n落盘用 `emitMany`，参数类型是 `NewEvent`——**分配式**的\n`E extends AbEvent ? Omit<E, \"v\" | \"ts\"> : never`。这个细节是有代价换来的：\n直接写 `Omit<AbEvent, …>` 不分配到联合成员上，`keyof` 会塌成公共字段，\n于是任何带自己字段的事件都编译不过，调用方只能 `as never` ——\n**而那正好关掉了「schema 定死」这条纪律唯一的执行机构**。\n真发生过：`human.correction` 漏写了两个必填的 sha 和 `projectKind`，\n是一个 cast 藏住的。\n\n构造事件走 `findingToEvent` / `correctionToEvent`，不要手搓字面量 ——\n`projectKind` 与客户项目脱敏策略只在那里决定一次。\n\n### 环境阻断分类器保守到近乎固执\n\n`classifyEnvBlocker(text)` 判不出来就返回 `null`，让代码修复循环继续干活。\n把一个真代码缺陷误判成「环境问题」而短路掉，比漏判贵得多。\n\n它存在的理由：修复循环对**代码缺陷**有效，对**环境缺陷**会静默烧光预算 ——\n数据库连不上、依赖没装、上游包没构建，改源码永远修不了，但循环会一直改文件\n（于是「零文件变更」的熔断器永远不触发），同一个错误每轮复现一次。\n\n### `StackProfile` 是词汇表，不是探测器\n\n探测逻辑在 `ab-gate/src/lib/stack.ts`。这里只定义有哪些语言 / 前端框架 /\n后端框架 / 数据层 / 链上工具链 / API 形态 —— 因为 ab-run 做 Skill 条件注入、\n采集给事件打标，都要用同一套词汇。\n\n## 相关文档\n\n- [`docs/PLAN.md`](../../docs/PLAN.md) §8 采集 · §3 三级严重度\n- [`docs/PDLC.md`](../../docs/PDLC.md) 全生命周期形态\n","readmeFilename":"README.md"}