@empressaio/atom-contract
每个皇太后原子的输入数据基底必须满足:,
上下文界面、 成分声明和历史锁定.
对接Hauska SDK(@hauska-sdk/*);每个产品表面直接消耗
和 MCP 服务器.
这个软件包是 仅限框架它运送合同,运行时间
它执行它, 计划的历史层写到
测试脚手架消费者包 用来证明它们的原子符合要求.
目录原子登记(实际原子类型) - engagement, (中文(简体) ),
code-section, (中文(简体) ), jurisdiction-corpus(a) 生活在消费品包中
这取决于这个.
皇后商业基底,对等到 @hauska-sdk/* 财务报告和审定财务报表 hauska-engine, (中文(简体) ),
每个 doc repo ADR-018(原子合同下层投放)。 这个
软件包为零 @hauska-sdk/* 依赖性: MCP 服务器或产品
表面可以依赖合同而不继承商业
堆栈.
安装
npm install @empressaio/atom-contract
# or
pnpm add @empressaio/atom-contract
要求18.18+和 drizzle-orm (^0.30.0),如果您打算使用
PostgresEventAnchoringService无法支撑历史的原子
使用情况 createInMemoryEventService() 从 ./testing 子路径.
出版(经营者)
这个 hauska-sdk npm 账户用途 已分阶段发布 + Windows Hello
(passkey 2FA),不是颗粒活字符号. 见
docs/npm-publish-automation.md。 。 。 .
.\publish-1.4.0.ps1
.\publish-approve-1.4.0.ps1 -StageId <uuid-from-stage-list>
公众表面
import {
createAtomRegistry,
defaultScope,
resolveMode,
parseInlineReferences,
serializeInlineReference,
httpContextSummary,
resolveComposition,
PostgresEventAnchoringService,
wrapForStorage,
unwrapFromStorage,
type AccessPolicy,
type AtomRegistration,
type AtomMode,
type AtomReference,
type ContextSummary,
type Scope,
type AtomComposition,
type EventAnchoringService,
} from "@empressaio/atom-contract";
测试公用设施 在一个单独的子路径后面 所以生产捆绑 从来没有拉他们进来:
import {
createTestRegistry,
createInMemoryEventService,
runAtomContractTests,
} from "@empressaio/atom-contract/testing";
四层的合约
具有一个结构型对象的原子登记册:
const taskAtom: AtomRegistration<"task", ["card", "compact", "expanded"]> = {
// identity
entityType: "task",
domain: "sprint",
// render-mode contract (type-level)
supportedModes: ["card", "compact", "expanded"],
defaultMode: "card",
// context interface
contextSummary: async (entityId, scope) => ({
prose: `Task ${entityId}: ...`,
typed: { id: entityId },
keyMetrics: [{ label: "Status", value: "open" }],
relatedAtoms: [],
historyProvenance: { latestEventId: "evt-...", latestEventAt: "2026-..." },
scopeFiltered: false,
}),
// composition declaration (multi-child; required field)
composition: [
{ childEntityType: "blocker", childMode: "compact", dataKey: "blockers" },
],
};
const registry = createAtomRegistry();
registry.register(taskAtom);
汇编时间保证:
defaultMode必须是supportedModes。错配的默认值 无法输入检查.entityType是一个字面字符串, 一直缩小到registry.resolve("task")所以,消费者看到 确切的类型回.domain需要并且可以通过registry.listByDomain(...)。 。 。 .composition需要时间。 过[]宣布没有孩子.
5个模式作为字面结合: inline, (中文(简体) ), compact, (中文(简体) ), card, (中文(简体) ),
expanded, (中文(简体) ), focus. 装订(反应) <AtomShell>,每个模式
组件, 焦点存储接线) 在一个单独的软件包中存在
这取决于这个.
呼叫地点的范围
contextSummary 总是需要一秒钟 Scope 参数 :
interface Scope {
audience: "ai" | "user" | "internal";
requestor?: { kind: "user" | "agent"; id: string };
asOf?: Date;
permissions?: ReadonlyArray<string>;
}
不按范围区分的原子 忽略它并设定
scopeFiltered: false。测试使用 defaultScope() 帮手.
组成
组成是一个多子的宣示图. 登记册消耗
字段: registry.validate() 每个注册的构成
边缘并报告未登记的儿童实体类型的任何点.
使用 resolveComposition(parent, parentRef, parentData, registry) 改为
将声明变成一个已准备好可供渲染的打字儿童列表
迭相会.
靴子时间合同 : 应用程序拖带必须调用
registry.validate() 之后的一次 register() 呼叫已经运行
无法在结果为时启动 { ok: false }。登记处确实
不重验证每个字的构成 register() (父母可以
在儿童面前合法登记)和 resolve() 没有
重查查,否则会互相引用
只在成分分辨率时表面.
组成边缘可通过设置选择退出存在验证
forwardRef: true。前向边缘被两者跳过 validate()
财务报告和审定财务报表 resolveComposition 在孩子没有注册的情况下
母原子可以发送一个声明,将一个孩子命名为
后来冲刺而未撞出靴子.
准入政策(可见级别)
原子可能声明为 CDR-017 访问级. 合同未履行
执行;下游地表(MCP) list_*,目录 APIs)大门打开
这个值.
type AccessPolicy =
| "public-free" // unauthenticated public catalog
| "public-paid" // catalog-visible, entitlement-gated at fetch
| "platform-internal" // platform staff only; never enumerated publicly
| "tenant-private" // owning tenant only
| "tenant-shared"; // explicit cross-tenant share (ADR-017)
球场分两地出现:
AtomRegistration.accessPolicy?——原子类型默认. 有用的时候 整个类型是内部的(例如审计原子).ContextSummary.accessPolicy?——每件价值. 让我们 多数是公用原子标记内部的个别实例——例如:, a 公众jurisdiction-corpus伙伴关系支出目录 辖区被标记"platform-internal"直至伙伴关系 关闭.
分辨率:每方 ContextSummary.accessPolicy 当获胜时
,否则就回到登记簿上 accessPolicy, (中文(简体) ),
否则将原子视为 "public-free"。快速建设者
目录( e)registry.describeForPrompt()使登记正常化
值为 "public-free" 当未申报的下游过滤分支
没有无名卫士.
历史( A)EventAnchoringService(中文(简体) )
每个原子突变流经 EventAnchoringService.appendEvent, (中文(简体) ),
将一行写为 atom_events 页:1 运出
PostgresEventAnchoringService 写一个SHA-256链
散货. prevHash 链接每个事件到上一个事件
(entityType, entityId) 成对,产生一对实体散列链.
界面-稳定/执行-演变. 这个
EventAnchoringService 接口是合同。 决定性因素
SHA-256的执行将取而代之的是真正的加密
锁定(Merkle root + 外部分类账锁定)于后一里程碑
不改变消费者界面。 标记应当为
重审结转 TODO(M2-C): 标记.
主办项目拥有 atom_events 计划(表一栏,
(见E/CN.4/Sub.2/2000/L.31)。 该图书馆根据商定的表格名称发布原始 SQL
只靠靠着 drizzle-orm是因为 sql 帮助SQL调温器.
VDA 包装( 今天不开放)
wrapForStorage(value) 返回时
{ envelope: { version: 1, vdaApplied: false }, payload: value } 财务报告和审定财务报表
unwrapFromStorage(stored) 返回时 stored.payload消费者呼唤
这些从今天的写入路径; 不操作变成一个真正的信封
(版本链 + 墓碑语义) 在后面的里程碑上没有
消费变化.
内含引用语法
聊天层使用 {{atom|type|id|label}}数字 :
parseInlineReferences("see {{atom|task|t1|Pick HVAC}}");
// -> [
// { kind: "text", text: "see " },
// { kind: "atom", reference: { kind: "atom", entityType: "task", entityId: "t1", displayLabel: "Pick HVAC" }, raw: "{{atom|task|t1|Pick HVAC}}" }
// ]
分隔符是 |上一个形状 : 无法
代表Spec 51本身包含的实体ID : (例如:.
parcel-briefing:{parcelId}:{intentHash}) (中文(简体) ). 旧的形状不再了
解析 : 没有双段兼容路径 .
保留原子类型(ADR-020/ADR-021)
私人记录的土地使用仪器船,作为Zod验证的有效载荷
页:1 ./encumbrances 子路径(v1.2.0+). 类型是 永远
public-free; 计划只接受 tenant-private 财务报告和审定财务报表
tenant-shared。 。 。 .
import {
RECORDED_INSTRUMENT_SCHEMA,
RESTRICTION_CLAUSE_SCHEMA,
ENCUMBRANCE_RENDER_MODES,
SAMPLE_RECORDED_INSTRUMENT,
} from "@empressaio/atom-contract/encumbrances";
石油和天然气原子类型(ADR-025)
O&G作为Zod验证有效载荷的可操作性、地上和地上原子船
页:1 ./og 子路径 (v1. 7. 0). 覆盖资产脊椎(井,井,
完成、区、地、生产时间序列、设备状况、土地
(矿-租赁、rc-租赁、道、所有权-利息)和收入
分配单位。 主要义务(核心域中立型)
模块,不 ./og。 。 。 .
import {
WELL_SCHEMA,
MINERAL_LEASE_SCHEMA,
REVENUE_ALLOCATION_UNIT_SCHEMA,
SAMPLE_WELL,
OG_DEFAULT_ACCESS_POLICY,
} from "@empressaio/atom-contract/og";
属性推理原子类型(主 WDLL 3.2–3.6)
Parcel可构建的链式原子飞船 ./property 子路径
(v1.9.0+): (中文(简体) ) parcel-node, (中文(简体) ), zoning-fact, (中文(简体) ), setback-rule, (中文(简体) ), buildable-envelope, (中文(简体) ),
parcel-terrain-model, (中文(简体) ), road-node, (中文(简体) ), building-footprint, (中文(简体) ), utility-easement, (中文(简体) ), plat-building-line
(1.44.0) (中文(简体) ).
均为数据一级(atomTier: "data"默认为 public-free
登记未申报时的准入政策.
(一-E) 校准在READ(一-E)中的信心: 可能带有
ReasoningReadContract 在写作时声称的快照,包括a
占位符 calibratedConfidence 与 provenance: "asserted"在读取,
校正轴通过校正上方解决——它不是
被冻结了 不添加一个 labeling x district
相乘场.
import {
ZONING_FACT_SCHEMA,
SETBACK_RULE_SCHEMA,
BUILDABLE_ENVELOPE_SCHEMA,
HAYS_ZONING_FACT_FIXTURE,
BEXAR_NULL_ZONING_FACT_FIXTURE,
HAYS_BUILDABLE_ENVELOPE_FIXTURE,
type ZoningFactAtomInstance,
type SetbackRuleAtomInstance,
type BuildableEnvelopeAtomInstance,
} from "@empressaio/atom-contract/property";
entityType | reasoningKind | 关键字段 |
|---|---|---|
parcel-node | observed | keyKind, (中文(简体) ), geometryStoreRef 指针(绝不是指环) OR absence编号 :verifiedAbsence |
zoning-fact | observed | district 或 absence.no-zoning-stamp |
setback-rule | observed | front编号 :side编号 :rear键入 sourceCodeAtomRef, (中文(简体) ), matchBasis |
buildable-envelope | derived | buildable-envelope-inset-v1,输入参考事实+规则+几何 |
parcel-terrain-model | derived | parcel-terrain-mesh-ifc-v1,格式化的文物 |
road-node | observed | {fips}:road:{osm_way_id}中线+假定ROW |
building-footprint | observed | footprintGeometry 或 absence编号 :verifiedAbsence· ; sourceTier |
utility-easement | observed | easementGeometry, (中文(简体) ), easementClass, (中文(简体) ), public-free 总是; 可选 easementKind, (中文(简体) ), placement, (中文(简体) ), platRef (1.44.0) (中文(简体) ) |
plat-building-line | observed | lineGeometry编号 :offsetDistanceFt, (中文(简体) ), appliesTo, (中文(简体) ), platRef, (中文(简体) ), placement 或 absence (1.44.0) (中文(简体) ) |
parcel-node 铁路一号锁定其他所有地产铁路钥匙 它记录
包裹身份和戒指PROVENCE;戒指本身留在 txgio_parcel,则
1 个几何真相框架(地理学法则1). geometryStoreRef 严格
指针,所以一个内线环无法解析.
ICC 代码引用版税通过核心生成 ObligationAtomInstance
行——无独立 SourceAttribution 类型.
附加制成模式
entityType | 目的 | 建议的渲染模式 |
|---|---|---|
recorded-instrument | 父器; 通过湿 PDF sourceDocumentCid | card, (中文(简体) ), compact, (中文(简体) ), expanded |
restriction-clause | 可执行片段;计划审查引用目标 | inline . focus (单位:千美元)默认 focus(中文(简体) ) |
restriction-corpus | CC & R 分类包 | card, (中文(简体) ), expanded |
administrative-rule | 未记录的人道主义援助准则legalWeight: advisory(中文(简体) ) | inline, (中文(简体) ), compact, (中文(简体) ), card, (中文(简体) ), expanded |
constraint-resolution | 有效制约(ADR-021) | card, (中文(简体) ), expanded |
发动机 AtomRegistration 公升和摄入量生产者属于
hauska-engine/packages/atoms/ (cc-agent-E); Cortex 第1阶段可
在引擎注册着陆前验证这些计划上的上传.
显示词汇表(OPS-23 R-6/P-167)
人肉化显示绳索 要求飞船 ./display
子路径(v1.32.0+),因此属性探索器面板,可行性PDF,
和 Smart Site MCP 连接器为同一个原子制作相同的单词
从一个地方 而不是手印副本。 两个模块:
buildable数字 :mapBuildableDisplay及其类型——可建/可置换 卡片、PDF和跨地表协议式词汇。 逐字记录 从五个字节同buildable-display-vocab.ts副本 曾经生活在hauska-map和hauska-engine, 被平等锁在一起 固定装置.wire数字 :VOCABULARY, (中文(简体) ),WIRE_DISPOSITION_DISPLAY_TEXT, (中文(简体) ),DERIVED_FIGURES_POLICY– Smart Site MCP 线脚词汇 页:1 从遗留设计工具逐字移动artifacts/smartsite-mcp/src/vocabulary.ts(P-91 v3表),随同 从 MCP 服务器导入的九个显示常数 拥有mcp-app.ts,因此这个模块对MCP服务器没有依赖性.
import {
mapBuildableDisplay,
type BuildableDisplayInput,
VOCABULARY,
WIRE_DISPOSITION_DISPLAY_TEXT,
} from "@empressaio/atom-contract/display";
截止到1.32.0,还没有消费者进口这一次路径和以前的副本
仍然存在; 退出(删除副本、 等值锁和
跳过供应商驱动测试)是同一计划行的后一步骤,上门
P-153 在hauska-map和遗产设计工具中合并.
读取合同类型(Calibrated Spine F4 / F6 / K6)
宽, 三轴信心在读取时返回. 毫无障碍,
未来源的置信是无法表达的: 估计是一个品牌
名义类型只能通过 createWidthedConfidence。 。 。 .
在此软件包中不存储衍生数字 .
import {
createReadContract,
createWidthedConfidence,
READ_CONTRACT_SCHEMA,
SAMPLE_READ_CONTRACT,
type ReadContract,
type CalibrationProvenance,
} from "@empressaio/atom-contract/read-contract";
| 导出 | 作用 |
|---|---|
WidthedConfidence | 不可分离估计数 + n + 键 intervalWidth + 来源 |
ThreeAxisConfidence | 准确性、源质量和后果轴 |
ReadContract | 完全的收看对象 每一个表面必须发射 |
ModelAttributionStamp | 定金印章(型号,即时,原子集id) |
CalibrationProvenance | asserted | backtest | seed | live |
传播到MCP,皮层-api, Cortex,扩展和地图是一种
消费者- 侧波2 相撞后 ^1.4.0。 。 。 .
测试公用事业
消费者包 进口合同测试套件以证明 注册在一个函数调用中是很好的:
import { describe } from "vitest";
import { runAtomContractTests } from "@empressaio/atom-contract/testing";
import { taskAtom } from "./task.reg";
describe("task atom contract", () => {
runAtomContractTests(taskAtom, {
withFixture: { entityId: "t1", setUp: seedTestData },
alsoRegister: [/* any composition children */],
});
});
套房声称:
- 身份存在
entityType非空无一物, defaultMode进入supportedModes, (中文(简体) ),contextSummary返回有效的四层形状historyProvenance财务报告和审定财务报表scopeFiltered, (中文(简体) ),- 每一个成分边缘都与
alsoRegister + this, (中文(简体) ), - 内含此原子的来回引用.
createInMemoryEventService() 提供内存
EventAnchoringService 用于不需要邮购的单位测试;
createTestRegistry(initial) 是一个方便结束
createAtomRegistry()。 。 。 .
这个包裹不运送什么
- 目录原子注册. 没有
engagement.atom.ts, (中文(简体) ),code-section.atom.ts等. Catalog 原子生活在消费品包中 (单位:千美元)hauska-engine/packages/atoms/,产品 api 服务器等) 取决于这个。 行: 此软件包拥有注册 机制 和合同; 消费者拥有每个原子 实例。 。 。 . - 反应渲染层. 只有类型级的渲染模式合同。 这个
<AtomRenderer>, (中文(简体) ),<AtomShell>每模式组件,焦点存储 接通了,右侧的状态机器 所有船在后来的兄弟 软件包. - 加密锁定
atom_events。 。 。 .chainHash实值 今天确定性SHA-256; Merkle root + 外部锚地 后来的里程碑. - 真正的VDA后卫.
wrapForStorage编号 :unwrapFromStorage为: 无操作; 真正的信封、 版本链和墓碑语义 在后来的里程碑中着陆.
线性
此软件包提取工作空间- 私人 @workspace/empressa-atom
住在这里的人 legacy-design-tools/lib/empressa-atom/B. 框架
已逐字保存;只有软件包名称和 @workspace/db
测试时间依赖性改变.
许可证
见利能斯.