an3dree commited on
Commit
aae7a58
·
2 Parent(s): 834e3b9771b98f

Merge pull request #2 from uandersonricardo/coder-agent

Browse files
.env.example DELETED
@@ -1 +0,0 @@
1
- OPENROUTER_API_KEY=
 
 
Dockerfile ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Build frontend
2
+ FROM node:22-slim AS frontend-build
3
+ WORKDIR /app/frontend
4
+ COPY frontend/package.json frontend/package-lock.json* ./
5
+ RUN npm install
6
+ COPY frontend/ .
7
+ RUN npm run build
8
+
9
+ # Build backend
10
+ FROM node:22-slim AS backend-build
11
+ WORKDIR /app
12
+ COPY package.json package-lock.json* ./
13
+ COPY patches/ ./patches/
14
+ RUN npm install
15
+ COPY tsconfig.json ./
16
+ COPY src/ ./src/
17
+ RUN npm run build
18
+
19
+ # Production
20
+ FROM node:22-slim
21
+ WORKDIR /app
22
+
23
+ COPY package.json package-lock.json* ./
24
+ COPY patches/ ./patches/
25
+ RUN npm install --omit=dev --ignore-scripts
26
+
27
+ COPY --from=backend-build /app/dist ./dist
28
+ COPY --from=frontend-build /app/frontend/dist ./frontend/dist
29
+
30
+ ENV PORT=7860
31
+ EXPOSE 7860
32
+
33
+ CMD ["node", "dist/server.js"]
README.md CHANGED
@@ -1,68 +1,8 @@
1
- # Projeto de TALP1
2
-
3
- Projeto desenvolvido para a disciplina **IN1045 — Tópicos Avançados em Linguagens de Programação 1 (TALP1)**, do curso de Mestrado em Ciência da Computação do **Centro de Informática da Universidade Federal de Pernambuco (CIn-UFPE)**.
4
-
5
- ## Visão Geral
6
-
7
- Este projeto tem como objetivo desenvolver um sistema multiagente inteligente para **geração**, **auditoria** e **validação de vulnerabilidades** em *smart contracts*.
8
-
9
- A proposta é receber documentos contendo requisitos, especificações e descrições funcionais do sistema, processar essas informações e utilizá-las para:
10
-
11
- * gerar contratos inteligentes automaticamente;
12
- * identificar potenciais vulnerabilidades de segurança;
13
- * criar provas de conceito (*Proofs of Concept — PoCs*) para validar as falhas encontradas;
14
- * executar um ciclo iterativo de refinamento e melhoria contínua.
15
-
16
- O sistema é implementado em **TypeScript** e **Node.js**, utilizando a biblioteca **LangGraph** para orquestração dos agentes inteligentes e definição dos fluxos de execução.
17
-
18
- ## Arquitetura Geral
19
-
20
- O sistema é composto por agentes especializados que colaboram entre si em diferentes etapas do processo:
21
-
22
- 1. **Exploração e análise dos requisitos**
23
-
24
- * Processamento e compreensão dos documentos fornecidos;
25
- * Extração de contexto técnico e requisitos relevantes.
26
-
27
- 2. **Geração de Smart Contracts**
28
-
29
- * Criação automática de contratos inteligentes com base nas especificações extraídas.
30
-
31
- 3. **Auditoria de Segurança**
32
-
33
- * Análise estática e contextual do código gerado;
34
- * Identificação de vulnerabilidades e comportamentos inseguros.
35
-
36
- 4. **Geração de PoCs**
37
-
38
- * Construção automática de provas de conceito para validar as vulnerabilidades detectadas.
39
-
40
- 5. **Refinamento Iterativo**
41
-
42
- * Uso do feedback da auditoria e das PoCs para aprimorar o código gerado.
43
-
44
- ## Agentes
45
-
46
- ### Gerador de Código
47
-
48
- Responsável por gerar *smart contracts* a partir dos requisitos e especificações fornecidos.
49
-
50
- ### Auditor de Smart Contracts
51
-
52
- Responsável por analisar o código gerado em busca de vulnerabilidades, inconsistências e problemas de segurança.
53
-
54
- ### Gerador de PoCs
55
-
56
- Responsável por criar provas de conceito capazes de validar e demonstrar as vulnerabilidades identificadas durante a auditoria.
57
-
58
- ## Tecnologias Utilizadas
59
-
60
- * TypeScript
61
- * Node.js
62
- * LangGraph
63
-
64
- ## Equipe
65
-
66
- * André Souza — [alssg@cin.ufpe.br](mailto:alssg@cin.ufpe.br)
67
- * Uanderson Ricardo Ferreira da Silva — [urfs@cin.ufpe.br](mailto:urfs@cin.ufpe.br)
68
- * Tales Vinicius Alves da Cunha — [tvac@cin.ufpe.br](mailto:tvac@cin.ufpe.br)
 
