@aid-framework/generator-sdk

中文文档
0.1.98发布于 2026/11/03Apache-2.0TypeScriptES Module构建来源已验证近 30 天下载 1.2万

AID框架生成器插件接口:显示合同,漂移/拥有算法,以及确定性帮助每个目标生成器都通过.

中文使用文档
文档目录10 节
  1. 安装
  2. 这三项工作
  3. 名单
  4. generated/ 财务报告和审定财务报表 business/
  5. 漂移算法
  6. 决定主义
  7. 磁盘上的显示
  8. 生成器接口
  9. API 密码
  10. 许可证

@aid-framework/generator-sdk

插件合同 AID 框架 发电机。 它定义 好一个发电机 实值,并供应每台发电机所需的三样东西,以便安全地重新运行:a 很明显,一种所有权和漂移算法, 和决定主义契约.

如果你正在写一个目标——一个新的语言,一个新的托管平台——这就是你执行的软件包. 狦 仅是 使用 AID,你不能直接调用它: aid gen 已经.

spec ← ir ← generator-sdk ← generator-<target> ← cli

安装

npm install @aid-framework/generator-sdk

要求节点.js 24或更新.

这三项工作

  1. 说出你是什么. 显示对象的ID、你接受的IR范围、你的能力 荣誉,还有你们对战的时间.
  2. 永远不要破坏人类的编辑. 文件分为发电机拥有的一级和开发商拥有的一级,以及 再生拒绝覆盖其字节已改变的生成文件 .
  3. 释出同样的字节两次. 鉴于同一IR,生成器必须输出同字节相同的输出——否 时间戳,没有主机名,没有绝对路径,没有随机性.

名单

import type { GeneratorManifestInput } from '@aid-framework/generator-sdk';

const input: GeneratorManifestInput = {
  name: 'my-target',
  target: 'my-target',
  version: '0.1.0',
  irRange: '^0.1.0',
  capabilities: ['http-trigger', 'json-schema', 'otel'],
  emitsAgainst: {
    structuredOutput: 'zod',
    tracing: 'otel-genai',
  },
  output: {
    root: 'app',
    generatedDir: 'generated',
    businessDir: 'business',
  },
};

const parsed = parseManifest(input);
if (!parsed.ok) throw new Error(JSON.stringify(parsed.diagnostics, null, 2));

checkIRSupport(parsed.manifest, IR_VERSION);  // [] when irRange covers this IR
validateGeneratorSet([parsed.manifest]);      // [] when the set is coherent

emitsAgainst 这使得两个目标具有可比性。 目标排放活性模型和OTel跨度不是 与一个放出Zod和另一个追踪器可以互换,声明是这样说的 数据 而不是说 以传道而行.

密钥词汇
runtime输出的运行时间被配对,例如. py-fastapi
orchestrationORCHESTRATIONS
tracingBackendTRACING_BACKENDS,比如说. otel-genai
structuredOutputSTRUCTURED_OUTPUTS,比如说. zod, (中文(简体) ), pydantic

