@g1cloud/bpmn-modeler-next 5.0.0-alpha.9 → 5.0.0-alpha.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/describeProcess.d.ts +14 -3
- package/dist/agent/elementDiff.d.ts +53 -0
- package/dist/agent/geometryAudit.d.ts +486 -4
- package/dist/agent/resolver/index.d.ts +27 -1
- package/dist/agent/resolver/issues.d.ts +12 -0
- package/dist/agent/resolver/lower.d.ts +108 -0
- package/dist/agent/resolver/routeRepair.d.ts +215 -5
- package/dist/agent/semanticAudit.d.ts +36 -0
- package/dist/agent/symbolicOp.d.ts +11 -4
- package/dist/bpmn-modeler-next.css +1 -1
- package/dist/bpmn-modeler.js +13596 -10339
- package/dist/bpmn-modeler.umd.cjs +107 -106
- package/dist/core/hints.d.ts +28 -0
- package/dist/core/ir.d.ts +32 -6
- package/dist/editor/controller.d.ts +65 -0
- package/dist/index.d.ts +4 -0
- package/dist/view/BpmnValidationPanel.vue.d.ts +6 -0
- package/dist/view/validationDisplay.d.ts +34 -0
- package/package.json +2 -1
package/dist/core/hints.d.ts
CHANGED
|
@@ -19,6 +19,26 @@ export interface BwlPlacement {
|
|
|
19
19
|
}
|
|
20
20
|
/** 밴드 지정 힌트 — 프로세스 내부 가로 밴드(주 흐름 / 보조 스트랜드) 순번 */
|
|
21
21
|
export type BwlBand = number;
|
|
22
|
+
/**
|
|
23
|
+
* 열 지목 힌트 — **그 노드보다 뒤(오른쪽) 열**에 둔다(표본 73 · 2026-09-22 신설).
|
|
24
|
+
*
|
|
25
|
+
* 🔴 **좌표가 아니라 관계다**(불변식 3) — `band` 가 행을 「가리키는 것」이지 y 가 아닌 것과 같은 성격이고,
|
|
26
|
+
* 실제 x 는 호스트가 산출한다(정렬·압축은 그 뒤에도 그대로 적용된다).
|
|
27
|
+
*
|
|
28
|
+
* **왜 필요한가** — 시퀀스 유입이 없는 수신 노드(메시지만 받는 노드)는 열을 정할 근거가 도구에 없다.
|
|
29
|
+
* 메시지 정렬(§4)은 송신자 열을 이어받고 블랙박스면 패스스루(B-36)로 **그 풀에 들어온** 메시지의
|
|
30
|
+
* 송신자 열을 쓰는데, 🔴 **보내기만 하는 블랙박스 풀에는 그 소스가 없다**(표본 73 실측: 그 문서의
|
|
31
|
+
* 시퀀스 유입 0 수신 노드 **5개 전부**가 이 형상). 그래서 시드가 고른 **풀 좌단**이 그대로 남고,
|
|
32
|
+
* 「시간축으로는 뒤쪽인 프로세스가 앞쪽에 놓여 선이 먼 거리를 돌아오는」 그림이 된다(사용자 증언).
|
|
33
|
+
*
|
|
34
|
+
* ⚠ **기계적 보완이 일반화되지 않는다** — 「형제 수신 노드의 열을 이어받는다」 같은 fallback 은 그
|
|
35
|
+
* 풀이 메시지를 **둘 이상 보낼 때만** 소스가 생기는데 실무 문서는 하나씩 보낸다(위 5/5). ⇒ 남는 길은
|
|
36
|
+
* **에이전트가 의미로 지목하는 것**이고 이 힌트가 그 채널이다.
|
|
37
|
+
*
|
|
38
|
+
* 값 = 기준 노드 id. ⚠ **참조가 깨져도 무해하다**(힌트 = 파생 정보 · 불변식 2) — 해소되지 않으면
|
|
39
|
+
* 힌트가 없는 것과 같이 동작한다.
|
|
40
|
+
*/
|
|
41
|
+
export type BwlAfterColumn = string;
|
|
22
42
|
/** 풀 세로 순서 힌트 */
|
|
23
43
|
export type BwlPoolOrder = number;
|
|
24
44
|
/**
|
|
@@ -70,6 +90,14 @@ export declare const BWL_MODDLE_SCHEMA: {
|
|
|
70
90
|
readonly isAttr: true;
|
|
71
91
|
readonly type: "Integer";
|
|
72
92
|
}];
|
|
93
|
+
}, {
|
|
94
|
+
readonly name: "AfterColumnHint";
|
|
95
|
+
readonly extends: readonly ["bpmn:FlowNode"];
|
|
96
|
+
readonly properties: readonly [{
|
|
97
|
+
readonly name: "afterColumn";
|
|
98
|
+
readonly isAttr: true;
|
|
99
|
+
readonly type: "String";
|
|
100
|
+
}];
|
|
73
101
|
}, {
|
|
74
102
|
readonly name: "PoolOrderHint";
|
|
75
103
|
readonly extends: readonly ["bpmn:Participant"];
|
package/dist/core/ir.d.ts
CHANGED
|
@@ -6,13 +6,32 @@
|
|
|
6
6
|
* 타입은 표준 BPMN 1:1 — AI 전용 타입 신설 금지(불변식 4).
|
|
7
7
|
*/
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* **IR 이 표현하는 플로우 노드 타입** — `describeProcess` 가 노드로 내는 전량(read 집합).
|
|
10
|
+
*
|
|
11
|
+
* 🔴 `subProcess`·`boundaryEvent` 는 2026-09-21 승격됐다(B-87 ⓐ). 종전 강등 근거였던
|
|
12
|
+
* 「실파일 0건」은 **반품(고객측) 한 문서** 기준이었고, 코퍼스 26종 실측에서 무효화됐다
|
|
13
|
+
* (`subProcess` 22 · `boundaryEvent` 1 보유). 승격 전에는 그 타입이 든 문서에서 describe 가
|
|
14
|
+
* 끝점까지 지워 에이전트가 문서 절반을 못 봤다(실측 = `現行POS` 에서 메시지플로우 22건 소실).
|
|
15
|
+
*
|
|
16
|
+
* ⚠ **이 집합은 `ADDABLE_FLOW_NODE_TYPES` 의 상위집합이다** — 읽을 수 있다고 만들 수 있는 것이
|
|
17
|
+
* 아니다. 승격은 **불투명**이다: subProcess 를 노드로 내되 내부는 열지 않는다(내부 요소는
|
|
18
|
+
* `inside-container` 로 알린다). intermediate 계열(ⓑ)은 배치 실증이 없어 다음 단계다.
|
|
19
|
+
*/
|
|
20
|
+
export declare const IR_FLOW_NODE_TYPES: readonly ["startEvent", "endEvent", "userTask", "serviceTask", "task", "sendTask", "receiveTask", "exclusiveGateway", "parallelGateway", "subProcess", "boundaryEvent"];
|
|
21
|
+
/**
|
|
22
|
+
* **op 가 새로 만들거나 타입 전환할 수 있는 집합**(write 집합) — 배치 하강이 실증된 것만.
|
|
23
|
+
*
|
|
24
|
+
* 🔴 read 와 갈라 둔 이유: 두 집합을 한 상수로 쓰면 승격이 `node.add`·`node.update` 어휘까지
|
|
25
|
+
* 함께 열어 **하강이 준비되지 않은 타입을 에이전트가 보낼 수 있게 된다**. `subProcess` 는 내부
|
|
26
|
+
* 좌표계를, `boundaryEvent` 는 `attachedToRef` 좌표 종속을 요구해 배치 축이 새로 생기는데
|
|
27
|
+
* (B-87 미측정 축 ①), 그 축은 이번 승격 범위 밖이다. 스키마 enum 이 1차 방어이고
|
|
28
|
+
* validator 의 `node-type-unsupported` 가 2차 방어다(Defense in Depth).
|
|
12
29
|
*/
|
|
13
|
-
export declare const
|
|
14
|
-
export type IrFlowNodeType = (typeof
|
|
15
|
-
export
|
|
30
|
+
export declare const ADDABLE_FLOW_NODE_TYPES: readonly ["startEvent", "endEvent", "userTask", "serviceTask", "task", "sendTask", "receiveTask", "exclusiveGateway", "parallelGateway"];
|
|
31
|
+
export type IrFlowNodeType = (typeof IR_FLOW_NODE_TYPES)[number];
|
|
32
|
+
export type AddableFlowNodeType = (typeof ADDABLE_FLOW_NODE_TYPES)[number];
|
|
33
|
+
export declare function isIrFlowNodeType(type: string): type is IrFlowNodeType;
|
|
34
|
+
export declare function isAddableFlowNodeType(type: string): type is AddableFlowNodeType;
|
|
16
35
|
export interface IrLane {
|
|
17
36
|
id: string;
|
|
18
37
|
name?: string;
|
|
@@ -36,6 +55,13 @@ export interface IrNode {
|
|
|
36
55
|
participant?: string;
|
|
37
56
|
/** 소속 레인 (A-3) */
|
|
38
57
|
lane?: string;
|
|
58
|
+
/**
|
|
59
|
+
* `boundaryEvent` 의 부착 대상 (B-87 ⓐ). **eventDefinition 과 다른 축이다** — 어떤 이벤트인지는
|
|
60
|
+
* 열지 않았지만(코퍼스 실측 1건) 부착 대상은 구조적 필수다: BPMN 에서 `attachedToRef` 없는
|
|
61
|
+
* boundaryEvent 는 무효이고, 이것이 없으면 에이전트에게 떠 있는 노드로 읽혀 탈출 흐름의 의미를
|
|
62
|
+
* 잃는다(실측 = `出荷_BNKR` 의 error 경계 이벤트가 subProcess 에 붙어 탈출 간선을 낸다).
|
|
63
|
+
*/
|
|
64
|
+
attachedTo?: string;
|
|
39
65
|
}
|
|
40
66
|
/**
|
|
41
67
|
* 조건은 게이트웨이가 아닌 플로우에 붙인다.
|
|
@@ -2,6 +2,25 @@ import { InjectionKey, Ref } from 'vue';
|
|
|
2
2
|
import { default as Modeler } from 'bpmn-js/lib/Modeler';
|
|
3
3
|
import { CommandSeam } from '../command/commandSeam';
|
|
4
4
|
import { ApplyBatchOutcome, BpmnOpBatch } from '../agent/agentBatch';
|
|
5
|
+
import { GeometryFinding } from '../agent/geometryAudit';
|
|
6
|
+
import { SemanticIssue } from '../agent/semanticAudit';
|
|
7
|
+
/**
|
|
8
|
+
* 판정 2종의 **현재 캔버스 결과** — 하단 검증 패널(B-103 ⓑ · B-105 ⓑ)의 단일 출처.
|
|
9
|
+
*
|
|
10
|
+
* 🔴 **두 축을 합치지 않고 원형 그대로 낸다.** 형태가 다르고(`GeometryFinding{kind}` ↔
|
|
11
|
+
* `SemanticIssue{ruleId,severity}`) 심각도 축도 한쪽에만 있다 — 합치려면 매핑이 필요한데
|
|
12
|
+
* 그 매핑은 **표시 결정**이라 뷰 계층 소유다(`view/validationDisplay`). 컨트롤러가 합치면
|
|
13
|
+
* 표시 어휘가 문서 상태 계층으로 새고, 배치 응답 계약(`ApplyBpmnOpsResult.findings`)과도
|
|
14
|
+
* 형태가 갈린다.
|
|
15
|
+
*
|
|
16
|
+
* ⚠ **배치 응답 `findings` 와 지위가 다르다** — 그쪽은 *"이 배치가 새로 만든 것"* 만 내고,
|
|
17
|
+
* 이쪽은 **그 문서에 있는 전부**(선재 포함)다. 패널의 수신자는 사람이고, 사람이 고칠 것에는
|
|
18
|
+
* 자기가 물려받은 base 의 결함이 포함된다(B-103 실측: 고립 노드 17건이 **전부** base 유래).
|
|
19
|
+
*/
|
|
20
|
+
export interface BpmnDocumentIssues {
|
|
21
|
+
geometry: GeometryFinding[];
|
|
22
|
+
semantic: SemanticIssue[];
|
|
23
|
+
}
|
|
5
24
|
export interface ImportXmlResult {
|
|
6
25
|
/** import 경고(표시용 메시지) — 수용 기준상 실운영 문서는 빈 배열이어야 한다. */
|
|
7
26
|
warnings: string[];
|
|
@@ -37,6 +56,52 @@ export interface BpmnEditorController extends CommandSeam {
|
|
|
37
56
|
readonly editable: Readonly<Ref<boolean>>;
|
|
38
57
|
/** 배치 적용이 진행 중인 구간 — 호스트 UI 의 "AI 반영 중" 표시용. */
|
|
39
58
|
readonly agentBusy: Readonly<Ref<boolean>>;
|
|
59
|
+
/**
|
|
60
|
+
* 현재 캔버스의 판정 결과 — `attach`·`importXml`·모든 모델 변경 뒤 자동 갱신된다.
|
|
61
|
+
* 🔴 **`editable` 과 무관하게 유지된다** — 조회 전용이어도 경고는 보여야 고친다(시블링 원칙).
|
|
62
|
+
*/
|
|
63
|
+
readonly issues: Readonly<Ref<BpmnDocumentIssues>>;
|
|
64
|
+
/** 수동 재판정 — 자동 트리거(커맨드·임포트) 밖에서 상태를 다시 읽어야 할 때. */
|
|
65
|
+
revalidate(): void;
|
|
66
|
+
/**
|
|
67
|
+
* 「이번 작업분」 — 패널이 판정 항목을 **이번 회차의 것**과 **base 기저**로 가르는 범위 축(B-109 ⓑ).
|
|
68
|
+
*
|
|
69
|
+
* 🔴 **왜 컨트롤러가 못 구하고 주입받는가** — 판정은 *지금 문서*만 보므로 「이번」의 기준이
|
|
70
|
+
* 문서 안에 없다. 기준선(그 배치 직전 버전)을 아는 것은 호스트이고, 산출기는 `diffBpmnElements`
|
|
71
|
+
* 다. 그래서 여기는 **받아서 들고 있기만** 한다.
|
|
72
|
+
*
|
|
73
|
+
* 🔴 **N20 이 집합의 내용을 정했다**(2026-09-26 · 배치 회차 82 · 패널 항목 621) — 「배치 op 이
|
|
74
|
+
* **만든** id」만 넣으면 사람이 실제로 고친 항목의 **34%** 밖에 못 지킨다. update 회차 결함의
|
|
75
|
+
* 대부분이 *만든 것*이 아니라 ***민 것***이기 때문이다. `touchedElements(diff)`(만든 것 ∪ 만진 것)를
|
|
76
|
+
* 넣으면 **94%** 를 지킨다.
|
|
77
|
+
*
|
|
78
|
+
* `undefined` = 축 없음(현행 동작 그대로 — 태그도 정렬 변경도 없다).
|
|
79
|
+
*/
|
|
80
|
+
setChangeScope(ids: Iterable<string> | undefined): void;
|
|
81
|
+
/** 주입된 「이번 작업분」 집합. 패널이 읽는다. */
|
|
82
|
+
readonly changeScope: Readonly<Ref<ReadonlySet<string> | undefined>>;
|
|
83
|
+
/**
|
|
84
|
+
* 요소를 화면 중앙으로 끌어오고 선택한다 — 패널 항목 클릭의 착지점.
|
|
85
|
+
* 없는 id(이미 지워진 요소)는 **조용히 무시**한다: 패널은 판정 시점의 스냅샷이라
|
|
86
|
+
* 그 사이 사라질 수 있고, 그것이 예외로 올라오면 클릭 한 번이 화면을 깬다.
|
|
87
|
+
*/
|
|
88
|
+
requestFocus(elementId: string): void;
|
|
89
|
+
/**
|
|
90
|
+
* 요소를 사람이 읽을 말로 바꾸기 위한 단서 — 패널이 판정 결과의 id 를 문장으로 풀 때 쓴다.
|
|
91
|
+
*
|
|
92
|
+
* 🔴 **이름만으로는 부족하다** — 실문서(표본 73 base)에서 겹친 두 요소가 **둘 다 무명**이라
|
|
93
|
+
* "이름 없는 요소와 이름 없는 요소가 겹칩니다"가 나왔다(실측 2건). 종류가 함께 와야 문장이
|
|
94
|
+
* 갈린다("게이트웨이와 주석이 겹칩니다"). 종류 **어휘**는 표시 결정이라 뷰가 소유하고, 여기서는
|
|
95
|
+
* moddle `$type` 원본만 넘긴다.
|
|
96
|
+
*/
|
|
97
|
+
describeElement(elementId: string): ElementDescription | undefined;
|
|
98
|
+
}
|
|
99
|
+
/** `describeElement` 의 반환 — 표시 문장을 만들기 위한 최소 단서. */
|
|
100
|
+
export interface ElementDescription {
|
|
101
|
+
/** 사람이 붙인 이름. 주석은 `name` 이 아니라 `text` 를 쓰므로 둘을 한 자리로 접는다. */
|
|
102
|
+
name?: string;
|
|
103
|
+
/** moddle 타입 리터럴(`bpmn:ExclusiveGateway` 등). 종류 명사로의 번역은 소비측 몫이다. */
|
|
104
|
+
type: string;
|
|
40
105
|
}
|
|
41
106
|
export declare const EDITOR: InjectionKey<BpmnEditorController>;
|
|
42
107
|
export declare function createBpmnEditorController(): BpmnEditorController;
|
package/dist/index.d.ts
CHANGED
|
@@ -8,10 +8,14 @@ export * from './agent/schema';
|
|
|
8
8
|
export * from './agent/resolver';
|
|
9
9
|
export * from './agent/describeProcess';
|
|
10
10
|
export * from './agent/geometryAudit';
|
|
11
|
+
export * from './agent/semanticAudit';
|
|
12
|
+
export * from './agent/elementDiff';
|
|
11
13
|
export * from './agent/agentBatch';
|
|
12
14
|
export * from './editor/controller';
|
|
13
15
|
export * from './adapter/i18n';
|
|
14
16
|
export * from './adapter/extensions';
|
|
15
17
|
export * from './adapter/xml';
|
|
16
18
|
export * from './headless';
|
|
19
|
+
export * from './view/validationDisplay';
|
|
17
20
|
export { default as BpmnModelerView } from './view/BpmnModelerView.vue';
|
|
21
|
+
export { default as BpmnValidationPanel } from './view/BpmnValidationPanel.vue';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BpmnEditorController } from '../editor/controller';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
controller: BpmnEditorController;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
6
|
+
export default _default;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { BpmnDocumentIssues, ElementDescription } from '../editor/controller';
|
|
2
|
+
import { IssueSeverity } from '../agent/semanticAudit';
|
|
3
|
+
/** 요소 id → 표시 단서. 없으면 `undefined`(이미 지워진 요소). `controller.describeElement` 를 받는다. */
|
|
4
|
+
export type ElementDescriber = (elementId: string) => ElementDescription | undefined;
|
|
5
|
+
export interface PanelIssue {
|
|
6
|
+
/** 목록 키 겸 중복 판별 — 기하는 `geometryFindingKey`(배치 diff 와 같은 키), 의미론은 규칙+대상. */
|
|
7
|
+
key: string;
|
|
8
|
+
source: 'geometry' | 'semantic';
|
|
9
|
+
/** 원 코드(`kind` 또는 `ruleId`) — 툴팁으로 보존한다(사용자에겐 분류 라벨만 보인다). */
|
|
10
|
+
code: string;
|
|
11
|
+
severity: IssueSeverity;
|
|
12
|
+
/** 포커스 대상 — 첫 항목이 주 대상이다. 빈 배열이면 클릭 불가(문서 전체 이슈). */
|
|
13
|
+
targetRefs: string[];
|
|
14
|
+
category: string;
|
|
15
|
+
message: string;
|
|
16
|
+
}
|
|
17
|
+
/** 정렬 우선순위 — 심각도 순. 같은 심각도 안에서는 판정이 낸 순서를 유지한다(문서 순). */
|
|
18
|
+
export declare const SEVERITY_ORDER: Record<IssueSeverity, number>;
|
|
19
|
+
/**
|
|
20
|
+
* 판정 2종 → 패널 항목. 순수 함수 — `describe` 주입으로 캔버스 의존을 밖에 둔다(테스트 가능).
|
|
21
|
+
* 기하가 앞, 의미론이 뒤이지만 패널이 심각도로 다시 정렬하므로 순서 자체는 계약이 아니다.
|
|
22
|
+
*/
|
|
23
|
+
export declare function toPanelIssues(issues: BpmnDocumentIssues, describe: ElementDescriber): PanelIssue[];
|
|
24
|
+
/** 심각도별 건수 — 패널 헤더의 카운트 바(접힘 상태에서도 상시 보인다). */
|
|
25
|
+
export declare function countBySeverity(issues: readonly PanelIssue[]): Record<IssueSeverity, number>;
|
|
26
|
+
/** 이 항목이 「이번 작업분」인가. 범위 축이 없으면(`undefined`) 언제나 false 다. */
|
|
27
|
+
export declare function isInChangeScope(issue: PanelIssue, scope: ReadonlySet<string> | undefined): boolean;
|
|
28
|
+
/** 범위 축을 **노출할 가치가 있는가** = 이번 것과 base 기저가 섞여 있는가(채택 조건 ②). */
|
|
29
|
+
export declare function isChangeScopeMixed(issues: readonly PanelIssue[], scope: ReadonlySet<string> | undefined): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* 표시 순서 — 섞여 있을 때만 「이번 작업분」을 위로 올리고, 그 안에서는 심각도 순이다.
|
|
32
|
+
* ⚠ **거르지 않는다**(채택 조건 ①) — 반환 길이는 입력과 같다.
|
|
33
|
+
*/
|
|
34
|
+
export declare function sortPanelIssues(issues: readonly PanelIssue[], scope: ReadonlySet<string> | undefined): PanelIssue[];
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@g1cloud/bpmn-modeler-next",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "5.0.0-alpha.
|
|
4
|
+
"version": "5.0.0-alpha.91",
|
|
5
5
|
"description": "Vue 3 BPMN document authoring editor (bpmn-js based) with AI agent authoring",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"files": [
|
|
@@ -54,6 +54,7 @@
|
|
|
54
54
|
"test": "vitest run",
|
|
55
55
|
"test:watch": "vitest",
|
|
56
56
|
"typecheck": "vue-tsc --noEmit",
|
|
57
|
+
"docs:size": "node scripts/check-docs-size.mjs",
|
|
57
58
|
"check": "pnpm run test && pnpm run build"
|
|
58
59
|
}
|
|
59
60
|
}
|