1
+ ---
2
+ title: Multi-Agent Smart Contracts
3
+ emoji: 📝
4
+ colorFrom: blue
5
+ colorTo: indigo
6
+ sdk: docker
7
+ app_port: 7860
8
+ ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
README_GH.md ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Projeto de TALP1
2
+
3
+ Projeto desenvolvido para a disciplina **IN1045 — Tópicos Avançados em Linguagens de Programação 1 (TALP1)**, do curso de Mestrado em Ciência da Computação do **Centro de Informática da Universidade Federal de Pernambuco (CIn-UFPE)**.
4
+
5
+ ## Visão Geral
6
+
7
+ Este projeto tem como objetivo desenvolver um sistema multiagente inteligente para **geração**, **auditoria** e **validação de vulnerabilidades** em *smart contracts*.
8
+
9
+ A proposta é receber documentos contendo requisitos, especificações e descrições funcionais do sistema, processar essas informações e utilizá-las para:
10
+
11
+ * gerar contratos inteligentes automaticamente;
12
+ * identificar potenciais vulnerabilidades de segurança;
13
+ * criar provas de conceito (*Proofs of Concept — PoCs*) para validar as falhas encontradas;
14
+ * executar um ciclo iterativo de refinamento e melhoria contínua.
15
+
16
+ O sistema é implementado em **TypeScript** e **Node.js**, utilizando a biblioteca **LangGraph** para orquestração dos agentes inteligentes e definição dos fluxos de execução.
17
+
18
+ ## Arquitetura Geral
19
+
20
+ O sistema é composto por agentes especializados que colaboram entre si em diferentes etapas do processo:
21
+
22
+ 1. **Exploração e análise dos requisitos**
23
+
24
+ * Processamento e compreensão dos documentos fornecidos;
25
+ * Extração de contexto técnico e requisitos relevantes.
26
+
27
+ 2. **Geração de Smart Contracts**
28
+
29
+ * Criação automática de contratos inteligentes com base nas especificações extraídas.
30
+
31
+ 3. **Auditoria de Segurança**
32
+
33
+ * Análise estática e contextual do código gerado;
34
+ * Identificação de vulnerabilidades e comportamentos inseguros.
35
+
36
+ 4. **Geração de PoCs**
37
+
38
+ * Construção automática de provas de conceito para validar as vulnerabilidades detectadas.
39
+
40
+ 5. **Refinamento Iterativo**
41
+
42
+ * Uso do feedback da auditoria e das PoCs para aprimorar o código gerado.
43
+
44
+ ## Agentes
45
+
46
+ ### Gerador de Código
47
+
48
+ Responsável por gerar *smart contracts* a partir dos requisitos e especificações fornecidos.
49
+
50
+ ### Auditor de Smart Contracts
51
+
52
+ Responsável por analisar o código gerado em busca de vulnerabilidades, inconsistências e problemas de segurança.
53
+
54
+ ### Gerador de PoCs
55
+
56
+ Responsável por criar provas de conceito capazes de validar e demonstrar as vulnerabilidades identificadas durante a auditoria.
57
+
58
+ ## Tecnologias Utilizadas
59
+
60
+ * TypeScript
61
+ * Node.js
62
+ * LangGraph
63
+
64
+ ## Equipe
65
+
66
+ * André Souza — [alssg@cin.ufpe.br](mailto:alssg@cin.ufpe.br)
67
+ * Uanderson Ricardo Ferreira da Silva — [urfs@cin.ufpe.br](mailto:urfs@cin.ufpe.br)
68
+ * Tales Vinicius Alves da Cunha — [tvac@cin.ufpe.br](mailto:tvac@cin.ufpe.br)
frontend/index.html ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="pt-BR">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Multi-Agent Smart Contracts</title>
7
+ </head>
8
+ <body>
9
+ <div id="root"></div>
10
+ <script type="module" src="/src/main.tsx"></script>
11
+ </body>
12
+ </html>
frontend/package-lock.json ADDED
@@ -0,0 +1,1823 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "frontend",
3
+ "version": "0.0.1",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "frontend",
9
+ "version": "0.0.1",
10
+ "dependencies": {
11
+ "react": "^19.1.0",
12
+ "react-dom": "^19.1.0"
13
+ },
14
+ "devDependencies": {
15
+ "@types/react": "^19.1.0",
16
+ "@types/react-dom": "^19.1.0",
17
+ "@vitejs/plugin-react": "^4.5.2",
18
+ "typescript": "^5.8.3",
19
+ "vite": "^6.3.5"
20
+ }
21
+ },
22
+ "node_modules/@babel/code-frame": {
23
+ "version": "7.29.0",
24
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
25
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
26
+ "dev": true,
27
+ "license": "MIT",
28
+ "dependencies": {
29
+ "@babel/helper-validator-identifier": "^7.28.5",
30
+ "js-tokens": "^4.0.0",
31
+ "picocolors": "^1.1.1"
32
+ },
33
+ "engines": {
34
+ "node": ">=6.9.0"
35
+ }
36
+ },
37
+ "node_modules/@babel/compat-data": {
38
+ "version": "7.29.3",
39
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz",
40
+ "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==",
41
+ "dev": true,
42
+ "license": "MIT",
43
+ "engines": {
44
+ "node": ">=6.9.0"
45
+ }
46
+ },
47
+ "node_modules/@babel/core": {
48
+ "version": "7.29.0",
49
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
50
+ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
51
+ "dev": true,
52
+ "license": "MIT",
53
+ "dependencies": {
54
+ "@babel/code-frame": "^7.29.0",
55
+ "@babel/generator": "^7.29.0",
56
+ "@babel/helper-compilation-targets": "^7.28.6",
57
+ "@babel/helper-module-transforms": "^7.28.6",
58
+ "@babel/helpers": "^7.28.6",
59
+ "@babel/parser": "^7.29.0",
60
+ "@babel/template": "^7.28.6",
61
+ "@babel/traverse": "^7.29.0",
62
+ "@babel/types": "^7.29.0",
63
+ "@jridgewell/remapping": "^2.3.5",
64
+ "convert-source-map": "^2.0.0",
65
+ "debug": "^4.1.0",
66
+ "gensync": "^1.0.0-beta.2",
67
+ "json5": "^2.2.3",
68
+ "semver": "^6.3.1"
69
+ },
70
+ "engines": {
71
+ "node": ">=6.9.0"
72
+ },
73
+ "funding": {
74
+ "type": "opencollective",
75
+ "url": "https://opencollective.com/babel"
76
+ }
77
+ },
78
+ "node_modules/@babel/generator": {
79
+ "version": "7.29.1",
80
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
81
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
82
+ "dev": true,
83
+ "license": "MIT",
84
+ "dependencies": {
85
+ "@babel/parser": "^7.29.0",
86
+ "@babel/types": "^7.29.0",
87
+ "@jridgewell/gen-mapping": "^0.3.12",
88
+ "@jridgewell/trace-mapping": "^0.3.28",
89
+ "jsesc": "^3.0.2"
90
+ },
91
+ "engines": {
92
+ "node": ">=6.9.0"
93
+ }
94
+ },
95
+ "node_modules/@babel/helper-compilation-targets": {
96
+ "version": "7.28.6",
97
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
98
+ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
99
+ "dev": true,
100
+ "license": "MIT",
101
+ "dependencies": {
102
+ "@babel/compat-data": "^7.28.6",
103
+ "@babel/helper-validator-option": "^7.27.1",
104
+ "browserslist": "^4.24.0",
105
+ "lru-cache": "^5.1.1",
106
+ "semver": "^6.3.1"
107
+ },
108
+ "engines": {
109
+ "node": ">=6.9.0"
110
+ }
111
+ },
112
+ "node_modules/@babel/helper-globals": {
113
+ "version": "7.28.0",
114
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
115
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
116
+ "dev": true,
117
+ "license": "MIT",
118
+ "engines": {
119
+ "node": ">=6.9.0"
120
+ }
121
+ },
122
+ "node_modules/@babel/helper-module-imports": {
123
+ "version": "7.28.6",
124
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
125
+ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
126
+ "dev": true,
127
+ "license": "MIT",
128
+ "dependencies": {
129
+ "@babel/traverse": "^7.28.6",
130
+ "@babel/types": "^7.28.6"
131
+ },
132
+ "engines": {
133
+ "node": ">=6.9.0"
134
+ }
135
+ },
136
+ "node_modules/@babel/helper-module-transforms": {
137
+ "version": "7.28.6",
138
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
139
+ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
140
+ "dev": true,
141
+ "license": "MIT",
142
+ "dependencies": {
143
+ "@babel/helper-module-imports": "^7.28.6",
144
+ "@babel/helper-validator-identifier": "^7.28.5",
145
+ "@babel/traverse": "^7.28.6"
146
+ },
147
+ "engines": {
148
+ "node": ">=6.9.0"
149
+ },
150
+ "peerDependencies": {
151
+ "@babel/core": "^7.0.0"
152
+ }
153
+ },
154
+ "node_modules/@babel/helper-plugin-utils": {
155
+ "version": "7.28.6",
156
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
157
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
158
+ "dev": true,
159
+ "license": "MIT",
160
+ "engines": {
161
+ "node": ">=6.9.0"
162
+ }
163
+ },
164
+ "node_modules/@babel/helper-string-parser": {
165
+ "version": "7.27.1",
166
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
167
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
168
+ "dev": true,
169
+ "license": "MIT",
170
+ "engines": {
171
+ "node": ">=6.9.0"
172
+ }
173
+ },
174
+ "node_modules/@babel/helper-validator-identifier": {
175
+ "version": "7.28.5",
176
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
177
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
178
+ "dev": true,
179
+ "license": "MIT",
180
+ "engines": {
181
+ "node": ">=6.9.0"
182
+ }
183
+ },
184
+ "node_modules/@babel/helper-validator-option": {
185
+ "version": "7.27.1",
186
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
187
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
188
+ "dev": true,
189
+ "license": "MIT",
190
+ "engines": {
191
+ "node": ">=6.9.0"
192
+ }
193
+ },
194
+ "node_modules/@babel/helpers": {
195
+ "version": "7.29.2",
196
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz",
197
+ "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==",
198
+ "dev": true,
199
+ "license": "MIT",
200
+ "dependencies": {
201
+ "@babel/template": "^7.28.6",
202
+ "@babel/types": "^7.29.0"
203
+ },
204
+ "engines": {
205
+ "node": ">=6.9.0"
206
+ }
207
+ },
208
+ "node_modules/@babel/parser": {
209
+ "version": "7.29.3",
210
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz",
211
+ "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==",
212
+ "dev": true,
213
+ "license": "MIT",
214
+ "dependencies": {
215
+ "@babel/types": "^7.29.0"
216
+ },
217
+ "bin": {
218
+ "parser": "bin/babel-parser.js"
219
+ },
220
+ "engines": {
221
+ "node": ">=6.0.0"
222
+ }
223
+ },
224
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
225
+ "version": "7.27.1",
226
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz",
227
+ "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==",
228
+ "dev": true,
229
+ "license": "MIT",
230
+ "dependencies": {
231
+ "@babel/helper-plugin-utils": "^7.27.1"
232
+ },
233
+ "engines": {
234
+ "node": ">=6.9.0"
235
+ },
236
+ "peerDependencies": {
237
+ "@babel/core": "^7.0.0-0"
238
+ }
239
+ },
240
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
241
+ "version": "7.27.1",
242
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz",
243
+ "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==",
244
+ "dev": true,
245
+ "license": "MIT",
246
+ "dependencies": {
247
+ "@babel/helper-plugin-utils": "^7.27.1"
248
+ },
249
+ "engines": {
250
+ "node": ">=6.9.0"
251
+ },
252
+ "peerDependencies": {
253
+ "@babel/core": "^7.0.0-0"
254
+ }
255
+ },
256
+ "node_modules/@babel/template": {
257
+ "version": "7.28.6",
258
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
259
+ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
260
+ "dev": true,
261
+ "license": "MIT",
262
+ "dependencies": {
263
+ "@babel/code-frame": "^7.28.6",
264
+ "@babel/parser": "^7.28.6",
265
+ "@babel/types": "^7.28.6"
266
+ },
267
+ "engines": {
268
+ "node": ">=6.9.0"
269
+ }
270
+ },
271
+ "node_modules/@babel/traverse": {
272
+ "version": "7.29.0",
273
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
274
+ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
275
+ "dev": true,
276
+ "license": "MIT",
277
+ "dependencies": {
278
+ "@babel/code-frame": "^7.29.0",
279
+ "@babel/generator": "^7.29.0",
280
+ "@babel/helper-globals": "^7.28.0",
281
+ "@babel/parser": "^7.29.0",
282
+ "@babel/template": "^7.28.6",
283
+ "@babel/types": "^7.29.0",
284
+ "debug": "^4.3.1"
285
+ },
286
+ "engines": {
287
+ "node": ">=6.9.0"
288
+ }
289
+ },
290
+ "node_modules/@babel/types": {
291
+ "version": "7.29.0",
292
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
293
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
294
+ "dev": true,
295
+ "license": "MIT",
296
+ "dependencies": {
297
+ "@babel/helper-string-parser": "^7.27.1",
298
+ "@babel/helper-validator-identifier": "^7.28.5"
299
+ },
300
+ "engines": {
301
+ "node": ">=6.9.0"
302
+ }
303
+ },
304
+ "node_modules/@esbuild/aix-ppc64": {
305
+ "version": "0.25.12",
306
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
307
+ "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
308
+ "cpu": [
309
+ "ppc64"
310
+ ],
311
+ "dev": true,
312
+ "license": "MIT",
313
+ "optional": true,
314
+ "os": [
315
+ "aix"
316
+ ],
317
+ "engines": {
318
+ "node": ">=18"
319
+ }
320
+ },
321
+ "node_modules/@esbuild/android-arm": {
322
+ "version": "0.25.12",
323
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
324
+ "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
325
+ "cpu": [
326
+ "arm"
327
+ ],
328
+ "dev": true,
329
+ "license": "MIT",
330
+ "optional": true,
331
+ "os": [
332
+ "android"
333
+ ],
334
+ "engines": {
335
+ "node": ">=18"
336
+ }
337
+ },
338
+ "node_modules/@esbuild/android-arm64": {
339
+ "version": "0.25.12",
340
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
341
+ "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
342
+ "cpu": [
343
+ "arm64"
344
+ ],
345
+ "dev": true,
346
+ "license": "MIT",
347
+ "optional": true,
348
+ "os": [
349
+ "android"
350
+ ],
351
+ "engines": {
352
+ "node": ">=18"
353
+ }
354
+ },
355
+ "node_modules/@esbuild/android-x64": {
356
+ "version": "0.25.12",
357
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
358
+ "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
359
+ "cpu": [
360
+ "x64"
361
+ ],
362
+ "dev": true,
363
+ "license": "MIT",
364
+ "optional": true,
365
+ "os": [
366
+ "android"
367
+ ],
368
+ "engines": {
369
+ "node": ">=18"
370
+ }
371
+ },
372
+ "node_modules/@esbuild/darwin-arm64": {
373
+ "version": "0.25.12",
374
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
375
+ "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
376
+ "cpu": [
377
+ "arm64"
378
+ ],
379
+ "dev": true,
380
+ "license": "MIT",
381
+ "optional": true,
382
+ "os": [
383
+ "darwin"
384
+ ],
385
+ "engines": {
386
+ "node": ">=18"
387
+ }
388
+ },
389
+ "node_modules/@esbuild/darwin-x64": {
390
+ "version": "0.25.12",
391
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
392
+ "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
393
+ "cpu": [
394
+ "x64"
395
+ ],
396
+ "dev": true,
397
+ "license": "MIT",
398
+ "optional": true,
399
+ "os": [
400
+ "darwin"
401
+ ],
402
+ "engines": {
403
+ "node": ">=18"
404
+ }
405
+ },
406
+ "node_modules/@esbuild/freebsd-arm64": {
407
+ "version": "0.25.12",
408
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
409
+ "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
410
+ "cpu": [
411
+ "arm64"
412
+ ],
413
+ "dev": true,
414
+ "license": "MIT",
415
+ "optional": true,
416
+ "os": [
417
+ "freebsd"
418
+ ],
419
+ "engines": {
420
+ "node": ">=18"
421
+ }
422
+ },
423
+ "node_modules/@esbuild/freebsd-x64": {
424
+ "version": "0.25.12",
425
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
426
+ "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
427
+ "cpu": [
428
+ "x64"
429
+ ],
430
+ "dev": true,
431
+ "license": "MIT",
432
+ "optional": true,
433
+ "os": [
434
+ "freebsd"
435
+ ],
436
+ "engines": {
437
+ "node": ">=18"
438
+ }
439
+ },
440
+ "node_modules/@esbuild/linux-arm": {
441
+ "version": "0.25.12",
442
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
443
+ "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
444
+ "cpu": [
445
+ "arm"
446
+ ],
447
+ "dev": true,
448
+ "license": "MIT",
449
+ "optional": true,
450
+ "os": [
451
+ "linux"
452
+ ],
453
+ "engines": {
454
+ "node": ">=18"
455
+ }
456
+ },
457
+ "node_modules/@esbuild/linux-arm64": {
458
+ "version": "0.25.12",
459
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
460
+ "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
461
+ "cpu": [
462
+ "arm64"
463
+ ],
464
+ "dev": true,
465
+ "license": "MIT",
466
+ "optional": true,
467
+ "os": [
468
+ "linux"
469
+ ],
470
+ "engines": {
471
+ "node": ">=18"
472
+ }
473
+ },
474
+ "node_modules/@esbuild/linux-ia32": {
475
+ "version": "0.25.12",
476
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
477
+ "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
478
+ "cpu": [
479
+ "ia32"
480
+ ],
481
+ "dev": true,
482
+ "license": "MIT",
483
+ "optional": true,
484
+ "os": [
485
+ "linux"
486
+ ],
487
+ "engines": {
488
+ "node": ">=18"
489
+ }
490
+ },
491
+ "node_modules/@esbuild/linux-loong64": {
492
+ "version": "0.25.12",
493
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
494
+ "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
495
+ "cpu": [
496
+ "loong64"
497
+ ],
498
+ "dev": true,
499
+ "license": "MIT",
500
+ "optional": true,
501
+ "os": [
502
+ "linux"
503
+ ],
504
+ "engines": {
505
+ "node": ">=18"
506
+ }
507
+ },
508
+ "node_modules/@esbuild/linux-mips64el": {
509
+ "version": "0.25.12",
510
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
511
+ "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
512
+ "cpu": [
513
+ "mips64el"
514
+ ],
515
+ "dev": true,
516
+ "license": "MIT",
517
+ "optional": true,
518
+ "os": [
519
+ "linux"
520
+ ],
521
+ "engines": {
522
+ "node": ">=18"
523
+ }
524
+ },
525
+ "node_modules/@esbuild/linux-ppc64": {
526
+ "version": "0.25.12",
527
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
528
+ "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
529
+ "cpu": [
530
+ "ppc64"
531
+ ],
532
+ "dev": true,
533
+ "license": "MIT",
534
+ "optional": true,
535
+ "os": [
536
+ "linux"
537
+ ],
538
+ "engines": {
539
+ "node": ">=18"
540
+ }
541
+ },
542
+ "node_modules/@esbuild/linux-riscv64": {
543
+ "version": "0.25.12",
544
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
545
+ "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
546
+ "cpu": [
547
+ "riscv64"
548
+ ],
549
+ "dev": true,
550
+ "license": "MIT",
551
+ "optional": true,
552
+ "os": [
553
+ "linux"
554
+ ],
555
+ "engines": {
556
+ "node": ">=18"
557
+ }
558
+ },
559
+ "node_modules/@esbuild/linux-s390x": {
560
+ "version": "0.25.12",
561
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
562
+ "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
563
+ "cpu": [
564
+ "s390x"
565
+ ],
566
+ "dev": true,
567
+ "license": "MIT",
568
+ "optional": true,
569
+ "os": [
570
+ "linux"
571
+ ],
572
+ "engines": {
573
+ "node": ">=18"
574
+ }
575
+ },
576
+ "node_modules/@esbuild/linux-x64": {
577
+ "version": "0.25.12",
578
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
579
+ "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
580
+ "cpu": [
581
+ "x64"
582
+ ],
583
+ "dev": true,
584
+ "license": "MIT",
585
+ "optional": true,
586
+ "os": [
587
+ "linux"
588
+ ],
589
+ "engines": {
590
+ "node": ">=18"
591
+ }
592
+ },
593
+ "node_modules/@esbuild/netbsd-arm64": {
594
+ "version": "0.25.12",
595
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
596
+ "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
597
+ "cpu": [
598
+ "arm64"
599
+ ],
600
+ "dev": true,
601
+ "license": "MIT",
602
+ "optional": true,
603
+ "os": [
604
+ "netbsd"
605
+ ],
606
+ "engines": {
607
+ "node": ">=18"
608
+ }
609
+ },
610
+ "node_modules/@esbuild/netbsd-x64": {
611
+ "version": "0.25.12",
612
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
613
+ "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
614
+ "cpu": [
615
+ "x64"
616
+ ],
617
+ "dev": true,
618
+ "license": "MIT",
619
+ "optional": true,
620
+ "os": [
621
+ "netbsd"
622
+ ],
623
+ "engines": {
624
+ "node": ">=18"
625
+ }
626
+ },
627
+ "node_modules/@esbuild/openbsd-arm64": {
628
+ "version": "0.25.12",
629
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
630
+ "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
631
+ "cpu": [
632
+ "arm64"
633
+ ],
634
+ "dev": true,
635
+ "license": "MIT",
636
+ "optional": true,
637
+ "os": [
638
+ "openbsd"
639
+ ],
640
+ "engines": {
641
+ "node": ">=18"
642
+ }
643
+ },
644
+ "node_modules/@esbuild/openbsd-x64": {
645
+ "version": "0.25.12",
646
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
647
+ "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
648
+ "cpu": [
649
+ "x64"
650
+ ],
651
+ "dev": true,
652
+ "license": "MIT",
653
+ "optional": true,
654
+ "os": [
655
+ "openbsd"
656
+ ],
657
+ "engines": {
658
+ "node": ">=18"
659
+ }
660
+ },
661
+ "node_modules/@esbuild/openharmony-arm64": {
662
+ "version": "0.25.12",
663
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
664
+ "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
665
+ "cpu": [
666
+ "arm64"
667
+ ],
668
+ "dev": true,
669
+ "license": "MIT",
670
+ "optional": true,
671
+ "os": [
672
+ "openharmony"
673
+ ],
674
+ "engines": {
675
+ "node": ">=18"
676
+ }
677
+ },
678
+ "node_modules/@esbuild/sunos-x64": {
679
+ "version": "0.25.12",
680
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
681
+ "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
682
+ "cpu": [
683
+ "x64"
684
+ ],
685
+ "dev": true,
686
+ "license": "MIT",
687
+ "optional": true,
688
+ "os": [
689
+ "sunos"
690
+ ],
691
+ "engines": {
692
+ "node": ">=18"
693
+ }
694
+ },
695
+ "node_modules/@esbuild/win32-arm64": {
696
+ "version": "0.25.12",
697
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
698
+ "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
699
+ "cpu": [
700
+ "arm64"
701
+ ],
702
+ "dev": true,
703
+ "license": "MIT",
704
+ "optional": true,
705
+ "os": [
706
+ "win32"
707
+ ],
708
+ "engines": {
709
+ "node": ">=18"
710
+ }
711
+ },
712
+ "node_modules/@esbuild/win32-ia32": {
713
+ "version": "0.25.12",
714
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
715
+ "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
716
+ "cpu": [
717
+ "ia32"
718
+ ],
719
+ "dev": true,
720
+ "license": "MIT",
721
+ "optional": true,
722
+ "os": [
723
+ "win32"
724
+ ],
725
+ "engines": {
726
+ "node": ">=18"
727
+ }
728
+ },
729
+ "node_modules/@esbuild/win32-x64": {
730
+ "version": "0.25.12",
731
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
732
+ "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
733
+ "cpu": [
734
+ "x64"
735
+ ],
736
+ "dev": true,
737
+ "license": "MIT",
738
+ "optional": true,
739
+ "os": [
740
+ "win32"
741
+ ],
742
+ "engines": {
743
+ "node": ">=18"
744
+ }
745
+ },
746
+ "node_modules/@jridgewell/gen-mapping": {
747
+ "version": "0.3.13",
748
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
749
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
750
+ "dev": true,
751
+ "license": "MIT",
752
+ "dependencies": {
753
+ "@jridgewell/sourcemap-codec": "^1.5.0",
754
+ "@jridgewell/trace-mapping": "^0.3.24"
755
+ }
756
+ },
757
+ "node_modules/@jridgewell/remapping": {
758
+ "version": "2.3.5",
759
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
760
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
761
+ "dev": true,
762
+ "license": "MIT",
763
+ "dependencies": {
764
+ "@jridgewell/gen-mapping": "^0.3.5",
765
+ "@jridgewell/trace-mapping": "^0.3.24"
766
+ }
767
+ },
768
+ "node_modules/@jridgewell/resolve-uri": {
769
+ "version": "3.1.2",
770
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
771
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
772
+ "dev": true,
773
+ "license": "MIT",
774
+ "engines": {
775
+ "node": ">=6.0.0"
776
+ }
777
+ },
778
+ "node_modules/@jridgewell/sourcemap-codec": {
779
+ "version": "1.5.5",
780
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
781
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
782
+ "dev": true,
783
+ "license": "MIT"
784
+ },
785
+ "node_modules/@jridgewell/trace-mapping": {
786
+ "version": "0.3.31",
787
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
788
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
789
+ "dev": true,
790
+ "license": "MIT",
791
+ "dependencies": {
792
+ "@jridgewell/resolve-uri": "^3.1.0",
793
+ "@jridgewell/sourcemap-codec": "^1.4.14"
794
+ }
795
+ },
796
+ "node_modules/@rolldown/pluginutils": {
797
+ "version": "1.0.0-beta.27",
798
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz",
799
+ "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==",
800
+ "dev": true,
801
+ "license": "MIT"
802
+ },
803
+ "node_modules/@rollup/rollup-android-arm-eabi": {
804
+ "version": "4.60.4",
805
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.4.tgz",
806
+ "integrity": "sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==",
807
+ "cpu": [
808
+ "arm"
809
+ ],
810
+ "dev": true,
811
+ "license": "MIT",
812
+ "optional": true,
813
+ "os": [
814
+ "android"
815
+ ]
816
+ },
817
+ "node_modules/@rollup/rollup-android-arm64": {
818
+ "version": "4.60.4",
819
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.4.tgz",
820
+ "integrity": "sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==",
821
+ "cpu": [
822
+ "arm64"
823
+ ],
824
+ "dev": true,
825
+ "license": "MIT",
826
+ "optional": true,
827
+ "os": [
828
+ "android"
829
+ ]
830
+ },
831
+ "node_modules/@rollup/rollup-darwin-arm64": {
832
+ "version": "4.60.4",
833
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.4.tgz",
834
+ "integrity": "sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==",
835
+ "cpu": [
836
+ "arm64"
837
+ ],
838
+ "dev": true,
839
+ "license": "MIT",
840
+ "optional": true,
841
+ "os": [
842
+ "darwin"
843
+ ]
844
+ },
845
+ "node_modules/@rollup/rollup-darwin-x64": {
846
+ "version": "4.60.4",
847
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.4.tgz",
848
+ "integrity": "sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==",
849
+ "cpu": [
850
+ "x64"
851
+ ],
852
+ "dev": true,
853
+ "license": "MIT",
854
+ "optional": true,
855
+ "os": [
856
+ "darwin"
857
+ ]
858
+ },
859
+ "node_modules/@rollup/rollup-freebsd-arm64": {
860
+ "version": "4.60.4",
861
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.4.tgz",
862
+ "integrity": "sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==",
863
+ "cpu": [
864
+ "arm64"
865
+ ],
866
+ "dev": true,
867
+ "license": "MIT",
868
+ "optional": true,
869
+ "os": [
870
+ "freebsd"
871
+ ]
872
+ },
873
+ "node_modules/@rollup/rollup-freebsd-x64": {
874
+ "version": "4.60.4",
875
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.4.tgz",
876
+ "integrity": "sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==",
877
+ "cpu": [
878
+ "x64"
879
+ ],
880
+ "dev": true,
881
+ "license": "MIT",
882
+ "optional": true,
883
+ "os": [
884
+ "freebsd"
885
+ ]
886
+ },
887
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
888
+ "version": "4.60.4",
889
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.4.tgz",
890
+ "integrity": "sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==",
891
+ "cpu": [
892
+ "arm"
893
+ ],
894
+ "dev": true,
895
+ "license": "MIT",
896
+ "optional": true,
897
+ "os": [
898
+ "linux"
899
+ ]
900
+ },
901
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
902
+ "version": "4.60.4",
903
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.4.tgz",
904
+ "integrity": "sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==",
905
+ "cpu": [
906
+ "arm"
907
+ ],
908
+ "dev": true,
909
+ "license": "MIT",
910
+ "optional": true,
911
+ "os": [
912
+ "linux"
913
+ ]
914
+ },
915
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
916
+ "version": "4.60.4",
917
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.4.tgz",
918
+ "integrity": "sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==",
919
+ "cpu": [
920
+ "arm64"
921
+ ],
922
+ "dev": true,
923
+ "license": "MIT",
924
+ "optional": true,
925
+ "os": [
926
+ "linux"
927
+ ]
928
+ },
929
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
930
+ "version": "4.60.4",
931
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.4.tgz",
932
+ "integrity": "sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==",
933
+ "cpu": [
934
+ "arm64"
935
+ ],
936
+ "dev": true,
937
+ "license": "MIT",
938
+ "optional": true,
939
+ "os": [
940
+ "linux"
941
+ ]
942
+ },
943
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
944
+ "version": "4.60.4",
945
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.4.tgz",
946
+ "integrity": "sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==",
947
+ "cpu": [
948
+ "loong64"
949
+ ],
950
+ "dev": true,
951
+ "license": "MIT",
952
+ "optional": true,
953
+ "os": [
954
+ "linux"
955
+ ]
956
+ },
957
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
958
+ "version": "4.60.4",
959
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.4.tgz",
960
+ "integrity": "sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==",
961
+ "cpu": [
962
+ "loong64"
963
+ ],
964
+ "dev": true,
965
+ "license": "MIT",
966
+ "optional": true,
967
+ "os": [
968
+ "linux"
969
+ ]
970
+ },
971
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
972
+ "version": "4.60.4",
973
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.4.tgz",
974
+ "integrity": "sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==",
975
+ "cpu": [
976
+ "ppc64"
977
+ ],
978
+ "dev": true,
979
+ "license": "MIT",
980
+ "optional": true,
981
+ "os": [
982
+ "linux"
983
+ ]
984
+ },
985
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
986
+ "version": "4.60.4",
987
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.4.tgz",
988
+ "integrity": "sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==",
989
+ "cpu": [
990
+ "ppc64"
991
+ ],
992
+ "dev": true,
993
+ "license": "MIT",
994
+ "optional": true,
995
+ "os": [
996
+ "linux"
997
+ ]
998
+ },
999
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
1000
+ "version": "4.60.4",
1001
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.4.tgz",
1002
+ "integrity": "sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==",
1003
+ "cpu": [
1004
+ "riscv64"
1005
+ ],
1006
+ "dev": true,
1007
+ "license": "MIT",
1008
+ "optional": true,
1009
+ "os": [
1010
+ "linux"
1011
+ ]
1012
+ },
1013
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
1014
+ "version": "4.60.4",
1015
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.4.tgz",
1016
+ "integrity": "sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==",
1017
+ "cpu": [
1018
+ "riscv64"
1019
+ ],
1020
+ "dev": true,
1021
+ "license": "MIT",
1022
+ "optional": true,
1023
+ "os": [
1024
+ "linux"
1025
+ ]
1026
+ },
1027
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
1028
+ "version": "4.60.4",
1029
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.4.tgz",
1030
+ "integrity": "sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==",
1031
+ "cpu": [
1032
+ "s390x"
1033
+ ],
1034
+ "dev": true,
1035
+ "license": "MIT",
1036
+ "optional": true,
1037
+ "os": [
1038
+ "linux"
1039
+ ]
1040
+ },
1041
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
1042
+ "version": "4.60.4",
1043
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.4.tgz",
1044
+ "integrity": "sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==",
1045
+ "cpu": [
1046
+ "x64"
1047
+ ],
1048
+ "dev": true,
1049
+ "license": "MIT",
1050
+ "optional": true,
1051
+ "os": [
1052
+ "linux"
1053
+ ]
1054
+ },
1055
+ "node_modules/@rollup/rollup-linux-x64-musl": {
1056
+ "version": "4.60.4",
1057
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.4.tgz",
1058
+ "integrity": "sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==",
1059
+ "cpu": [
1060
+ "x64"
1061
+ ],
1062
+ "dev": true,
1063
+ "license": "MIT",
1064
+ "optional": true,
1065
+ "os": [
1066
+ "linux"
1067
+ ]
1068
+ },
1069
+ "node_modules/@rollup/rollup-openbsd-x64": {
1070
+ "version": "4.60.4",
1071
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.4.tgz",
1072
+ "integrity": "sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==",
1073
+ "cpu": [
1074
+ "x64"
1075
+ ],
1076
+ "dev": true,
1077
+ "license": "MIT",
1078
+ "optional": true,
1079
+ "os": [
1080
+ "openbsd"
1081
+ ]
1082
+ },
1083
+ "node_modules/@rollup/rollup-openharmony-arm64": {
1084
+ "version": "4.60.4",
1085
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.4.tgz",
1086
+ "integrity": "sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==",
1087
+ "cpu": [
1088
+ "arm64"
1089
+ ],
1090
+ "dev": true,
1091
+ "license": "MIT",
1092
+ "optional": true,
1093
+ "os": [
1094
+ "openharmony"
1095
+ ]
1096
+ },
1097
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
1098
+ "version": "4.60.4",
1099
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.4.tgz",
1100
+ "integrity": "sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==",
1101
+ "cpu": [
1102
+ "arm64"
1103
+ ],
1104
+ "dev": true,
1105
+ "license": "MIT",
1106
+ "optional": true,
1107
+ "os": [
1108
+ "win32"
1109
+ ]
1110
+ },
1111
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
1112
+ "version": "4.60.4",
1113
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.4.tgz",
1114
+ "integrity": "sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==",
1115
+ "cpu": [
1116
+ "ia32"
1117
+ ],
1118
+ "dev": true,
1119
+ "license": "MIT",
1120
+ "optional": true,
1121
+ "os": [
1122
+ "win32"
1123
+ ]
1124
+ },
1125
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
1126
+ "version": "4.60.4",
1127
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.4.tgz",
1128
+ "integrity": "sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==",
1129
+ "cpu": [
1130
+ "x64"
1131
+ ],
1132
+ "dev": true,
1133
+ "license": "MIT",
1134
+ "optional": true,
1135
+ "os": [
1136
+ "win32"
1137
+ ]
1138
+ },
1139
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
1140
+ "version": "4.60.4",
1141
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.4.tgz",
1142
+ "integrity": "sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==",
1143
+ "cpu": [
1144
+ "x64"
1145
+ ],
1146
+ "dev": true,
1147
+ "license": "MIT",
1148
+ "optional": true,
1149
+ "os": [
1150
+ "win32"
1151
+ ]
1152
+ },
1153
+ "node_modules/@types/babel__core": {
1154
+ "version": "7.20.5",
1155
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
1156
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
1157
+ "dev": true,
1158
+ "license": "MIT",
1159
+ "dependencies": {
1160
+ "@babel/parser": "^7.20.7",
1161
+ "@babel/types": "^7.20.7",
1162
+ "@types/babel__generator": "*",
1163
+ "@types/babel__template": "*",
1164
+ "@types/babel__traverse": "*"
1165
+ }
1166
+ },
1167
+ "node_modules/@types/babel__generator": {
1168
+ "version": "7.27.0",
1169
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
1170
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
1171
+ "dev": true,
1172
+ "license": "MIT",
1173
+ "dependencies": {
1174
+ "@babel/types": "^7.0.0"
1175
+ }
1176
+ },
1177
+ "node_modules/@types/babel__template": {
1178
+ "version": "7.4.4",
1179
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
1180
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
1181
+ "dev": true,
1182
+ "license": "MIT",
1183
+ "dependencies": {
1184
+ "@babel/parser": "^7.1.0",
1185
+ "@babel/types": "^7.0.0"
1186
+ }
1187
+ },
1188
+ "node_modules/@types/babel__traverse": {
1189
+ "version": "7.28.0",
1190
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
1191
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
1192
+ "dev": true,
1193
+ "license": "MIT",
1194
+ "dependencies": {
1195
+ "@babel/types": "^7.28.2"
1196
+ }
1197
+ },
1198
+ "node_modules/@types/estree": {
1199
+ "version": "1.0.8",
1200
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
1201
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
1202
+ "dev": true,
1203
+ "license": "MIT"
1204
+ },
1205
+ "node_modules/@types/react": {
1206
+ "version": "19.2.15",
1207
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.15.tgz",
1208
+ "integrity": "sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==",
1209
+ "dev": true,
1210
+ "license": "MIT",
1211
+ "dependencies": {
1212
+ "csstype": "^3.2.2"
1213
+ }
1214
+ },
1215
+ "node_modules/@types/react-dom": {
1216
+ "version": "19.2.3",
1217
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
1218
+ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
1219
+ "dev": true,
1220
+ "license": "MIT",
1221
+ "peerDependencies": {
1222
+ "@types/react": "^19.2.0"
1223
+ }
1224
+ },
1225
+ "node_modules/@vitejs/plugin-react": {
1226
+ "version": "4.7.0",
1227
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz",
1228
+ "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==",
1229
+ "dev": true,
1230
+ "license": "MIT",
1231
+ "dependencies": {
1232
+ "@babel/core": "^7.28.0",
1233
+ "@babel/plugin-transform-react-jsx-self": "^7.27.1",
1234
+ "@babel/plugin-transform-react-jsx-source": "^7.27.1",
1235
+ "@rolldown/pluginutils": "1.0.0-beta.27",
1236
+ "@types/babel__core": "^7.20.5",
1237
+ "react-refresh": "^0.17.0"
1238
+ },
1239
+ "engines": {
1240
+ "node": "^14.18.0 || >=16.0.0"
1241
+ },
1242
+ "peerDependencies": {
1243
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
1244
+ }
1245
+ },
1246
+ "node_modules/baseline-browser-mapping": {
1247
+ "version": "2.10.31",
1248
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.31.tgz",
1249
+ "integrity": "sha512-MujYO3eP72uvmSE0i4wltsodRfIpZATP3jvzRNRGGxgzId7aVocVJJV3nf01qnzzKFGxQVC9bpWxl5cjxTr/7Q==",
1250
+ "dev": true,
1251
+ "license": "Apache-2.0",
1252
+ "bin": {
1253
+ "baseline-browser-mapping": "dist/cli.cjs"
1254
+ },
1255
+ "engines": {
1256
+ "node": ">=6.0.0"
1257
+ }
1258
+ },
1259
+ "node_modules/browserslist": {
1260
+ "version": "4.28.2",
1261
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz",
1262
+ "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==",
1263
+ "dev": true,
1264
+ "funding": [
1265
+ {
1266
+ "type": "opencollective",
1267
+ "url": "https://opencollective.com/browserslist"
1268
+ },
1269
+ {
1270
+ "type": "tidelift",
1271
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
1272
+ },
1273
+ {
1274
+ "type": "github",
1275
+ "url": "https://github.com/sponsors/ai"
1276
+ }
1277
+ ],
1278
+ "license": "MIT",
1279
+ "dependencies": {
1280
+ "baseline-browser-mapping": "^2.10.12",
1281
+ "caniuse-lite": "^1.0.30001782",
1282
+ "electron-to-chromium": "^1.5.328",
1283
+ "node-releases": "^2.0.36",
1284
+ "update-browserslist-db": "^1.2.3"
1285
+ },
1286
+ "bin": {
1287
+ "browserslist": "cli.js"
1288
+ },
1289
+ "engines": {
1290
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1291
+ }
1292
+ },
1293
+ "node_modules/caniuse-lite": {
1294
+ "version": "1.0.30001793",
1295
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz",
1296
+ "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==",
1297
+ "dev": true,
1298
+ "funding": [
1299
+ {
1300
+ "type": "opencollective",
1301
+ "url": "https://opencollective.com/browserslist"
1302
+ },
1303
+ {
1304
+ "type": "tidelift",
1305
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
1306
+ },
1307
+ {
1308
+ "type": "github",
1309
+ "url": "https://github.com/sponsors/ai"
1310
+ }
1311
+ ],
1312
+ "license": "CC-BY-4.0"
1313
+ },
1314
+ "node_modules/convert-source-map": {
1315
+ "version": "2.0.0",
1316
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
1317
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
1318
+ "dev": true,
1319
+ "license": "MIT"
1320
+ },
1321
+ "node_modules/csstype": {
1322
+ "version": "3.2.3",
1323
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
1324
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
1325
+ "dev": true,
1326
+ "license": "MIT"
1327
+ },
1328
+ "node_modules/debug": {
1329
+ "version": "4.4.3",
1330
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
1331
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
1332
+ "dev": true,
1333
+ "license": "MIT",
1334
+ "dependencies": {
1335
+ "ms": "^2.1.3"
1336
+ },
1337
+ "engines": {
1338
+ "node": ">=6.0"
1339
+ },
1340
+ "peerDependenciesMeta": {
1341
+ "supports-color": {
1342
+ "optional": true
1343
+ }
1344
+ }
1345
+ },
1346
+ "node_modules/electron-to-chromium": {
1347
+ "version": "1.5.360",
1348
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.360.tgz",
1349
+ "integrity": "sha512-GkcBt6YYAw9SxFWn+xVar4cLVGlXVuswwtRLBozi2zp0GjXs4ZnOrqV4zbXzg35n7w81hCkyJNYicgXlVHAmBA==",
1350
+ "dev": true,
1351
+ "license": "ISC"
1352
+ },
1353
+ "node_modules/esbuild": {
1354
+ "version": "0.25.12",
1355
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
1356
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
1357
+ "dev": true,
1358
+ "hasInstallScript": true,
1359
+ "license": "MIT",
1360
+ "bin": {
1361
+ "esbuild": "bin/esbuild"
1362
+ },
1363
+ "engines": {
1364
+ "node": ">=18"
1365
+ },
1366
+ "optionalDependencies": {
1367
+ "@esbuild/aix-ppc64": "0.25.12",
1368
+ "@esbuild/android-arm": "0.25.12",
1369
+ "@esbuild/android-arm64": "0.25.12",
1370
+ "@esbuild/android-x64": "0.25.12",
1371
+ "@esbuild/darwin-arm64": "0.25.12",
1372
+ "@esbuild/darwin-x64": "0.25.12",
1373
+ "@esbuild/freebsd-arm64": "0.25.12",
1374
+ "@esbuild/freebsd-x64": "0.25.12",
1375
+ "@esbuild/linux-arm": "0.25.12",
1376
+ "@esbuild/linux-arm64": "0.25.12",
1377
+ "@esbuild/linux-ia32": "0.25.12",
1378
+ "@esbuild/linux-loong64": "0.25.12",
1379
+ "@esbuild/linux-mips64el": "0.25.12",
1380
+ "@esbuild/linux-ppc64": "0.25.12",
1381
+ "@esbuild/linux-riscv64": "0.25.12",
1382
+ "@esbuild/linux-s390x": "0.25.12",
1383
+ "@esbuild/linux-x64": "0.25.12",
1384
+ "@esbuild/netbsd-arm64": "0.25.12",
1385
+ "@esbuild/netbsd-x64": "0.25.12",
1386
+ "@esbuild/openbsd-arm64": "0.25.12",
1387
+ "@esbuild/openbsd-x64": "0.25.12",
1388
+ "@esbuild/openharmony-arm64": "0.25.12",
1389
+ "@esbuild/sunos-x64": "0.25.12",
1390
+ "@esbuild/win32-arm64": "0.25.12",
1391
+ "@esbuild/win32-ia32": "0.25.12",
1392
+ "@esbuild/win32-x64": "0.25.12"
1393
+ }
1394
+ },
1395
+ "node_modules/escalade": {
1396
+ "version": "3.2.0",
1397
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
1398
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
1399
+ "dev": true,
1400
+ "license": "MIT",
1401
+ "engines": {
1402
+ "node": ">=6"
1403
+ }
1404
+ },
1405
+ "node_modules/fdir": {
1406
+ "version": "6.5.0",
1407
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
1408
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
1409
+ "dev": true,
1410
+ "license": "MIT",
1411
+ "engines": {
1412
+ "node": ">=12.0.0"
1413
+ },
1414
+ "peerDependencies": {
1415
+ "picomatch": "^3 || ^4"
1416
+ },
1417
+ "peerDependenciesMeta": {
1418
+ "picomatch": {
1419
+ "optional": true
1420
+ }
1421
+ }
1422
+ },
1423
+ "node_modules/fsevents": {
1424
+ "version": "2.3.3",
1425
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
1426
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
1427
+ "dev": true,
1428
+ "hasInstallScript": true,
1429
+ "license": "MIT",
1430
+ "optional": true,
1431
+ "os": [
1432
+ "darwin"
1433
+ ],
1434
+ "engines": {
1435
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1436
+ }
1437
+ },
1438
+ "node_modules/gensync": {
1439
+ "version": "1.0.0-beta.2",
1440
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
1441
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
1442
+ "dev": true,
1443
+ "license": "MIT",
1444
+ "engines": {
1445
+ "node": ">=6.9.0"
1446
+ }
1447
+ },
1448
+ "node_modules/js-tokens": {
1449
+ "version": "4.0.0",
1450
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1451
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
1452
+ "dev": true,
1453
+ "license": "MIT"
1454
+ },
1455
+ "node_modules/jsesc": {
1456
+ "version": "3.1.0",
1457
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
1458
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
1459
+ "dev": true,
1460
+ "license": "MIT",
1461
+ "bin": {
1462
+ "jsesc": "bin/jsesc"
1463
+ },
1464
+ "engines": {
1465
+ "node": ">=6"
1466
+ }
1467
+ },
1468
+ "node_modules/json5": {
1469
+ "version": "2.2.3",
1470
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
1471
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
1472
+ "dev": true,
1473
+ "license": "MIT",
1474
+ "bin": {
1475
+ "json5": "lib/cli.js"
1476
+ },
1477
+ "engines": {
1478
+ "node": ">=6"
1479
+ }
1480
+ },
1481
+ "node_modules/lru-cache": {
1482
+ "version": "5.1.1",
1483
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
1484
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
1485
+ "dev": true,
1486
+ "license": "ISC",
1487
+ "dependencies": {
1488
+ "yallist": "^3.0.2"
1489
+ }
1490
+ },
1491
+ "node_modules/ms": {
1492
+ "version": "2.1.3",
1493
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1494
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1495
+ "dev": true,
1496
+ "license": "MIT"
1497
+ },
1498
+ "node_modules/nanoid": {
1499
+ "version": "3.3.12",
1500
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz",
1501
+ "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==",
1502
+ "dev": true,
1503
+ "funding": [
1504
+ {
1505
+ "type": "github",
1506
+ "url": "https://github.com/sponsors/ai"
1507
+ }
1508
+ ],
1509
+ "license": "MIT",
1510
+ "bin": {
1511
+ "nanoid": "bin/nanoid.cjs"
1512
+ },
1513
+ "engines": {
1514
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1515
+ }
1516
+ },
1517
+ "node_modules/node-releases": {
1518
+ "version": "2.0.45",
1519
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.45.tgz",
1520
+ "integrity": "sha512-iIbHXV9eBB2nB0wa7oTsrrXq+qQt+9SIlx9AX3T96YgobtEQfis5n6TJ6vV+3QP8DwdriEAcGhARaFCu37peBg==",
1521
+ "dev": true,
1522
+ "license": "MIT",
1523
+ "engines": {
1524
+ "node": ">=18"
1525
+ }
1526
+ },
1527
+ "node_modules/picocolors": {
1528
+ "version": "1.1.1",
1529
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
1530
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
1531
+ "dev": true,
1532
+ "license": "ISC"
1533
+ },
1534
+ "node_modules/picomatch": {
1535
+ "version": "4.0.4",
1536
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
1537
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
1538
+ "dev": true,
1539
+ "license": "MIT",
1540
+ "engines": {
1541
+ "node": ">=12"
1542
+ },
1543
+ "funding": {
1544
+ "url": "https://github.com/sponsors/jonschlinkert"
1545
+ }
1546
+ },
1547
+ "node_modules/postcss": {
1548
+ "version": "8.5.15",
1549
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz",
1550
+ "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==",
1551
+ "dev": true,
1552
+ "funding": [
1553
+ {
1554
+ "type": "opencollective",
1555
+ "url": "https://opencollective.com/postcss/"
1556
+ },
1557
+ {
1558
+ "type": "tidelift",
1559
+ "url": "https://tidelift.com/funding/github/npm/postcss"
1560
+ },
1561
+ {
1562
+ "type": "github",
1563
+ "url": "https://github.com/sponsors/ai"
1564
+ }
1565
+ ],
1566
+ "license": "MIT",
1567
+ "dependencies": {
1568
+ "nanoid": "^3.3.12",
1569
+ "picocolors": "^1.1.1",
1570
+ "source-map-js": "^1.2.1"
1571
+ },
1572
+ "engines": {
1573
+ "node": "^10 || ^12 || >=14"
1574
+ }
1575
+ },
1576
+ "node_modules/react": {
1577
+ "version": "19.2.6",
1578
+ "resolved": "https://registry.npmjs.org/react/-/react-19.2.6.tgz",
1579
+ "integrity": "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==",
1580
+ "license": "MIT",
1581
+ "engines": {
1582
+ "node": ">=0.10.0"
1583
+ }
1584
+ },
1585
+ "node_modules/react-dom": {
1586
+ "version": "19.2.6",
1587
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.6.tgz",
1588
+ "integrity": "sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==",
1589
+ "license": "MIT",
1590
+ "dependencies": {
1591
+ "scheduler": "^0.27.0"
1592
+ },
1593
+ "peerDependencies": {
1594
+ "react": "^19.2.6"
1595
+ }
1596
+ },
1597
+ "node_modules/react-refresh": {
1598
+ "version": "0.17.0",
1599
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
1600
+ "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==",
1601
+ "dev": true,
1602
+ "license": "MIT",
1603
+ "engines": {
1604
+ "node": ">=0.10.0"
1605
+ }
1606
+ },
1607
+ "node_modules/rollup": {
1608
+ "version": "4.60.4",
1609
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.4.tgz",
1610
+ "integrity": "sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==",
1611
+ "dev": true,
1612
+ "license": "MIT",
1613
+ "dependencies": {
1614
+ "@types/estree": "1.0.8"
1615
+ },
1616
+ "bin": {
1617
+ "rollup": "dist/bin/rollup"
1618
+ },
1619
+ "engines": {
1620
+ "node": ">=18.0.0",
1621
+ "npm": ">=8.0.0"
1622
+ },
1623
+ "optionalDependencies": {
1624
+ "@rollup/rollup-android-arm-eabi": "4.60.4",
1625
+ "@rollup/rollup-android-arm64": "4.60.4",
1626
+ "@rollup/rollup-darwin-arm64": "4.60.4",
1627
+ "@rollup/rollup-darwin-x64": "4.60.4",
1628
+ "@rollup/rollup-freebsd-arm64": "4.60.4",
1629
+ "@rollup/rollup-freebsd-x64": "4.60.4",
1630
+ "@rollup/rollup-linux-arm-gnueabihf": "4.60.4",
1631
+ "@rollup/rollup-linux-arm-musleabihf": "4.60.4",
1632
+ "@rollup/rollup-linux-arm64-gnu": "4.60.4",
1633
+ "@rollup/rollup-linux-arm64-musl": "4.60.4",
1634
+ "@rollup/rollup-linux-loong64-gnu": "4.60.4",
1635
+ "@rollup/rollup-linux-loong64-musl": "4.60.4",
1636
+ "@rollup/rollup-linux-ppc64-gnu": "4.60.4",
1637
+ "@rollup/rollup-linux-ppc64-musl": "4.60.4",
1638
+ "@rollup/rollup-linux-riscv64-gnu": "4.60.4",
1639
+ "@rollup/rollup-linux-riscv64-musl": "4.60.4",
1640
+ "@rollup/rollup-linux-s390x-gnu": "4.60.4",
1641
+ "@rollup/rollup-linux-x64-gnu": "4.60.4",
1642
+ "@rollup/rollup-linux-x64-musl": "4.60.4",
1643
+ "@rollup/rollup-openbsd-x64": "4.60.4",
1644
+ "@rollup/rollup-openharmony-arm64": "4.60.4",
1645
+ "@rollup/rollup-win32-arm64-msvc": "4.60.4",
1646
+ "@rollup/rollup-win32-ia32-msvc": "4.60.4",
1647
+ "@rollup/rollup-win32-x64-gnu": "4.60.4",
1648
+ "@rollup/rollup-win32-x64-msvc": "4.60.4",
1649
+ "fsevents": "~2.3.2"
1650
+ }
1651
+ },
1652
+ "node_modules/scheduler": {
1653
+ "version": "0.27.0",
1654
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
1655
+ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
1656
+ "license": "MIT"
1657
+ },
1658
+ "node_modules/semver": {
1659
+ "version": "6.3.1",
1660
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
1661
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
1662
+ "dev": true,
1663
+ "license": "ISC",
1664
+ "bin": {
1665
+ "semver": "bin/semver.js"
1666
+ }
1667
+ },
1668
+ "node_modules/source-map-js": {
1669
+ "version": "1.2.1",
1670
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
1671
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
1672
+ "dev": true,
1673
+ "license": "BSD-3-Clause",
1674
+ "engines": {
1675
+ "node": ">=0.10.0"
1676
+ }
1677
+ },
1678
+ "node_modules/tinyglobby": {
1679
+ "version": "0.2.16",
1680
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz",
1681
+ "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==",
1682
+ "dev": true,
1683
+ "license": "MIT",
1684
+ "dependencies": {
1685
+ "fdir": "^6.5.0",
1686
+ "picomatch": "^4.0.4"
1687
+ },
1688
+ "engines": {
1689
+ "node": ">=12.0.0"
1690
+ },
1691
+ "funding": {
1692
+ "url": "https://github.com/sponsors/SuperchupuDev"
1693
+ }
1694
+ },
1695
+ "node_modules/typescript": {
1696
+ "version": "5.9.3",
1697
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
1698
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
1699
+ "dev": true,
1700
+ "license": "Apache-2.0",
1701
+ "bin": {
1702
+ "tsc": "bin/tsc",
1703
+ "tsserver": "bin/tsserver"
1704
+ },
1705
+ "engines": {
1706
+ "node": ">=14.17"
1707
+ }
1708
+ },
1709
+ "node_modules/update-browserslist-db": {
1710
+ "version": "1.2.3",
1711
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
1712
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
1713
+ "dev": true,
1714
+ "funding": [
1715
+ {
1716
+ "type": "opencollective",
1717
+ "url": "https://opencollective.com/browserslist"
1718
+ },
1719
+ {
1720
+ "type": "tidelift",
1721
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
1722
+ },
1723
+ {
1724
+ "type": "github",
1725
+ "url": "https://github.com/sponsors/ai"
1726
+ }
1727
+ ],
1728
+ "license": "MIT",
1729
+ "dependencies": {
1730
+ "escalade": "^3.2.0",
1731
+ "picocolors": "^1.1.1"
1732
+ },
1733
+ "bin": {
1734
+ "update-browserslist-db": "cli.js"
1735
+ },
1736
+ "peerDependencies": {
1737
+ "browserslist": ">= 4.21.0"
1738
+ }
1739
+ },
1740
+ "node_modules/vite": {
1741
+ "version": "6.4.2",
1742
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz",
1743
+ "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==",
1744
+ "dev": true,
1745
+ "license": "MIT",
1746
+ "dependencies": {
1747
+ "esbuild": "^0.25.0",
1748
+ "fdir": "^6.4.4",
1749
+ "picomatch": "^4.0.2",
1750
+ "postcss": "^8.5.3",
1751
+ "rollup": "^4.34.9",
1752
+ "tinyglobby": "^0.2.13"
1753
+ },
1754
+ "bin": {
1755
+ "vite": "bin/vite.js"
1756
+ },
1757
+ "engines": {
1758
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
1759
+ },
1760
+ "funding": {
1761
+ "url": "https://github.com/vitejs/vite?sponsor=1"
1762
+ },
1763
+ "optionalDependencies": {
1764
+ "fsevents": "~2.3.3"
1765
+ },
1766
+ "peerDependencies": {
1767
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
1768
+ "jiti": ">=1.21.0",
1769
+ "less": "*",
1770
+ "lightningcss": "^1.21.0",
1771
+ "sass": "*",
1772
+ "sass-embedded": "*",
1773
+ "stylus": "*",
1774
+ "sugarss": "*",
1775
+ "terser": "^5.16.0",
1776
+ "tsx": "^4.8.1",
1777
+ "yaml": "^2.4.2"
1778
+ },
1779
+ "peerDependenciesMeta": {
1780
+ "@types/node": {
1781
+ "optional": true
1782
+ },
1783
+ "jiti": {
1784
+ "optional": true
1785
+ },
1786
+ "less": {
1787
+ "optional": true
1788
+ },
1789
+ "lightningcss": {
1790
+ "optional": true
1791
+ },
1792
+ "sass": {
1793
+ "optional": true
1794
+ },
1795
+ "sass-embedded": {
1796
+ "optional": true
1797
+ },
1798
+ "stylus": {
1799
+ "optional": true
1800
+ },
1801
+ "sugarss": {
1802
+ "optional": true
1803
+ },
1804
+ "terser": {
1805
+ "optional": true
1806
+ },
1807
+ "tsx": {
1808
+ "optional": true
1809
+ },
1810
+ "yaml": {
1811
+ "optional": true
1812
+ }
1813
+ }
1814
+ },
1815
+ "node_modules/yallist": {
1816
+ "version": "3.1.1",
1817
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
1818
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
1819
+ "dev": true,
1820
+ "license": "ISC"
1821
+ }
1822
+ }
1823
+ }
frontend/package.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "frontend",
3
+ "private": true,
4
+ "version": "0.0.1",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "tsc && vite build",
9
+ "preview": "vite preview"
10
+ },
11
+ "dependencies": {
12
+ "react": "^19.1.0",
13
+ "react-dom": "^19.1.0"
14
+ },
15
+ "devDependencies": {
16
+ "@types/react": "^19.1.0",
17
+ "@types/react-dom": "^19.1.0",
18
+ "@vitejs/plugin-react": "^4.5.2",
19
+ "typescript": "^5.8.3",
20
+ "vite": "^6.3.5"
21
+ }
22
+ }
frontend/src/App.tsx ADDED
@@ -0,0 +1,308 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { useState, useRef, useCallback } from "react";
2
+
3
+ interface AgentResult {
4
+ contract?: string;
5
+ compilationErrors?: string[];
6
+ reviewSummary?: string;
7
+ vulnerabilities?: Array<{ type: string; severity: string; description: string }>;
8
+ results?: unknown[];
9
+ }
10
+
11
+ export function App() {
12
+ const [requirements, setRequirements] = useState("");
13
+ const [logs, setLogs] = useState<string[]>([]);
14
+ const [coderResult, setCoderResult] = useState<AgentResult | null>(null);
15
+ const [auditorResult, setAuditorResult] = useState<AgentResult | null>(null);
16
+ const [testerResult, setTesterResult] = useState<AgentResult | null>(null);
17
+ const [running, setRunning] = useState(false);
18
+ const logsEndRef = useRef<HTMLDivElement>(null);
19
+
20
+ const appendLog = useCallback((msg: string) => {
21
+ setLogs((prev) => [...prev, msg]);
22
+ setTimeout(() => logsEndRef.current?.scrollIntoView({ behavior: "smooth" }), 50);
23
+ }, []);
24
+
25
+ const handleSubmit = async (e: React.FormEvent) => {
26
+ e.preventDefault();
27
+ if (!requirements.trim() || running) return;
28
+
29
+ setRunning(true);
30
+ setLogs([]);
31
+ setCoderResult(null);
32
+ setAuditorResult(null);
33
+ setTesterResult(null);
34
+ appendLog("Iniciando pipeline...");
35
+
36
+ try {
37
+ const res = await fetch("/api/run", {
38
+ method: "POST",
39
+ headers: { "Content-Type": "application/json" },
40
+ body: JSON.stringify({ requirements }),
41
+ });
42
+
43
+ const reader = res.body?.getReader();
44
+ if (!reader) throw new Error("Stream não disponível");
45
+
46
+ const decoder = new TextDecoder();
47
+ let buffer = "";
48
+
49
+ while (true) {
50
+ const { done, value } = await reader.read();
51
+ if (done) break;
52
+
53
+ buffer += decoder.decode(value, { stream: true });
54
+ const lines = buffer.split("\n");
55
+ buffer = lines.pop() || "";
56
+
57
+ let currentEvent = "";
58
+ for (const line of lines) {
59
+ if (line.startsWith("event:")) {
60
+ currentEvent = line.slice(6).trim();
61
+ } else if (line.startsWith("data:")) {
62
+ const data = line.slice(5).trim();
63
+ switch (currentEvent) {
64
+ case "log":
65
+ appendLog(data);
66
+ break;
67
+ case "coder":
68
+ setCoderResult(JSON.parse(data));
69
+ break;
70
+ case "auditor":
71
+ setAuditorResult(JSON.parse(data));
72
+ break;
73
+ case "tester":
74
+ setTesterResult(JSON.parse(data));
75
+ break;
76
+ case "error":
77
+ appendLog(`❌ ERRO: ${data}`);
78
+ break;
79
+ }
80
+ }
81
+ }
82
+ }
83
+ } catch (err) {
84
+ appendLog(`❌ Erro de conexão: ${err instanceof Error ? err.message : String(err)}`);
85
+ } finally {
86
+ setRunning(false);
87
+ }
88
+ };
89
+
90
+ return (
91
+ <div style={styles.container}>
92
+ <header style={styles.header}>
93
+ <h1 style={styles.title}>
94
+ Multi-Agent: Geração, Auditoria e Teste de Smart Contracts
95
+ </h1>
96
+ <p style={styles.subtitle}>
97
+ Descreva um cenário ou requisito cuja solução seja um smart contract em Solidity.
98
+ O sistema irá gerar, compilar, auditar e testar o contrato automaticamente.
99
+ </p>
100
+ </header>
101
+
102
+ <form onSubmit={handleSubmit} style={styles.form}>
103
+ <textarea
104
+ value={requirements}
105
+ onChange={(e) => setRequirements(e.target.value)}
106
+ placeholder={"Ex: Crie um token ERC20 com as seguintes características:\n- Nome: MeuToken, Símbolo: MTK\n- Supply inicial de 1.000.000 tokens\n- Funções de mint (apenas owner) e burn\n- Pausável pelo owner"}
107
+ style={styles.textarea}
108
+ rows={6}
109
+ disabled={running}
110
+ />
111
+ <button type="submit" disabled={running || !requirements.trim()} style={{
112
+ ...styles.button,
113
+ opacity: running || !requirements.trim() ? 0.5 : 1,
114
+ }}>
115
+ {running ? "Executando pipeline..." : "Executar Pipeline"}
116
+ </button>
117
+ </form>
118
+
119
+ {/* Logs */}
120
+ {logs.length > 0 && (
121
+ <section style={styles.section}>
122
+ <h2 style={styles.sectionTitle}>📋 Log de Execução</h2>
123
+ <div style={styles.logBox}>
124
+ {logs.map((log, i) => (
125
+ <div key={i} style={styles.logLine}>{log}</div>
126
+ ))}
127
+ <div ref={logsEndRef} />
128
+ </div>
129
+ </section>
130
+ )}
131
+
132
+ {/* Coder */}
133
+ {coderResult && (
134
+ <section style={styles.section}>
135
+ <h2 style={styles.sectionTitle}>🔨 Agente Coder</h2>
136
+
137
+ <h3 style={styles.subTitle}>Contrato Gerado</h3>
138
+ <div style={styles.codeBox}>
139
+ <pre style={styles.code}>{coderResult.contract}</pre>
140
+ </div>
141
+
142
+ {coderResult.compilationErrors && coderResult.compilationErrors.length > 0 && (
143
+ <>
144
+ <h3 style={{ ...styles.subTitle, color: "#ef4444" }}>Erros de Compilação</h3>
145
+ <div style={{ ...styles.codeBox, borderColor: "#ef4444" }}>
146
+ <pre style={styles.code}>{coderResult.compilationErrors.join("\n")}</pre>
147
+ </div>
148
+ </>
149
+ )}
150
+
151
+ {coderResult.reviewSummary && (
152
+ <>
153
+ <h3 style={styles.subTitle}>Revisão de Segurança</h3>
154
+ <div style={styles.resultBox}>
155
+ <p style={styles.resultText}>{coderResult.reviewSummary}</p>
156
+ </div>
157
+ </>
158
+ )}
159
+ </section>
160
+ )}
161
+
162
+ {/* Auditor */}
163
+ {auditorResult && (
164
+ <section style={styles.section}>
165
+ <h2 style={styles.sectionTitle}>🔍 Agente Auditor</h2>
166
+ <div style={styles.codeBox}>
167
+ <pre style={styles.code}>{JSON.stringify(auditorResult.vulnerabilities, null, 2)}</pre>
168
+ </div>
169
+ </section>
170
+ )}
171
+
172
+ {/* Tester */}
173
+ {testerResult && (
174
+ <section style={styles.section}>
175
+ <h2 style={styles.sectionTitle}>🧪 Agente Tester</h2>
176
+ <div style={styles.codeBox}>
177
+ <pre style={styles.code}>
178
+ {testerResult.results && testerResult.results.length > 0
179
+ ? JSON.stringify(testerResult.results, null, 2)
180
+ : "Nenhum resultado de teste gerado."}
181
+ </pre>
182
+ </div>
183
+ </section>
184
+ )}
185
+ </div>
186
+ );
187
+ }
188
+
189
+ const styles: Record<string, React.CSSProperties> = {
190
+ container: {
191
+ maxWidth: 900,
192
+ margin: "0 auto",
193
+ padding: "32px 20px",
194
+ fontFamily: "'Segoe UI', system-ui, -apple-system, sans-serif",
195
+ color: "#e2e8f0",
196
+ background: "#0f172a",
197
+ minHeight: "100vh",
198
+ },
199
+ header: {
200
+ textAlign: "center",
201
+ marginBottom: 32,
202
+ },
203
+ title: {
204
+ fontSize: 28,
205
+ fontWeight: 700,
206
+ color: "#f8fafc",
207
+ margin: "0 0 12px",
208
+ lineHeight: 1.3,
209
+ },
210
+ subtitle: {
211
+ fontSize: 15,
212
+ color: "#94a3b8",
213
+ margin: 0,
214
+ lineHeight: 1.6,
215
+ },
216
+ form: {
217
+ display: "flex",
218
+ flexDirection: "column",
219
+ gap: 12,
220
+ marginBottom: 32,
221
+ },
222
+ textarea: {
223
+ width: "100%",
224
+ padding: 16,
225
+ fontSize: 14,
226
+ fontFamily: "inherit",
227
+ borderRadius: 8,
228
+ border: "1px solid #334155",
229
+ background: "#1e293b",
230
+ color: "#e2e8f0",
231
+ resize: "vertical",
232
+ outline: "none",
233
+ boxSizing: "border-box",
234
+ lineHeight: 1.6,
235
+ },
236
+ button: {
237
+ padding: "12px 24px",
238
+ fontSize: 15,
239
+ fontWeight: 600,
240
+ borderRadius: 8,
241
+ border: "none",
242
+ background: "#3b82f6",
243
+ color: "#fff",
244
+ cursor: "pointer",
245
+ transition: "background 0.2s",
246
+ },
247
+ section: {
248
+ marginBottom: 28,
249
+ },
250
+ sectionTitle: {
251
+ fontSize: 18,
252
+ fontWeight: 600,
253
+ color: "#f8fafc",
254
+ marginBottom: 10,
255
+ },
256
+ subTitle: {
257
+ fontSize: 14,
258
+ fontWeight: 600,
259
+ color: "#94a3b8",
260
+ marginTop: 14,
261
+ marginBottom: 6,
262
+ },
263
+ logBox: {
264
+ background: "#1e293b",
265
+ border: "1px solid #334155",
266
+ borderRadius: 8,
267
+ padding: 16,
268
+ maxHeight: 220,
269
+ overflowY: "auto",
270
+ fontSize: 13,
271
+ fontFamily: "'JetBrains Mono', 'Fira Code', monospace",
272
+ },
273
+ logLine: {
274
+ padding: "2px 0",
275
+ color: "#a5f3fc",
276
+ whiteSpace: "pre-wrap",
277
+ wordBreak: "break-word",
278
+ },
279
+ codeBox: {
280
+ background: "#1e293b",
281
+ border: "1px solid #334155",
282
+ borderRadius: 8,
283
+ padding: 16,
284
+ maxHeight: 400,
285
+ overflowY: "auto",
286
+ },
287
+ code: {
288
+ margin: 0,
289
+ fontSize: 13,
290
+ fontFamily: "'JetBrains Mono', 'Fira Code', monospace",
291
+ color: "#a5f3fc",
292
+ whiteSpace: "pre-wrap",
293
+ wordBreak: "break-word",
294
+ },
295
+ resultBox: {
296
+ background: "#1e293b",
297
+ border: "1px solid #334155",
298
+ borderRadius: 8,
299
+ padding: 16,
300
+ },
301
+ resultText: {
302
+ margin: 0,
303
+ fontSize: 14,
304
+ lineHeight: 1.6,
305
+ color: "#cbd5e1",
306
+ whiteSpace: "pre-wrap",
307
+ },
308
+ };
frontend/src/main.tsx ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import { StrictMode } from "react";
2
+ import { createRoot } from "react-dom/client";
3
+ import { App } from "./App.tsx";
4
+
5
+ createRoot(document.getElementById("root")!).render(
6
+ <StrictMode>
7
+ <App />
8
+ </StrictMode>,
9
+ );
frontend/tsconfig.json ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "module": "ESNext",
5
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
6
+ "jsx": "react-jsx",
7
+ "moduleResolution": "bundler",
8
+ "strict": true,
9
+ "skipLibCheck": true,
10
+ "esModuleInterop": true,
11
+ "allowImportingTsExtensions": true,
12
+ "noEmit": true,
13
+ "isolatedModules": true
14
+ },
15
+ "include": ["src"]
16
+ }
frontend/vite.config.ts ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { defineConfig } from "vite";
2
+ import react from "@vitejs/plugin-react";
3
+
4
+ export default defineConfig({
5
+ plugins: [react()],
6
+ server: {
7
+ proxy: {
8
+ "/api": "http://localhost:7860",
9
+ },
10
+ },
11
+ });
input/requirements.md ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Requisitos do Smart Contract
2
+
3
+ ## Descrição
4
+ Token ERC20 com funcionalidades de controle de acesso e pausa.
5
+
6
+ ## Requisitos Funcionais
7
+
8
+ 1. Implementar um token ERC20 com nome, símbolo e supply configuráveis
9
+ 2. O contrato deve ser pausável (funções de transferência bloqueadas quando pausado)
10
+ 3. Apenas o owner pode pausar e despausar o contrato
11
+ 4. O owner pode criar (mint) novos tokens
12
+ 5. Qualquer holder pode queimar (burn) seus próprios tokens
package-lock.json CHANGED
@@ -7,18 +7,25 @@
7
  "": {
8
  "name": "projeto-talp1",
9
  "version": "0.0.1",
 
10
  "license": "ISC",
11
  "dependencies": {
 
12
  "@langchain/core": "^1.1.45",
 
13
  "@langchain/langgraph": "^1.3.0",
14
  "@langchain/openrouter": "^0.2.4",
15
  "dotenv": "^17.4.2",
 
16
  "langchain": "^1.4.0",
 
 
17
  "zod": "^4.4.3"
18
  },
19
  "devDependencies": {
20
  "@biomejs/biome": "2.4.14",
21
  "@types/node": "^25.6.0",
 
22
  "typescript": "^6.0.3",
23
  "vitest": "^4.1.5"
24
  }
@@ -226,6 +233,27 @@
226
  "tslib": "^2.4.0"
227
  }
