@tleblancureta/proto 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/core-gateway/auth.d.ts +7 -0
  2. package/dist/core-gateway/auth.d.ts.map +1 -0
  3. package/dist/core-gateway/auth.js +12 -0
  4. package/dist/core-gateway/auth.js.map +1 -0
  5. package/dist/core-gateway/claude-runner.d.ts +10 -0
  6. package/dist/core-gateway/claude-runner.d.ts.map +1 -0
  7. package/dist/core-gateway/claude-runner.js +206 -0
  8. package/dist/core-gateway/claude-runner.js.map +1 -0
  9. package/dist/core-gateway/config.d.ts +33 -0
  10. package/dist/core-gateway/config.d.ts.map +1 -0
  11. package/dist/core-gateway/config.js +84 -0
  12. package/dist/core-gateway/config.js.map +1 -0
  13. package/dist/core-gateway/email-sender.d.ts +36 -0
  14. package/dist/core-gateway/email-sender.d.ts.map +1 -0
  15. package/dist/core-gateway/email-sender.js +121 -0
  16. package/dist/core-gateway/email-sender.js.map +1 -0
  17. package/dist/core-gateway/mail-ingester.d.ts +3 -0
  18. package/dist/core-gateway/mail-ingester.d.ts.map +1 -0
  19. package/dist/core-gateway/mail-ingester.js +294 -0
  20. package/dist/core-gateway/mail-ingester.js.map +1 -0
  21. package/dist/core-gateway/mail-router.d.ts +18 -0
  22. package/dist/core-gateway/mail-router.d.ts.map +1 -0
  23. package/dist/core-gateway/mail-router.js +37 -0
  24. package/dist/core-gateway/mail-router.js.map +1 -0
  25. package/dist/core-gateway/mail-threads.d.ts +78 -0
  26. package/dist/core-gateway/mail-threads.d.ts.map +1 -0
  27. package/dist/core-gateway/mail-threads.js +100 -0
  28. package/dist/core-gateway/mail-threads.js.map +1 -0
  29. package/dist/core-gateway/rate-limiter.d.ts +9 -0
  30. package/dist/core-gateway/rate-limiter.d.ts.map +1 -0
  31. package/dist/core-gateway/rate-limiter.js +13 -0
  32. package/dist/core-gateway/rate-limiter.js.map +1 -0
  33. package/dist/core-gateway/registry.d.ts +14 -0
  34. package/dist/core-gateway/registry.d.ts.map +1 -0
  35. package/dist/core-gateway/registry.js +83 -0
  36. package/dist/core-gateway/registry.js.map +1 -0
  37. package/dist/core-gateway/routes/admin.d.ts +3 -0
  38. package/dist/core-gateway/routes/admin.d.ts.map +1 -0
  39. package/dist/core-gateway/routes/admin.js +91 -0
  40. package/dist/core-gateway/routes/admin.js.map +1 -0
  41. package/dist/core-gateway/routes/chat.d.ts +9 -0
  42. package/dist/core-gateway/routes/chat.d.ts.map +1 -0
  43. package/dist/core-gateway/routes/chat.js +149 -0
  44. package/dist/core-gateway/routes/chat.js.map +1 -0
  45. package/dist/core-gateway/routes/cron.d.ts +13 -0
  46. package/dist/core-gateway/routes/cron.d.ts.map +1 -0
  47. package/dist/core-gateway/routes/cron.js +79 -0
  48. package/dist/core-gateway/routes/cron.js.map +1 -0
  49. package/dist/core-gateway/routes/gmail.d.ts +8 -0
  50. package/dist/core-gateway/routes/gmail.d.ts.map +1 -0
  51. package/dist/core-gateway/routes/gmail.js +57 -0
  52. package/dist/core-gateway/routes/gmail.js.map +1 -0
  53. package/dist/core-gateway/routes/health.d.ts +3 -0
  54. package/dist/core-gateway/routes/health.d.ts.map +1 -0
  55. package/dist/core-gateway/routes/health.js +7 -0
  56. package/dist/core-gateway/routes/health.js.map +1 -0
  57. package/dist/core-gateway/routes/upload.d.ts +7 -0
  58. package/dist/core-gateway/routes/upload.d.ts.map +1 -0
  59. package/dist/core-gateway/routes/upload.js +31 -0
  60. package/dist/core-gateway/routes/upload.js.map +1 -0
  61. package/dist/core-gateway/scheduler.d.ts +68 -0
  62. package/dist/core-gateway/scheduler.d.ts.map +1 -0
  63. package/dist/core-gateway/scheduler.js +252 -0
  64. package/dist/core-gateway/scheduler.js.map +1 -0
  65. package/dist/core-gateway/server.d.ts +17 -0
  66. package/dist/core-gateway/server.d.ts.map +1 -0
  67. package/dist/core-gateway/server.js +45 -0
  68. package/dist/core-gateway/server.js.map +1 -0
  69. package/dist/core-gateway/session.d.ts +18 -0
  70. package/dist/core-gateway/session.d.ts.map +1 -0
  71. package/dist/core-gateway/session.js +178 -0
  72. package/dist/core-gateway/session.js.map +1 -0
  73. package/dist/core-gateway/skills.d.ts +4 -0
  74. package/dist/core-gateway/skills.d.ts.map +1 -0
  75. package/dist/core-gateway/skills.js +100 -0
  76. package/dist/core-gateway/skills.js.map +1 -0
  77. package/dist/core-gateway/supabase.d.ts +3 -0
  78. package/dist/core-gateway/supabase.d.ts.map +1 -0
  79. package/dist/core-gateway/supabase.js +18 -0
  80. package/dist/core-gateway/supabase.js.map +1 -0
  81. package/dist/gateway.d.ts +3 -0
  82. package/dist/gateway.d.ts.map +1 -0
  83. package/dist/gateway.js +3 -0
  84. package/dist/gateway.js.map +1 -0
  85. package/package.json +21 -1
