forked from ChaiHao/BPOS-MVP
基线:鉴权会话+工作组+工作台三区修复+编排工作区+产品设计文档
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
This commit is contained in:
@@ -71,6 +71,8 @@ export const edgeSchema = z.object({
|
||||
mapping: z.array(fieldMappingSchema).default([]),
|
||||
/** 边标签:画布上的出口名(如「TYPE-A」「通过」) */
|
||||
label: z.string().optional(),
|
||||
/** 边标签色调(呈现):ok = 绿(通过类) / bad = 红(驳回类) */
|
||||
tone: z.enum(['ok', 'bad']).optional(),
|
||||
/** 回边标记:人裁决后重开新任务实例(同节点、新任务 ID、留痕关联) */
|
||||
reopen: z.boolean().default(false),
|
||||
});
|
||||
@@ -117,8 +119,20 @@ export const GATEWAY_KIND_LABEL: Readonly<Record<GatewayKind, string>> = {
|
||||
const nodeBase = {
|
||||
id: nodeIdSchema,
|
||||
label: z.string().min(1),
|
||||
/** 画布坐标 —— 布局引擎的输入;不影响语义 */
|
||||
layout: z.object({ row: z.number().int(), col: z.number().int() }).optional(),
|
||||
/** 画布上的第二行小字(如「照谱执行 / 临场演绎」)—— 呈现注记,不影响语义 */
|
||||
sub: z.string().optional(),
|
||||
/**
|
||||
* 画布坐标 —— 布局引擎的输入;不影响语义。
|
||||
* row/col = 编译布局的行列;x/y = **手绘几何**(编辑器保存后,手绘成为呈现真相)。
|
||||
*/
|
||||
layout: z
|
||||
.object({
|
||||
row: z.number().int(),
|
||||
col: z.number().int(),
|
||||
x: z.number().optional(),
|
||||
y: z.number().optional(),
|
||||
})
|
||||
.optional(),
|
||||
};
|
||||
|
||||
export const processNodeSchema = z.discriminatedUnion('kind', [
|
||||
@@ -134,6 +148,13 @@ export const processNodeSchema = z.discriminatedUnion('kind', [
|
||||
kind: z.literal('activity'),
|
||||
/** 以声明入流:引用活动库中已安装的活动 */
|
||||
activityId: activityIdSchema,
|
||||
/**
|
||||
* 契约注记(编排定契约,AM 03):这个节点**声明**吃什么、吐什么。
|
||||
* 是「导出依赖文件」的骨架 —— 开发者对着声明在系统外开发活动;
|
||||
* 闭合校验的机检仍以边映射与活动契约面为准,注记是给人读的那一层。
|
||||
*/
|
||||
in: z.array(z.string()).optional(),
|
||||
out: z.array(z.string()).optional(),
|
||||
/** 版本约束:留空 = 装配时取最新生效版 */
|
||||
activityVersion: z.string().optional(),
|
||||
owner: ownerSpecSchema,
|
||||
@@ -160,6 +181,8 @@ export const processNodeSchema = z.discriminatedUnion('kind', [
|
||||
gateway: gatewayKindSchema,
|
||||
/** 分叉 / 汇合 */
|
||||
mode: z.enum(['fork', 'join']),
|
||||
/** 判据说明(人读):条件本体仍在出边的 S-FEEL 上,这里是「为什么这么分」 */
|
||||
basis: z.string().optional(),
|
||||
}),
|
||||
]);
|
||||
export type ProcessNode = z.infer<typeof processNodeSchema>;
|
||||
@@ -190,6 +213,12 @@ export const processPackageSchema = z.object({
|
||||
/** 流程变量声明:边映射的 workflow-var 来源 */
|
||||
variables: z.array(z.object({ name: z.string().min(1), schema: jsonSchemaSchema })).default([]),
|
||||
description: z.string().optional(),
|
||||
/**
|
||||
* 手绘图存证(可空):编辑器保存的 FlowGraph 原样落此 —— **手绘几何即呈现真相**。
|
||||
* 语义(节点/边/映射)永远以上面的 nodes/edges 为准,流转判断不读它;
|
||||
* 它只承载语义装不下的画布事实:卡点、行分组、锚定、折线点。
|
||||
*/
|
||||
diagram: z.record(z.string(), z.unknown()).optional(),
|
||||
});
|
||||
export type ProcessPackage = z.infer<typeof processPackageSchema>;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user