校验返回诊断, 绝不丢出例外, 以相同的编译器样式形状 @aid-framework/spec 财务报告和审定财务报表 @aid-framework/ir名称空格 generator/*。 。 。 . validateGeneratorSet 另外拒绝两台发电机 声称相同 target。 。 。 .

一个清单是数据,这就是为什么能力进入IR门作为论据:

import { targetCapabilityDeclarations } from '@aid-framework/generator-sdk';
import { runGates } from '@aid-framework/ir';

runGates(ir, { targetCapabilities: targetCapabilityDeclarations(manifests) });

generated/ 财务报告和审定财务报表 business/

两级分裂是再生安全的原因.

级别拥有者在再生时
generated/生成器覆写——永远不要手写
business/你们如果缺少, 那么创建一次 没碰过

business/ 是接合:这是生成的代码调用。 这就是你的提示,工具处理者和 域逻辑是活的,这就是为什么再生成不会花费你的工作.

所有权由 一条小路而不是根据发电机的声称。 每条计划路线都恢复正常了, 因此,一个生成器无法逃脱自己的根,不能要求一个 business/ 路径生成,且无法写入 显示文件本身.

import {
  isBusinessPath, isGeneratedPath, isReservedPath, ownerForPath, validatePlan,
} from '@aid-framework/generator-sdk';

漂移算法

这是整个安全故事,分五个步骤:

  1. 计划. plan(ir) 是纯洁的。 它什么也没有写.
  2. 检查生成的文件 . 如果计划 generated/ 文件存在,其散列不是记录在 很明显,是人类编辑的 不覆盖 。 将旁边的新内容写成 <path>.aid-rej 失败 以向导.
  3. 创建商务文件 . 惟有相去不见. 永远不要覆盖.
  4. 解剖写法,然后更新清单.
  5. 报告 创建 / 更新 / 不变 / 保留 / 冲突 .

步骤2就是重点。 一个能无条件摧毁人类的信号的发电机 不同意,损失是沉默的。 拒绝,保留被拒绝的字节, 并命名逃跑—— --force 以丢弃编辑器 —— 将无声数据丢失变成你明确作出的决定.

import { hasDrift, planRegeneration, regenerate } from '@aid-framework/generator-sdk';

// Pure: computes what would happen and writes nothing.
const preview = planRegeneration(plan, { sink, manifest });
if (hasDrift(preview)) {
  // preview.actions carries { kind: 'drift', path, recordedSha256, actualSha256 }
}

const { report, manifest: next } = regenerate(plan, { sink, manifest, provenance });

RegenerationAction 实值 create | update | unchanged | keep-business | drift这样 --dry-run 从《京都议定书》 同样的代码路径写.

两个限制是故意的:

  • 下方的文件 generated/ 存在但已经 没有 清单上的记录被视为漂移,而不是 因为它不能被证明是未经修改的.
  • Stale 生成的文件 - 已记录但不再计划 - 被报告,但从未被删除,除非进行搜索 明确要求。 删减是一次没有恢复的行动.

决定主义

合同范围窄而绝对: 没有时间戳,没有主机名称,没有绝对路径,没有随机性 内 生成代码 。 一次印章将每次再生变成diff,而金文件测试比较了字节.

import { checkDeterminism } from '@aid-framework/generator-sdk';

const violations = checkDeterminism(files); // { path, pattern, line, excerpt }[]
导出目的
normalizeNewlines, (中文(简体) ), ensureTrailingNewline, (中文(简体) ), normalizeText线路结束和后继的新线正常化
sha256Hex, (中文(简体) ), stableId内容散乱和稳定身份
compareIds, (中文(简体) ), sortById, (中文(简体) ), sortByPath, (中文(简体) ), stableSortBy由稳定身份而不是由行走顺序排序
generatedBanner非编辑标题及其标记
DETERMINISM_PATTERNS, (中文(简体) ), scanForNonDeterminism规则集和每个文件检查器
checkDeterminism在文件集上运行整个规则

scanForNonDeterminism 就是让发电机自己的测试在发出时间戳时 失败。 这是 是什么使得合同可以检验 而不是渴望.

合同适用于 生成代码, 绝不建模输出。预计完成情况会有所不同 通过取样而不是比较字节来说明这一点.

磁盘上的显示

aid.manifest.json 记录出处——生成器名称和版本,IR版本,光谱版本——外加一条目 每个文件 : path, (中文(简体) ), owner, (中文(简体) ), sha256, (中文(简体) ), generator, (中文(简体) ), generatorVersion。记录使得上文第2步 也许吧.

import { manifestFor, parseAidManifestJson, serializeAidManifest } from '@aid-framework/generator-sdk';

const written = manifestFor(files, provenance);
const text = serializeAidManifest(written); // canonical: sorted keys, LF, one trailing newline

生成器接口

import type { Generator } from '@aid-framework/generator-sdk';

export const myGenerator: Generator = {
  name: manifest.name,
  target: manifest.target,
  version: manifest.version,
  irRange: manifest.irRange,
  plan: (ir) => planMyTarget(ir),
  emit: (plan) => plan.files,
};

每个身份字段都会从清单中读出 所以一个清单中可以验证出装载器 然后它运行的发电机 不可对他们所描述的目标、版本或IR范围有异议.

API 密码

导出目的
parseManifest, (中文(简体) ), parseManifestJson, (中文(简体) ), validateManifest, (中文(简体) ), validateGeneratorSet明确处理
checkIRSupport, (中文(简体) ), supportsIRIR 范围兼容性
managedRoots, (中文(简体) ), targetCapabilityDeclarations(一) 成交门
validatePlan, (中文(简体) ), isRecord计划审定
planRegeneration, (中文(简体) ), regenerate, (中文(简体) ), checkDrift, (中文(简体) ), hasDrift漂移算法
staleGeneratedFiles, (中文(简体) ), generatedFiles上一次运行的库存
createNodeSink, (中文(简体) ), createMemorySink磁盘和内质再生汇
ownerForPath, (中文(简体) ), isGeneratedPath, (中文(简体) ), isBusinessPath, (中文(简体) ), isReservedPath, (中文(简体) ), escapesRoot所有权的前提
rejectionPath拒绝的字节停放的地方
manifestFor, (中文(简体) ), parseAidManifest, (中文(简体) ), serializeAidManifest磁盘显示
checkDeterminism, (中文(简体) ), DETERMINISM_PATTERNS, (中文(简体) ), scanForNonDeterminism决定主义
parseRange, (中文(简体) ), satisfies, (中文(简体) ), compareVersions共享 semver 词汇

许可证

阿帕奇 - 2.0。由 AID 框架生成的代码是 不受该许可证的限制.

版本与发布记录

@aid-framework/generator-sdk 共发布 52 个版本,首次发布于 2026/10/31;过去 12 个月发布了 52 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.1.98latest2026/11/032 天前
0.1.972026/11/032 天前
0.1.962026/11/033 天前
0.1.952026/11/033 天前
0.1.942026/11/033 天前
0.1.932026/11/033 天前

关于 @aid-framework/generator-sdk 的常见问题

@aid-framework/generator-sdk 是什么?

AID框架生成器插件接口:显示合同,漂移/拥有算法,以及确定性帮助每个目标生成器都通过.

如何安装 @aid-framework/generator-sdk?

在项目目录运行 npm install @aid-framework/generator-sdk,或使用 pnpm add / yarn add / bun add。

@aid-framework/generator-sdk 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@aid-framework/generator-sdk 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@aid-framework/generator-sdk 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@aid-framework/generator-sdk 可以商用吗?

@aid-framework/generator-sdk 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@aid-framework/generator-sdk 的下载量有多少?

根据 npm 官方下载统计,@aid-framework/generator-sdk 在 2026/10/06 – 2026/11/04 这 30 天内被下载 11,718 次,日均约 391 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aid-framework/generator-sdk 还在维护吗?

最新版本 0.1.98 发布于 2026/11/03(2 天前);至今共发布 52 个版本,其中过去 12 个月发布了 52 个;首次发布于 2026/10/31。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。