altis-claude-harness 1.2.4 → 1.3.1
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/package.json
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"liberadas": [
|
|
3
|
-
{ "mac": "0A:00:27:00:00:0D", "id": "lucas-pc" },
|
|
4
|
-
{ "mac": "A8:E2:91:17:79:C6", "id": "lucas-pc2" },
|
|
3
|
+
{ "mac": "0A:00:27:00:00:0D", "id": "lucas-pc", "funcionario_id": 2 },
|
|
4
|
+
{ "mac": "A8:E2:91:17:79:C6", "id": "lucas-pc2", "funcionario_id": 2 },
|
|
5
5
|
|
|
6
|
-
{ "mac": "00:FF:D5:55:65:6D", "id": "lucas-rogstrix" },
|
|
7
|
-
{ "mac": "A0:02:A5:A9:5A:C9", "id": "lucas-rogstrix2" },
|
|
8
|
-
{ "mac": "00:15:5D:E4:7C:E0", "id": "lucas-rogstrix3" },
|
|
6
|
+
{ "mac": "00:FF:D5:55:65:6D", "id": "lucas-rogstrix", "funcionario_id": 2 },
|
|
7
|
+
{ "mac": "A0:02:A5:A9:5A:C9", "id": "lucas-rogstrix2", "funcionario_id": 2 },
|
|
8
|
+
{ "mac": "00:15:5D:E4:7C:E0", "id": "lucas-rogstrix3", "funcionario_id": 2 },
|
|
9
9
|
|
|
10
|
-
{ "mac": "38:7A:0E:58:7A:00", "id": "kauan" },
|
|
10
|
+
{ "mac": "38:7A:0E:58:7A:00", "id": "kauan", "funcionario_id": 36 },
|
|
11
11
|
|
|
12
|
-
{ "mac": "D4:E9:8A:D5:5A:CA", "id": "gabs" },
|
|
13
|
-
{ "mac": "00:15:5D:2C:51:00", "id": "gabs" },
|
|
14
|
-
{ "mac": "00:15:5D:30:48:8C", "id": "gabs" },
|
|
12
|
+
{ "mac": "D4:E9:8A:D5:5A:CA", "id": "gabs", "funcionario_id": 21 },
|
|
13
|
+
{ "mac": "00:15:5D:2C:51:00", "id": "gabs", "funcionario_id": 21 },
|
|
14
|
+
{ "mac": "00:15:5D:30:48:8C", "id": "gabs", "funcionario_id": 21 },
|
|
15
15
|
|
|
16
|
-
{ "mac": "00:15:5D:DB:9C:C2", "id": "matheus" },
|
|
17
|
-
{ "mac": "50:BB:B5:7A:41:28", "id": "matheus" },
|
|
16
|
+
{ "mac": "00:15:5D:DB:9C:C2", "id": "matheus", "funcionario_id": 35 },
|
|
17
|
+
{ "mac": "50:BB:B5:7A:41:28", "id": "matheus", "funcionario_id": 35 },
|
|
18
18
|
|
|
19
|
-
{ "mac": "28:11:A8:83:BA:0D", "id": "nicolas" },
|
|
19
|
+
{ "mac": "28:11:A8:83:BA:0D", "id": "nicolas", "funcionario_id": 28 },
|
|
20
20
|
|
|
21
|
-
{ "mac": "E8:B0:C5:37:CC:6A", "id": "luiz" },
|
|
21
|
+
{ "mac": "E8:B0:C5:37:CC:6A", "id": "luiz", "funcionario_id": 6 },
|
|
22
22
|
|
|
23
|
-
{ "mac": "5C:9B:A6:63:3C:74", "id": "vinicius-macbook" },
|
|
24
|
-
{ "mac": "2A:10:61:A5:18:F0", "id": "vinicius-macbook" }
|
|
23
|
+
{ "mac": "5C:9B:A6:63:3C:74", "id": "vinicius-macbook", "funcionario_id": 7 },
|
|
24
|
+
{ "mac": "2A:10:61:A5:18:F0", "id": "vinicius-macbook", "funcionario_id": 7 }
|
|
25
25
|
]
|
|
26
26
|
}
|
|
@@ -47,6 +47,48 @@ function truncar(texto) {
|
|
|
47
47
|
return texto.slice(0, LIMITE_TEXTO) + '…[truncado]';
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
function normalizarMac(mac) {
|
|
51
|
+
const hex = String(mac || '').replace(/[^0-9a-fA-F]/g, '').toUpperCase();
|
|
52
|
+
if (hex.length !== 12) return null;
|
|
53
|
+
return hex.match(/.{2}/g).join(':');
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function macsDaEstacao() {
|
|
57
|
+
const macs = new Set();
|
|
58
|
+
for (const lista of Object.values(os.networkInterfaces())) {
|
|
59
|
+
for (const rede of lista || []) {
|
|
60
|
+
if (rede.internal) continue;
|
|
61
|
+
const mac = normalizarMac(rede.mac);
|
|
62
|
+
if (mac && mac !== '00:00:00:00:00:00') macs.add(mac);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return [...macs];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function lerLiberacoes() {
|
|
69
|
+
try {
|
|
70
|
+
const arquivo = path.join(__dirname, 'liberacoes.json');
|
|
71
|
+
const dados = JSON.parse(removerBom(fs.readFileSync(arquivo, 'utf8')));
|
|
72
|
+
return Array.isArray(dados.liberadas) ? dados.liberadas : [];
|
|
73
|
+
} catch {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function identificarUsuario(macsEstacao, liberadas) {
|
|
79
|
+
for (const entrada of liberadas) {
|
|
80
|
+
const macEntrada = normalizarMac(entrada && entrada.mac);
|
|
81
|
+
if (macEntrada && macsEstacao.includes(macEntrada)) {
|
|
82
|
+
return {
|
|
83
|
+
mac: macEntrada,
|
|
84
|
+
nome_usuario: entrada.id ? String(entrada.id).slice(0, 60) : null,
|
|
85
|
+
funcionario_id: Number.isInteger(entrada.funcionario_id) ? entrada.funcionario_id : null,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return { mac: macsEstacao[0] || null, nome_usuario: null, funcionario_id: null };
|
|
90
|
+
}
|
|
91
|
+
|
|
50
92
|
function textoDoConteudo(conteudo) {
|
|
51
93
|
if (typeof conteudo === 'string') return conteudo;
|
|
52
94
|
if (!Array.isArray(conteudo)) return '';
|
|
@@ -168,6 +210,7 @@ async function enviar(arquivoTemporario) {
|
|
|
168
210
|
}
|
|
169
211
|
const payload = {
|
|
170
212
|
...interacao,
|
|
213
|
+
...identificarUsuario(macsDaEstacao(), lerLiberacoes()),
|
|
171
214
|
tipo_registro: tipoRegistro,
|
|
172
215
|
sessao_claude_id: String(dadosHook.session_id || 'desconhecida').slice(0, 60) || 'desconhecida',
|
|
173
216
|
diretorio_trabalho: dadosHook.cwd ? String(dadosHook.cwd).slice(0, 300) : null,
|
|
@@ -213,6 +256,6 @@ function principal() {
|
|
|
213
256
|
process.exit(0);
|
|
214
257
|
}
|
|
215
258
|
|
|
216
|
-
module.exports = { extrairInteracao, textoDoConteudo, ehPromptDeUsuario, lerConfigMcp, resolverTranscript, truncar, removerBom };
|
|
259
|
+
module.exports = { extrairInteracao, textoDoConteudo, ehPromptDeUsuario, lerConfigMcp, resolverTranscript, truncar, removerBom, normalizarMac, identificarUsuario, lerLiberacoes };
|
|
217
260
|
|
|
218
261
|
if (require.main === module) principal();
|