228
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
229
  "node_modules/@jridgewell/sourcemap-codec": {
230
  "version": "1.5.5",
231
  "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
@@ -234,16 +262,13 @@
234
  "license": "MIT"
235
  },
236
  "node_modules/@langchain/core": {
237
- "version": "1.1.45",
238
- "resolved": "https://registry.npmjs.org/@langchain/core/-/core-1.1.45.tgz",
239
- "integrity": "sha512-Y/wvuglLTMKJahkl4QD9dBIdF/z/CxZJWdTfHJF/q2jtlJtoFf6Mb5JpGxZfsi3mBY6NSG941FSLTcqhCKrhBA==",
240
  "license": "MIT",
241
  "dependencies": {
242
  "@cfworker/json-schema": "^4.0.2",
243
  "@standard-schema/spec": "^1.1.0",
244
- "ansi-styles": "^5.0.0",
245
- "camelcase": "6",
246
- "decamelize": "1.2.0",
247
  "js-tiktoken": "^1.0.12",
248
  "langsmith": ">=0.5.0 <1.0.0",
249
  "mustache": "^4.2.0",
@@ -254,6 +279,21 @@
254
  "node": ">=20"
255
  }
256
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
257
  "node_modules/@langchain/langgraph": {
258
  "version": "1.3.0",
259
  "resolved": "https://registry.npmjs.org/@langchain/langgraph/-/langgraph-1.3.0.tgz",
@@ -295,6 +335,20 @@
295
  "@langchain/core": "^1.1.44"
296
  }
297
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
298
  "node_modules/@langchain/langgraph-sdk": {
299
  "version": "1.9.1",
300
  "resolved": "https://registry.npmjs.org/@langchain/langgraph-sdk/-/langgraph-sdk-1.9.1.tgz",
@@ -376,6 +430,20 @@
376
  "uuid": "dist-node/bin/uuid"
377
  }
378
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
379
  "node_modules/@langchain/openai": {
380
  "version": "1.4.5",
381
  "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-1.4.5.tgz",
@@ -880,13 +948,24 @@
880
  "url": "https://opencollective.com/vitest"
881
  }
882
  },
 
 
 
 
 
 
 
