Files
JX-BPOS/packages/contracts/src/id.ts
T
JCAI Main AgentandClaude Opus 5 14d4fa046a M1: 底座 —— @contracts 首版 + event / ledger / org / llm
@contracts 首版(§8.1 九个文件):
- id 品牌 ID / terminal 终态五名与归侧四标签 / envelope 信封六字段与四类事件
- card 工单两模式 + 对话卡族(形状对齐 2026-07-26 原型定稿)
- contract7 契约七件 / ledger 三级寻址与写三分 / process-package 流程包 DSL 与触发器三类
- manifest 活动包清单六区(含 CMMN·DMN·步序声明的资产形状)/ org / api 路由契约

模块(L1):
- event   信封存储、归属解析三级短路、投递五诺、监听注册表、三级消费裁定
- ledger  schema 自生长(最大化合并/最宽类型/只增不破坏)、任务视图叠加、写三分、冲突检查
- org     岗位授权(客体三类×动作三种)、停用前置检查、会话、种子播种
- llm     四元绑定、ModelGateway 三模式(live/record/replay)—— 两缝之一

app 装配:Hono 服务 + 鉴权中间件 + 治理台/工作台路由;drizzle 迁移;AES-256-GCM 凭证密封

ADR-007 工具链与门禁 · ADR-008 投递队列 · ADR-009 凭证加密
(ADR 编号自 007 续:编码规范 §14 已用到 006,README 写「从 005 续」是笔误)

门禁五道全绿;96 个测试通过,含对真实 PG 的 ledger 集成测试

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
2026-07-27 00:59:14 +08:00

94 lines
4.7 KiB
TypeScript

/**
* 品牌 ID(编码规范 §8.1)。
*
* 每一类 ID 有自己的名义类型 —— TaskId 传不进要 WorkflowId 的位置,编译期就拦下。
* 运行时形态一律是非空字符串;生成归 adapter(clock / uuid 走 port,domain 零随机)。
*/
import { z } from 'zod';
function brandedId<B extends string>(_brand: B, label: string) {
return z
.string()
.min(1, `${label}不得为空`)
.max(128, `${label}过长`)
.brand<B>();
}
/* ── 组织 ─────────────────────────────────────────────────────────────── */
export const staffIdSchema = brandedId('StaffId', '员工 ID');
export type StaffId = z.infer<typeof staffIdSchema>;
export const positionIdSchema = brandedId('PositionId', '岗位 ID');
export type PositionId = z.infer<typeof positionIdSchema>;
/* ── 流程层 ───────────────────────────────────────────────────────────── */
export const processPackageIdSchema = brandedId('ProcessPackageId', '流程包 ID');
export type ProcessPackageId = z.infer<typeof processPackageIdSchema>;
export const workflowIdSchema = brandedId('WorkflowId', '工作流 ID');
export type WorkflowId = z.infer<typeof workflowIdSchema>;
export const nodeIdSchema = brandedId('NodeId', '节点 ID');
export type NodeId = z.infer<typeof nodeIdSchema>;
export const triggerIdSchema = brandedId('TriggerId', '触发器 ID');
export type TriggerId = z.infer<typeof triggerIdSchema>;
export const approvalIdSchema = brandedId('ApprovalId', '审批单 ID');
export type ApprovalId = z.infer<typeof approvalIdSchema>;
/* ── 活动与任务 ───────────────────────────────────────────────────────── */
export const activityIdSchema = brandedId('ActivityId', '活动 ID');
export type ActivityId = z.infer<typeof activityIdSchema>;
export const taskIdSchema = brandedId('TaskId', '任务 ID');
export type TaskId = z.infer<typeof taskIdSchema>;
export const deliverableIdSchema = brandedId('DeliverableId', '过程成果 ID');
export type DeliverableId = z.infer<typeof deliverableIdSchema>;
export const stageIdSchema = brandedId('StageId', '阶段 ID');
export type StageId = z.infer<typeof stageIdSchema>;
/* ── 人类工具 ─────────────────────────────────────────────────────────── */
export const cardIdSchema = brandedId('CardId', '卡 ID');
export type CardId = z.infer<typeof cardIdSchema>;
export const workOrderIdSchema = brandedId('WorkOrderId', '工单 ID');
export type WorkOrderId = z.infer<typeof workOrderIdSchema>;
/* ── 事件 ─────────────────────────────────────────────────────────────── */
export const eventIdSchema = brandedId('EventId', '事件 ID');
export type EventId = z.infer<typeof eventIdSchema>;
export const deliveryIdSchema = brandedId('DeliveryId', '投递 ID');
export type DeliveryId = z.infer<typeof deliveryIdSchema>;
export const listenerIdSchema = brandedId('ListenerId', '监听 ID');
export type ListenerId = z.infer<typeof listenerIdSchema>;
export const messageIdSchema = brandedId('MessageId', '消息 ID');
export type MessageId = z.infer<typeof messageIdSchema>;
/* ── 调用层与基座 ─────────────────────────────────────────────────────── */
export const toolIdSchema = brandedId('ToolId', '工具 ID');
export type ToolId = z.infer<typeof toolIdSchema>;
export const llmInstanceIdSchema = brandedId('LlmInstanceId', 'LLM 实例 ID');
export type LlmInstanceId = z.infer<typeof llmInstanceIdSchema>;
export const channelIdSchema = brandedId('ChannelId', '通道实例 ID');
export type ChannelId = z.infer<typeof channelIdSchema>;
export const skillIdSchema = brandedId('SkillId', '技能 ID');
export type SkillId = z.infer<typeof skillIdSchema>;
export const memoryEntryIdSchema = brandedId('MemoryEntryId', '记忆条目 ID');
export type MemoryEntryId = z.infer<typeof memoryEntryIdSchema>;
export const actionIntentIdSchema = brandedId('ActionIntentId', '动作意向 ID');
export type ActionIntentId = z.infer<typeof actionIntentIdSchema>;
export const minuteIdSchema = brandedId('MinuteId', '纪要 ID');
export type MinuteId = z.infer<typeof minuteIdSchema>;