@nac3/forge-cli 1.0.57 → 1.0.58
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/chat/flow_bpmn.d.ts +57 -38
- package/dist/chat/flow_bpmn.d.ts.map +1 -1
- package/dist/chat/flow_bpmn.js +170 -53
- package/dist/chat/flow_bpmn.js.map +1 -1
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +14 -8
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/tools/pizarron.d.ts.map +1 -1
- package/dist/chat/tools/pizarron.js +17 -8
- package/dist/chat/tools/pizarron.js.map +1 -1
- package/dist/docs/doctrine/pizarron.md +20 -10
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/doctrine/pizarron.md +20 -10
- package/package.json +1 -1
package/dist/chat/flow_bpmn.d.ts
CHANGED
|
@@ -1,54 +1,73 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* flow_bpmn.ts --
|
|
3
|
-
*
|
|
2
|
+
* flow_bpmn.ts -- server-side enforcement of the pizarron KIND SELECTION rule
|
|
3
|
+
* for process/flow diagrams.
|
|
4
4
|
*
|
|
5
5
|
* Problem (Pablo, 2026-07-04): even though the always-on doctrine digest AND
|
|
6
|
-
* the create-tab verb description AND the pizarron doctrine all say "a
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* server-side: when the brain creates a `graph` whose TITLE reads like a
|
|
12
|
-
* process/flow, we convert the {nodes,edges} into a BPMN {nodes,flows} model
|
|
13
|
-
* and let the proper BPMN renderer draw it.
|
|
6
|
+
* the create-tab verb description AND the pizarron doctrine all say "a FLUJO /
|
|
7
|
+
* proceso / flowchart -> kind=bpmn, NEVER kind=graph", some brains keep
|
|
8
|
+
* creating a process as kind='graph' -- a force-directed node web that looks
|
|
9
|
+
* awful for an ordered flow. The instruction is already there and the model
|
|
10
|
+
* ignores it, so more prompt text will not fix it. We enforce it server-side.
|
|
14
11
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
12
|
+
* TWO layers (the "combo"):
|
|
13
|
+
* B (nudge) -- the FIRST time a graph-for-a-flow arrives, we REJECT the tab
|
|
14
|
+
* with a precise tool-result telling the brain to re-create it
|
|
15
|
+
* as kind='bpmn' (native BPMN: proper events / gateways /
|
|
16
|
+
* lanes). Most brains comply in the same tool-calling loop.
|
|
17
|
+
* A (safety) -- if the brain RESENDS the same graph (reincidence) instead of
|
|
18
|
+
* obeying, we deterministically convert {nodes,edges} into a
|
|
19
|
+
* BPMN {nodes,flows} model and render it. No LLM round-trip,
|
|
20
|
+
* so the user NEVER ends up with an ugly flow, whatever the
|
|
21
|
+
* brain does.
|
|
22
|
+
*
|
|
23
|
+
* Detection does NOT rely only on flow-words in the title: a broadened title
|
|
24
|
+
* lexicon PLUS a structural test (a graph that is an acyclic, sparse, ordered
|
|
25
|
+
* sequence -- or has labelled decision branches -- reads as a flow even when
|
|
26
|
+
* the title has no flow-word, e.g. "Alta de cliente"). Real relationship /
|
|
27
|
+
* dependency graphs (title says grafo / relaciones / dependencias / organigrama
|
|
28
|
+
* / entidad-relacion, or the structure is a dense web) are left untouched.
|
|
19
29
|
*
|
|
20
30
|
* ASCII-only.
|
|
21
31
|
*/
|
|
22
32
|
/** Does the tab title read like a process/flow request? */
|
|
23
33
|
export declare function looksLikeFlowTitle(title: string): boolean;
|
|
34
|
+
/** True when the graph STRUCTURE reads like an ordered flow even if the title
|
|
35
|
+
* is neutral: acyclic + sparse + (a simple chain OR a labelled decision OR at
|
|
36
|
+
* least one labelled edge). A dense or cyclic web returns false. */
|
|
37
|
+
export declare function graphLooksLikeFlow(content: string): boolean;
|
|
38
|
+
/** Combined decision: is this graph tab actually a process/flow? Title veto
|
|
39
|
+
* (relationship words) wins; then flow-words; then structure. */
|
|
40
|
+
export declare function isFlowContext(title: string, content: string): boolean;
|
|
24
41
|
/**
|
|
25
|
-
* Convert a graph `{nodes
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* Heuristics:
|
|
31
|
-
* - node with no incoming edge -> preceded by a synthetic startEvent;
|
|
32
|
-
* - node with no outgoing edge -> followed by a synthetic endEvent;
|
|
33
|
-
* - node with 2+ outgoing edges AND at least one labelled -> exclusive
|
|
34
|
-
* gateway (a decision); the node label becomes the diamond label;
|
|
35
|
-
* - every other node -> task.
|
|
42
|
+
* Convert a graph `{nodes,edges}` JSON string into a BPMN `{nodes,flows}` JSON
|
|
43
|
+
* string. Returns null when the content is not a parseable, connected graph.
|
|
44
|
+
* Heuristics: source node -> preceded by a synthetic startEvent; sink -> a
|
|
45
|
+
* synthetic endEvent; node with 2+ outgoing AND a labelled branch -> exclusive
|
|
46
|
+
* gateway; everything else -> task.
|
|
36
47
|
*/
|
|
37
48
|
export declare function graphToBpmn(content: string): string | null;
|
|
38
|
-
|
|
39
|
-
|
|
49
|
+
/** The nudge shown to the brain when it draws a flow as a graph. */
|
|
50
|
+
export declare const FLOW_NUDGE_MESSAGE: string;
|
|
51
|
+
/** For tests: forget every remembered nudge. */
|
|
52
|
+
export declare function _resetFlowNudges(): void;
|
|
53
|
+
export type FlowDecision = {
|
|
54
|
+
action: 'passthrough';
|
|
55
|
+
} | {
|
|
56
|
+
action: 'reject';
|
|
57
|
+
message: string;
|
|
58
|
+
} | {
|
|
59
|
+
action: 'convert';
|
|
60
|
+
kind: 'bpmn';
|
|
40
61
|
content: string;
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
export interface PromoteResult {
|
|
44
|
-
kind: string;
|
|
45
|
-
content: string;
|
|
46
|
-
promoted: boolean;
|
|
47
|
-
}
|
|
62
|
+
};
|
|
48
63
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
64
|
+
* Decide what to do with a create-tab. Passthrough for anything that is not a
|
|
65
|
+
* graph-drawn flow. For a graph-drawn flow: nudge the brain to redo it as BPMN
|
|
66
|
+
* the first time (B); on reincidence, convert it deterministically (A).
|
|
52
67
|
*/
|
|
53
|
-
export declare function
|
|
68
|
+
export declare function decideFlowTab(input: {
|
|
69
|
+
kind: string;
|
|
70
|
+
content: string;
|
|
71
|
+
title?: string;
|
|
72
|
+
}): FlowDecision;
|
|
54
73
|
//# sourceMappingURL=flow_bpmn.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow_bpmn.d.ts","sourceRoot":"","sources":["../../src/chat/flow_bpmn.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"flow_bpmn.d.ts","sourceRoot":"","sources":["../../src/chat/flow_bpmn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAiCH,2DAA2D;AAC3D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAIzD;AA+BD;;qEAEqE;AACrE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAqB3D;AAoBD;kEACkE;AAClE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAKrE;AAOD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiC1D;AAID,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,QAM6E,CAAC;AAgB7G,gDAAgD;AAChD,wBAAgB,gBAAgB,IAAI,IAAI,CAAoB;AAE5D,MAAM,MAAM,YAAY,GACpB;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,GACzB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAUpG"}
|
package/dist/chat/flow_bpmn.js
CHANGED
|
@@ -1,45 +1,64 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* flow_bpmn.ts --
|
|
3
|
-
*
|
|
2
|
+
* flow_bpmn.ts -- server-side enforcement of the pizarron KIND SELECTION rule
|
|
3
|
+
* for process/flow diagrams.
|
|
4
4
|
*
|
|
5
5
|
* Problem (Pablo, 2026-07-04): even though the always-on doctrine digest AND
|
|
6
|
-
* the create-tab verb description AND the pizarron doctrine all say "a
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* server-side: when the brain creates a `graph` whose TITLE reads like a
|
|
12
|
-
* process/flow, we convert the {nodes,edges} into a BPMN {nodes,flows} model
|
|
13
|
-
* and let the proper BPMN renderer draw it.
|
|
6
|
+
* the create-tab verb description AND the pizarron doctrine all say "a FLUJO /
|
|
7
|
+
* proceso / flowchart -> kind=bpmn, NEVER kind=graph", some brains keep
|
|
8
|
+
* creating a process as kind='graph' -- a force-directed node web that looks
|
|
9
|
+
* awful for an ordered flow. The instruction is already there and the model
|
|
10
|
+
* ignores it, so more prompt text will not fix it. We enforce it server-side.
|
|
14
11
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
12
|
+
* TWO layers (the "combo"):
|
|
13
|
+
* B (nudge) -- the FIRST time a graph-for-a-flow arrives, we REJECT the tab
|
|
14
|
+
* with a precise tool-result telling the brain to re-create it
|
|
15
|
+
* as kind='bpmn' (native BPMN: proper events / gateways /
|
|
16
|
+
* lanes). Most brains comply in the same tool-calling loop.
|
|
17
|
+
* A (safety) -- if the brain RESENDS the same graph (reincidence) instead of
|
|
18
|
+
* obeying, we deterministically convert {nodes,edges} into a
|
|
19
|
+
* BPMN {nodes,flows} model and render it. No LLM round-trip,
|
|
20
|
+
* so the user NEVER ends up with an ugly flow, whatever the
|
|
21
|
+
* brain does.
|
|
22
|
+
*
|
|
23
|
+
* Detection does NOT rely only on flow-words in the title: a broadened title
|
|
24
|
+
* lexicon PLUS a structural test (a graph that is an acyclic, sparse, ordered
|
|
25
|
+
* sequence -- or has labelled decision branches -- reads as a flow even when
|
|
26
|
+
* the title has no flow-word, e.g. "Alta de cliente"). Real relationship /
|
|
27
|
+
* dependency graphs (title says grafo / relaciones / dependencias / organigrama
|
|
28
|
+
* / entidad-relacion, or the structure is a dense web) are left untouched.
|
|
19
29
|
*
|
|
20
30
|
* ASCII-only.
|
|
21
31
|
*/
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
32
|
+
/* ------------------------------- detection ------------------------------- */
|
|
33
|
+
/** Title reads like an ordered process/flow. Broad on purpose (Pablo asked to
|
|
34
|
+
* catch "flow / chart / grafico de procesos / etc"). */
|
|
35
|
+
const FLOW_TITLE_RE = new RegExp('\\b(' + [
|
|
36
|
+
'flujo', 'flujos', 'flujograma', 'flow', 'flow\\s*chart', 'flowchart',
|
|
37
|
+
'cursograma', 'chart', 'proceso', 'procesos', 'process', 'procedimiento',
|
|
38
|
+
'procedimientos', 'workflow', 'work\\s*flow', 'circuito', 'pipeline',
|
|
39
|
+
'secuencia', 'sequence', 'paso', 'pasos', 'steps', 'etapa', 'etapas',
|
|
40
|
+
'fase', 'fases', 'ciclo', 'tramite', 'bpmn', 'journey', 'recorrido',
|
|
41
|
+
'itinerario', 'ruta', 'diagrama de (flujo|proceso|procesos)',
|
|
42
|
+
'grafico de (proceso|procesos)', 'mapa de (proceso|procesos)',
|
|
43
|
+
].join('|') + ')\\b', 'i');
|
|
44
|
+
/** Title clearly names a relationship / dependency / hierarchy graph -- these
|
|
45
|
+
* are NOT flows and must never be promoted. Checked BEFORE FLOW_TITLE_RE. */
|
|
46
|
+
const RELATION_TITLE_RE = new RegExp('\\b(' + [
|
|
47
|
+
'grafo', 'relaciones', 'relacion', 'relación', 'dependencias', 'dependencia',
|
|
48
|
+
'dependency', 'dependencies', 'relationship', 'network', 'red de',
|
|
49
|
+
'topologia', 'topología', 'topology', 'entidad[- ]relacion',
|
|
50
|
+
'entity[- ]relationship', 'er\\s*diagram', 'organigrama', 'org\\s*chart',
|
|
51
|
+
'organization\\s*chart', 'jerarquia', 'jerarquía', 'hierarchy',
|
|
52
|
+
'mapa mental', 'mind\\s*map', 'que usa (que|a que)',
|
|
53
|
+
].join('|') + ')\\b', 'i');
|
|
25
54
|
/** Does the tab title read like a process/flow request? */
|
|
26
55
|
export function looksLikeFlowTitle(title) {
|
|
27
|
-
|
|
56
|
+
const t = String(title || '');
|
|
57
|
+
if (RELATION_TITLE_RE.test(t))
|
|
58
|
+
return false;
|
|
59
|
+
return FLOW_TITLE_RE.test(t);
|
|
28
60
|
}
|
|
29
|
-
|
|
30
|
-
* Convert a graph `{nodes:[{id,label}], edges:[{from,to,label?}]}` JSON string
|
|
31
|
-
* into a BPMN `{nodes:[{id,type,label,gateway?}], flows:[{from,to,label?}]}`
|
|
32
|
-
* JSON string. Returns null when the content is not a parseable, connected
|
|
33
|
-
* graph (nothing to promote).
|
|
34
|
-
*
|
|
35
|
-
* Heuristics:
|
|
36
|
-
* - node with no incoming edge -> preceded by a synthetic startEvent;
|
|
37
|
-
* - node with no outgoing edge -> followed by a synthetic endEvent;
|
|
38
|
-
* - node with 2+ outgoing edges AND at least one labelled -> exclusive
|
|
39
|
-
* gateway (a decision); the node label becomes the diamond label;
|
|
40
|
-
* - every other node -> task.
|
|
41
|
-
*/
|
|
42
|
-
export function graphToBpmn(content) {
|
|
61
|
+
function parseGraph(content) {
|
|
43
62
|
let g;
|
|
44
63
|
try {
|
|
45
64
|
g = JSON.parse(content);
|
|
@@ -63,50 +82,148 @@ export function graphToBpmn(content) {
|
|
|
63
82
|
label: e.label != null && String(e.label).trim() ? String(e.label) : undefined,
|
|
64
83
|
}))
|
|
65
84
|
.filter((e) => ids.has(e.from) && ids.has(e.to));
|
|
66
|
-
|
|
67
|
-
|
|
85
|
+
return { nodes, edges };
|
|
86
|
+
}
|
|
87
|
+
/** True when the graph STRUCTURE reads like an ordered flow even if the title
|
|
88
|
+
* is neutral: acyclic + sparse + (a simple chain OR a labelled decision OR at
|
|
89
|
+
* least one labelled edge). A dense or cyclic web returns false. */
|
|
90
|
+
export function graphLooksLikeFlow(content) {
|
|
91
|
+
const g = parseGraph(content);
|
|
92
|
+
if (!g || g.nodes.length < 2 || g.edges.length < 1)
|
|
93
|
+
return false;
|
|
94
|
+
const outDeg = {};
|
|
95
|
+
const inDeg = {};
|
|
96
|
+
const outLabeled = {};
|
|
97
|
+
g.nodes.forEach((n) => { outDeg[n.id] = 0; inDeg[n.id] = 0; outLabeled[n.id] = 0; });
|
|
98
|
+
g.edges.forEach((e) => {
|
|
99
|
+
outDeg[e.from] = (outDeg[e.from] ?? 0) + 1;
|
|
100
|
+
inDeg[e.to] = (inDeg[e.to] ?? 0) + 1;
|
|
101
|
+
if (e.label)
|
|
102
|
+
outLabeled[e.from] = (outLabeled[e.from] ?? 0) + 1;
|
|
103
|
+
});
|
|
104
|
+
const sources = g.nodes.filter((n) => (inDeg[n.id] ?? 0) === 0).length;
|
|
105
|
+
const sinks = g.nodes.filter((n) => (outDeg[n.id] ?? 0) === 0).length;
|
|
106
|
+
if (sources === 0 || sinks === 0)
|
|
107
|
+
return false; // no clean start/end
|
|
108
|
+
if (g.edges.length > g.nodes.length * 1.4)
|
|
109
|
+
return false; // dense web, not a flow
|
|
110
|
+
if (!isAcyclic(g))
|
|
111
|
+
return false;
|
|
112
|
+
const isChain = g.nodes.every((n) => (outDeg[n.id] ?? 0) <= 1);
|
|
113
|
+
const hasDecision = g.nodes.some((n) => (outDeg[n.id] ?? 0) >= 2 && (outLabeled[n.id] ?? 0) >= 1);
|
|
114
|
+
const anyLabeled = g.edges.some((e) => e.label);
|
|
115
|
+
return isChain || hasDecision || anyLabeled;
|
|
116
|
+
}
|
|
117
|
+
function isAcyclic(g) {
|
|
118
|
+
const inDeg = {};
|
|
119
|
+
const adj = {};
|
|
120
|
+
g.nodes.forEach((n) => { inDeg[n.id] = 0; adj[n.id] = []; });
|
|
121
|
+
g.edges.forEach((e) => { (adj[e.from] ??= []).push(e.to); inDeg[e.to] = (inDeg[e.to] ?? 0) + 1; });
|
|
122
|
+
const queue = g.nodes.filter((n) => (inDeg[n.id] ?? 0) === 0).map((n) => n.id);
|
|
123
|
+
let seen = 0;
|
|
124
|
+
while (queue.length) {
|
|
125
|
+
const id = queue.shift();
|
|
126
|
+
seen++;
|
|
127
|
+
for (const to of (adj[id] ?? [])) {
|
|
128
|
+
inDeg[to] = (inDeg[to] ?? 0) - 1;
|
|
129
|
+
if ((inDeg[to] ?? 0) === 0)
|
|
130
|
+
queue.push(to);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return seen === g.nodes.length;
|
|
134
|
+
}
|
|
135
|
+
/** Combined decision: is this graph tab actually a process/flow? Title veto
|
|
136
|
+
* (relationship words) wins; then flow-words; then structure. */
|
|
137
|
+
export function isFlowContext(title, content) {
|
|
138
|
+
const t = String(title || '');
|
|
139
|
+
if (RELATION_TITLE_RE.test(t))
|
|
140
|
+
return false;
|
|
141
|
+
if (FLOW_TITLE_RE.test(t))
|
|
142
|
+
return true;
|
|
143
|
+
return graphLooksLikeFlow(content);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Convert a graph `{nodes,edges}` JSON string into a BPMN `{nodes,flows}` JSON
|
|
147
|
+
* string. Returns null when the content is not a parseable, connected graph.
|
|
148
|
+
* Heuristics: source node -> preceded by a synthetic startEvent; sink -> a
|
|
149
|
+
* synthetic endEvent; node with 2+ outgoing AND a labelled branch -> exclusive
|
|
150
|
+
* gateway; everything else -> task.
|
|
151
|
+
*/
|
|
152
|
+
export function graphToBpmn(content) {
|
|
153
|
+
const g = parseGraph(content);
|
|
154
|
+
if (!g || g.nodes.length === 0 || g.edges.length === 0)
|
|
155
|
+
return null;
|
|
68
156
|
const outDeg = {};
|
|
69
157
|
const inDeg = {};
|
|
70
158
|
const outLabeled = {};
|
|
71
|
-
nodes.forEach((n) => { outDeg[n.id] = 0; inDeg[n.id] = 0; outLabeled[n.id] = 0; });
|
|
72
|
-
edges.forEach((e) => {
|
|
159
|
+
g.nodes.forEach((n) => { outDeg[n.id] = 0; inDeg[n.id] = 0; outLabeled[n.id] = 0; });
|
|
160
|
+
g.edges.forEach((e) => {
|
|
73
161
|
outDeg[e.from] = (outDeg[e.from] ?? 0) + 1;
|
|
74
162
|
inDeg[e.to] = (inDeg[e.to] ?? 0) + 1;
|
|
75
163
|
if (e.label)
|
|
76
164
|
outLabeled[e.from] = (outLabeled[e.from] ?? 0) + 1;
|
|
77
165
|
});
|
|
78
|
-
const bpmnNodes = nodes.map((n) => ((outDeg[n.id] ?? 0) >= 2 && (outLabeled[n.id] ?? 0) >= 1)
|
|
166
|
+
const bpmnNodes = g.nodes.map((n) => ((outDeg[n.id] ?? 0) >= 2 && (outLabeled[n.id] ?? 0) >= 1)
|
|
79
167
|
? { id: n.id, type: 'gateway', gateway: 'exclusive', label: n.label }
|
|
80
168
|
: { id: n.id, type: 'task', label: n.label });
|
|
81
|
-
const flows = edges.map((e) => (e.label ? { from: e.from, to: e.to, label: e.label } : { from: e.from, to: e.to }));
|
|
82
|
-
const starts = nodes.filter((n) => (inDeg[n.id] ?? 0) === 0).map((n) => n.id);
|
|
83
|
-
const ends = nodes.filter((n) => (outDeg[n.id] ?? 0) === 0).map((n) => n.id);
|
|
84
|
-
|
|
85
|
-
// "all sources" means a disconnected set, which we already rejected above.
|
|
86
|
-
if (starts.length >= 1 && starts.length < nodes.length) {
|
|
169
|
+
const flows = g.edges.map((e) => (e.label ? { from: e.from, to: e.to, label: e.label } : { from: e.from, to: e.to }));
|
|
170
|
+
const starts = g.nodes.filter((n) => (inDeg[n.id] ?? 0) === 0).map((n) => n.id);
|
|
171
|
+
const ends = g.nodes.filter((n) => (outDeg[n.id] ?? 0) === 0).map((n) => n.id);
|
|
172
|
+
if (starts.length >= 1 && starts.length < g.nodes.length) {
|
|
87
173
|
bpmnNodes.unshift({ id: '_start', type: 'startEvent', label: 'Inicio' });
|
|
88
174
|
starts.forEach((s) => flows.unshift({ from: '_start', to: s }));
|
|
89
175
|
}
|
|
90
|
-
if (ends.length >= 1 && ends.length < nodes.length) {
|
|
176
|
+
if (ends.length >= 1 && ends.length < g.nodes.length) {
|
|
91
177
|
bpmnNodes.push({ id: '_end', type: 'endEvent', label: 'Fin' });
|
|
92
178
|
ends.forEach((e) => flows.push({ from: e, to: '_end' }));
|
|
93
179
|
}
|
|
94
180
|
return JSON.stringify({ nodes: bpmnNodes, flows });
|
|
95
181
|
}
|
|
182
|
+
/* --------------------------- decision (A + B) ---------------------------- */
|
|
183
|
+
/** The nudge shown to the brain when it draws a flow as a graph. */
|
|
184
|
+
export const FLOW_NUDGE_MESSAGE = 'El pizarron NO renderiza un flujo/proceso como grafo de nodos (kind="graph"): '
|
|
185
|
+
+ 'queda ilegible. Volve a crear ESTE tab con kind="bpmn" y content JSON: '
|
|
186
|
+
+ '{"nodes":[{"id","type","label","lane"?,"gateway"?}],"flows":[{"from","to","label"?}],"lanes"?:[{"id","label"}]}. '
|
|
187
|
+
+ 'type en startEvent|endEvent|task|userTask|serviceTask|scriptTask|sendTask|receiveTask|gateway; '
|
|
188
|
+
+ 'para una decision usa type="gateway" + gateway="exclusive" (o "parallel"). '
|
|
189
|
+
+ 'Empeza con un startEvent y termina con endEvent. Hacelo AHORA en esta misma respuesta -- no lo narres.';
|
|
190
|
+
/* Bounded memory of graph contents we already nudged, so a reincidence (the
|
|
191
|
+
* brain re-sends the same graph instead of obeying) falls back to the
|
|
192
|
+
* deterministic conversion instead of nudging forever. */
|
|
193
|
+
const nudged = new Set();
|
|
194
|
+
function rememberNudge(hash) {
|
|
195
|
+
if (nudged.size > 512)
|
|
196
|
+
nudged.clear();
|
|
197
|
+
nudged.add(hash);
|
|
198
|
+
}
|
|
199
|
+
function hashContent(s) {
|
|
200
|
+
let h = 5381;
|
|
201
|
+
for (let i = 0; i < s.length; i++)
|
|
202
|
+
h = ((h << 5) + h + s.charCodeAt(i)) | 0;
|
|
203
|
+
return String(h >>> 0) + ':' + s.length;
|
|
204
|
+
}
|
|
205
|
+
/** For tests: forget every remembered nudge. */
|
|
206
|
+
export function _resetFlowNudges() { nudged.clear(); }
|
|
96
207
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
208
|
+
* Decide what to do with a create-tab. Passthrough for anything that is not a
|
|
209
|
+
* graph-drawn flow. For a graph-drawn flow: nudge the brain to redo it as BPMN
|
|
210
|
+
* the first time (B); on reincidence, convert it deterministically (A).
|
|
100
211
|
*/
|
|
101
|
-
export function
|
|
212
|
+
export function decideFlowTab(input) {
|
|
102
213
|
const kind = String(input.kind || '').trim().toLowerCase();
|
|
103
214
|
if (kind !== 'graph')
|
|
104
|
-
return {
|
|
105
|
-
if (!
|
|
106
|
-
return {
|
|
215
|
+
return { action: 'passthrough' };
|
|
216
|
+
if (!isFlowContext(input.title || '', input.content))
|
|
217
|
+
return { action: 'passthrough' };
|
|
107
218
|
const bpmn = graphToBpmn(input.content);
|
|
108
219
|
if (!bpmn)
|
|
109
|
-
return {
|
|
110
|
-
|
|
220
|
+
return { action: 'passthrough' }; // not convertible -> leave as-is
|
|
221
|
+
const h = hashContent(input.content);
|
|
222
|
+
if (nudged.has(h)) {
|
|
223
|
+
nudged.delete(h);
|
|
224
|
+
return { action: 'convert', kind: 'bpmn', content: bpmn };
|
|
225
|
+
}
|
|
226
|
+
rememberNudge(h);
|
|
227
|
+
return { action: 'reject', message: FLOW_NUDGE_MESSAGE };
|
|
111
228
|
}
|
|
112
229
|
//# sourceMappingURL=flow_bpmn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow_bpmn.js","sourceRoot":"","sources":["../../src/chat/flow_bpmn.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flow_bpmn.js","sourceRoot":"","sources":["../../src/chat/flow_bpmn.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/chat/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAA2D,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAKjG,OAAO,EAAoD,KAAK,aAAa,EAAoB,MAAM,aAAa,CAAC;AAErH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAInD,OAAO,EAEL,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AAczB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAsBjD,OAAO,EAAyD,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAc1H,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;;;;;;;wDAQoD;IACpD,YAAY,CAAC,EAAE,eAAe,GAAG,iBAAiB,CAAC;IACnD;;2DAEuD;IACvD,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B;+CAC2C;IAC3C,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;kEAG8D;IAC9D,OAAO,CAAC,EAAE,OAAO,sBAAsB,EAAE,OAAO,CAAC;IACjD;;;;;;;iDAO6C;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ;qEACiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B;;;oCAGgC;IAChC,MAAM,CAAC,EAAE,OAAO,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;CACpD;AAqBD,wBAAsB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAobhF;AAED,UAAU,GAAG;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,eAAe,CAAC;IAIvB,OAAO,CAAC,EAAE,OAAO,sBAAsB,EAAE,OAAO,CAAC;IAMjD,YAAY,CAAC,EAAE,eAAe,GAAG,iBAAiB,CAAC;IAKnD,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAG3G,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAGlE,MAAM,CAAC,EAAE,OAAO,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;CACpD;AA0BD;;;;+EAI+E;AAC/E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;CACpB,GAAG,OAAO,CAOV;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/chat/server.ts"],"names":[],"mappings":"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"}
|
package/dist/chat/server.js
CHANGED
|
@@ -3625,19 +3625,25 @@ async function handlePanelInvoke(req, res, ctx) {
|
|
|
3625
3625
|
const payload = (result.server_payload && typeof result.server_payload === 'object')
|
|
3626
3626
|
? result.server_payload : null;
|
|
3627
3627
|
const shortVerb = String(verb.id || '').replace(/^yujin\./, '');
|
|
3628
|
-
/* Enforce KIND SELECTION server-side
|
|
3629
|
-
*
|
|
3630
|
-
*
|
|
3628
|
+
/* Enforce KIND SELECTION server-side for a create-tab `graph` that is
|
|
3629
|
+
* really a flow/proceso. First time -> reject with a nudge so the brain
|
|
3630
|
+
* redoes it as native BPMN (B); on reincidence -> convert deterministically
|
|
3631
|
+
* (A). Done BEFORE enqueue + board_artifacts persistence, so the panel and
|
|
3632
|
+
* the disk never see the graph-drawn flow. */
|
|
3631
3633
|
if (shortVerb === 'pizarron.create-tab') {
|
|
3632
|
-
const {
|
|
3633
|
-
const
|
|
3634
|
+
const { decideFlowTab } = await import('./flow_bpmn.js');
|
|
3635
|
+
const decision = decideFlowTab({
|
|
3634
3636
|
kind: String(dispatchArgs.kind || ''),
|
|
3635
3637
|
content: String(dispatchArgs.content || ''),
|
|
3636
3638
|
title: String(dispatchArgs.title || ''),
|
|
3637
3639
|
});
|
|
3638
|
-
if (
|
|
3639
|
-
|
|
3640
|
-
|
|
3640
|
+
if (decision.action === 'reject') {
|
|
3641
|
+
sendJson(res, 200, { ok: false, text: decision.message });
|
|
3642
|
+
return;
|
|
3643
|
+
}
|
|
3644
|
+
if (decision.action === 'convert') {
|
|
3645
|
+
dispatchArgs.kind = decision.kind;
|
|
3646
|
+
dispatchArgs.content = decision.content;
|
|
3641
3647
|
}
|
|
3642
3648
|
}
|
|
3643
3649
|
const { enqueuePanelDispatch } = await import('./panel_queue.js');
|