883
  "node_modules/ansi-styles": {
884
- "version": "5.2.0",
885
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
886
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
 
887
  "license": "MIT",
 
 
 
888
  "engines": {
889
- "node": ">=10"
890
  },
891
  "funding": {
892
  "url": "https://github.com/chalk/ansi-styles?sponsor=1"
@@ -922,16 +1001,67 @@
922
  ],
923
  "license": "MIT"
924
  },
925
- "node_modules/camelcase": {
926
- "version": "6.3.0",
927
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
928
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
 
929
  "license": "MIT",
 
 
 
930
  "engines": {
931
- "node": ">=10"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
932
  },
933
  "funding": {
934
- "url": "https://github.com/sponsors/sindresorhus"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
935
  }
936
  },
937
  "node_modules/chai": {
@@ -944,6 +1074,74 @@
944
  "node": ">=18"
945
  }
946
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
947
  "node_modules/convert-source-map": {
948
  "version": "2.0.0",
949
  "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
@@ -951,13 +1149,37 @@
951
  "dev": true,
952
  "license": "MIT"
953
  },
954
- "node_modules/decamelize": {
955
- "version": "1.2.0",
956
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
957
- "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
 
958
  "license": "MIT",
 
 
 
 
 
959
  "engines": {
960
- "node": ">=0.10.0"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
961
  }
962
  },
