@multiplayer-app/ai-agent-node 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/.env.example +45 -0
  2. package/README.md +611 -0
  3. package/config.example.json +73 -0
  4. package/dist/config.d.ts +35 -0
  5. package/dist/config.d.ts.map +1 -0
  6. package/dist/config.js +44 -0
  7. package/dist/config.js.map +1 -0
  8. package/dist/helpers/AIHelper.d.ts +23 -0
  9. package/dist/helpers/AIHelper.d.ts.map +1 -0
  10. package/dist/helpers/AIHelper.js +326 -0
  11. package/dist/helpers/AIHelper.js.map +1 -0
  12. package/dist/helpers/AIHelper.test.d.ts +2 -0
  13. package/dist/helpers/AIHelper.test.d.ts.map +1 -0
  14. package/dist/helpers/AIHelper.test.js +332 -0
  15. package/dist/helpers/AIHelper.test.js.map +1 -0
  16. package/dist/helpers/ConfigHelper.d.ts +20 -0
  17. package/dist/helpers/ConfigHelper.d.ts.map +1 -0
  18. package/dist/helpers/ConfigHelper.js +118 -0
  19. package/dist/helpers/ConfigHelper.js.map +1 -0
  20. package/dist/helpers/ContextLimiter.d.ts +82 -0
  21. package/dist/helpers/ContextLimiter.d.ts.map +1 -0
  22. package/dist/helpers/ContextLimiter.js +165 -0
  23. package/dist/helpers/ContextLimiter.js.map +1 -0
  24. package/dist/helpers/FileHelper.d.ts +31 -0
  25. package/dist/helpers/FileHelper.d.ts.map +1 -0
  26. package/dist/helpers/FileHelper.js +175 -0
  27. package/dist/helpers/FileHelper.js.map +1 -0
  28. package/dist/helpers/SetupHelper.d.ts +5 -0
  29. package/dist/helpers/SetupHelper.d.ts.map +1 -0
  30. package/dist/helpers/SetupHelper.js +32 -0
  31. package/dist/helpers/SetupHelper.js.map +1 -0
  32. package/dist/helpers/index.d.ts +6 -0
  33. package/dist/helpers/index.d.ts.map +1 -0
  34. package/dist/helpers/index.js +6 -0
  35. package/dist/helpers/index.js.map +1 -0
  36. package/dist/index.d.ts +18 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +17 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/libs/index.d.ts +4 -0
  41. package/dist/libs/index.d.ts.map +1 -0
  42. package/dist/libs/index.js +4 -0
  43. package/dist/libs/index.js.map +1 -0
  44. package/dist/libs/kafka/config.d.ts +5 -0
  45. package/dist/libs/kafka/config.d.ts.map +1 -0
  46. package/dist/libs/kafka/config.js +5 -0
  47. package/dist/libs/kafka/config.js.map +1 -0
  48. package/dist/libs/kafka/consumer.d.ts +16 -0
  49. package/dist/libs/kafka/consumer.d.ts.map +1 -0
  50. package/dist/libs/kafka/consumer.js +126 -0
  51. package/dist/libs/kafka/consumer.js.map +1 -0
  52. package/dist/libs/kafka/index.d.ts +3 -0
  53. package/dist/libs/kafka/index.d.ts.map +1 -0
  54. package/dist/libs/kafka/index.js +3 -0
  55. package/dist/libs/kafka/index.js.map +1 -0
  56. package/dist/libs/kafka/kafka.d.ts +3 -0
  57. package/dist/libs/kafka/kafka.d.ts.map +1 -0
  58. package/dist/libs/kafka/kafka.js +24 -0
  59. package/dist/libs/kafka/kafka.js.map +1 -0
  60. package/dist/libs/kafka/producer.d.ts +11 -0
  61. package/dist/libs/kafka/producer.d.ts.map +1 -0
  62. package/dist/libs/kafka/producer.js +44 -0
  63. package/dist/libs/kafka/producer.js.map +1 -0
  64. package/dist/libs/logger/config.d.ts +5 -0
  65. package/dist/libs/logger/config.d.ts.map +1 -0
  66. package/dist/libs/logger/config.js +6 -0
  67. package/dist/libs/logger/config.js.map +1 -0
  68. package/dist/libs/logger/index.d.ts +10 -0
  69. package/dist/libs/logger/index.d.ts.map +1 -0
  70. package/dist/libs/logger/index.js +20 -0
  71. package/dist/libs/logger/index.js.map +1 -0
  72. package/dist/libs/logger/kafkajs-logger-creator.d.ts +12 -0
  73. package/dist/libs/logger/kafkajs-logger-creator.d.ts.map +1 -0
  74. package/dist/libs/logger/kafkajs-logger-creator.js +29 -0
  75. package/dist/libs/logger/kafkajs-logger-creator.js.map +1 -0
  76. package/dist/libs/logger/logger.d.ts +42 -0
  77. package/dist/libs/logger/logger.d.ts.map +1 -0
  78. package/dist/libs/logger/logger.js +44 -0
  79. package/dist/libs/logger/logger.js.map +1 -0
  80. package/dist/libs/s3/config.d.ts +7 -0
  81. package/dist/libs/s3/config.d.ts.map +1 -0
  82. package/dist/libs/s3/config.js +7 -0
  83. package/dist/libs/s3/config.js.map +1 -0
  84. package/dist/libs/s3/index.d.ts +4 -0
  85. package/dist/libs/s3/index.d.ts.map +1 -0
  86. package/dist/libs/s3/index.js +4 -0
  87. package/dist/libs/s3/index.js.map +1 -0
  88. package/dist/libs/s3/s3.lib.d.ts +25 -0
  89. package/dist/libs/s3/s3.lib.d.ts.map +1 -0
  90. package/dist/libs/s3/s3.lib.js +202 -0
  91. package/dist/libs/s3/s3.lib.js.map +1 -0
  92. package/dist/processors/ChatProcessor.d.ts +66 -0
  93. package/dist/processors/ChatProcessor.d.ts.map +1 -0
  94. package/dist/processors/ChatProcessor.js +610 -0
  95. package/dist/processors/ChatProcessor.js.map +1 -0
  96. package/dist/processors/ModelsProcessor.d.ts +11 -0
  97. package/dist/processors/ModelsProcessor.d.ts.map +1 -0
  98. package/dist/processors/ModelsProcessor.js +30 -0
  99. package/dist/processors/ModelsProcessor.js.map +1 -0
  100. package/dist/processors/index.d.ts +3 -0
  101. package/dist/processors/index.d.ts.map +1 -0
  102. package/dist/processors/index.js +3 -0
  103. package/dist/processors/index.js.map +1 -0
  104. package/dist/services/AIService.d.ts +48 -0
  105. package/dist/services/AIService.d.ts.map +1 -0
  106. package/dist/services/AIService.js +196 -0
  107. package/dist/services/AIService.js.map +1 -0
  108. package/dist/services/InternalEventsHandler.d.ts +21 -0
  109. package/dist/services/InternalEventsHandler.d.ts.map +1 -0
  110. package/dist/services/InternalEventsHandler.js +56 -0
  111. package/dist/services/InternalEventsHandler.js.map +1 -0
  112. package/dist/services/KafkaService.d.ts +35 -0
  113. package/dist/services/KafkaService.d.ts.map +1 -0
  114. package/dist/services/KafkaService.js +120 -0
  115. package/dist/services/KafkaService.js.map +1 -0
  116. package/dist/services/ModelFetcher.d.ts +54 -0
  117. package/dist/services/ModelFetcher.d.ts.map +1 -0
  118. package/dist/services/ModelFetcher.js +247 -0
  119. package/dist/services/ModelFetcher.js.map +1 -0
  120. package/dist/services/RedisService.d.ts +90 -0
  121. package/dist/services/RedisService.d.ts.map +1 -0
  122. package/dist/services/RedisService.js +236 -0
  123. package/dist/services/RedisService.js.map +1 -0
  124. package/dist/services/SocketService.d.ts +39 -0
  125. package/dist/services/SocketService.d.ts.map +1 -0
  126. package/dist/services/SocketService.js +128 -0
  127. package/dist/services/SocketService.js.map +1 -0
  128. package/dist/services/index.d.ts +7 -0
  129. package/dist/services/index.d.ts.map +1 -0
  130. package/dist/services/index.js +7 -0
  131. package/dist/services/index.js.map +1 -0
  132. package/dist/store/AgentStore.d.ts +48 -0
  133. package/dist/store/AgentStore.d.ts.map +1 -0
  134. package/dist/store/AgentStore.js +98 -0
  135. package/dist/store/AgentStore.js.map +1 -0
  136. package/dist/store/ArtifactStore.d.ts +13 -0
  137. package/dist/store/ArtifactStore.d.ts.map +1 -0
  138. package/dist/store/ArtifactStore.js +27 -0
  139. package/dist/store/ArtifactStore.js.map +1 -0
  140. package/dist/store/ConfigStore.d.ts +89 -0
  141. package/dist/store/ConfigStore.d.ts.map +1 -0
  142. package/dist/store/ConfigStore.js +214 -0
  143. package/dist/store/ConfigStore.js.map +1 -0
  144. package/dist/store/ConfigStore.test.d.ts +2 -0
  145. package/dist/store/ConfigStore.test.d.ts.map +1 -0
  146. package/dist/store/ConfigStore.test.js +259 -0
  147. package/dist/store/ConfigStore.test.js.map +1 -0
  148. package/dist/store/ModelStore.d.ts +44 -0
  149. package/dist/store/ModelStore.d.ts.map +1 -0
  150. package/dist/store/ModelStore.js +81 -0
  151. package/dist/store/ModelStore.js.map +1 -0
  152. package/dist/store/ModelStore.test.d.ts +2 -0
  153. package/dist/store/ModelStore.test.d.ts.map +1 -0
  154. package/dist/store/ModelStore.test.js +390 -0
  155. package/dist/store/ModelStore.test.js.map +1 -0
  156. package/dist/store/index.d.ts +5 -0
  157. package/dist/store/index.d.ts.map +1 -0
  158. package/dist/store/index.js +5 -0
  159. package/dist/store/index.js.map +1 -0
  160. package/dist/tools/generateChartTool.d.ts +24 -0
  161. package/dist/tools/generateChartTool.d.ts.map +1 -0
  162. package/dist/tools/generateChartTool.js +124 -0
  163. package/dist/tools/generateChartTool.js.map +1 -0
  164. package/dist/tools/proposeFormValuesTool.d.ts +35 -0
  165. package/dist/tools/proposeFormValuesTool.d.ts.map +1 -0
  166. package/dist/tools/proposeFormValuesTool.js +56 -0
  167. package/dist/tools/proposeFormValuesTool.js.map +1 -0
  168. package/package.json +71 -0
  169. package/src/config.ts +46 -0
  170. package/src/helpers/AIHelper.test.ts +375 -0
  171. package/src/helpers/AIHelper.ts +353 -0
  172. package/src/helpers/ConfigHelper.ts +130 -0
  173. package/src/helpers/ContextLimiter.ts +228 -0
  174. package/src/helpers/FileHelper.ts +197 -0
  175. package/src/helpers/SetupHelper.ts +35 -0
  176. package/src/helpers/index.ts +5 -0
  177. package/src/index.ts +18 -0
  178. package/src/libs/index.ts +3 -0
  179. package/src/libs/kafka/config.ts +4 -0
  180. package/src/libs/kafka/consumer.ts +161 -0
  181. package/src/libs/kafka/index.ts +2 -0
  182. package/src/libs/kafka/kafka.ts +27 -0
  183. package/src/libs/kafka/producer.ts +48 -0
  184. package/src/libs/logger/config.ts +4 -0
  185. package/src/libs/logger/index.ts +21 -0
  186. package/src/libs/logger/kafkajs-logger-creator.ts +28 -0
  187. package/src/libs/logger/logger.ts +60 -0
  188. package/src/libs/s3/config.ts +7 -0
  189. package/src/libs/s3/index.ts +3 -0
  190. package/src/libs/s3/s3.lib.ts +284 -0
  191. package/src/processors/ChatProcessor.ts +713 -0
  192. package/src/processors/ModelsProcessor.ts +34 -0
  193. package/src/processors/index.ts +2 -0
  194. package/src/services/AIService.ts +241 -0
  195. package/src/services/InternalEventsHandler.ts +61 -0
  196. package/src/services/KafkaService.ts +142 -0
  197. package/src/services/ModelFetcher.ts +286 -0
  198. package/src/services/RedisService.ts +285 -0
  199. package/src/services/SocketService.ts +153 -0
  200. package/src/services/index.ts +6 -0
  201. package/src/store/AgentStore.ts +138 -0
  202. package/src/store/ArtifactStore.ts +29 -0
  203. package/src/store/ConfigStore.test.ts +314 -0
  204. package/src/store/ConfigStore.ts +239 -0
  205. package/src/store/ModelStore.test.ts +473 -0
  206. package/src/store/ModelStore.ts +93 -0
  207. package/src/store/index.ts +4 -0
  208. package/src/tools/generateChartTool.ts +131 -0
  209. package/src/tools/proposeFormValuesTool.ts +67 -0
  210. package/tsconfig.json +24 -0