@@ -0,0 +1,100 @@
1
+ import { readFileSync, existsSync } from 'node:fs';
2
+ import { config, resolveAppPath } from './config.js';
3
+ /**
4
+ * Build tool map from skills, resolving one level of `depends`.
5
+ */
6
+ function getSkillToolsMap(skills) {
7
+ const raw = {};
8
+ const deps = {};
9
+ for (const s of skills) {
10
+ if (!s.mcp_tools?.length)
11
+ continue;
12
+ raw[s.name] = s.mcp_tools;
13
+ deps[s.name] = s.depends || [];
14
+ }
15
+ const out = {};
16
+ for (const [name, tools] of Object.entries(raw)) {
17
+ const all = [...tools];
18
+ for (const d of deps[name] || []) {
19
+ for (const t of raw[d] || []) {
20
+ if (!all.includes(t))
21
+ all.push(t);
22
+ }
23
+ }
24
+ out[name] = all;
25
+ }
26
+ return out;
27
+ }
28
+ export function buildSystemPrompt(request, allSkills = []) {
29
+ const parts = [];
30
+ // Channel-specific base prompt
31
+ const promptKey = request.channel === 'whatsapp' ? 'whatsapp' : 'default';
32
+ const promptFile = config.prompts[promptKey] || config.prompts.default;
33
+ const promptPath = resolveAppPath(promptFile);
34
+ if (existsSync(promptPath)) {
35
+ parts.push(readFileSync(promptPath, 'utf-8'));
36
+ }
37
+ // Current date/time
38
+ const now = new Date();
39
+ const tz = config.timezone;
40
+ const formatter = new Intl.DateTimeFormat('es-CL', {
41
+ timeZone: tz,
42
+ day: '2-digit', month: '2-digit', year: 'numeric',
43
+ hour: '2-digit', minute: '2-digit',
44
+ });
45
+ parts.push(`\n## Fecha y hora actual\n\n- ${formatter.format(now)} (${tz})`);
46
+ // Company context
47
+ if (request.company_context) {
48
+ let ctx = request.company_context;
49
+ if (request.user_id && request.user_id !== 'web-user') {
50
+ ctx += `\n- Email del usuario: ${request.user_id}`;
51
+ }
52
+ parts.push(`\n## Empresa activa\n\n${ctx}`);
53
+ }
54
+ // Skills
55
+ let skills = request.enabled_skills;
56
+ const channelExcluded = config.channel_excluded_skills[request.channel];
57
+ if (skills.length && channelExcluded) {
58
+ skills = skills.filter(s => !channelExcluded.has(s));
59
+ }
60
+ if (skills.length) {
61
+ parts.push(`\n## Skills habilitados\n\n` +
62
+ `Tienes ${skills.length} skills disponibles: ${skills.join(', ')}. ` +
63
+ `Usa el Skill tool para invocarlos cuando sean relevantes.`);
64
+ // Tool restrictions
65
+ const allSkillTools = getSkillToolsMap(allSkills);
66
+ const enabledSet = new Set(skills);
67
+ const allowed = [];
68
+ const denied = [];
69
+ for (const [name, tools] of Object.entries(allSkillTools)) {
70
+ if (enabledSet.has(name)) {
71
+ allowed.push(...tools);
72
+ }
73
+ else {
74
+ denied.push(...tools);
75
+ }
76
+ }
77
+ allowed.push(...config.always_allowed_tools);
78
+ if (denied.length) {
79
+ parts.push(`\n## RESTRICCION DE TOOLS\n`);
80
+ parts.push(`Tools permitidos: ${[...new Set(allowed)].sort().map(t => `\`${t}\``).join(', ')}`);
81
+ parts.push(`\nTools DENEGADOS: ${[...new Set(denied)].sort().map(t => `\`${t}\``).join(', ')}. ` +
82
+ `Si el usuario pide algo de estos dominios, dile que no tienes acceso.`);
83
+ }
84
+ }
85
+ // Output format
86
+ if (request.output_format && request.output_format !== 'text') {
87
+ const formats = {
88
+ excel: 'Genera el resultado como archivo Excel (.xlsx) y guardalo en el directorio actual.',
89
+ pdf: 'Genera el resultado como archivo PDF y guardalo en el directorio actual.',
90
+ summary: 'Responde con un resumen conciso de maximo 3-4 oraciones.',
91
+ };
92
+ parts.push(`\n## Formato de output\n\n${formats[request.output_format] || request.output_format}`);
93
+ }
94
+ // Additional instructions
95
+ if (request.system_instructions) {
96
+ parts.push(`\n## Instrucciones adicionales\n\n${request.system_instructions}`);
97
+ }
98
+ return parts.join('\n\n');
99
+ }
100
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../core-gateway/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { SupabaseClient } from '@supabase/supabase-js';
2
+ export declare function getSupabase(): SupabaseClient;
3
+ //# sourceMappingURL=supabase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../core-gateway/supabase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAQpE,wBAAgB,WAAW,IAAI,cAAc,CAS5C"}
@@ -0,0 +1,18 @@
1
+ import { createClient } from '@supabase/supabase-js';
2
+ /**
3
+ * Shared service-role Supabase client for the gateway. Uses a lazy singleton
4
+ * so modules can import freely without tripping over missing env at load time.
5
+ */
6
+ let client = null;
7
+ export function getSupabase() {
8
+ if (client)
9
+ return client;
10
+ const url = process.env.SUPABASE_URL;
11
+ const key = process.env.SUPABASE_SERVICE_ROLE_KEY;
12
+ if (!url || !key) {
13
+ throw new Error('SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY are required');
14
+ }
15
+ client = createClient(url, key, { auth: { persistSession: false } });
16
+ return client;
17
+ }
18
+ //# sourceMappingURL=supabase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.js","sourceRoot":"","sources":["../../core-gateway/supabase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAkB,MAAM,uBAAuB,CAAA;AAEpE;;;GAGG;AACH,IAAI,MAAM,GAA0B,IAAI,CAAA;AAExC,MAAM,UAAU,WAAW;IACzB,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IACzB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAA;IACjD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;IAC5E,CAAC;IACD,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;IACpE,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { createProtoGateway, type GatewayOptions } from './core-gateway/server.js';
2
+ export { config, APP_ROOT, resolveAppPath } from './core-gateway/config.js';
3
+ //# sourceMappingURL=gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAClF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { createProtoGateway } from './core-gateway/server.js';
2
+ export { config, APP_ROOT, resolveAppPath } from './core-gateway/config.js';
3
+ //# sourceMappingURL=gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAuB,MAAM,0BAA0B,CAAA;AAClF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tleblancureta/proto",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "description": "TypeScript framework for building AI-agent-driven apps. Define tools, widgets, and data models — get chat, Shell dashboard, auth, MCP server, and Claude CLI integration.",
6
6
  "license": "MIT",