963
  "node_modules/detect-libc": {
@@ -982,6 +1204,41 @@
982
  "url": "https://dotenvx.com"
983
  }
984
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
985
  "node_modules/es-module-lexer": {
986
  "version": "2.1.0",
987
  "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz",
@@ -989,6 +1246,19 @@
989
  "dev": true,
990
  "license": "MIT"
991
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
992
  "node_modules/estree-walker": {
993
  "version": "3.0.3",
994
  "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
@@ -1042,6 +1312,64 @@
1042
  }
1043
  }
1044
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1045
  "node_modules/fsevents": {
1046
  "version": "2.3.3",
1047
  "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
@@ -1057,6 +1385,149 @@
1057
  "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1058
  }
1059
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1060
  "node_modules/is-network-error": {
1061
  "version": "1.3.1",
1062
  "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz",
@@ -1069,6 +1540,49 @@
1069
  "url": "https://github.com/sponsors/sindresorhus"
1070
  }
1071
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1072
  "node_modules/js-tiktoken": {
1073
  "version": "1.0.21",
1074
  "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.21.tgz",
@@ -1078,6 +1592,59 @@
1078
  "base64-js": "^1.5.1"
1079
  }
1080
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1081
  "node_modules/langchain": {
1082
  "version": "1.4.0",
1083
  "resolved": "https://registry.npmjs.org/langchain/-/langchain-1.4.0.tgz",
@@ -1400,6 +1967,61 @@
1400
  "@jridgewell/sourcemap-codec": "^1.5.5"
1401
  }
1402
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1403
  "node_modules/mustache": {
1404
  "version": "4.2.0",
1405
  "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
@@ -1428,6 +2050,16 @@
1428
  "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1429
  }
1430
  },
 
 
 
 
 
 
 
 
 
 
1431
  "node_modules/obug": {
1432
  "version": "2.1.1",
1433
  "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz",
@@ -1439,6 +2071,23 @@
1439
  ],
1440
  "license": "MIT"
1441
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1442
  "node_modules/openai": {
1443
  "version": "6.36.0",
1444
  "resolved": "https://registry.npmjs.org/openai/-/openai-6.36.0.tgz",
@@ -1460,6 +2109,15 @@
1460
  }
1461
  }
1462
  },
 
 
 
 
 
 
 
 
 
1463
  "node_modules/p-finally": {
1464
  "version": "1.0.0",
1465
  "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
@@ -1512,6 +2170,69 @@
1512
  "node": ">=8"
1513
  }
1514
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1515
  "node_modules/pathe": {
1516
  "version": "2.0.3",
1517
  "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
@@ -1602,6 +2323,56 @@
1602
  "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.18"
1603
  }
1604
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1605
  "node_modules/siginfo": {
1606
  "version": "2.0.0",
1607
  "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
@@ -1609,6 +2380,37 @@
1609
  "dev": true,
1610
  "license": "ISC"
1611
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1612
  "node_modules/source-map-js": {
1613
  "version": "1.2.1",
1614
  "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
@@ -1633,6 +2435,19 @@
1633
  "dev": true,
1634
  "license": "MIT"
1635
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
1636
  "node_modules/tinybench": {
1637
  "version": "2.9.0",
1638
  "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
@@ -1677,6 +2492,31 @@
1677
  "node": ">=14.0.0"
1678
  }
1679
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1680
  "node_modules/tslib": {
1681
  "version": "2.8.1",
1682
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
@@ -1706,18 +2546,27 @@
1706
  "dev": true,
1707
  "license": "MIT"
1708
  },
 
 
 
 
 
 
 
 
 
 
1709
  "node_modules/uuid": {
1710
- "version": "10.0.0",
1711
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
1712
- "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
1713
- "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).",
1714
  "funding": [
1715
  "https://github.com/sponsors/broofa",
1716
  "https://github.com/sponsors/ctavan"
1717
  ],
1718
  "license": "MIT",
1719
  "bin": {
1720
- "uuid": "dist/bin/uuid"
1721
  }
1722
  },
1723
  "node_modules/vite": {
@@ -1888,6 +2737,22 @@
1888
  }
1889
  }
1890
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1891
  "node_modules/why-is-node-running": {
1892
  "version": "2.3.0",
1893
  "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
@@ -1905,6 +2770,22 @@
1905
  "node": ">=8"
1906
  }
1907
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1908
  "node_modules/zod": {
1909
  "version": "4.4.3",
1910
  "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
 
7
  "": {
8
  "name": "projeto-talp1",
9
  "version": "0.0.1",
10
+ "hasInstallScript": true,
11
  "license": "ISC",
12
  "dependencies": {
13
+ "@hono/node-server": "^2.0.3",
14
  "@langchain/core": "^1.1.45",
15
+ "@langchain/google-genai": "^2.1.31",
16
  "@langchain/langgraph": "^1.3.0",
17
  "@langchain/openrouter": "^0.2.4",
18
  "dotenv": "^17.4.2",
19
+ "hono": "^4.12.21",
20
  "langchain": "^1.4.0",
21
+ "solc": "^0.8.35",
22
+ "uuid": "^11.1.1",
23
  "zod": "^4.4.3"
24
  },
25
  "devDependencies": {
26
  "@biomejs/biome": "2.4.14",
27
  "@types/node": "^25.6.0",
28
+ "patch-package": "^8.0.1",
29
  "typescript": "^6.0.3",
30
  "vitest": "^4.1.5"
31
  }
 
233
  "tslib": "^2.4.0"
234
  }
235
  },
236
+ "node_modules/@google/generative-ai": {
237
+ "version": "0.24.1",
238
+ "resolved": "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.24.1.tgz",
239
+ "integrity": "sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==",
240
+ "license": "Apache-2.0",
241
+ "engines": {
242
+ "node": ">=18.0.0"
243
+ }
244
+ },
245
+ "node_modules/@hono/node-server": {
246
+ "version": "2.0.3",
247
+ "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.0.3.tgz",
248
+ "integrity": "sha512-a0jV+/HRe3G5zjFID3zObAQFdkl6zpxTuqktdDDXS3MJKcrZIkB8OkLpNBlY/WXFqv2HF4a0takPej+aNFczWA==",
249
+ "license": "MIT",
250
+ "engines": {
251
+ "node": ">=20"
252
+ },
253
+ "peerDependencies": {
254
+ "hono": "^4"
255
+ }
256
+ },
257
  "node_modules/@jridgewell/sourcemap-codec": {
258
  "version": "1.5.5",
259
  "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
 
262
  "license": "MIT"
263
  },
264
  "node_modules/@langchain/core": {
265
+ "version": "1.1.47",
266
+ "resolved": "https://registry.npmjs.org/@langchain/core/-/core-1.1.47.tgz",
267
+ "integrity": "sha512-+fiPu6ZFnJMrZyKeM77OIVPoMPAY6OKWacnPlojHtXTbMMzb2cEOKAJV0U07cDl86NHSCIYYa0i4CyKZzXbHQQ==",
268
  "license": "MIT",
269
  "dependencies": {
270
  "@cfworker/json-schema": "^4.0.2",
271
  "@standard-schema/spec": "^1.1.0",
 
 
 
272
  "js-tiktoken": "^1.0.12",
273
  "langsmith": ">=0.5.0 <1.0.0",
274
  "mustache": "^4.2.0",
 
279
  "node": ">=20"
280
  }
281
  },
282
+ "node_modules/@langchain/google-genai": {
283
+ "version": "2.1.31",
284
+ "resolved": "https://registry.npmjs.org/@langchain/google-genai/-/google-genai-2.1.31.tgz",
285
+ "integrity": "sha512-lHIJGtZab0jqoufKRPXyHHg1nLXrE74LXd0ftgibWEACc1SpSLu6XwtA23+dX4l7Q/YeSgb9n40YJx5k00/fqw==",
286
+ "license": "MIT",
287
+ "dependencies": {
288
+ "@google/generative-ai": "^0.24.1"
289
+ },
290
+ "engines": {
291
+ "node": ">=20"
292
+ },
293
+ "peerDependencies": {
294
+ "@langchain/core": "^1.1.47"
295
+ }
296
+ },
297
  "node_modules/@langchain/langgraph": {
298
  "version": "1.3.0",
299
  "resolved": "https://registry.npmjs.org/@langchain/langgraph/-/langgraph-1.3.0.tgz",
 
335
  "@langchain/core": "^1.1.44"
336
  }
337
  },
338
+ "node_modules/@langchain/langgraph-checkpoint/node_modules/uuid": {
339
+ "version": "10.0.0",
340
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
341
+ "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
342
+ "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).",
343
+ "funding": [
344
+ "https://github.com/sponsors/broofa",
345
+ "https://github.com/sponsors/ctavan"
346
+ ],
347
+ "license": "MIT",
348
+ "bin": {
349
+ "uuid": "dist/bin/uuid"
350
+ }
351
+ },
352
  "node_modules/@langchain/langgraph-sdk": {
353
  "version": "1.9.1",
354
  "resolved": "https://registry.npmjs.org/@langchain/langgraph-sdk/-/langgraph-sdk-1.9.1.tgz",
 
430
  "uuid": "dist-node/bin/uuid"
431
  }
432
  },
433
+ "node_modules/@langchain/langgraph/node_modules/uuid": {
434
+ "version": "10.0.0",
435
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
436
+ "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
437
+ "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).",
438
+ "funding": [
439
+ "https://github.com/sponsors/broofa",
440
+ "https://github.com/sponsors/ctavan"
441
+ ],
442
+ "license": "MIT",
443
+ "bin": {
444
+ "uuid": "dist/bin/uuid"
445
+ }
446
+ },
447
  "node_modules/@langchain/openai": {
448
  "version": "1.4.5",
449
  "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-1.4.5.tgz",
 
948
  "url": "https://opencollective.com/vitest"
949
  }
950
  },
