expxagents 0.23.6 → 0.23.7
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/dashboard/assets/{BufferResource-DHIH4vRM.js → BufferResource-hG70eU6u.js} +1 -1
- package/dist/dashboard/assets/{CanvasRenderer-DTA7H2ex.js → CanvasRenderer-uGcDwhPO.js} +1 -1
- package/dist/dashboard/assets/{JarvisView-Dmq_aalx.js → JarvisView-BCY3-AMI.js} +1 -1
- package/dist/dashboard/assets/{RenderTargetSystem-CdD9VM4E.js → RenderTargetSystem-DaWXi5Me.js} +1 -1
- package/dist/dashboard/assets/{ThreeBackground-BJYqxm3t.js → ThreeBackground-D0xeGdHQ.js} +1 -1
- package/dist/dashboard/assets/{WebGLRenderer-DAij1hcL.js → WebGLRenderer-bd-i7Bq2.js} +1 -1
- package/dist/dashboard/assets/{WebGPURenderer-Chgxd6GA.js → WebGPURenderer-XCqeWnbX.js} +1 -1
- package/dist/dashboard/assets/{browserAll-B0GfJV5B.js → browserAll-D2vVJvmK.js} +1 -1
- package/dist/dashboard/assets/{index-DJ_eqowu.js → index-nZltajXY.js} +187 -187
- package/dist/dashboard/assets/{webworkerAll-efCwQfSA.js → webworkerAll-BR2KTI1C.js} +1 -1
- package/dist/dashboard/index.html +1 -1
- package/dist/server/api/orgchart-routes.d.ts.map +1 -1
- package/dist/server/api/orgchart-routes.js +96 -72
- package/dist/server/api/orgchart-routes.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a1 as G,a3 as I,a4 as B,l as _,M as k,W as O,N as A,a9 as m,T as v,as as C,R as E,w as z,a8 as U,v as w}from"./index-
|
|
1
|
+
import{a1 as G,a3 as I,a4 as B,l as _,M as k,W as O,N as A,a9 as m,T as v,as as C,R as E,w as z,a8 as U,v as w}from"./index-nZltajXY.js";var M=`in vec2 aPosition;
|
|
2
2
|
out vec2 vTextureCoord;
|
|
3
3
|
|
|
4
4
|
uniform vec4 uInputSize;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>ExpxAgents — Mission Control</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-nZltajXY.js"></script>
|
|
8
8
|
<link rel="stylesheet" crossorigin href="/assets/index-DtbIzZ5n.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orgchart-routes.d.ts","sourceRoot":"","sources":["../../src/api/orgchart-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAKrE,UAAU,qBAAsB,SAAQ,oBAAoB;IAC1D,SAAS,EAAE,MAAM,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"orgchart-routes.d.ts","sourceRoot":"","sources":["../../src/api/orgchart-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAKrE,UAAU,qBAAsB,SAAQ,oBAAoB;IAC1D,SAAS,EAAE,MAAM,CAAC;CACnB;AA6LD,wBAAsB,cAAc,CAClC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAQf"}
|
|
@@ -1,44 +1,70 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { parse as parseYaml } from 'yaml';
|
|
4
|
-
function
|
|
5
|
-
const
|
|
6
|
-
if (!fs.existsSync(
|
|
7
|
-
return
|
|
4
|
+
function loadCompanyName(squadsDir) {
|
|
5
|
+
const companyPath = path.resolve(squadsDir, '..', '_expxagents', '_memory', 'company.md');
|
|
6
|
+
if (!fs.existsSync(companyPath))
|
|
7
|
+
return 'Company';
|
|
8
8
|
try {
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
const content = fs.readFileSync(companyPath, 'utf-8');
|
|
10
|
+
const nameMatch = content.match(/(?:^|\n)#\s+(.+)/);
|
|
11
|
+
if (nameMatch)
|
|
12
|
+
return nameMatch[1].trim();
|
|
13
|
+
const fieldMatch = content.match(/company_name:\s*(.+)/i);
|
|
14
|
+
if (fieldMatch)
|
|
15
|
+
return fieldMatch[1].trim();
|
|
15
16
|
}
|
|
17
|
+
catch { /* ignore */ }
|
|
18
|
+
return 'Company';
|
|
16
19
|
}
|
|
17
|
-
function
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
function formatDirName(name) {
|
|
21
|
+
return name
|
|
22
|
+
.replace(/[-_]/g, ' ')
|
|
23
|
+
.replace(/\b\w/g, (c) => c.toUpperCase());
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Build org chart tree from the actual directory structure.
|
|
27
|
+
* Hierarchy: squadsDir / setor / grupo / sessao / squad (with squad.yaml)
|
|
28
|
+
* Directories without squad.yaml are hierarchy nodes.
|
|
29
|
+
* Directories with squad.yaml are squad leaf nodes.
|
|
30
|
+
*/
|
|
31
|
+
function buildTreeFromDirs(squadsDir) {
|
|
32
|
+
const companyName = loadCompanyName(squadsDir);
|
|
33
|
+
const allSquads = [];
|
|
34
|
+
// Hierarchy depth mapping: depth 0 = setor, 1 = grupo, 2 = sessao, 3+ = ignored
|
|
35
|
+
const depthType = {
|
|
36
|
+
0: 'setor',
|
|
37
|
+
1: 'grupo',
|
|
38
|
+
2: 'sessao',
|
|
39
|
+
};
|
|
40
|
+
function walkDir(dir, depth, parentId) {
|
|
22
41
|
if (depth > 4)
|
|
23
|
-
return;
|
|
42
|
+
return [];
|
|
43
|
+
const nodes = [];
|
|
24
44
|
let entries;
|
|
25
45
|
try {
|
|
26
46
|
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
27
47
|
}
|
|
28
48
|
catch {
|
|
29
|
-
return;
|
|
49
|
+
return [];
|
|
30
50
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
51
|
+
const dirs = entries
|
|
52
|
+
.filter((e) => e.isDirectory() && !e.name.startsWith('.') && !e.name.startsWith('_'))
|
|
53
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
54
|
+
for (const entry of dirs) {
|
|
34
55
|
const fullPath = path.join(dir, entry.name);
|
|
35
56
|
const yamlPath = path.join(fullPath, 'squad.yaml');
|
|
57
|
+
const nodeId = parentId ? `${parentId}/${entry.name}` : entry.name;
|
|
36
58
|
if (fs.existsSync(yamlPath)) {
|
|
59
|
+
// This is a squad directory
|
|
37
60
|
try {
|
|
38
61
|
const raw = fs.readFileSync(yamlPath, 'utf-8');
|
|
39
62
|
const parsed = parseYaml(raw);
|
|
40
63
|
const s = parsed?.squad;
|
|
41
64
|
if (s) {
|
|
65
|
+
const agents = Array.isArray(s.agents)
|
|
66
|
+
? s.agents.map((a) => ({ id: a.id || a, name: a.name || a.id || a, icon: a.icon || '🤖' }))
|
|
67
|
+
: [];
|
|
42
68
|
const steps = [];
|
|
43
69
|
if (s.pipeline?.steps) {
|
|
44
70
|
for (const step of s.pipeline.steps) {
|
|
@@ -51,80 +77,78 @@ function loadSquads(squadsDir) {
|
|
|
51
77
|
});
|
|
52
78
|
}
|
|
53
79
|
}
|
|
54
|
-
|
|
80
|
+
const squadInfo = {
|
|
55
81
|
code: s.code || entry.name,
|
|
56
82
|
name: s.name || entry.name,
|
|
57
83
|
description: s.description || '',
|
|
58
|
-
icon: s.icon || '
|
|
59
|
-
agents
|
|
60
|
-
? s.agents.map((a) => ({ id: a.id || a, name: a.name || a.id || a, icon: a.icon || 'robot' }))
|
|
61
|
-
: [],
|
|
84
|
+
icon: s.icon || '📦',
|
|
85
|
+
agents,
|
|
62
86
|
pipeline: steps,
|
|
87
|
+
};
|
|
88
|
+
allSquads.push(squadInfo);
|
|
89
|
+
// Squad node with agent children
|
|
90
|
+
const agentChildren = agents.map((a) => ({
|
|
91
|
+
id: `${nodeId}/agent/${a.id}`,
|
|
92
|
+
name: a.name,
|
|
93
|
+
type: 'agent',
|
|
94
|
+
icon: a.icon,
|
|
95
|
+
}));
|
|
96
|
+
nodes.push({
|
|
97
|
+
id: nodeId,
|
|
98
|
+
name: squadInfo.name,
|
|
99
|
+
type: 'squad',
|
|
100
|
+
icon: squadInfo.icon,
|
|
101
|
+
description: squadInfo.description,
|
|
102
|
+
agentCount: agents.length,
|
|
103
|
+
children: agentChildren.length > 0 ? agentChildren : undefined,
|
|
63
104
|
});
|
|
64
105
|
}
|
|
65
106
|
}
|
|
66
|
-
catch { /* skip */ }
|
|
107
|
+
catch { /* skip invalid yaml */ }
|
|
67
108
|
}
|
|
68
109
|
else {
|
|
69
|
-
|
|
110
|
+
// This is a hierarchy directory (setor/grupo/sessao)
|
|
111
|
+
const children = walkDir(fullPath, depth + 1, nodeId);
|
|
112
|
+
if (children.length > 0) {
|
|
113
|
+
const nodeType = depthType[depth] ?? 'sessao';
|
|
114
|
+
const totalAgents = countAgents(children);
|
|
115
|
+
nodes.push({
|
|
116
|
+
id: nodeId,
|
|
117
|
+
name: formatDirName(entry.name),
|
|
118
|
+
type: nodeType,
|
|
119
|
+
agentCount: totalAgents,
|
|
120
|
+
children,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
70
123
|
}
|
|
71
124
|
}
|
|
125
|
+
return nodes;
|
|
72
126
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const nameMatch = content.match(/(?:^|\n)#\s+(.+)/);
|
|
83
|
-
if (nameMatch)
|
|
84
|
-
return nameMatch[1].trim();
|
|
85
|
-
const fieldMatch = content.match(/company_name:\s*(.+)/i);
|
|
86
|
-
if (fieldMatch)
|
|
87
|
-
return fieldMatch[1].trim();
|
|
88
|
-
}
|
|
89
|
-
catch { /* ignore */ }
|
|
90
|
-
return 'Company';
|
|
91
|
-
}
|
|
92
|
-
function buildOrgChart(squadsDir) {
|
|
93
|
-
const sectors = loadCatalog(squadsDir);
|
|
94
|
-
const squads = loadSquads(squadsDir);
|
|
95
|
-
const companyName = loadCompanyName(squadsDir);
|
|
96
|
-
// Build agent → squads map
|
|
97
|
-
const agentSquadMap = new Map();
|
|
98
|
-
for (const squad of squads) {
|
|
99
|
-
for (const agent of squad.agents) {
|
|
100
|
-
const existing = agentSquadMap.get(agent.id) || [];
|
|
101
|
-
existing.push(squad.name);
|
|
102
|
-
agentSquadMap.set(agent.id, existing);
|
|
127
|
+
function countAgents(nodes) {
|
|
128
|
+
let count = 0;
|
|
129
|
+
for (const n of nodes) {
|
|
130
|
+
if (n.type === 'agent')
|
|
131
|
+
count++;
|
|
132
|
+
if (n.agentCount)
|
|
133
|
+
count += n.agentCount;
|
|
134
|
+
if (n.children)
|
|
135
|
+
count += countAgents(n.children);
|
|
103
136
|
}
|
|
137
|
+
return count;
|
|
104
138
|
}
|
|
105
|
-
const
|
|
106
|
-
id: sector.name.toLowerCase().replace(/[^a-z0-9]+/g, '-'),
|
|
107
|
-
name: sector.name,
|
|
108
|
-
type: 'sector',
|
|
109
|
-
agentCount: sector.agents.length,
|
|
110
|
-
children: sector.agents.map((agentId) => ({
|
|
111
|
-
id: agentId,
|
|
112
|
-
name: agentId.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase()),
|
|
113
|
-
type: 'agent',
|
|
114
|
-
squads: agentSquadMap.get(agentId) || [],
|
|
115
|
-
})),
|
|
116
|
-
}));
|
|
139
|
+
const children = walkDir(squadsDir, 0, '');
|
|
117
140
|
const tree = {
|
|
118
141
|
id: 'company',
|
|
119
142
|
name: companyName,
|
|
120
143
|
type: 'company',
|
|
121
|
-
|
|
144
|
+
agentCount: countAgents(children),
|
|
145
|
+
children,
|
|
122
146
|
};
|
|
123
|
-
return { tree, squads };
|
|
147
|
+
return { tree, squads: allSquads };
|
|
124
148
|
}
|
|
125
149
|
export async function orgchartRoutes(app, opts) {
|
|
126
150
|
app.get('/api/orgchart', { preHandler: [app.requireAuth] }, async () => {
|
|
127
|
-
return
|
|
151
|
+
return buildTreeFromDirs(opts.squadsDir);
|
|
128
152
|
});
|
|
129
153
|
}
|
|
130
154
|
//# sourceMappingURL=orgchart-routes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orgchart-routes.js","sourceRoot":"","sources":["../../src/api/orgchart-routes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"orgchart-routes.js","sourceRoot":"","sources":["../../src/api/orgchart-routes.ts"],"names":[],"mappings":"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"}
|