@@ -21,6 +21,10 @@
21
21
  "./shared": {
22
22
  "types": "./dist/shared.d.ts",
23
23
  "default": "./dist/shared.js"
24
+ },
25
+ "./gateway": {
26
+ "types": "./dist/gateway.d.ts",
27
+ "default": "./dist/gateway.js"
24
28
  }
25
29
  },
26
30
  "files": [
@@ -39,25 +43,41 @@
39
43
  "react-dom": "^19.0.0"
40
44
  },
41
45
  "dependencies": {
46
+ "@hono/node-server": "^1.13.0",
47
+ "@hono/node-ws": "^1.3.0",
42
48
  "clsx": "^2.1.1",
49
+ "croner": "^9.1.0",
50
+ "hono": "^4.7.0",
43
51
  "lucide-react": "^1.7.0",
44
52
  "react-grid-layout": "^2.2.3",
45
53
  "react-markdown": "^10.1.0",
46
54
  "react-router-dom": "^7.14.0",
47
55
  "remark-gfm": "^4.0.1",
48
56
  "tailwind-merge": "^3.5.0",
57
+ "ws": "^8.20.0",
58
+ "yaml": "^2.7.0",
49
59
  "zod": "^3.24.0"
50
60
  },
51
61
  "devDependencies": {
52
62
  "@modelcontextprotocol/sdk": "^1.27.0",
53
63
  "@supabase/supabase-js": "^2.49.0",
64
+ "@types/mailparser": "^3.4.6",
65
+ "@types/node": "^22.0.0",
66
+ "@types/nodemailer": "^8.0.0",
54
67
  "@types/react": "^19.0.0",
55
68
  "@types/react-dom": "^19.0.0",
56
69
  "@types/react-grid-layout": "^1.3.6",
70
+ "@types/ws": "^8.18.1",
57
71
  "react": "^19.0.0",
58
72
  "react-dom": "^19.0.0",
59
73
  "tsx": "^4.19.0",
60
74
  "typescript": "^5.7.0",
61
75
  "vitest": "^3.0.0"
76
+ },
77
+ "optionalDependencies": {
78
+ "googleapis": "^171.4.0",
79
+ "imapflow": "^1.3.1",
80
+ "mailparser": "^3.9.8",
81
+ "nodemailer": "^8.0.5"
62
82
  }
63
83
  }