951
+ "node_modules/@yarnpkg/lockfile": {
952
+ "version": "1.1.0",
953
+ "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
954
+ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
955
+ "dev": true,
956
+ "license": "BSD-2-Clause"
957
+ },
958
  "node_modules/ansi-styles": {
959
+ "version": "4.3.0",
960
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
961
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
962
+ "dev": true,
963
  "license": "MIT",
964
+ "dependencies": {
965
+ "color-convert": "^2.0.1"
966
+ },
967
  "engines": {
968
+ "node": ">=8"
969
  },
970
  "funding": {
971
  "url": "https://github.com/chalk/ansi-styles?sponsor=1"
 
1001
  ],
1002
  "license": "MIT"
1003
  },
1004
+ "node_modules/braces": {
1005
+ "version": "3.0.3",
1006
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
1007
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
1008
+ "dev": true,
1009
  "license": "MIT",
1010
+ "dependencies": {
1011
+ "fill-range": "^7.1.1"
1012
+ },
1013
  "engines": {
1014
+ "node": ">=8"
1015
+ }
1016
+ },
1017
+ "node_modules/call-bind": {
1018
+ "version": "1.0.9",
1019
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz",
1020
+ "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==",
1021
+ "dev": true,
1022
+ "license": "MIT",
1023
+ "dependencies": {
1024
+ "call-bind-apply-helpers": "^1.0.2",
1025
+ "es-define-property": "^1.0.1",
1026
+ "get-intrinsic": "^1.3.0",
1027
+ "set-function-length": "^1.2.2"
1028
+ },
1029
+ "engines": {
1030
+ "node": ">= 0.4"
1031
  },
1032
  "funding": {
1033
+ "url": "https://github.com/sponsors/ljharb"
1034
+ }
1035
+ },
1036
+ "node_modules/call-bind-apply-helpers": {
1037
+ "version": "1.0.2",
1038
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
1039
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
1040
+ "dev": true,
1041
+ "license": "MIT",
1042
+ "dependencies": {
1043
+ "es-errors": "^1.3.0",
1044
+ "function-bind": "^1.1.2"
1045
+ },
1046
+ "engines": {
1047
+ "node": ">= 0.4"
1048
+ }
1049
+ },
1050
+ "node_modules/call-bound": {
1051
+ "version": "1.0.4",
1052
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
1053
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
1054
+ "dev": true,
1055
+ "license": "MIT",
1056
+ "dependencies": {
1057
+ "call-bind-apply-helpers": "^1.0.2",
1058
+ "get-intrinsic": "^1.3.0"
1059
+ },
1060
+ "engines": {
1061
+ "node": ">= 0.4"
1062
+ },
1063
+ "funding": {
1064
+ "url": "https://github.com/sponsors/ljharb"
1065
  }
1066
  },
1067
  "node_modules/chai": {
 
1074
  "node": ">=18"
1075
  }
1076
  },
1077
+ "node_modules/chalk": {
1078
+ "version": "4.1.2",
1079
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
1080
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1081
+ "dev": true,
1082
+ "license": "MIT",
1083
+ "dependencies": {
1084
+ "ansi-styles": "^4.1.0",
1085
+ "supports-color": "^7.1.0"
1086
+ },
1087
+ "engines": {
1088
+ "node": ">=10"
1089
+ },
1090
+ "funding": {
1091
+ "url": "https://github.com/chalk/chalk?sponsor=1"
1092
+ }
1093
+ },
1094
+ "node_modules/ci-info": {
1095
+ "version": "3.9.0",
1096
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
1097
+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
1098
+ "dev": true,
1099
+ "funding": [
1100
+ {
1101
+ "type": "github",
1102
+ "url": "https://github.com/sponsors/sibiraj-s"
1103
+ }
1104
+ ],
1105
+ "license": "MIT",
1106
+ "engines": {
1107
+ "node": ">=8"
1108
+ }
1109
+ },
1110
+ "node_modules/color-convert": {
1111
+ "version": "2.0.1",
1112
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1113
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1114
+ "dev": true,
1115
+ "license": "MIT",
1116
+ "dependencies": {
1117
+ "color-name": "~1.1.4"
1118
+ },
1119
+ "engines": {
1120
+ "node": ">=7.0.0"
1121
+ }
1122
+ },
1123
+ "node_modules/color-name": {
1124
+ "version": "1.1.4",
1125
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1126
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1127
+ "dev": true,
1128
+ "license": "MIT"
1129
+ },
1130
+ "node_modules/command-exists": {
1131
+ "version": "1.2.9",
1132
+ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
1133
+ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==",
1134
+ "license": "MIT"
1135
+ },
1136
+ "node_modules/commander": {
1137
+ "version": "8.3.0",
1138
+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
1139
+ "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
1140
+ "license": "MIT",
1141
+ "engines": {
1142
+ "node": ">= 12"
1143
+ }
1144
+ },
1145
  "node_modules/convert-source-map": {
1146
  "version": "2.0.0",
1147
  "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
 
1149
  "dev": true,
1150
  "license": "MIT"
1151
  },
1152
+ "node_modules/cross-spawn": {
1153
+ "version": "7.0.6",
1154
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
1155
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
1156
+ "dev": true,
1157
  "license": "MIT",
1158
+ "dependencies": {
1159
+ "path-key": "^3.1.0",
1160
+ "shebang-command": "^2.0.0",
1161
+ "which": "^2.0.1"
1162
+ },
1163
  "engines": {
1164
+ "node": ">= 8"
1165
+ }
1166
+ },
1167
+ "node_modules/define-data-property": {
1168
+ "version": "1.1.4",
1169
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
1170
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
1171
+ "dev": true,
1172
+ "license": "MIT",
1173
+ "dependencies": {
1174
+ "es-define-property": "^1.0.0",
1175
+ "es-errors": "^1.3.0",
1176
+ "gopd": "^1.0.1"
1177
+ },
1178
+ "engines": {
1179
+ "node": ">= 0.4"
1180
+ },
1181
+ "funding": {
1182
+ "url": "https://github.com/sponsors/ljharb"
1183
  }
1184
  },
1185
  "node_modules/detect-libc": {
 
1204
  "url": "https://dotenvx.com"
1205
  }
1206
  },
1207
+ "node_modules/dunder-proto": {
1208
+ "version": "1.0.1",
1209
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
1210
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
1211
+ "dev": true,
1212
+ "license": "MIT",
1213
+ "dependencies": {
1214
+ "call-bind-apply-helpers": "^1.0.1",
1215
+ "es-errors": "^1.3.0",
1216
+ "gopd": "^1.2.0"
1217
+ },
1218
+ "engines": {
1219
+ "node": ">= 0.4"
1220
+ }
1221
+ },
1222
+ "node_modules/es-define-property": {
1223
+ "version": "1.0.1",
1224
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
1225
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
1226
+ "dev": true,
1227
+ "license": "MIT",
1228
+ "engines": {
1229
+ "node": ">= 0.4"
1230
+ }
1231
+ },
1232
+ "node_modules/es-errors": {
1233
+ "version": "1.3.0",
1234
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
1235
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
1236
+ "dev": true,
1237
+ "license": "MIT",
1238
+ "engines": {
1239
+ "node": ">= 0.4"
1240
+ }
1241
+ },
1242
  "node_modules/es-module-lexer": {
1243
  "version": "2.1.0",
1244
  "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz",
 
1246
  "dev": true,
1247
  "license": "MIT"
1248
  },
1249
+ "node_modules/es-object-atoms": {
1250
+ "version": "1.1.1",
1251
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
1252
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
1253
+ "dev": true,
1254
+ "license": "MIT",
1255
+ "dependencies": {
1256
+ "es-errors": "^1.3.0"
1257
+ },
1258
+ "engines": {
1259
+ "node": ">= 0.4"
1260
+ }
1261
+ },
1262
  "node_modules/estree-walker": {
1263
  "version": "3.0.3",
1264
  "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
 
1312
  }
1313
  }
1314
  },
1315
+ "node_modules/fill-range": {
1316
+ "version": "7.1.1",
1317
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
1318
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
1319
+ "dev": true,
1320
+ "license": "MIT",
1321
+ "dependencies": {
1322
+ "to-regex-range": "^5.0.1"
1323
+ },
1324
+ "engines": {
1325
+ "node": ">=8"
1326
+ }
1327
+ },
1328
+ "node_modules/find-yarn-workspace-root": {
1329
+ "version": "2.0.0",
1330
+ "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz",
1331
+ "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==",
1332
+ "dev": true,
1333
+ "license": "Apache-2.0",
1334
+ "dependencies": {
1335
+ "micromatch": "^4.0.2"
1336
+ }
1337
+ },
1338
+ "node_modules/follow-redirects": {
1339
+ "version": "1.16.0",
1340
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
1341
+ "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
1342
+ "funding": [
1343
+ {
1344
+ "type": "individual",
1345
+ "url": "https://github.com/sponsors/RubenVerborgh"
1346
+ }
1347
+ ],
1348
+ "license": "MIT",
1349
+ "engines": {
1350
+ "node": ">=4.0"
1351
+ },
1352
+ "peerDependenciesMeta": {
1353
+ "debug": {
1354
+ "optional": true
1355
+ }
1356
+ }
1357
+ },
1358
+ "node_modules/fs-extra": {
1359
+ "version": "10.1.0",
1360
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
1361
+ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
1362
+ "dev": true,
1363
+ "license": "MIT",
1364
+ "dependencies": {
1365
+ "graceful-fs": "^4.2.0",
1366
+ "jsonfile": "^6.0.1",
1367
+ "universalify": "^2.0.0"
1368
+ },
1369
+ "engines": {
1370
+ "node": ">=12"
1371
+ }
1372
+ },
1373
  "node_modules/fsevents": {
1374
  "version": "2.3.3",
1375
  "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
 
1385
  "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1386
  }
1387
  },
1388
+ "node_modules/function-bind": {
1389
+ "version": "1.1.2",
1390
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1391
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
1392
+ "dev": true,
1393
+ "license": "MIT",
1394
+ "funding": {
1395
+ "url": "https://github.com/sponsors/ljharb"
1396
+ }
1397
+ },
1398
+ "node_modules/get-intrinsic": {
1399
+ "version": "1.3.0",
1400
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
1401
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
1402
+ "dev": true,
1403
+ "license": "MIT",
1404
+ "dependencies": {
1405
+ "call-bind-apply-helpers": "^1.0.2",
1406
+ "es-define-property": "^1.0.1",
1407
+ "es-errors": "^1.3.0",
1408
+ "es-object-atoms": "^1.1.1",
1409
+ "function-bind": "^1.1.2",
1410
+ "get-proto": "^1.0.1",
1411
+ "gopd": "^1.2.0",
1412
+ "has-symbols": "^1.1.0",
1413
+ "hasown": "^2.0.2",
1414
+ "math-intrinsics": "^1.1.0"
1415
+ },
1416
+ "engines": {
1417
+ "node": ">= 0.4"
1418
+ },
1419
+ "funding": {
1420
+ "url": "https://github.com/sponsors/ljharb"
1421
+ }
1422
+ },
1423
+ "node_modules/get-proto": {
1424
+ "version": "1.0.1",
1425
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
1426
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
1427
+ "dev": true,
1428
+ "license": "MIT",
1429
+ "dependencies": {
1430
+ "dunder-proto": "^1.0.1",
1431
+ "es-object-atoms": "^1.0.0"
1432
+ },
1433
+ "engines": {
1434
+ "node": ">= 0.4"
1435
+ }
1436
+ },
1437
+ "node_modules/gopd": {
1438
+ "version": "1.2.0",
1439
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
1440
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
1441
+ "dev": true,
1442
+ "license": "MIT",
1443
+ "engines": {
1444
+ "node": ">= 0.4"
1445
+ },
1446
+ "funding": {
1447
+ "url": "https://github.com/sponsors/ljharb"
1448
+ }
1449
+ },
1450
+ "node_modules/graceful-fs": {
1451
+ "version": "4.2.11",
1452
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
1453
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
1454
+ "dev": true,
1455
+ "license": "ISC"
1456
+ },
1457
+ "node_modules/has-flag": {
1458
+ "version": "4.0.0",
1459
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1460
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1461
+ "dev": true,
1462
+ "license": "MIT",
1463
+ "engines": {
1464
+ "node": ">=8"
1465
+ }
1466
+ },
1467
+ "node_modules/has-property-descriptors": {
1468
+ "version": "1.0.2",
1469
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
1470
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
1471
+ "dev": true,
1472
+ "license": "MIT",
1473
+ "dependencies": {
1474
+ "es-define-property": "^1.0.0"
1475
+ },
1476
+ "funding": {
1477
+ "url": "https://github.com/sponsors/ljharb"
1478
+ }
1479
+ },
1480
+ "node_modules/has-symbols": {
1481
+ "version": "1.1.0",
1482
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
1483
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
1484
+ "dev": true,
1485
+ "license": "MIT",
1486
+ "engines": {
1487
+ "node": ">= 0.4"
1488
+ },
1489
+ "funding": {
1490
+ "url": "https://github.com/sponsors/ljharb"
1491
+ }
1492
+ },
1493
+ "node_modules/hasown": {
1494
+ "version": "2.0.3",
1495
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz",
1496
+ "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==",
1497
+ "dev": true,
1498
+ "license": "MIT",
1499
+ "dependencies": {
1500
+ "function-bind": "^1.1.2"
1501
+ },
1502
+ "engines": {
1503
+ "node": ">= 0.4"
1504
+ }
1505
+ },
1506
+ "node_modules/hono": {
1507
+ "version": "4.12.21",
1508
+ "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.21.tgz",
1509
+ "integrity": "sha512-uV63apnb0kyPtAUwoWgaGh9HyIFcv8lgmzPZSiTBQAFOFGIzka5EZ1dZocmGnn0XdX0+XTqJ6Tqv7selMuGLRQ==",
1510
+ "license": "MIT",
1511
+ "engines": {
1512
+ "node": ">=16.9.0"
1513
+ }
1514
+ },
1515
+ "node_modules/is-docker": {
1516
+ "version": "2.2.1",
1517
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
1518
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
1519
+ "dev": true,
1520
+ "license": "MIT",
1521
+ "bin": {
1522
+ "is-docker": "cli.js"
1523
+ },
1524
+ "engines": {
1525
+ "node": ">=8"
1526
+ },
1527
+ "funding": {
1528
+ "url": "https://github.com/sponsors/sindresorhus"
1529
+ }
1530
+ },
1531
  "node_modules/is-network-error": {
1532
  "version": "1.3.1",
1533
  "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz",
 
1540
  "url": "https://github.com/sponsors/sindresorhus"
1541
  }
1542
  },
1543
+ "node_modules/is-number": {
1544
+ "version": "7.0.0",
1545
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1546
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1547
+ "dev": true,
1548
+ "license": "MIT",
1549
+ "engines": {
1550
+ "node": ">=0.12.0"
1551
+ }
1552
+ },
1553
+ "node_modules/is-wsl": {
1554
+ "version": "2.2.0",
1555
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
1556
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
1557
+ "dev": true,
1558
+ "license": "MIT",
1559
+ "dependencies": {
1560
+ "is-docker": "^2.0.0"
1561
+ },
1562
+ "engines": {
1563
+ "node": ">=8"
1564
+ }
1565
+ },
1566
+ "node_modules/isarray": {
1567
+ "version": "2.0.5",
1568
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
1569
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
1570
+ "dev": true,
1571
+ "license": "MIT"
1572
+ },
1573
+ "node_modules/isexe": {
1574
+ "version": "2.0.0",
1575
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1576
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
1577
+ "dev": true,
1578
+ "license": "ISC"
1579
+ },
1580
+ "node_modules/js-sha3": {
1581
+ "version": "0.8.0",
1582
+ "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
1583
+ "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==",
1584
+ "license": "MIT"
1585
+ },
1586
  "node_modules/js-tiktoken": {
1587
  "version": "1.0.21",
1588
  "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.21.tgz",
 
1592
  "base64-js": "^1.5.1"
1593
  }
1594
  },
1595
+ "node_modules/json-stable-stringify": {
1596
+ "version": "1.3.0",
1597
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz",
1598
+ "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==",
1599
+ "dev": true,
1600
+ "license": "MIT",
1601
+ "dependencies": {
1602
+ "call-bind": "^1.0.8",
1603
+ "call-bound": "^1.0.4",
1604
+ "isarray": "^2.0.5",
1605
+ "jsonify": "^0.0.1",
1606
+ "object-keys": "^1.1.1"
1607
+ },
1608
+ "engines": {
1609
+ "node": ">= 0.4"
1610
+ },
1611
+ "funding": {
1612
+ "url": "https://github.com/sponsors/ljharb"
1613
+ }
1614
+ },
1615
+ "node_modules/jsonfile": {
1616
+ "version": "6.2.1",
1617
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz",
1618
+ "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==",
1619
+ "dev": true,
1620
+ "license": "MIT",
1621
+ "dependencies": {
1622
+ "universalify": "^2.0.0"
1623
+ },
1624
+ "optionalDependencies": {
1625
+ "graceful-fs": "^4.1.6"
1626
+ }
1627
+ },
1628
+ "node_modules/jsonify": {
1629
+ "version": "0.0.1",
1630
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz",
1631
+ "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==",
1632
+ "dev": true,
1633
+ "license": "Public Domain",
1634
+ "funding": {
1635
+ "url": "https://github.com/sponsors/ljharb"
1636
+ }
1637
+ },
1638
+ "node_modules/klaw-sync": {
1639
+ "version": "6.0.0",
1640
+ "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
1641
+ "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
1642
+ "dev": true,
1643
+ "license": "MIT",
1644
+ "dependencies": {
1645
+ "graceful-fs": "^4.1.11"
1646
+ }
1647
+ },
1648
  "node_modules/langchain": {
1649
  "version": "1.4.0",
1650
  "resolved": "https://registry.npmjs.org/langchain/-/langchain-1.4.0.tgz",
 
1967
  "@jridgewell/sourcemap-codec": "^1.5.5"
1968
  }
1969
  },