@@ -0,0 +1,131 @@
1
+ import { tool } from 'ai'
2
+ import { z } from 'zod'
3
+
4
+ export const generateChartToolName = 'generate-chart'
5
+
6
+ /**
7
+ * Tool for generating chart visualizations from various data sources.
8
+ * The tool returns structured data that the frontend renderer can visualize.
9
+ */
10
+ export const createGenerateChartTool = () =>
11
+ tool({
12
+ title: generateChartToolName,
13
+ description:
14
+ 'Create visualizations from data sources. Supports stock prices, exchange rates, weather data, and custom datasets. Returns structured chart data for rendering.',
15
+ inputSchema: z.object({
16
+ chartType: z.enum(['line', 'bar', 'area', 'pie']).describe('Type of chart to generate'),
17
+ dataSource: z.enum(['stock', 'exchange', 'weather', 'custom']).describe('Source of data for the chart'),
18
+ symbol: z.string().optional().describe('Stock ticker, currency pair, or location identifier'),
19
+ timeframe: z.enum(['1d', '1w', '1m', '3m', '1y']).optional().describe('Time period for data')
20
+ }),
21
+ outputSchema: z.object({
22
+ chartType: z.enum(['line', 'bar', 'area', 'pie']),
23
+ dataSource: z.string(),
24
+ symbol: z.string().optional(),
25
+ timeframe: z.string().optional(),
26
+ title: z.string(),
27
+ yAxisLabel: z.string(),
28
+ data: z.array(
29
+ z.object({
30
+ date: z.string(),
31
+ value: z.number(),
32
+ label: z.string().optional()
33
+ })
34
+ )
35
+ }),
36
+ execute: async (input) => {
37
+ // Generate mock data based on data source
38
+ let data: Array<{ date: string; value: number; label?: string }> = []
39
+ let title = ''
40
+ let yAxisLabel = ''
41
+
42
+ if (input.dataSource === 'stock') {
43
+ title = `${input.symbol || 'AAPL'} Stock Price (${input.timeframe || '1m'})`
44
+ yAxisLabel = 'Price ($)'
45
+ const basePrice = input.symbol === 'AAPL' ? 175 : input.symbol === 'GOOGL' ? 140 : input.symbol === 'MSFT' ? 380 : 100
46
+ const days = input.timeframe === '1d' ? 24 : input.timeframe === '1w' ? 7 : input.timeframe === '1m' ? 30 : input.timeframe === '3m' ? 90 : 365
47
+ const interval = input.timeframe === '1d' ? 'hour' : 'day'
48
+
49
+ for (let i = days; i >= 0; i--) {
50
+ const date = new Date()
51
+ if (interval === 'hour') {
52
+ date.setHours(date.getHours() - i)
53
+ } else {
54
+ date.setDate(date.getDate() - i)
55
+ }
56
+ const variation = (Math.random() - 0.5) * 0.1
57
+ const trend = (days - i) / days * 0.15
58
+ const value = basePrice * (1 + trend + variation)
59
+ data.push({
60
+ date:
61
+ interval === 'hour'
62
+ ? date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' })
63
+ : date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }),
64
+ value: Math.round(value * 100) / 100
65
+ })
66
+ }
67
+ } else if (input.dataSource === 'exchange') {
68
+ title = `${input.symbol || 'EUR/USD'} Exchange Rate (${input.timeframe || '1m'})`
69
+ yAxisLabel = 'Rate'
70
+ const baseRate = input.symbol === 'EUR/USD' ? 1.08 : input.symbol === 'GBP/USD' ? 1.27 : input.symbol === 'JPY/USD' ? 0.0067 : 1.0
71
+ const days = input.timeframe === '1d' ? 24 : input.timeframe === '1w' ? 7 : input.timeframe === '1m' ? 30 : 90
72
+
73
+ for (let i = days; i >= 0; i--) {
74
+ const date = new Date()
75
+ date.setDate(date.getDate() - i)
76
+ const variation = (Math.random() - 0.5) * 0.02
77
+ const value = baseRate * (1 + variation)
78
+ data.push({
79
+ date: date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }),
80
+ value: Math.round(value * 10000) / 10000
81
+ })
82
+ }
83
+ } else if (input.dataSource === 'weather') {
84
+ title = `Weather in ${input.symbol || 'NYC'} (${input.timeframe || '1d'})`
85
+ yAxisLabel = 'Temperature (°F)'
86
+ const days = input.timeframe === '1d' ? 24 : input.timeframe === '1w' ? 7 : 30
87
+ const baseTemp = 65
88
+
89
+ for (let i = days; i >= 0; i--) {
90
+ const date = new Date()
91
+ if (input.timeframe === '1d') {
92
+ date.setHours(date.getHours() - i)
93
+ } else {
94
+ date.setDate(date.getDate() - i)
95
+ }
96
+ const hourOfDay = date.getHours()
97
+ const dailyVariation = Math.sin((hourOfDay / 24) * Math.PI * 2) * 15
98
+ const randomVariation = (Math.random() - 0.5) * 5
99
+ const value = baseTemp + dailyVariation + randomVariation
100
+ data.push({
101
+ date:
102
+ input.timeframe === '1d'
103
+ ? date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' })
104
+ : date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }),
105
+ value: Math.round(value)
106
+ })
107
+ }
108
+ } else {
109
+ // Custom data
110
+ title = 'Custom Dataset'
111
+ yAxisLabel = 'Value'
112
+ for (let i = 0; i < 10; i++) {
113
+ data.push({
114
+ date: `Item ${i + 1}`,
115
+ value: Math.round(Math.random() * 100),
116
+ label: `Category ${i + 1}`
117
+ })
118
+ }
119
+ }
120
+
121
+ return {
122
+ chartType: input.chartType,
123
+ dataSource: input.dataSource,
124
+ symbol: input.symbol,
125
+ timeframe: input.timeframe,
126
+ title,
127
+ yAxisLabel,
128
+ data
129
+ }
130
+ }
131
+ })
@@ -0,0 +1,67 @@
1
+ import { tool } from 'ai'
2
+ import { z } from 'zod'
3
+
4
+ export const proposeFormValuesToolName = 'propose_form_values'
5
+
6
+ /**
7
+ * A no-side-effect tool: it exists to force the model to emit structured form fill proposals.
8
+ * The UI will render these proposals and the host app will decide what to apply.
9
+ */
10
+ export const createProposeFormValuesTool = () =>
11
+ tool({
12
+ title: proposeFormValuesToolName,
13
+ description:
14
+ 'Propose values to fill in a form. Use only allowed select options. Do not apply changes; just propose.',
15
+ inputSchema: z.object({
16
+ formId: z.string().min(1),
17
+ formName: z.string().min(1).optional(),
18
+ fields: z
19
+ .array(
20
+ z.object({
21
+ name: z.string().min(1),
22
+ label: z.string().min(1),
23
+ value: z.string(),
24
+ inputType: z
25
+ .enum(['text', 'textarea', 'number', 'select', 'radio', 'checkbox', 'date', 'email', 'tel'])
26
+ .optional(),
27
+ options: z
28
+ .array(
29
+ z.object({
30
+ value: z.string(),
31
+ label: z.string()
32
+ })
33
+ )
34
+ .optional()
35
+ })
36
+ )
37
+ .min(1),
38
+ notes: z.string().optional()
39
+ }),
40
+ outputSchema: z.object({
41
+ formId: z.string(),
42
+ formName: z.string().optional(),
43
+ fields: z.array(
44
+ z.object({
45
+ name: z.string(),
46
+ label: z.string(),
47
+ value: z.string(),
48
+ inputType: z
49
+ .enum(['text', 'textarea', 'number', 'select', 'radio', 'checkbox', 'date', 'email', 'tel'])
50
+ .optional(),
51
+ options: z
52
+ .array(
53
+ z.object({
54
+ value: z.string(),
55
+ label: z.string()
56
+ })
57
+ )
58
+ .optional()
59
+ })
60
+ ),
61
+ notes: z.string().optional()
62
+ }),
63
+ execute: async (input) => {
64
+ // Preserve structured output. No I/O, no mutations.
65
+ return input
66
+ }
67
+ })
package/tsconfig.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "composite": true,
5
+ "rootDir": "src",
6
+ "outDir": "dist",
7
+ "module": "ES2022",
8
+ "target": "ES2018",
9
+ "moduleResolution": "node",
10
+ "noImplicitAny": false
11
+ },
12
+ "include": ["src"],
13
+ "references": [
14
+ {
15
+ "path": "../ai-agent-types/tsconfig.json"
16
+ },
17
+ {
18
+ "path": "../ai-agent-db-mongo/tsconfig.json"
19
+ },
20
+ {
21
+ "path": "../ai-agent-db-lib/tsconfig.json"
22
+ }
23
+ ]
24
+ }