@nac3/forge-cli 1.0.56 → 1.0.57
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 +54 -0
- package/dist/chat/flow_bpmn.d.ts.map +1 -0
- package/dist/chat/flow_bpmn.js +112 -0
- package/dist/chat/flow_bpmn.js.map +1 -0
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +15 -0
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/tools/pizarron.d.ts.map +1 -1
- package/dist/chat/tools/pizarron.js +13 -2
- package/dist/chat/tools/pizarron.js.map +1 -1
- package/dist/docs/doctrine/pizarron.md +12 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/doctrine/pizarron.md +12 -0
- package/package.json +115 -115
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* flow_bpmn.ts -- deterministic graph -> BPMN promotion (server-side
|
|
3
|
+
* enforcement of the pizarron KIND SELECTION rule).
|
|
4
|
+
*
|
|
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
|
+
* FLUJO / proceso / flowchart -> kind=bpmn, NEVER kind=graph", some brains
|
|
8
|
+
* keep creating a process as kind='graph' -- a force-directed node web that
|
|
9
|
+
* looks awful for an ordered flow. The instruction is already there and the
|
|
10
|
+
* model ignores it, so more prompt text will not fix it. We enforce it
|
|
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.
|
|
14
|
+
*
|
|
15
|
+
* This is deliberately deterministic (no LLM round-trip): it works with any
|
|
16
|
+
* brain, weak or strong. The conversion recovers structure heuristically --
|
|
17
|
+
* synthetic start/end events, and exclusive gateways for labelled branches --
|
|
18
|
+
* so a linear or branched flow renders as a real BPMN diagram, not a web.
|
|
19
|
+
*
|
|
20
|
+
* ASCII-only.
|
|
21
|
+
*/
|
|
22
|
+
/** Does the tab title read like a process/flow request? */
|
|
23
|
+
export declare function looksLikeFlowTitle(title: string): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Convert a graph `{nodes:[{id,label}], edges:[{from,to,label?}]}` JSON string
|
|
26
|
+
* into a BPMN `{nodes:[{id,type,label,gateway?}], flows:[{from,to,label?}]}`
|
|
27
|
+
* JSON string. Returns null when the content is not a parseable, connected
|
|
28
|
+
* graph (nothing to promote).
|
|
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.
|
|
36
|
+
*/
|
|
37
|
+
export declare function graphToBpmn(content: string): string | null;
|
|
38
|
+
export interface PromoteInput {
|
|
39
|
+
kind: string;
|
|
40
|
+
content: string;
|
|
41
|
+
title?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface PromoteResult {
|
|
44
|
+
kind: string;
|
|
45
|
+
content: string;
|
|
46
|
+
promoted: boolean;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* If a create-tab is a `graph` whose title reads like a flow AND its content
|
|
50
|
+
* converts cleanly, rewrite it to a `bpmn` tab. Otherwise pass through
|
|
51
|
+
* untouched. Never throws.
|
|
52
|
+
*/
|
|
53
|
+
export declare function maybePromoteFlow(input: PromoteInput): PromoteResult;
|
|
54
|
+
//# sourceMappingURL=flow_bpmn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow_bpmn.d.ts","sourceRoot":"","sources":["../../src/chat/flow_bpmn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH,2DAA2D;AAC3D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzD;AASD;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsD1D;AAED,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;AAC/E,MAAM,WAAW,aAAa;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE;AAEnF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAOnE"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* flow_bpmn.ts -- deterministic graph -> BPMN promotion (server-side
|
|
3
|
+
* enforcement of the pizarron KIND SELECTION rule).
|
|
4
|
+
*
|
|
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
|
+
* FLUJO / proceso / flowchart -> kind=bpmn, NEVER kind=graph", some brains
|
|
8
|
+
* keep creating a process as kind='graph' -- a force-directed node web that
|
|
9
|
+
* looks awful for an ordered flow. The instruction is already there and the
|
|
10
|
+
* model ignores it, so more prompt text will not fix it. We enforce it
|
|
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.
|
|
14
|
+
*
|
|
15
|
+
* This is deliberately deterministic (no LLM round-trip): it works with any
|
|
16
|
+
* brain, weak or strong. The conversion recovers structure heuristically --
|
|
17
|
+
* synthetic start/end events, and exclusive gateways for labelled branches --
|
|
18
|
+
* so a linear or branched flow renders as a real BPMN diagram, not a web.
|
|
19
|
+
*
|
|
20
|
+
* ASCII-only.
|
|
21
|
+
*/
|
|
22
|
+
/** Words in a tab title that mark it as an ordered process/flow (not a
|
|
23
|
+
* relationship/dependency web). Matched case-insensitively. */
|
|
24
|
+
const FLOW_TITLE_RE = /\b(flujo|flow|flowchart|proceso|process|procedimiento|circuito|workflow|pipeline|secuencia|sequence|pasos|steps|diagrama de (flujo|proceso)|bpmn)\b/i;
|
|
25
|
+
/** Does the tab title read like a process/flow request? */
|
|
26
|
+
export function looksLikeFlowTitle(title) {
|
|
27
|
+
return FLOW_TITLE_RE.test(String(title || ''));
|
|
28
|
+
}
|
|
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) {
|
|
43
|
+
let g;
|
|
44
|
+
try {
|
|
45
|
+
g = JSON.parse(content);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
if (!g || !Array.isArray(g.nodes) || g.nodes.length === 0)
|
|
51
|
+
return null;
|
|
52
|
+
const nodes = g.nodes
|
|
53
|
+
.filter((n) => n && n.id != null)
|
|
54
|
+
.map((n) => ({ id: String(n.id), label: String(n.label ?? n.id) }));
|
|
55
|
+
if (nodes.length === 0)
|
|
56
|
+
return null;
|
|
57
|
+
const ids = new Set(nodes.map((n) => n.id));
|
|
58
|
+
const edges = (Array.isArray(g.edges) ? g.edges : [])
|
|
59
|
+
.filter((e) => e && e.from != null && e.to != null)
|
|
60
|
+
.map((e) => ({
|
|
61
|
+
from: String(e.from),
|
|
62
|
+
to: String(e.to),
|
|
63
|
+
label: e.label != null && String(e.label).trim() ? String(e.label) : undefined,
|
|
64
|
+
}))
|
|
65
|
+
.filter((e) => ids.has(e.from) && ids.has(e.to));
|
|
66
|
+
if (edges.length === 0)
|
|
67
|
+
return null; // an edgeless graph is not a flow
|
|
68
|
+
const outDeg = {};
|
|
69
|
+
const inDeg = {};
|
|
70
|
+
const outLabeled = {};
|
|
71
|
+
nodes.forEach((n) => { outDeg[n.id] = 0; inDeg[n.id] = 0; outLabeled[n.id] = 0; });
|
|
72
|
+
edges.forEach((e) => {
|
|
73
|
+
outDeg[e.from] = (outDeg[e.from] ?? 0) + 1;
|
|
74
|
+
inDeg[e.to] = (inDeg[e.to] ?? 0) + 1;
|
|
75
|
+
if (e.label)
|
|
76
|
+
outLabeled[e.from] = (outLabeled[e.from] ?? 0) + 1;
|
|
77
|
+
});
|
|
78
|
+
const bpmnNodes = nodes.map((n) => ((outDeg[n.id] ?? 0) >= 2 && (outLabeled[n.id] ?? 0) >= 1)
|
|
79
|
+
? { id: n.id, type: 'gateway', gateway: 'exclusive', label: n.label }
|
|
80
|
+
: { 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
|
+
// Only add synthetic events when SOME (not all) nodes are sources/sinks --
|
|
85
|
+
// "all sources" means a disconnected set, which we already rejected above.
|
|
86
|
+
if (starts.length >= 1 && starts.length < nodes.length) {
|
|
87
|
+
bpmnNodes.unshift({ id: '_start', type: 'startEvent', label: 'Inicio' });
|
|
88
|
+
starts.forEach((s) => flows.unshift({ from: '_start', to: s }));
|
|
89
|
+
}
|
|
90
|
+
if (ends.length >= 1 && ends.length < nodes.length) {
|
|
91
|
+
bpmnNodes.push({ id: '_end', type: 'endEvent', label: 'Fin' });
|
|
92
|
+
ends.forEach((e) => flows.push({ from: e, to: '_end' }));
|
|
93
|
+
}
|
|
94
|
+
return JSON.stringify({ nodes: bpmnNodes, flows });
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* If a create-tab is a `graph` whose title reads like a flow AND its content
|
|
98
|
+
* converts cleanly, rewrite it to a `bpmn` tab. Otherwise pass through
|
|
99
|
+
* untouched. Never throws.
|
|
100
|
+
*/
|
|
101
|
+
export function maybePromoteFlow(input) {
|
|
102
|
+
const kind = String(input.kind || '').trim().toLowerCase();
|
|
103
|
+
if (kind !== 'graph')
|
|
104
|
+
return { kind: input.kind, content: input.content, promoted: false };
|
|
105
|
+
if (!looksLikeFlowTitle(input.title || ''))
|
|
106
|
+
return { kind: input.kind, content: input.content, promoted: false };
|
|
107
|
+
const bpmn = graphToBpmn(input.content);
|
|
108
|
+
if (!bpmn)
|
|
109
|
+
return { kind: input.kind, content: input.content, promoted: false };
|
|
110
|
+
return { kind: 'bpmn', content: bpmn, promoted: true };
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=flow_bpmn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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,6 +3625,21 @@ 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: a create-tab `graph` whose title
|
|
3629
|
+
* reads like a flow/proceso is promoted to a real BPMN diagram before it
|
|
3630
|
+
* is enqueued or persisted (some brains ignore the always-on doctrine). */
|
|
3631
|
+
if (shortVerb === 'pizarron.create-tab') {
|
|
3632
|
+
const { maybePromoteFlow } = await import('./flow_bpmn.js');
|
|
3633
|
+
const promoted = maybePromoteFlow({
|
|
3634
|
+
kind: String(dispatchArgs.kind || ''),
|
|
3635
|
+
content: String(dispatchArgs.content || ''),
|
|
3636
|
+
title: String(dispatchArgs.title || ''),
|
|
3637
|
+
});
|
|
3638
|
+
if (promoted.promoted) {
|
|
3639
|
+
dispatchArgs.kind = promoted.kind;
|
|
3640
|
+
dispatchArgs.content = promoted.content;
|
|
3641
|
+
}
|
|
3642
|
+
}
|
|
3628
3643
|
const { enqueuePanelDispatch } = await import('./panel_queue.js');
|
|
3629
3644
|
const seq = enqueuePanelDispatch(shortVerb, payload ? { ...dispatchArgs, server_payload: payload } : dispatchArgs, new Date().toISOString());
|
|
3630
3645
|
/* PND -- if it is a pizarron DOCUMENT, also relay it to the phone
|