1970
+ "node_modules/math-intrinsics": {
1971
+ "version": "1.1.0",
1972
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
1973
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
1974
+ "dev": true,
1975
+ "license": "MIT",
1976
+ "engines": {
1977
+ "node": ">= 0.4"
1978
+ }
1979
+ },
1980
+ "node_modules/memorystream": {
1981
+ "version": "0.3.1",
1982
+ "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
1983
+ "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
1984
+ "engines": {
1985
+ "node": ">= 0.10.0"
1986
+ }
1987
+ },
1988
+ "node_modules/micromatch": {
1989
+ "version": "4.0.8",
1990
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
1991
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
1992
+ "dev": true,
1993
+ "license": "MIT",
1994
+ "dependencies": {
1995
+ "braces": "^3.0.3",
1996
+ "picomatch": "^2.3.1"
1997
+ },
1998
+ "engines": {
1999
+ "node": ">=8.6"
2000
+ }
2001
+ },
2002
+ "node_modules/micromatch/node_modules/picomatch": {
2003
+ "version": "2.3.2",
2004
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
2005
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
2006
+ "dev": true,
2007
+ "license": "MIT",
2008
+ "engines": {
2009
+ "node": ">=8.6"
2010
+ },
2011
+ "funding": {
2012
+ "url": "https://github.com/sponsors/jonschlinkert"
2013
+ }
2014
+ },
2015
+ "node_modules/minimist": {
2016
+ "version": "1.2.8",
2017
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
2018
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
2019
+ "dev": true,
2020
+ "license": "MIT",
2021
+ "funding": {
2022
+ "url": "https://github.com/sponsors/ljharb"
2023
+ }
2024
+ },
2025
  "node_modules/mustache": {
2026
  "version": "4.2.0",
2027
  "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
 
2050
  "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
2051
  }
2052
  },
2053
+ "node_modules/object-keys": {
2054
+ "version": "1.1.1",
2055
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
2056
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
2057
+ "dev": true,
2058
+ "license": "MIT",
2059
+ "engines": {
2060
+ "node": ">= 0.4"
2061
+ }
2062
+ },
2063
  "node_modules/obug": {
2064
  "version": "2.1.1",
2065
  "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz",
 
2071
  ],
2072
  "license": "MIT"
2073
  },
2074
+ "node_modules/open": {
2075
+ "version": "7.4.2",
2076
+ "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
2077
+ "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
2078
+ "dev": true,
2079
+ "license": "MIT",
2080
+ "dependencies": {
2081
+ "is-docker": "^2.0.0",
2082
+ "is-wsl": "^2.1.1"
2083
+ },
2084
+ "engines": {
2085
+ "node": ">=8"
2086
+ },
2087
+ "funding": {
2088
+ "url": "https://github.com/sponsors/sindresorhus"
2089
+ }
2090
+ },
2091
  "node_modules/openai": {
2092
  "version": "6.36.0",
2093
  "resolved": "https://registry.npmjs.org/openai/-/openai-6.36.0.tgz",
 
2109
  }
2110
  }
2111
  },
2112
+ "node_modules/os-tmpdir": {
2113
+ "version": "1.0.2",
2114
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
2115
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
2116
+ "license": "MIT",
2117
+ "engines": {
2118
+ "node": ">=0.10.0"
2119
+ }
2120
+ },
2121
  "node_modules/p-finally": {
2122
  "version": "1.0.0",
2123
  "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
 
2170
  "node": ">=8"
2171
  }
2172
  },
2173
+ "node_modules/patch-package": {
2174
+ "version": "8.0.1",
2175
+ "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz",
2176
+ "integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==",
2177
+ "dev": true,
2178
+ "license": "MIT",
2179
+ "dependencies": {
2180
+ "@yarnpkg/lockfile": "^1.1.0",
2181
+ "chalk": "^4.1.2",
2182
+ "ci-info": "^3.7.0",
2183
+ "cross-spawn": "^7.0.3",
2184
+ "find-yarn-workspace-root": "^2.0.0",
2185
+ "fs-extra": "^10.0.0",
2186
+ "json-stable-stringify": "^1.0.2",
2187
+ "klaw-sync": "^6.0.0",
2188
+ "minimist": "^1.2.6",
2189
+ "open": "^7.4.2",
2190
+ "semver": "^7.5.3",
2191
+ "slash": "^2.0.0",
2192
+ "tmp": "^0.2.4",
2193
+ "yaml": "^2.2.2"
2194
+ },
2195
+ "bin": {
2196
+ "patch-package": "index.js"
2197
+ },
2198
+ "engines": {
2199
+ "node": ">=14",
2200
+ "npm": ">5"
2201
+ }
2202
+ },
2203
+ "node_modules/patch-package/node_modules/semver": {
2204
+ "version": "7.8.0",
2205
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz",
2206
+ "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==",
2207
+ "dev": true,
2208
+ "license": "ISC",
2209
+ "bin": {
2210
+ "semver": "bin/semver.js"
2211
+ },
2212
+ "engines": {
2213
+ "node": ">=10"
2214
+ }
2215
+ },
2216
+ "node_modules/patch-package/node_modules/tmp": {
2217
+ "version": "0.2.5",
2218
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz",
2219
+ "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==",
2220
+ "dev": true,
2221
+ "license": "MIT",
2222
+ "engines": {
2223
+ "node": ">=14.14"
2224
+ }
2225
+ },
2226
+ "node_modules/path-key": {
2227
+ "version": "3.1.1",
2228
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2229
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2230
+ "dev": true,
2231
+ "license": "MIT",
2232
+ "engines": {
2233
+ "node": ">=8"
2234
+ }
2235
+ },
2236
  "node_modules/pathe": {
2237
  "version": "2.0.3",
2238
  "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
 
2323
  "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.18"
2324
  }
2325
  },
2326
+ "node_modules/semver": {
2327
+ "version": "5.7.2",
2328
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
2329
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
2330
+ "license": "ISC",
2331
+ "bin": {
2332
+ "semver": "bin/semver"
2333
+ }
2334
+ },
2335
+ "node_modules/set-function-length": {
2336
+ "version": "1.2.2",
2337
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
2338
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
2339
+ "dev": true,
2340
+ "license": "MIT",
2341
+ "dependencies": {
2342
+ "define-data-property": "^1.1.4",
2343
+ "es-errors": "^1.3.0",
2344
+ "function-bind": "^1.1.2",
2345
+ "get-intrinsic": "^1.2.4",
2346
+ "gopd": "^1.0.1",
2347
+ "has-property-descriptors": "^1.0.2"
2348
+ },
2349
+ "engines": {
2350
+ "node": ">= 0.4"
2351
+ }
2352
+ },
2353
+ "node_modules/shebang-command": {
2354
+ "version": "2.0.0",
2355
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2356
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2357
+ "dev": true,
2358
+ "license": "MIT",
2359
+ "dependencies": {
2360
+ "shebang-regex": "^3.0.0"
2361
+ },
2362
+ "engines": {
2363
+ "node": ">=8"
2364
+ }
2365
+ },
2366
+ "node_modules/shebang-regex": {
2367
+ "version": "3.0.0",
2368
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2369
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2370
+ "dev": true,
2371
+ "license": "MIT",
2372
+ "engines": {
2373
+ "node": ">=8"
2374
+ }
2375
+ },
2376
  "node_modules/siginfo": {
2377
  "version": "2.0.0",
2378
  "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
 
2380
  "dev": true,
2381
  "license": "ISC"
2382
  },
2383
+ "node_modules/slash": {
2384
+ "version": "2.0.0",
2385
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
2386
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
2387
+ "dev": true,
2388
+ "license": "MIT",
2389
+ "engines": {
2390
+ "node": ">=6"
2391
+ }
2392
+ },
2393
+ "node_modules/solc": {
2394
+ "version": "0.8.35",
2395
+ "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.35.tgz",
2396
+ "integrity": "sha512-OaP/4zyoKRo2CjqZDxbtkeRlEo6MxP4FLCxntw1Agf9OSoecmwYKoFBSB34UcSKBFBucrTh3Mb0nRoJou62ibw==",
2397
+ "license": "MIT",
2398
+ "dependencies": {
2399
+ "command-exists": "^1.2.8",
2400
+ "commander": "^8.1.0",
2401
+ "follow-redirects": "^1.12.1",
2402
+ "js-sha3": "0.8.0",
2403
+ "memorystream": "^0.3.1",
2404
+ "semver": "^5.5.0",
2405
+ "tmp": "0.0.33"
2406
+ },
2407
+ "bin": {
2408
+ "solcjs": "solc.js"
2409
+ },
2410
+ "engines": {
2411
+ "node": ">=12.0.0"
2412
+ }
2413
+ },
2414
  "node_modules/source-map-js": {
2415
  "version": "1.2.1",
2416
  "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
 
2435
  "dev": true,
2436
  "license": "MIT"
2437
  },
2438
+ "node_modules/supports-color": {
2439
+ "version": "7.2.0",
2440
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
2441
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
2442
+ "dev": true,
2443
+ "license": "MIT",
2444
+ "dependencies": {
2445
+ "has-flag": "^4.0.0"
2446
+ },
2447
+ "engines": {
2448
+ "node": ">=8"
2449
+ }
2450
+ },
2451
  "node_modules/tinybench": {
2452
  "version": "2.9.0",
2453
  "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
 
2492
  "node": ">=14.0.0"
2493
  }
2494
  },
2495
+ "node_modules/tmp": {
2496
+ "version": "0.0.33",
2497
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
2498
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
2499
+ "license": "MIT",
2500
+ "dependencies": {
2501
+ "os-tmpdir": "~1.0.2"
2502
+ },
2503
+ "engines": {
2504
+ "node": ">=0.6.0"
2505
+ }
2506
+ },
2507
+ "node_modules/to-regex-range": {
2508
+ "version": "5.0.1",
2509
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2510
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2511
+ "dev": true,
2512
+ "license": "MIT",
2513
+ "dependencies": {
2514
+ "is-number": "^7.0.0"
2515
+ },
2516
+ "engines": {
2517
+ "node": ">=8.0"
2518
+ }
2519
+ },
2520
  "node_modules/tslib": {
2521
  "version": "2.8.1",
2522
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
 
2546
  "dev": true,
2547
  "license": "MIT"
2548
  },
2549
+ "node_modules/universalify": {
2550
+ "version": "2.0.1",
2551
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
2552
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
2553
+ "dev": true,
2554
+ "license": "MIT",
2555
+ "engines": {
2556
+ "node": ">= 10.0.0"
2557
+ }
2558
+ },
2559
  "node_modules/uuid": {
2560
+ "version": "11.1.1",
2561
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.1.tgz",
2562
+ "integrity": "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==",
 
2563
  "funding": [
2564
  "https://github.com/sponsors/broofa",
2565
  "https://github.com/sponsors/ctavan"
2566
  ],
2567
  "license": "MIT",
2568
  "bin": {
2569
+ "uuid": "dist/esm/bin/uuid"
2570
  }
2571
  },
2572
  "node_modules/vite": {
 
2737
  }
2738
  }
2739
  },
2740
+ "node_modules/which": {
2741
+ "version": "2.0.2",
2742
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2743
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2744
+ "dev": true,
2745
+ "license": "ISC",
2746
+ "dependencies": {
2747
+ "isexe": "^2.0.0"
2748
+ },
2749
+ "bin": {
2750
+ "node-which": "bin/node-which"
2751
+ },
2752
+ "engines": {
2753
+ "node": ">= 8"
2754
+ }
2755
+ },
2756
  "node_modules/why-is-node-running": {
2757
  "version": "2.3.0",
2758
  "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
 
2770
  "node": ">=8"
2771
  }
2772
  },
2773
+ "node_modules/yaml": {
2774
+ "version": "2.9.0",
2775
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz",
2776
+ "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==",
2777
+ "dev": true,
2778
+ "license": "ISC",
2779
+ "bin": {
2780
+ "yaml": "bin.mjs"
2781
+ },
2782
+ "engines": {
2783
+ "node": ">= 14.6"
2784
+ },
2785
+ "funding": {
2786
+ "url": "https://github.com/sponsors/eemeli"
2787
+ }
2788
+ },
2789
  "node_modules/zod": {
2790
  "version": "4.4.3",
2791
  "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
package.json CHANGED
@@ -8,7 +8,10 @@
8
  "test": "vitest",
9
  "coverage": "vitest run --coverage",
10
  "build": "tsc",
11
- "start": "npm run build && node dist/index.js"
 
 
 
12
  },
13
  "repository": {
14
  "type": "git",
@@ -23,15 +26,21 @@
23
  "devDependencies": {
24
  "@biomejs/biome": "2.4.14",
25
  "@types/node": "^25.6.0",
 
26
  "typescript": "^6.0.3",
27
  "vitest": "^4.1.5"
28
  },
29
  "dependencies": {
 
30
  "@langchain/core": "^1.1.45",
 
31
  "@langchain/langgraph": "^1.3.0",
32
  "@langchain/openrouter": "^0.2.4",
33
  "dotenv": "^17.4.2",
 
34
  "langchain": "^1.4.0",
 
 
35
  "zod": "^4.4.3"
36
  }
37
  }
 
8
  "test": "vitest",
9
  "coverage": "vitest run --coverage",
10
  "build": "tsc",
11
+ "start": "npm run build && node dist/index.js",
12
+ "server": "npm run build && node dist/server.js",
13
+ "dev:server": "npx tsx src/server.ts",
14
+ "postinstall": "patch-package"
15
  },
16
  "repository": {
17
  "type": "git",
 
26
  "devDependencies": {
27
  "@biomejs/biome": "2.4.14",
28
  "@types/node": "^25.6.0",
29
+ "patch-package": "^8.0.1",
30
  "typescript": "^6.0.3",
31
  "vitest": "^4.1.5"
32
  },
33
  "dependencies": {
34
+ "@hono/node-server": "^2.0.3",
35
  "@langchain/core": "^1.1.45",
36
+ "@langchain/google-genai": "^2.1.31",
37
  "@langchain/langgraph": "^1.3.0",
38
  "@langchain/openrouter": "^0.2.4",
39
  "dotenv": "^17.4.2",
40
+ "hono": "^4.12.21",
41
  "langchain": "^1.4.0",
42
+ "solc": "^0.8.35",
43
+ "uuid": "^11.1.1",
44
  "zod": "^4.4.3"
45
  }
46
  }
patches/@langchain+core+1.1.47.patch ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ diff --git a/node_modules/@langchain/core/dist/utils/uuid/index.cjs b/node_modules/@langchain/core/dist/utils/uuid/index.cjs
2
+ index 1151178..c05caf9 100644
3
+ --- a/node_modules/@langchain/core/dist/utils/uuid/index.cjs
4
+ +++ b/node_modules/@langchain/core/dist/utils/uuid/index.cjs
5
+ @@ -36,12 +36,12 @@ Object.defineProperty(exports, "uuid_exports", {
6
+ return uuid_exports;
7
+ }
8
+ });
9
+ -exports.v1 = require_v1;
10
+ -exports.v4 = require_v4;
11
+ -exports.v5 = require_v5;
12
+ -exports.v6 = require_v6;
13
+ -exports.v7 = require_v7;
14
+ -exports.validate = require_validate;
15
+ -exports.version = require_version;
16
+ +exports.v1 = require_v1.default;
17
+ +exports.v4 = require_v4.default;
18
+ +exports.v5 = require_v5.default;
19
+ +exports.v6 = require_v6.default;
20
+ +exports.v7 = require_v7.default;
21
+ +exports.validate = require_validate.default;
22
+ +exports.version = require_version.default;
23
+
24
+ //# sourceMappingURL=index.cjs.map
25
+
src/agents/coder/agent.ts CHANGED
@@ -1,20 +1,117 @@
1
  import { END, type GraphNode, START, StateGraph } from "@langchain/langgraph";
2
 
3
  import { CoderState } from "./state.ts";
 
 
 
4
 
5
- const PLACEHOLDER_CONTRACT = `// SPDX-License-Identifier: MIT
6
- pragma solidity ^0.8.0;
7
 
8
- contract Placeholder {
9
- // TODO: implement contract based on requirements
10
- }`;
 
 
 
 
 
 
11
 
12
- const generateContract: GraphNode<typeof CoderState> = async (_state) => {
13
- return { contract: PLACEHOLDER_CONTRACT };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  };
15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  export const coderAgent = new StateGraph(CoderState)
17
  .addNode("generateContract", generateContract)
 
 
 
18
  .addEdge(START, "generateContract")
19
- .addEdge("generateContract", END)
 
 
 
20
  .compile();
 
1
  import { END, type GraphNode, START, StateGraph } from "@langchain/langgraph";
2
 
3
  import { CoderState } from "./state.ts";
4
+ import { solidityCoderPrompt, solidityFixPrompt, solidityReviewPrompt } from "./prompts.ts";
5
+ import { compileSolidityTool } from "./tools/compile-solidity.ts";
6
+ import { createLLM } from "../../config/llm.ts";
7
 
8
+ const MAX_FIX_ATTEMPTS = 3;
 
9
 
10
+ /**
11
+ * Extrai apenas o bloco de código Solidity de uma resposta do LLM.
12
+ */
13
+ function extractSolidityCode(text: string): string {
14
+ const match = text.match(/```(?:solidity)?\s*\n([\s\S]*?)```/);
15
+ if (match) return match[1].trim();
16
+ // Se não tem bloco de código, assume que a resposta inteira é código
17
+ return text.trim();
18
+ }
19
 
20
+ /**
21
+ * Nó 1: Gera o smart contract a partir dos requisitos.
22
+ */
23
+ const generateContract: GraphNode<typeof CoderState> = async (state) => {
24
+ const llm = createLLM();
25
+ const chain = solidityCoderPrompt.pipe(llm);
26
+
27
+ const requirementsText = state.requirements
28
+ .map((r, i) => `${i + 1}. ${r}`)
29
+ .join("\n");
30
+
31
+ const result = await chain.invoke({ requirements: requirementsText });
32
+ const code = extractSolidityCode(
33
+ typeof result.content === "string" ? result.content : JSON.stringify(result.content),
34
+ );
35
+
36
+ return { contract: code, compilationErrors: [] };
37
+ };
38
+
39
+ /**
40
+ * Nó 2: Compila o contrato e armazena erros (se houver).
41
+ */
42
+ const compileContract: GraphNode<typeof CoderState> = async (state) => {
43
+ const result = await compileSolidityTool.invoke({
44
+ sourceCode: state.contract,
45
+ filename: "Contract.sol",
46
+ });
47
+
48
+ return { compilationErrors: result.errors };
49
+ };
50
+
51
+ /**
52
+ * Nó 3: Corrige o contrato com base nos erros de compilação.
53
+ */
54
+ const fixContract: GraphNode<typeof CoderState> = async (state) => {
55
+ const llm = createLLM();
56
+ const chain = solidityFixPrompt.pipe(llm);
57
+
58
+ const errorsText = state.compilationErrors.join("\n\n");
59
+
60
+ const result = await chain.invoke({
61
+ contract: state.contract,
62
+ errors: errorsText,
63
+ });
64
+
65
+ const code = extractSolidityCode(
66
+ typeof result.content === "string" ? result.content : JSON.stringify(result.content),
67
+ );
68
+
69
+ return { contract: code, compilationErrors: [] };
70
+ };
71
+
72
+ /**
73
+ * Nó 4: Revisa o contrato compilado quanto a segurança e boas práticas.
74
+ */
75
+ const reviewContract: GraphNode<typeof CoderState> = async (state) => {
76
+ const llm = createLLM();
77
+ const chain = solidityReviewPrompt.pipe(llm);
78
+
79
+ const requirementsText = state.requirements.join(", ");
80
+
81
+ const result = await chain.invoke({
82
+ requirements: requirementsText,
83
+ contract: state.contract,
84
+ });
85
+
86
+ const summary =
87
+ typeof result.content === "string" ? result.content : JSON.stringify(result.content);
88
+
89
+ return { reviewSummary: summary };
90
  };
91
 
92
+ /**
93
+ * Roteador: decide se precisa corrigir ou se pode seguir para revisão.
94
+ * Controla o número de tentativas de correção.
95
+ */
96
+ let fixAttempts = 0;
97
+
98
+ function shouldFix(state: { compilationErrors: string[] }): "fixContract" | "reviewContract" {
99
+ if (state.compilationErrors.length > 0 && fixAttempts < MAX_FIX_ATTEMPTS) {
100
+ fixAttempts++;
101
+ return "fixContract";
102
+ }
103
+ fixAttempts = 0; // reset para próxima execução
104
+ return "reviewContract";
105
+ }
106
+
107
  export const coderAgent = new StateGraph(CoderState)
108
  .addNode("generateContract", generateContract)
109
+ .addNode("compileContract", compileContract)
110
+ .addNode("fixContract", fixContract)
111
+ .addNode("reviewContract", reviewContract)
112
  .addEdge(START, "generateContract")
113
+ .addEdge("generateContract", "compileContract")
114
+ .addConditionalEdges("compileContract", shouldFix)
115
+ .addEdge("fixContract", "compileContract")
116
+ .addEdge("reviewContract", END)
117
  .compile();
src/agents/coder/outputs/.gitkeep ADDED
File without changes
src/agents/coder/prompts.ts ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { ChatPromptTemplate } from "@langchain/core/prompts";
2
+
3
+ /**
4
+ * Prompt para gerar smart contracts Solidity a partir de requisitos.
5
+ */
6
+ export const solidityCoderPrompt = ChatPromptTemplate.fromMessages([
7
+ [
8
+ "system",
9
+ `Você é um desenvolvedor sênior especialista em smart contracts Solidity.
10
+ Sua função é gerar contratos Solidity completos, compiláveis e seguros.
11
+
12
+ Regras:
13
+ - Gere código Solidity production-ready
14
+ - Use pragma solidity ^0.8.20
15
+ - NÃO use imports externos (OpenZeppelin, etc.) — implemente tudo inline
16
+ - Adicione comentários NatDoc explicativos
17
+ - Inclua eventos para todas as operações relevantes
18
+ - Use modificadores de acesso customizados (ex: onlyOwner)
19
+ - Inclua tratamento de erros com require e mensagens claras
20
+ - Siga boas práticas de segurança (checks-effects-interactions, proteção contra reentrância)
21
+ - NÃO use placeholders como "TODO" ou "implementar depois"
22
+ - O contrato deve compilar sem erros com solc 0.8.20+`,
23
+ ],
24
+ [
25
+ "human",
26
+ `Gere um smart contract Solidity completo com base nos seguintes requisitos:
27
+
28
+ {requirements}
29
+
30
+ Retorne APENAS o código Solidity completo, sem explicações adicionais.
31
+ O código deve ser auto-contido (sem imports externos).`,
32
+ ],
33
+ ]);
34
+
35
+ /**
36
+ * Prompt para corrigir erros de compilação em contratos Solidity.
37
+ */
38
+ export const solidityFixPrompt = ChatPromptTemplate.fromMessages([
39
+ [
40
+ "system",
41
+ `Você é um desenvolvedor sênior especialista em smart contracts Solidity.
42
+ Sua função é corrigir erros de compilação em contratos Solidity.
43
+
44
+ Regras:
45
+ - Corrija TODOS os erros indicados
46
+ - Mantenha a lógica de negócio original intacta
47
+ - NÃO adicione imports externos
48
+ - O contrato deve compilar sem erros com solc 0.8.20+
49
+ - Retorne APENAS o código Solidity corrigido completo`,
50
+ ],
51
+ [
52
+ "human",
53
+ `O seguinte contrato Solidity tem erros de compilação. Corrija-os:
54
+
55
+ **Código atual:**
56
+ \`\`\`solidity
57
+ {contract}
58
+ \`\`\`
59
+
60
+ **Erros de compilação:**
61
+ {errors}
62
+
63
+ Retorne APENAS o código Solidity corrigido completo, sem explicações.`,
64
+ ],
65
+ ]);
66
+
67
+ /**
68
+ * Prompt para revisar contratos Solidity quanto a segurança e boas práticas.
69
+ */
70
+ export const solidityReviewPrompt = ChatPromptTemplate.fromMessages([
71
+ [
72
+ "system",
73
+ `Você é um auditor de segurança sênior especialista em smart contracts Solidity.
74
+ Analise o contrato quanto a:
75
+ - Vulnerabilidades de segurança (reentrância, overflow, acesso não autorizado)
76
+ - Aderência a boas práticas Solidity
77
+ - Legibilidade e manutenibilidade
78
+ - Potenciais problemas de gas
79
+
80
+ Seja objetivo e conciso. Responda em português brasileiro.`,
81
+ ],
82
+ [
83
+ "human",
84
+ `Revise o seguinte smart contract:
85
+
86
+ **Requisitos originais:**
87
+ {requirements}
88
+
89
+ **Código:**
90
+ \`\`\`solidity
91
+ {contract}
92
+ \`\`\`
93
+
94
+ Forneça um resumo breve da revisão em 2-3 frases destacando se o contrato está seguro e funcional.`,
95
+ ],
96
+ ]);
src/agents/coder/run.ts ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import "dotenv/config";
2
+ import { readFileSync, mkdirSync, writeFileSync } from "node:fs";
3
+ import { resolve, dirname } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { coderAgent } from "./agent.ts";
6
+
7
+ const inputPath = process.argv[2];
8
+
9
+ if (!inputPath) {
10
+ console.log("Uso: npx tsx src/agents/coder/run.ts <caminho-do-arquivo-de-requisitos>");
11
+ console.log("Exemplo: npx tsx src/agents/coder/run.ts input/requirements.md");
12
+ process.exit(1);
13
+ }
14
+
15
+ const requirementsText = readFileSync(resolve(inputPath), "utf-8");
16
+ console.log("Requisitos carregados de:", inputPath);
17
+ console.log("Gerando contrato...\n");
18
+
19
+ const result = await coderAgent.invoke({ requirements: [requirementsText] });
20
+
21
+ console.log("======= Contrato Gerado =======");
22
+ console.log(result.contract);
23
+ console.log("\n======= Erros de Compilação =======");
24
+ console.log(result.compilationErrors.length === 0 ? "Nenhum erro" : result.compilationErrors.join("\n"));
25
+ console.log("\n======= Revisão de Segurança =======");
26
+ console.log(result.reviewSummary);
27
+
28
+ const __dirname = dirname(fileURLToPath(import.meta.url));
29
+ const outputDir = resolve(__dirname, "outputs");
30
+ mkdirSync(outputDir, { recursive: true });
31
+ const outputPath = resolve(outputDir, "Contract.sol");
32
+ writeFileSync(outputPath, result.contract, "utf-8");
33
+ console.log("\nContrato salvo em:", outputPath);
src/agents/coder/state.ts CHANGED
@@ -4,4 +4,6 @@ import { z } from "zod";
4
  export const CoderState = new StateSchema({
5
  requirements: z.array(z.string()).default([]),
6
  contract: z.string().default(""),
 
 
7
  });
 
4
  export const CoderState = new StateSchema({
5
  requirements: z.array(z.string()).default([]),
6
  contract: z.string().default(""),
7
+ compilationErrors: z.array(z.string()).default([]),
8
+ reviewSummary: z.string().default(""),
9
  });
src/agents/coder/tools/compile-solidity.ts ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { tool } from "langchain";
2
+ import { z } from "zod";
3
+ import solc from "solc";
4
+
5
+ /**
6
+ * Tool que compila código Solidity usando solc e retorna erros/warnings.
7
+ */
8
+ export const compileSolidityTool = tool(
9
+ async (input) => {
10
+ const compilerInput = {
11
+ language: "Solidity",
12
+ sources: {
13
+ [input.filename]: { content: input.sourceCode },
14
+ },
15
+ settings: {
16
+ outputSelection: {
17
+ "*": { "*": ["abi", "evm.bytecode.object"] },
18
+ },
19
+ },
20
+ };
21
+
22
+ const output = JSON.parse(solc.compile(JSON.stringify(compilerInput)));
23
+
24
+ const errors = (output.errors || [])
25
+ .filter((e: { severity: string }) => e.severity === "error")
26
+ .map((e: { formattedMessage: string }) => e.formattedMessage);
27
+
28
+ const warnings = (output.errors || [])
29
+ .filter((e: { severity: string }) => e.severity === "warning")
30
+ .map((e: { formattedMessage: string }) => e.formattedMessage);
31
+
32
+ const contracts = output.contracts?.[input.filename] || {};
33
+ const contractNames = Object.keys(contracts);
34
+
35
+ return {
36
+ success: errors.length === 0,
37
+ errors,
38
+ warnings,
39
+ contracts: contractNames,
40
+ };
41
+ },
42
+ {
43
+ name: "compilar_solidity",
44
+ description: "Compila código Solidity com solc e retorna erros, warnings e contratos encontrados.",
45
+ schema: z.object({
46
+ sourceCode: z.string().describe("Código-fonte Solidity completo"),
47
+ filename: z.string().default("Contract.sol").describe("Nome do arquivo .sol"),
48
+ }),
49
+ },
50
+ );
src/config/constants.ts CHANGED
@@ -1,5 +1,7 @@
1
  const constants = {
2
  OPENROUTER_API_KEY: process.env.OPENROUTER_API_KEY || "",
 
 
3
  };
4
 
5
  export default constants;
 
1
  const constants = {
2
  OPENROUTER_API_KEY: process.env.OPENROUTER_API_KEY || "",
3
+ GOOGLE_API_KEY: process.env.GOOGLE_API_KEY || "",
4
+ MODEL_NAME: process.env.MODEL_NAME || "gemini-2.5-flash",
5
  };
6
 
7
  export default constants;
src/config/llm.ts ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { ChatGoogleGenerativeAI } from "@langchain/google-genai";
2
+ import type { BaseChatModel } from "@langchain/core/language_models/chat_models";
3
+
4
+ export type LLMProvider = "google" | "openrouter";
5
+
6
+ export function createLLM(overrideProvider?: LLMProvider): BaseChatModel {
7
+ const provider = overrideProvider || (process.env.LLM_PROVIDER as LLMProvider) || "google";
8
+
9
+ switch (provider) {
10
+ case "openrouter": {
11
+ const { ChatOpenRouter } = require("@langchain/openrouter");
12
+ return new ChatOpenRouter({
13
+ model: process.env.OPENROUTER_MODEL || "google/gemini-2.5-flash",
14
+ temperature: 0.2,
15
+ }) as BaseChatModel;
16
+ }
17
+ case "google":
18
+ default:
19
+ return new ChatGoogleGenerativeAI({
20
+ apiKey: process.env.GOOGLE_API_KEY || "",
21
+ model: process.env.MODEL_NAME || "gemini-2.5-flash",
22
+ temperature: 0.2,
23
+ });
24
+ }
25
+ }
src/index.ts CHANGED
@@ -1,15 +1,34 @@
1
  import "dotenv/config";
 
 
 
2
 
3
  import { auditorAgent } from "./agents/auditor/agent.ts";
4
  import { coderAgent } from "./agents/coder/agent.ts";
5
  import { testerAgent } from "./agents/tester/agent.ts";
6
 
7
- const requirements = ["ERC20 token", "pausable", "ownable"];
8
 
9
- const coderResult = await coderAgent.invoke({ requirements });
 
 
 
 
 
 
 
 
 
10
  console.log("======= Coder =======");
11
  console.log(coderResult.contract);
12
 
 
 
 
 
 
 
 
13
  const auditorResult = await auditorAgent.invoke({ solidityFile: coderResult.contract });
14
  console.log("\n======= Auditor =======");
15
  console.log(auditorResult.vulnerabilities);
 
1
  import "dotenv/config";
2
+ import { readFileSync, mkdirSync, writeFileSync } from "node:fs";
3
+ import { resolve, dirname } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
 
6
  import { auditorAgent } from "./agents/auditor/agent.ts";
7
  import { coderAgent } from "./agents/coder/agent.ts";
8
  import { testerAgent } from "./agents/tester/agent.ts";
9
 
10
+ const inputPath = process.argv[2];
11
 
12
+ if (!inputPath) {
13
+ console.log("Uso: npm start -- <caminho-do-arquivo-de-requisitos>");
14
+ console.log("Exemplo: npm start -- input/requirements.md");
15
+ process.exit(1);
16
+ }
17
+
18
+ const requirementsText = readFileSync(resolve(inputPath), "utf-8");
19
+ console.log("Requisitos carregados de:", inputPath);
20
+
21
+ const coderResult = await coderAgent.invoke({ requirements: [requirementsText] });
22
  console.log("======= Coder =======");
23
  console.log(coderResult.contract);
24
 
25
+ const __dirname = dirname(fileURLToPath(import.meta.url));
26
+ const outputDir = resolve(__dirname, "agents/coder/outputs");
27
+ mkdirSync(outputDir, { recursive: true });
28
+ const outputPath = resolve(outputDir, "Contract.sol");
29
+ writeFileSync(outputPath, coderResult.contract, "utf-8");
30
+ console.log("\nContrato salvo em:", outputPath);
31
+
32
  const auditorResult = await auditorAgent.invoke({ solidityFile: coderResult.contract });
33
  console.log("\n======= Auditor =======");
34
  console.log(auditorResult.vulnerabilities);
src/server.ts ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import "dotenv/config";
2
+ import { serve } from "@hono/node-server";
3
+ import { Hono } from "hono";
4
+ import { cors } from "hono/cors";
5
+ import { streamSSE } from "hono/streaming";
6
+ import { serveStatic } from "@hono/node-server/serve-static";
7
+
8
+ import { coderAgent } from "./agents/coder/agent.ts";
9
+ import { auditorAgent } from "./agents/auditor/agent.ts";
10
+ import { testerAgent } from "./agents/tester/agent.ts";
11
+
12
+ const app = new Hono();
13
+
14
+ app.use("/api/*", cors());
15
+
16
+ app.post("/api/run", (c) => {
17
+ return streamSSE(c, async (stream) => {
18
+ const body = await c.req.json<{ requirements: string }>();
19
+ const requirements = body.requirements?.trim();
20
+
21
+ if (!requirements) {
22
+ await stream.writeSSE({ event: "error", data: "Requisitos não fornecidos." });
23
+ return;
24
+ }
25
+
26
+ let eventId = 0;
27
+
28
+ const send = async (event: string, data: string) => {
29
+ await stream.writeSSE({ id: String(eventId++), event, data });
30
+ };
31
+
32
+ try {
33
+ // === CODER ===
34
+ await send("log", "[Coder] Gerando smart contract a partir dos requisitos...");
35
+ const coderResult = await coderAgent.invoke({ requirements: [requirements] });
36
+
37
+ await send("log", "[Coder] Contrato gerado com sucesso.");
38
+
39
+ if (coderResult.compilationErrors.length > 0) {
40
+ await send("log", `[Coder] Erros de compilação restantes: ${coderResult.compilationErrors.length}`);
41
+ } else {
42
+ await send("log", "[Coder] Contrato compilado sem erros.");
43
+ }
44
+
45
+ await send("coder", JSON.stringify({
46
+ contract: coderResult.contract,
47
+ compilationErrors: coderResult.compilationErrors,
48
+ reviewSummary: coderResult.reviewSummary,
49
+ }));
50
+
51
+ // === AUDITOR ===
52
+ await send("log", "[Auditor] Iniciando auditoria de segurança...");
53
+ const auditorResult = await auditorAgent.invoke({ solidityFile: coderResult.contract });
54
+ await send("log", `[Auditor] ${auditorResult.vulnerabilities.length} vulnerabilidade(s) encontrada(s).`);
55
+
56
+ await send("auditor", JSON.stringify({
57
+ vulnerabilities: auditorResult.vulnerabilities,
58
+ }));
59
+
60
+ // === TESTER ===
61
+ await send("log", "[Tester] Gerando testes de prova de conceito...");
62
+ const testerResult = await testerAgent.invoke({
63
+ solidityFiles: [coderResult.contract],
64
+ vulnerability: auditorResult.vulnerabilities[0] ?? {},
65
+ });
66
+ await send("log", `[Tester] ${testerResult.results.length} resultado(s) de teste.`);
67
+
68
+ await send("tester", JSON.stringify({
69
+ results: testerResult.results,
70
+ }));
71
+
72
+ await send("log", "Pipeline concluído.");
73
+ await send("done", "ok");
74
+ } catch (err) {
75
+ const message = err instanceof Error ? err.message : String(err);
76
+ await send("error", message);
77
+ }
78
+ });
79
+ });
80
+
81
+ // Serve static frontend files (built React app)
82
+ app.use("/*", serveStatic({ root: "./frontend/dist" }));
83
+
84
+ const port = Number(process.env.PORT) || 7860;
85
+ console.log(`Servidor rodando em http://localhost:${port}`);
86
+ serve({ fetch: app.fetch, port });