@ainetwork/adk 0.2.0 → 0.2.2

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 (159) hide show
  1. package/README.md +50 -24
  2. package/dist/cjs/chunk-3ZFV2K7O.cjs +128 -0
  3. package/dist/cjs/chunk-3ZFV2K7O.cjs.map +1 -0
  4. package/dist/cjs/chunk-7PZP7YSA.cjs +40 -0
  5. package/dist/cjs/chunk-7PZP7YSA.cjs.map +1 -0
  6. package/dist/cjs/chunk-A2I7D6JW.cjs +45 -0
  7. package/dist/cjs/chunk-A2I7D6JW.cjs.map +1 -0
  8. package/dist/cjs/{chunk-6YVTJEMQ.cjs → chunk-BBFYVWE2.cjs} +17 -42
  9. package/dist/cjs/chunk-BBFYVWE2.cjs.map +1 -0
  10. package/dist/cjs/{chunk-LRBRG2DS.cjs → chunk-E35E4LQY.cjs} +4 -4
  11. package/dist/cjs/chunk-E35E4LQY.cjs.map +1 -0
  12. package/dist/cjs/{chunk-EAK7MP6X.cjs → chunk-FRWC3FQ4.cjs} +4 -4
  13. package/dist/cjs/chunk-FRWC3FQ4.cjs.map +1 -0
  14. package/dist/cjs/{chunk-ZZK4ACTV.cjs → chunk-KHD7UAFW.cjs} +64 -27
  15. package/dist/cjs/chunk-KHD7UAFW.cjs.map +1 -0
  16. package/dist/cjs/{chunk-JXKLEQD6.cjs → chunk-LMR6B76V.cjs} +5 -5
  17. package/dist/cjs/chunk-LMR6B76V.cjs.map +1 -0
  18. package/dist/cjs/{chunk-55IME4BG.cjs → chunk-OKRBMMK2.cjs} +46 -24
  19. package/dist/cjs/chunk-OKRBMMK2.cjs.map +1 -0
  20. package/dist/cjs/{chunk-DX2JH3FJ.cjs → chunk-QHQLU7BI.cjs} +1 -1
  21. package/dist/cjs/{chunk-DX2JH3FJ.cjs.map → chunk-QHQLU7BI.cjs.map} +1 -1
  22. package/dist/cjs/{chunk-QWASSVCU.cjs → chunk-RIJV7J5Z.cjs} +1 -1
  23. package/dist/cjs/chunk-RIJV7J5Z.cjs.map +1 -0
  24. package/dist/cjs/{chunk-3J3ORQOG.cjs → chunk-VLMHDHXT.cjs} +3 -3
  25. package/dist/cjs/{chunk-3J3ORQOG.cjs.map → chunk-VLMHDHXT.cjs.map} +1 -1
  26. package/dist/cjs/{chunk-344VLDMS.cjs → chunk-W5VM75PL.cjs} +7 -7
  27. package/dist/cjs/{chunk-344VLDMS.cjs.map → chunk-W5VM75PL.cjs.map} +1 -1
  28. package/dist/cjs/{chunk-KE7SL3H6.cjs → chunk-ZPYMLCQZ.cjs} +14 -18
  29. package/dist/cjs/chunk-ZPYMLCQZ.cjs.map +1 -0
  30. package/dist/cjs/controllers/api/threads.api.controller.cjs +7 -0
  31. package/dist/cjs/controllers/api/threads.api.controller.cjs.map +1 -0
  32. package/dist/cjs/controllers/index.cjs +4 -4
  33. package/dist/cjs/controllers/query.controller.cjs +3 -3
  34. package/dist/cjs/index.cjs +67 -28
  35. package/dist/cjs/index.cjs.map +1 -1
  36. package/dist/cjs/middlewares/auth.middleware.cjs +3 -3
  37. package/dist/cjs/modules/a2a/a2a.module.cjs +2 -2
  38. package/dist/cjs/modules/index.cjs +7 -7
  39. package/dist/cjs/modules/index.cjs.map +1 -1
  40. package/dist/cjs/modules/mcp/mcp.module.cjs +2 -2
  41. package/dist/cjs/modules/models/model.module.cjs +2 -2
  42. package/dist/cjs/routes/a2a.routes.cjs +4 -4
  43. package/dist/cjs/routes/api/threads.routes.cjs +9 -0
  44. package/dist/cjs/routes/api/threads.routes.cjs.map +1 -0
  45. package/dist/cjs/routes/api.routes.cjs +5 -5
  46. package/dist/cjs/routes/index.cjs +11 -11
  47. package/dist/cjs/routes/query.routes.cjs +6 -6
  48. package/dist/cjs/services/a2a.service.cjs +2 -2
  49. package/dist/cjs/services/index.cjs +4 -4
  50. package/dist/cjs/services/query-stream.service.cjs +2 -2
  51. package/dist/cjs/services/query.service.cjs +2 -2
  52. package/dist/cjs/types/agent.cjs +2 -2
  53. package/dist/esm/{chunk-7D4SKPIS.js → chunk-4C2TLCWI.js} +2 -2
  54. package/dist/esm/{chunk-PN6NMQBM.js → chunk-5JIXQ6PU.js} +2 -2
  55. package/dist/esm/chunk-5JIXQ6PU.js.map +1 -0
  56. package/dist/esm/{chunk-M4EJC7LZ.js → chunk-7IYLOABV.js} +61 -24
  57. package/dist/esm/chunk-7IYLOABV.js.map +1 -0
  58. package/dist/esm/{chunk-G37LGM6P.js → chunk-AJRQEL5N.js} +6 -6
  59. package/dist/esm/{chunk-KMQX6T56.js → chunk-EUUW7J3S.js} +8 -8
  60. package/dist/esm/chunk-EUUW7J3S.js.map +1 -0
  61. package/dist/esm/{chunk-A65XRRHY.js → chunk-GDA6Z5AL.js} +11 -15
  62. package/dist/esm/chunk-GDA6Z5AL.js.map +1 -0
  63. package/dist/esm/{chunk-LJVVSUF7.js → chunk-MJEPJ62P.js} +15 -40
  64. package/dist/esm/chunk-MJEPJ62P.js.map +1 -0
  65. package/dist/esm/{chunk-2RW77MJB.js → chunk-PUUZRUE6.js} +47 -25
  66. package/dist/esm/chunk-PUUZRUE6.js.map +1 -0
  67. package/dist/esm/chunk-QHWDMU43.js +40 -0
  68. package/dist/esm/chunk-QHWDMU43.js.map +1 -0
  69. package/dist/esm/chunk-RL6SRSSK.js +45 -0
  70. package/dist/esm/chunk-RL6SRSSK.js.map +1 -0
  71. package/dist/esm/chunk-RNA32QWV.js +128 -0
  72. package/dist/esm/chunk-RNA32QWV.js.map +1 -0
  73. package/dist/esm/{chunk-HOFAK5J2.js → chunk-TV2GJAEH.js} +4 -4
  74. package/dist/esm/chunk-TV2GJAEH.js.map +1 -0
  75. package/dist/esm/{chunk-PHKK5NHK.js → chunk-VNQCUGC3.js} +1 -1
  76. package/dist/esm/chunk-VNQCUGC3.js.map +1 -0
  77. package/dist/esm/{chunk-FL3JRQM4.js → chunk-ZBUAT73P.js} +1 -1
  78. package/dist/esm/{chunk-FL3JRQM4.js.map → chunk-ZBUAT73P.js.map} +1 -1
  79. package/dist/esm/controllers/a2a.controller.d.ts +4 -2
  80. package/dist/esm/controllers/api/{thread.api.controller.d.ts → threads.api.controller.d.ts} +2 -0
  81. package/dist/esm/controllers/api/threads.api.controller.js +7 -0
  82. package/dist/esm/controllers/index.d.ts +6 -4
  83. package/dist/esm/controllers/index.js +5 -5
  84. package/dist/esm/controllers/query.controller.d.ts +4 -2
  85. package/dist/esm/controllers/query.controller.js +2 -2
  86. package/dist/esm/index.d.ts +3 -2
  87. package/dist/esm/index.js +66 -27
  88. package/dist/esm/index.js.map +1 -1
  89. package/dist/esm/middlewares/auth.middleware.js +2 -2
  90. package/dist/esm/modules/a2a/a2a.module.d.ts +2 -9
  91. package/dist/esm/modules/a2a/a2a.module.js +1 -1
  92. package/dist/esm/modules/index.d.ts +2 -0
  93. package/dist/esm/modules/index.js +3 -3
  94. package/dist/esm/modules/mcp/mcp.module.d.ts +8 -14
  95. package/dist/esm/modules/mcp/mcp.module.js +1 -1
  96. package/dist/esm/modules/memory/base.memory.d.ts +3 -3
  97. package/dist/esm/modules/models/model.module.d.ts +17 -0
  98. package/dist/esm/modules/models/model.module.js +1 -1
  99. package/dist/esm/routes/a2a.routes.d.ts +2 -0
  100. package/dist/esm/routes/a2a.routes.js +3 -3
  101. package/dist/esm/routes/api/threads.routes.js +9 -0
  102. package/dist/esm/routes/api.routes.d.ts +2 -0
  103. package/dist/esm/routes/api.routes.js +4 -4
  104. package/dist/esm/routes/index.d.ts +3 -1
  105. package/dist/esm/routes/index.js +12 -12
  106. package/dist/esm/routes/query.routes.d.ts +2 -0
  107. package/dist/esm/routes/query.routes.js +5 -5
  108. package/dist/esm/services/a2a.service.d.ts +6 -4
  109. package/dist/esm/services/a2a.service.js +1 -1
  110. package/dist/esm/services/index.d.ts +2 -0
  111. package/dist/esm/services/index.js +7 -7
  112. package/dist/esm/services/query-stream.service.d.ts +15 -10
  113. package/dist/esm/services/query-stream.service.js +1 -1
  114. package/dist/esm/services/query.service.d.ts +9 -4
  115. package/dist/esm/services/query.service.js +1 -1
  116. package/dist/esm/types/agent.d.ts +0 -2
  117. package/dist/esm/types/agent.js +1 -1
  118. package/dist/esm/types/mcp.d.ts +15 -1
  119. package/dist/esm/types/stream.d.ts +2 -0
  120. package/package.json +9 -4
  121. package/dist/cjs/chunk-55IME4BG.cjs.map +0 -1
  122. package/dist/cjs/chunk-6YVTJEMQ.cjs.map +0 -1
  123. package/dist/cjs/chunk-BBCZU5VZ.cjs +0 -17
  124. package/dist/cjs/chunk-BBCZU5VZ.cjs.map +0 -1
  125. package/dist/cjs/chunk-CYW6ICAW.cjs +0 -106
  126. package/dist/cjs/chunk-CYW6ICAW.cjs.map +0 -1
  127. package/dist/cjs/chunk-EAK7MP6X.cjs.map +0 -1
  128. package/dist/cjs/chunk-JXKLEQD6.cjs.map +0 -1
  129. package/dist/cjs/chunk-KE7SL3H6.cjs.map +0 -1
  130. package/dist/cjs/chunk-KRLUWTLN.cjs +0 -35
  131. package/dist/cjs/chunk-KRLUWTLN.cjs.map +0 -1
  132. package/dist/cjs/chunk-LRBRG2DS.cjs.map +0 -1
  133. package/dist/cjs/chunk-QWASSVCU.cjs.map +0 -1
  134. package/dist/cjs/chunk-ZZK4ACTV.cjs.map +0 -1
  135. package/dist/cjs/controllers/api/thread.api.controller.cjs +0 -8
  136. package/dist/cjs/controllers/api/thread.api.controller.cjs.map +0 -1
  137. package/dist/cjs/routes/api/thread.routes.cjs +0 -9
  138. package/dist/cjs/routes/api/thread.routes.cjs.map +0 -1
  139. package/dist/esm/chunk-2RW77MJB.js.map +0 -1
  140. package/dist/esm/chunk-A65XRRHY.js.map +0 -1
  141. package/dist/esm/chunk-ADIAIRNH.js +0 -35
  142. package/dist/esm/chunk-ADIAIRNH.js.map +0 -1
  143. package/dist/esm/chunk-BDMVIJPF.js +0 -106
  144. package/dist/esm/chunk-BDMVIJPF.js.map +0 -1
  145. package/dist/esm/chunk-HOFAK5J2.js.map +0 -1
  146. package/dist/esm/chunk-KMQX6T56.js.map +0 -1
  147. package/dist/esm/chunk-LJVVSUF7.js.map +0 -1
  148. package/dist/esm/chunk-M4EJC7LZ.js.map +0 -1
  149. package/dist/esm/chunk-PHKK5NHK.js.map +0 -1
  150. package/dist/esm/chunk-PN6NMQBM.js.map +0 -1
  151. package/dist/esm/chunk-VA3XOZBV.js +0 -17
  152. package/dist/esm/chunk-VA3XOZBV.js.map +0 -1
  153. package/dist/esm/controllers/api/thread.api.controller.js +0 -8
  154. package/dist/esm/routes/api/thread.routes.js +0 -9
  155. /package/dist/esm/{chunk-7D4SKPIS.js.map → chunk-4C2TLCWI.js.map} +0 -0
  156. /package/dist/esm/{chunk-G37LGM6P.js.map → chunk-AJRQEL5N.js.map} +0 -0
  157. /package/dist/esm/controllers/api/{thread.api.controller.js.map → threads.api.controller.js.map} +0 -0
  158. /package/dist/esm/routes/api/{thread.routes.d.ts → threads.routes.d.ts} +0 -0
  159. /package/dist/esm/routes/api/{thread.routes.js.map → threads.routes.js.map} +0 -0
@@ -83,6 +83,7 @@ Please select and answer the most appropriate intent name from the available int
83
83
  * @param query - The user's input query
84
84
  * @param threadId - Thread identifier for context
85
85
  * @param thread - Previous conversation history
86
+ * @param intent - Optional detected intent with custom prompt
86
87
  * @returns Object containing process steps and final response
87
88
  */
88
89
  async intentFulfilling(query, threadId, thread, intent) {
@@ -111,25 +112,18 @@ ${_optionalChain([intent, 'optionalAccess', _8 => _8.prompt]) || ""}
111
112
  const functions = modelInstance.convertToolsToFunctions(tools);
112
113
  const processList = [];
113
114
  let finalMessage = "";
114
- let didCallTool = false;
115
115
  while (true) {
116
116
  const response = await modelInstance.fetchWithContextMessage(
117
117
  messages,
118
118
  functions
119
119
  );
120
- didCallTool = false;
121
120
  _chunk466ED5WNcjs.loggers.intent.debug("messages", { messages });
122
121
  const { content, toolCalls } = response;
123
122
  _chunk466ED5WNcjs.loggers.intent.debug("content", { content });
124
123
  _chunk466ED5WNcjs.loggers.intent.debug("tool_calls", { ...toolCalls });
125
124
  if (toolCalls) {
126
- const messagePayload = _optionalChain([this, 'access', _9 => _9.a2aModule, 'optionalAccess', _10 => _10.getMessagePayload, 'call', _11 => _11(
127
- query,
128
- threadId
129
- )]);
130
125
  for (const toolCall of toolCalls) {
131
126
  const toolName = toolCall.name;
132
- didCallTool = true;
133
127
  const selectedTool = tools.filter((tool) => tool.id === toolName)[0];
134
128
  let toolResult = "";
135
129
  if (this.mcpModule && selectedTool.protocol === "MCP" /* MCP */) {
@@ -142,7 +136,7 @@ ${_optionalChain([intent, 'optionalAccess', _8 => _8.prompt]) || ""}
142
136
  } else if (this.a2aModule && selectedTool.protocol === "A2A" /* A2A */) {
143
137
  toolResult = await this.a2aModule.useTool(
144
138
  selectedTool,
145
- messagePayload,
139
+ query,
146
140
  threadId
147
141
  );
148
142
  } else {
@@ -158,8 +152,8 @@ ${_optionalChain([intent, 'optionalAccess', _8 => _8.prompt]) || ""}
158
152
  } else if (content) {
159
153
  processList.push(content);
160
154
  finalMessage = content;
155
+ break;
161
156
  }
162
- if (!didCallTool) break;
163
157
  }
164
158
  const botResponse = {
165
159
  process: processList.join("\n"),
@@ -198,28 +192,30 @@ ${_optionalChain([intent, 'optionalAccess', _8 => _8.prompt]) || ""}
198
192
  * Main entry point for processing user queries.
199
193
  *
200
194
  * Handles the complete query lifecycle:
201
- * 1. Loads thread history from memory
195
+ * 1. Loads or creates thread from memory
202
196
  * 2. Detects intent from the query
203
197
  * 3. Fulfills the intent with AI response
204
198
  * 4. Updates conversation history
205
199
  *
206
- * @param type - The type of thread (e.g., chat, workflow)
207
- * @param userId - The user's unique identifier
208
- * @param threadId - Unique thread identifier
200
+ * @param threadMetadata - Metadata containing type, userId, and optional threadId
201
+ * @param threadMetadata.type - The type of thread (e.g., chat, workflow)
202
+ * @param threadMetadata.userId - The user's unique identifier
203
+ * @param threadMetadata.threadId - Optional thread identifier
209
204
  * @param query - The user's input query
205
+ * @returns Promise resolving to object with content property containing the response
210
206
  */
211
207
  async handleQuery(threadMetadata, query) {
212
208
  const { type, userId } = threadMetadata;
213
209
  const queryStartAt = Date.now();
214
- const threadMemory = _optionalChain([this, 'access', _12 => _12.memoryModule, 'optionalAccess', _13 => _13.getThreadMemory, 'call', _14 => _14()]);
210
+ const threadMemory = _optionalChain([this, 'access', _9 => _9.memoryModule, 'optionalAccess', _10 => _10.getThreadMemory, 'call', _11 => _11()]);
215
211
  let threadId = threadMetadata.threadId;
216
212
  let thread;
217
213
  if (threadId) {
218
- thread = await _optionalChain([threadMemory, 'optionalAccess', _15 => _15.getThread, 'call', _16 => _16(type, userId, threadId)]);
214
+ thread = await _optionalChain([threadMemory, 'optionalAccess', _12 => _12.getThread, 'call', _13 => _13(userId, threadId)]);
219
215
  } else {
220
216
  threadId = _crypto.randomUUID.call(void 0, );
221
217
  const title = await this.generateTitle(query);
222
- const metadata = await _optionalChain([threadMemory, 'optionalAccess', _17 => _17.createThread, 'call', _18 => _18(type, userId, threadId, title)]) || {
218
+ const metadata = await _optionalChain([threadMemory, 'optionalAccess', _14 => _14.createThread, 'call', _15 => _15(type, userId, threadId, title)]) || {
223
219
  type,
224
220
  threadId,
225
221
  title,
@@ -229,7 +225,7 @@ ${_optionalChain([intent, 'optionalAccess', _8 => _8.prompt]) || ""}
229
225
  }
230
226
  const intent = await this.intentTriggering(query, thread);
231
227
  const result = await this.intentFulfilling(query, threadId, thread, intent);
232
- await _optionalChain([threadMemory, 'optionalAccess', _19 => _19.addMessagesToThread, 'call', _20 => _20(userId, threadId, [
228
+ await _optionalChain([threadMemory, 'optionalAccess', _16 => _16.addMessagesToThread, 'call', _17 => _17(userId, threadId, [
233
229
  {
234
230
  role: "USER" /* USER */,
235
231
  timestamp: queryStartAt,
@@ -248,4 +244,4 @@ ${_optionalChain([intent, 'optionalAccess', _8 => _8.prompt]) || ""}
248
244
 
249
245
 
250
246
  exports.QueryService = QueryService;
251
- //# sourceMappingURL=chunk-KE7SL3H6.cjs.map
247
+ //# sourceMappingURL=chunk-ZPYMLCQZ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-ZPYMLCQZ.cjs","../../src/services/query.service.ts"],"names":["intent"],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACJA,gCAA2B;AA8BpB,IAAM,aAAA,EAAN,MAAmB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,WAAA,CACC,WAAA,EACA,SAAA,EACA,SAAA,EACA,YAAA,EACA,OAAA,EACC;AACD,IAAA,IAAA,CAAK,YAAA,EAAc,WAAA;AACnB,IAAA,IAAA,CAAK,UAAA,EAAY,SAAA;AACjB,IAAA,IAAA,CAAK,UAAA,EAAY,SAAA;AACjB,IAAA,IAAA,CAAK,aAAA,EAAe,YAAA;AACpB,IAAA,IAAA,CAAK,QAAA,EAAU,OAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAc,gBAAA,CACb,KAAA,EACA,MAAA,EAC8B;AAC9B,IAAA,MAAM,cAAA,EAAgB,IAAA,CAAK,WAAA,CAAY,QAAA,CAAS,CAAA;AAChD,IAAA,MAAM,aAAA,kBAAe,IAAA,mBAAK,YAAA,6BAAc,eAAA,mBAAgB,GAAA;AACxD,IAAA,GAAA,CAAI,CAAC,YAAA,EAAc;AAClB,MAAA,OAAO,KAAA,CAAA;AAAA,IACR;AAGA,IAAA,MAAM,QAAA,EAAU,MAAM,YAAA,CAAa,WAAA,CAAY,CAAA;AAE/C,IAAA,GAAA,CAAI,OAAA,CAAQ,OAAA,IAAW,CAAA,EAAG;AACzB,MAAA,yBAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,iBAAiB,CAAA;AACrC,MAAA,OAAO,KAAA,CAAA;AAAA,IACR;AAEA,IAAA,MAAM,WAAA,EAAa,OAAA,CACjB,GAAA,CAAI,CAACA,OAAAA,EAAAA,GAAW,CAAA,EAAA,EAAKA,OAAAA,CAAO,IAAI,CAAA,EAAA,EAAKA,OAAAA,CAAO,WAAW,CAAA,CAAA;AAOvC,IAAA;AAOT,MAAA;AAGF,MAAA;AAC0B,MAAA;AAEpB,IAAA;AAEQ,IAAA;AAAA;AAAA;AAGX;AAAA;AAAA;AAAA,qFAAA;AAKU,IAAA;AAAA;AAEL;AAAA;AAEW,qBAAA;AAAA;AAAA;AAAA,yFAAA;AAKsB,IAAA;AACxC,MAAA;AACP,MAAA;AACA,IAAA;AAEkD,IAAA;AAC5B,IAAA;AACc,MAAA;AACrC,IAAA;AACyC,IAAA;AACmB,IAAA;AAC/C,IAAA;AACoC,MAAA;AACjD,IAAA;AACO,IAAA;AACR,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBE,EAAA;AAEoB,IAAA;AACmB,SAAA;AAAA;AAEf;AAAA;AAEC;AAAA;AAEN;AAAA,IAAA;AAK4B,IAAA;AACA,IAAA;AAC/C,MAAA;AACA,MAAA;AACgC,MAAA;AAChC,IAAA;AAE4B,IAAA;AACT,IAAA;AACoB,MAAA;AACxC,IAAA;AACoB,IAAA;AAC4B,MAAA;AAChD,IAAA;AAC6D,IAAA;AAE9B,IAAA;AACZ,IAAA;AAEN,IAAA;AACyB,MAAA;AACpC,QAAA;AACA,QAAA;AACD,MAAA;AAE6C,MAAA;AAEd,MAAA;AAEY,MAAA;AACQ,MAAA;AAEpC,MAAA;AACoB,QAAA;AACP,UAAA;AACyC,UAAA;AAElD,UAAA;AAIf,UAAA;AACyB,YAAA;AAGkC,YAAA;AAC1B,YAAA;AACjC,cAAA;AACA,cAAA;AACD,YAAA;AAIC,UAAA;AACiC,YAAA;AACjC,cAAA;AACA,cAAA;AACA,cAAA;AACD,YAAA;AACM,UAAA;AAES,YAAA;AACkC,cAAA;AACjD,YAAA;AACA,YAAA;AACD,UAAA;AAEiD,UAAA;AAEtB,UAAA;AACsB,UAAA;AAClD,QAAA;AACmB,MAAA;AACK,QAAA;AACT,QAAA;AACf,QAAA;AACD,MAAA;AACD,IAAA;AAEoB,IAAA;AACW,MAAA;AACpB,MAAA;AACX,IAAA;AAEO,IAAA;AACR,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAS4D,EAAA;AACrC,IAAA;AAClB,IAAA;AAC6C,MAAA;AACA,MAAA;AAC/C,QAAA;AACc,QAAA;AAAA;AAAA;AAAA,oFAAA;AAId,MAAA;AACkD,MAAA;AACxB,MAAA;AACZ,IAAA;AACgC,MAAA;AAC9C,QAAA;AACA,QAAA;AACA,MAAA;AACM,MAAA;AACR,IAAA;AACD,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBE,EAAA;AAEwB,IAAA;AACK,IAAA;AAC0B,IAAA;AAE1B,IAAA;AAC1B,IAAA;AAEU,IAAA;AAC0C,MAAA;AACjD,IAAA;AACgB,MAAA;AACsB,MAAA;AAI1C,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACoB,QAAA;AACrB,MAAA;AACoD,MAAA;AACtD,IAAA;AAGwD,IAAA;AAGkB,IAAA;AAChB,IAAA;AACzD,MAAA;AACC,QAAA;AACW,QAAA;AAC6B,QAAA;AACzC,MAAA;AACA,MAAA;AACC,QAAA;AACoB,QAAA;AAC8B,QAAA;AACnD,MAAA;AACA,IAAA;AAEiC,IAAA;AACnC,EAAA;AACD;AD9G0F;AACA;AACA;AACA","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-ZPYMLCQZ.cjs","sourcesContent":[null,"import { randomUUID } from \"node:crypto\";\nimport type {\n\tA2AModule,\n\tMCPModule,\n\tMemoryModule,\n\tModelModule,\n} from \"@/modules/index.js\";\nimport type { AinAgentPrompts } from \"@/types/agent.js\";\nimport {\n\ttype Intent,\n\tMessageRole,\n\ttype ThreadMetadata,\n\ttype ThreadObject,\n\ttype ThreadType,\n} from \"@/types/memory.js\";\nimport {\n\ttype IA2ATool,\n\ttype IAgentTool,\n\ttype IMCPTool,\n\tTOOL_PROTOCOL_TYPE,\n} from \"@/types/tool.js\";\nimport { loggers } from \"@/utils/logger.js\";\n\n/**\n * Service for processing user queries through the agent's AI pipeline.\n *\n * Orchestrates the query processing workflow including intent detection,\n * model inference, tool execution, and response generation. Manages\n * conversation context and coordinates between different modules.\n */\nexport class QueryService {\n\tprivate modelModule: ModelModule;\n\tprivate a2aModule?: A2AModule;\n\tprivate mcpModule?: MCPModule;\n\tprivate memoryModule?: MemoryModule;\n\tprivate prompts?: AinAgentPrompts;\n\n\tconstructor(\n\t\tmodelModule: ModelModule,\n\t\ta2aModule?: A2AModule,\n\t\tmcpModule?: MCPModule,\n\t\tmemoryModule?: MemoryModule,\n\t\tprompts?: AinAgentPrompts,\n\t) {\n\t\tthis.modelModule = modelModule;\n\t\tthis.a2aModule = a2aModule;\n\t\tthis.mcpModule = mcpModule;\n\t\tthis.memoryModule = memoryModule;\n\t\tthis.prompts = prompts;\n\t}\n\n\t/**\n\t * Detects the intent from context.\n\t *\n\t * @param query - The user's input query\n\t * @param thread - The thread history\n\t * @returns The detected intent\n\t */\n\tprivate async intentTriggering(\n\t\tquery: string,\n\t\tthread: ThreadObject | undefined,\n\t): Promise<Intent | undefined> {\n\t\tconst modelInstance = this.modelModule.getModel();\n\t\tconst intentMemory = this.memoryModule?.getIntentMemory();\n\t\tif (!intentMemory) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// 인텐트 목록 가져오기\n\t\tconst intents = await intentMemory.listIntents();\n\n\t\tif (intents.length === 0) {\n\t\t\tloggers.intent.warn(\"No intent found\");\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst intentList = intents\n\t\t\t.map((intent) => `- ${intent.name}: ${intent.description}`)\n\t\t\t.join(\"\\n\");\n\n\t\t// Convert session history to a string\n\t\tconst historyMessages = !thread\n\t\t\t? \"\"\n\t\t\t: Object.entries(thread.messages)\n\t\t\t\t\t.sort(([, a], [, b]) => a.timestamp - b.timestamp)\n\t\t\t\t\t.map(([chatId, chat]) => {\n\t\t\t\t\t\tconst role =\n\t\t\t\t\t\t\tchat.role === \"USER\"\n\t\t\t\t\t\t\t\t? \"User\"\n\t\t\t\t\t\t\t\t: chat.role === \"MODEL\"\n\t\t\t\t\t\t\t\t\t? \"Assistant\"\n\t\t\t\t\t\t\t\t\t: \"System\";\n\t\t\t\t\t\tconst content = Array.isArray(chat.content.parts)\n\t\t\t\t\t\t\t? chat.content.parts.join(\" \")\n\t\t\t\t\t\t\t: String(chat.content.parts);\n\t\t\t\t\t\treturn `${role}: \"\"\"${content}\"\"\"`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\\n\");\n\n\t\tconst systemPrompt = `You are an expert in accurately identifying user intentions.\n\nAvailable intent list:\n${intentList}\n\nPlease select and answer only from the above intent list. \nPlease return only the exact intent name without any additional explanations or text.`;\n\n\t\tconst userMessage = `The following is the conversation history with the user:\n\n${historyMessages}\n\nLast user question: \"${query}\"\n\nBased on the above conversation history, please determine what the intention of the last user question is. \nPlease select and answer the most appropriate intent name from the available intent list.`;\n\n\t\tconst messages = modelInstance.generateMessages({\n\t\t\tquery: userMessage,\n\t\t\tsystemPrompt,\n\t\t});\n\n\t\tconst response = await modelInstance.fetch(messages);\n\t\tif (!response.content) {\n\t\t\tthrow new Error(\"No intent detected\");\n\t\t}\n\t\tconst intentName = response.content.trim();\n\t\tconst intent = await intentMemory.getIntentByName(intentName);\n\t\tif (!intent) {\n\t\t\tthrow new Error(`No intent found: ${intentName}`);\n\t\t}\n\t\treturn intent;\n\t}\n\n\t/**\n\t * Fulfills the detected intent by generating a response.\n\t *\n\t * Manages the complete inference loop including:\n\t * - Loading prompts and conversation history\n\t * - Collecting available tools from modules\n\t * - Executing model inference with tool support\n\t * - Processing tool calls iteratively until completion\n\t *\n\t * @param query - The user's input query\n\t * @param threadId - Thread identifier for context\n\t * @param thread - Previous conversation history\n\t * @param intent - Optional detected intent with custom prompt\n\t * @returns Object containing process steps and final response\n\t */\n\tprivate async intentFulfilling(\n\t\tquery: string,\n\t\tthreadId: string,\n\t\tthread?: ThreadObject,\n\t\tintent?: Intent,\n\t) {\n\t\t// 1. Load agent / system prompt from memory\n\t\tconst systemPrompt = `\nToday is ${new Date().toLocaleDateString()}.\n\n${this.prompts?.agent || \"\"}\n\n${this.prompts?.system || \"\"}\n\n${intent?.prompt || \"\"}\n `;\n\t\t// NOTE(haechan@comcom.ai):\n\t\t// When the `intent.llm` is guaranteed to be consistent, it will be used as a parameter for getModel\n\t\t// const model_name = intent?.llm || \"gpt-4o\";\n\t\tconst modelInstance = this.modelModule.getModel();\n\t\tconst messages = modelInstance.generateMessages({\n\t\t\tquery,\n\t\t\tthread,\n\t\t\tsystemPrompt: systemPrompt.trim(),\n\t\t});\n\n\t\tconst tools: IAgentTool[] = [];\n\t\tif (this.mcpModule) {\n\t\t\ttools.push(...this.mcpModule.getTools());\n\t\t}\n\t\tif (this.a2aModule) {\n\t\t\ttools.push(...(await this.a2aModule.getTools()));\n\t\t}\n\t\tconst functions = modelInstance.convertToolsToFunctions(tools);\n\n\t\tconst processList: string[] = [];\n\t\tlet finalMessage = \"\";\n\n\t\twhile (true) {\n\t\t\tconst response = await modelInstance.fetchWithContextMessage(\n\t\t\t\tmessages,\n\t\t\t\tfunctions,\n\t\t\t);\n\n\t\t\tloggers.intent.debug(\"messages\", { messages });\n\n\t\t\tconst { content, toolCalls } = response;\n\n\t\t\tloggers.intent.debug(\"content\", { content });\n\t\t\tloggers.intent.debug(\"tool_calls\", { ...toolCalls });\n\n\t\t\tif (toolCalls) {\n\t\t\t\tfor (const toolCall of toolCalls) {\n\t\t\t\t\tconst toolName = toolCall.name;\n\t\t\t\t\tconst selectedTool = tools.filter((tool) => tool.id === toolName)[0];\n\n\t\t\t\t\tlet toolResult = \"\";\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.mcpModule &&\n\t\t\t\t\t\tselectedTool.protocol === TOOL_PROTOCOL_TYPE.MCP\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst toolArgs = toolCall.arguments as\n\t\t\t\t\t\t\t| { [x: string]: unknown }\n\t\t\t\t\t\t\t| undefined;\n\t\t\t\t\t\tloggers.intent.debug(\"MCP tool call\", { toolName, toolArgs });\n\t\t\t\t\t\ttoolResult = await this.mcpModule.useTool(\n\t\t\t\t\t\t\tselectedTool as IMCPTool,\n\t\t\t\t\t\t\ttoolArgs,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tthis.a2aModule &&\n\t\t\t\t\t\tselectedTool.protocol === TOOL_PROTOCOL_TYPE.A2A\n\t\t\t\t\t) {\n\t\t\t\t\t\ttoolResult = await this.a2aModule.useTool(\n\t\t\t\t\t\t\tselectedTool as IA2ATool,\n\t\t\t\t\t\t\tquery,\n\t\t\t\t\t\t\tthreadId,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Unrecognized tool type. It cannot be happened...\n\t\t\t\t\t\tloggers.intent.warn(\n\t\t\t\t\t\t\t`Unrecognized tool type: ${selectedTool.protocol}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tloggers.intent.debug(\"toolResult\", { toolResult });\n\n\t\t\t\t\tprocessList.push(toolResult);\n\t\t\t\t\tmodelInstance.appendMessages(messages, toolResult);\n\t\t\t\t}\n\t\t\t} else if (content) {\n\t\t\t\tprocessList.push(content);\n\t\t\t\tfinalMessage = content;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tconst botResponse = {\n\t\t\tprocess: processList.join(\"\\n\"),\n\t\t\tresponse: finalMessage,\n\t\t};\n\n\t\treturn botResponse;\n\t}\n\n\t/**\n\t * Generates a title for the conversation based on the query.\n\t *\n\t * @param query - The user's input query\n\t * @returns Promise resolving to a generated title\n\t */\n\n\tprivate async generateTitle(query: string): Promise<string> {\n\t\tconst DEFAULT_TITLE = \"New Chat\";\n\t\ttry {\n\t\t\tconst modelInstance = this.modelModule.getModel();\n\t\t\tconst messages = modelInstance.generateMessages({\n\t\t\t\tquery,\n\t\t\t\tsystemPrompt: `You are a helpful assistant that generates titles for conversations.\n Please analyze the user's query and create a concise title that accurately reflects the conversation's core topic.\n The title must be no more than 5 words long.\n Respond with only the title. Do not include any punctuation or extra explanations.`,\n\t\t\t});\n\t\t\tconst response = await modelInstance.fetch(messages);\n\t\t\treturn response.content || DEFAULT_TITLE;\n\t\t} catch (error) {\n\t\t\tloggers.intent.error(\"Error generating title\", {\n\t\t\t\terror,\n\t\t\t\tquery,\n\t\t\t});\n\t\t\treturn DEFAULT_TITLE;\n\t\t}\n\t}\n\n\t/**\n\t * Main entry point for processing user queries.\n\t *\n\t * Handles the complete query lifecycle:\n\t * 1. Loads or creates thread from memory\n\t * 2. Detects intent from the query\n\t * 3. Fulfills the intent with AI response\n\t * 4. Updates conversation history\n\t *\n\t * @param threadMetadata - Metadata containing type, userId, and optional threadId\n\t * @param threadMetadata.type - The type of thread (e.g., chat, workflow)\n\t * @param threadMetadata.userId - The user's unique identifier\n\t * @param threadMetadata.threadId - Optional thread identifier\n\t * @param query - The user's input query\n\t * @returns Promise resolving to object with content property containing the response\n\t */\n\tpublic async handleQuery(\n\t\tthreadMetadata: {\n\t\t\ttype: ThreadType;\n\t\t\tuserId: string;\n\t\t\tthreadId?: string;\n\t\t},\n\t\tquery: string,\n\t) {\n\t\t// 1. Load thread with threadId\n\t\tconst { type, userId } = threadMetadata;\n\t\tconst queryStartAt = Date.now();\n\t\tconst threadMemory = this.memoryModule?.getThreadMemory();\n\n\t\tlet threadId = threadMetadata.threadId;\n\t\tlet thread: ThreadObject | undefined;\n\n\t\tif (threadId) {\n\t\t\tthread = await threadMemory?.getThread(userId, threadId);\n\t\t} else {\n\t\t\tthreadId = randomUUID();\n\t\t\tconst title = await this.generateTitle(query);\n\n\t\t\tconst metadata =\n\t\t\t\t(await threadMemory?.createThread(type, userId, threadId, title)) ||\n\t\t\t\t({\n\t\t\t\t\ttype,\n\t\t\t\t\tthreadId,\n\t\t\t\t\ttitle,\n\t\t\t\t\tupdatedAt: Date.now(),\n\t\t\t\t} as ThreadMetadata);\n\t\t\tloggers.intent.info(\"Create new thread\", { metadata });\n\t\t}\n\n\t\t// 2. intent triggering\n\t\tconst intent = await this.intentTriggering(query, thread);\n\n\t\t// 3. intent fulfillment\n\t\tconst result = await this.intentFulfilling(query, threadId, thread, intent);\n\t\tawait threadMemory?.addMessagesToThread(userId, threadId, [\n\t\t\t{\n\t\t\t\trole: MessageRole.USER,\n\t\t\t\ttimestamp: queryStartAt,\n\t\t\t\tcontent: { type: \"text\", parts: [query] },\n\t\t\t},\n\t\t\t{\n\t\t\t\trole: MessageRole.MODEL,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\tcontent: { type: \"text\", parts: [result.response] },\n\t\t\t},\n\t\t]);\n\n\t\treturn { content: result.response };\n\t}\n}\n"]}
@@ -0,0 +1,7 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkA2I7D6JWcjs = require('../../chunk-A2I7D6JW.cjs');
4
+
5
+
6
+ exports.ThreadApiController = _chunkA2I7D6JWcjs.ThreadApiController;
7
+ //# sourceMappingURL=threads.api.controller.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/controllers/api/threads.api.controller.cjs"],"names":[],"mappings":"AAAA;AACE;AACF,4DAAiC;AACjC;AACE;AACF,oEAAC","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/controllers/api/threads.api.controller.cjs"}
@@ -3,11 +3,11 @@
3
3
  var _chunkV5RSN2DYcjs = require('../chunk-V5RSN2DY.cjs');
4
4
 
5
5
 
6
- var _chunkKRLUWTLNcjs = require('../chunk-KRLUWTLN.cjs');
6
+ var _chunkA2I7D6JWcjs = require('../chunk-A2I7D6JW.cjs');
7
7
 
8
8
 
9
- var _chunk3J3ORQOGcjs = require('../chunk-3J3ORQOG.cjs');
10
- require('../chunk-DX2JH3FJ.cjs');
9
+ var _chunkVLMHDHXTcjs = require('../chunk-VLMHDHXT.cjs');
10
+ require('../chunk-QHQLU7BI.cjs');
11
11
 
12
12
 
13
13
  var _chunkICFTUZP5cjs = require('../chunk-ICFTUZP5.cjs');
@@ -17,5 +17,5 @@ require('../chunk-466ED5WN.cjs');
17
17
 
18
18
 
19
19
 
20
- exports.A2AController = _chunkICFTUZP5cjs.A2AController; exports.ModelApiController = _chunkV5RSN2DYcjs.ModelApiController; exports.QueryController = _chunk3J3ORQOGcjs.QueryController; exports.ThreadApiController = _chunkKRLUWTLNcjs.ThreadApiController;
20
+ exports.A2AController = _chunkICFTUZP5cjs.A2AController; exports.ModelApiController = _chunkV5RSN2DYcjs.ModelApiController; exports.QueryController = _chunkVLMHDHXTcjs.QueryController; exports.ThreadApiController = _chunkA2I7D6JWcjs.ThreadApiController;
21
21
  //# sourceMappingURL=index.cjs.map
@@ -1,8 +1,8 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunk3J3ORQOGcjs = require('../chunk-3J3ORQOG.cjs');
4
- require('../chunk-DX2JH3FJ.cjs');
3
+ var _chunkVLMHDHXTcjs = require('../chunk-VLMHDHXT.cjs');
4
+ require('../chunk-QHQLU7BI.cjs');
5
5
 
6
6
 
7
- exports.QueryController = _chunk3J3ORQOGcjs.QueryController;
7
+ exports.QueryController = _chunkVLMHDHXTcjs.QueryController;
8
8
  //# sourceMappingURL=query.controller.cjs.map
@@ -1,28 +1,28 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;require('./chunk-SSSDO7PA.cjs');
2
2
 
3
3
 
4
- var _chunkEAK7MP6Xcjs = require('./chunk-EAK7MP6X.cjs');
4
+ var _chunkFRWC3FQ4cjs = require('./chunk-FRWC3FQ4.cjs');
5
5
  require('./chunk-X46GJS7X.cjs');
6
- require('./chunk-BBCZU5VZ.cjs');
6
+ require('./chunk-7PZP7YSA.cjs');
7
7
 
8
8
 
9
- var _chunk344VLDMScjs = require('./chunk-344VLDMS.cjs');
10
- require('./chunk-ZZK4ACTV.cjs');
9
+ var _chunkW5VM75PLcjs = require('./chunk-W5VM75PL.cjs');
10
+ require('./chunk-ZPYMLCQZ.cjs');
11
11
  require('./chunk-V5RSN2DY.cjs');
12
- require('./chunk-KRLUWTLN.cjs');
13
- require('./chunk-3J3ORQOG.cjs');
12
+ require('./chunk-A2I7D6JW.cjs');
13
+ require('./chunk-VLMHDHXT.cjs');
14
14
 
15
15
 
16
- var _chunkLRBRG2DScjs = require('./chunk-LRBRG2DS.cjs');
17
- require('./chunk-DX2JH3FJ.cjs');
16
+ var _chunkE35E4LQYcjs = require('./chunk-E35E4LQY.cjs');
17
+ require('./chunk-QHQLU7BI.cjs');
18
18
 
19
19
 
20
20
  var _chunkNYYEZ4ERcjs = require('./chunk-NYYEZ4ER.cjs');
21
21
 
22
22
 
23
- var _chunkJXKLEQD6cjs = require('./chunk-JXKLEQD6.cjs');
24
- require('./chunk-55IME4BG.cjs');
25
- require('./chunk-KE7SL3H6.cjs');
23
+ var _chunkLMR6B76Vcjs = require('./chunk-LMR6B76V.cjs');
24
+ require('./chunk-OKRBMMK2.cjs');
25
+ require('./chunk-KHD7UAFW.cjs');
26
26
  require('./chunk-ICFTUZP5.cjs');
27
27
  require('./chunk-M4MYRCSF.cjs');
28
28
  require('./chunk-LPXYZH22.cjs');
@@ -578,6 +578,11 @@ var helmet = Object.assign(
578
578
 
579
579
  // src/index.ts
580
580
  var _httpstatuscodes = require('http-status-codes');
581
+
582
+ // package.json
583
+ var version = "0.2.1";
584
+
585
+ // src/index.ts
581
586
  var AINAgent = (_class = class {
582
587
  /** Express application instance */
583
588
 
@@ -599,8 +604,8 @@ var AINAgent = (_class = class {
599
604
  * @param modules.a2aModule - Optional module for A2A protocol support
600
605
  * @param modules.mcpModule - Optional module for MCP server connections
601
606
  * @param modules.memoryModule - Optional module for memory management
602
- * @param modules.folModule - Optional module for fol management
603
607
  * @param authScheme - Optional authentication middleware for securing endpoints
608
+ * @param allowStream - Enable streaming query endpoints (default: false)
604
609
  */
605
610
  constructor(manifest, modules, authScheme, allowStream = false) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);
606
611
  this.app = _express2.default.call(void 0, );
@@ -656,7 +661,8 @@ var AINAgent = (_class = class {
656
661
  return {
657
662
  name: this.manifest.name,
658
663
  description: this.manifest.description,
659
- version: this.manifest.version,
664
+ version,
665
+ protocolVersion: "0.3.0",
660
666
  url: _url.toString(),
661
667
  capabilities: {
662
668
  streaming: true,
@@ -685,33 +691,41 @@ var AINAgent = (_class = class {
685
691
  * - /a2a/* - A2A protocol endpoints (only if valid URL is configured)
686
692
  */
687
693
  __init2() {this.initializeRoutes = (allowStream = false) => {
688
- const auth = new (0, _chunkLRBRG2DScjs.AuthMiddleware)(this.authScheme);
694
+ const auth = new (0, _chunkE35E4LQYcjs.AuthMiddleware)(this.authScheme);
689
695
  this.app.get("/", async (_, res) => {
690
- const { name, description, version } = this.manifest;
696
+ const { name, description } = this.manifest;
691
697
  res.status(200).send(
692
698
  `
693
- \u26A1 AIN Agent: ${name} v${version}<br/>
699
+ \u26A1 AIN Agent: ${name} with ain-adk v${version}<br/>
694
700
  ${description}<br/><br/>
695
701
  Agent status: Online and ready.
696
702
  `.trim()
697
703
  );
698
704
  });
699
- this.app.get("/.well-known/agent.json", async (_, res) => {
700
- try {
701
- const card = this.generateAgentCard();
702
- res.json(card);
703
- } catch (_error) {
704
- res.status(_httpstatuscodes.StatusCodes.NOT_FOUND).send("No agent card");
705
+ this.app.get(
706
+ [
707
+ "/.well-known/agent.json",
708
+ // ~v0.2.0
709
+ "/.well-known/agent-card.json"
710
+ // v0.3.0~
711
+ ],
712
+ async (_, res) => {
713
+ try {
714
+ const card = this.generateAgentCard();
715
+ res.json(card);
716
+ } catch (_error) {
717
+ res.status(_httpstatuscodes.StatusCodes.NOT_FOUND).send("No agent card");
718
+ }
705
719
  }
706
- });
720
+ );
707
721
  this.app.use(
708
722
  "/query",
709
723
  auth.middleware(),
710
- _chunk344VLDMScjs.createQueryRouter.call(void 0, this, allowStream)
724
+ _chunkW5VM75PLcjs.createQueryRouter.call(void 0, this, allowStream)
711
725
  );
712
- this.app.use("/api", auth.middleware(), _chunkEAK7MP6Xcjs.createApiRouter.call(void 0, this));
726
+ this.app.use("/api", auth.middleware(), _chunkFRWC3FQ4cjs.createApiRouter.call(void 0, this));
713
727
  if (this.isValidUrl(this.manifest.url)) {
714
- this.app.use("/a2a", _chunkJXKLEQD6cjs.createA2ARouter.call(void 0, this));
728
+ this.app.use("/a2a", _chunkLMR6B76Vcjs.createA2ARouter.call(void 0, this));
715
729
  }
716
730
  }}
717
731
  /**
@@ -720,10 +734,35 @@ var AINAgent = (_class = class {
720
734
  * @param port - The port number to listen on
721
735
  */
722
736
  async start(port) {
723
- await _optionalChain([this, 'access', _4 => _4.memoryModule, 'optionalAccess', _5 => _5.initialize, 'call', _6 => _6()]);
724
- this.app.listen(port, () => {
737
+ const server = this.app.listen(port, async () => {
738
+ await _optionalChain([this, 'access', _4 => _4.memoryModule, 'optionalAccess', _5 => _5.initialize, 'call', _6 => _6()]);
739
+ await _optionalChain([this, 'access', _7 => _7.mcpModule, 'optionalAccess', _8 => _8.connectToServers, 'call', _9 => _9()]);
725
740
  _chunk466ED5WNcjs.loggers.agent.info(`AINAgent is running on port ${port}`);
726
741
  });
742
+ const gracefulShutdown = async (signal) => {
743
+ _chunk466ED5WNcjs.loggers.agent.info(`Received ${signal}, starting graceful shutdown...`);
744
+ server.close(() => {
745
+ _chunk466ED5WNcjs.loggers.agent.info("HTTP server closed");
746
+ });
747
+ try {
748
+ if (this.mcpModule) {
749
+ _chunk466ED5WNcjs.loggers.agent.info("Disconnecting from MCP servers...");
750
+ await this.mcpModule.cleanup();
751
+ }
752
+ if (this.memoryModule) {
753
+ _chunk466ED5WNcjs.loggers.agent.info("Closing memory module...");
754
+ await this.memoryModule.shutdown();
755
+ }
756
+ _chunk466ED5WNcjs.loggers.agent.info("Graceful shutdown completed");
757
+ process.exit(0);
758
+ } catch (error) {
759
+ _chunk466ED5WNcjs.loggers.agent.error("Error during graceful shutdown:", error);
760
+ process.exit(1);
761
+ }
762
+ };
763
+ process.on("SIGTERM", () => gracefulShutdown("SIGTERM"));
764
+ process.on("SIGINT", () => gracefulShutdown("SIGINT"));
765
+ process.on("SIGHUP", () => gracefulShutdown("SIGHUP"));
727
766
  }
728
767
  }, _class);
729
768
 
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/index.cjs","../../src/index.ts","../../node_modules/helmet/index.mjs"],"names":[],"mappings":"AAAA,6zBAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;AC/BA,wEAAiB;AACjB,oFAAuC;ADiCvC;AACA;AEpCA,IAAM,6BAAA,EAA+B,MAAA,CAAO,8BAA8B,CAAA;AAC1E,IAAM,iBAAA,kBAAmB,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,MAAA,EAAQ,gBAAA,EAAkB,eAAA,EAAiB,0BAAA,EAA4B,eAAA,EAAiB,aAAA,EAAe,eAAA,EAAiB,kBAAkB,CAAC,CAAA;AACrL,IAAM,qBAAA,EAAuB,CAAA,EAAA,GAAA,CAAO;AAAA,EACnC,aAAA,EAAe,CAAC,QAAQ,CAAA;AAAA,EACxB,UAAA,EAAY,CAAC,QAAQ,CAAA;AAAA,EACrB,UAAA,EAAY,CAAC,QAAA,EAAU,QAAA,EAAU,OAAO,CAAA;AAAA,EACxC,aAAA,EAAe,CAAC,QAAQ,CAAA;AAAA,EACxB,iBAAA,EAAmB,CAAC,QAAQ,CAAA;AAAA,EAC5B,SAAA,EAAW,CAAC,QAAA,EAAU,OAAO,CAAA;AAAA,EAC7B,YAAA,EAAc,CAAC,QAAQ,CAAA;AAAA,EACvB,YAAA,EAAc,CAAC,QAAQ,CAAA;AAAA,EACvB,iBAAA,EAAmB,CAAC,QAAQ,CAAA;AAAA,EAC5B,WAAA,EAAa,CAAC,QAAA,EAAU,QAAA,EAAU,iBAAiB,CAAA;AAAA,EACnD,2BAAA,EAA6B,CAAC;AAC/B,CAAA,CAAA;AACA,IAAM,QAAA,EAAU,CAAA,GAAA,EAAA,GAAO,GAAA,CAAI,OAAA,CAAQ,QAAA,EAAU,CAAA,aAAA,EAAA,GAAiB,IAAA,EAAM,aAAA,CAAc,WAAA,CAAY,CAAC,CAAA;AAC/F,IAAM,4BAAA,EAA8B,CAAC,aAAA,EAAe,cAAA,EAAA,GAAmB;AACtE,EAAA,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,cAAc,CAAA,EAAG;AAC/B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gEAAA,EAAmE,IAAA,CAAK,SAAA,CAAU,aAAa,CAAC,CAAA,CAAA;AACjH,EAAA;AACD;AACiF;AACiC,EAAA;AACA,IAAA;AACjH,EAAA;AACD;AACsC;AACU,EAAA;AAC6B,EAAA;AACrD,EAAA;AACY,EAAA;AACU,EAAA;AACC,EAAA;AACQ,IAAA;AACpD,MAAA;AACD,IAAA;AAC6E,IAAA;AACkC,MAAA;AAC/G,IAAA;AAC8C,IAAA;AACH,IAAA;AAC+D,MAAA;AAC1G,IAAA;AACoC,IAAA;AACoB,IAAA;AACpD,IAAA;AAC4B,IAAA;AACM,MAAA;AACpB,QAAA;AACjB,MAAA;AAC8C,MAAA;AAC9C,MAAA;AACiD,IAAA;AACd,MAAA;AACL,IAAA;AACiF,MAAA;AACjD,IAAA;AACzB,MAAA;AACU,QAAA;AAC9C,QAAA;AACM,MAAA;AACoF,QAAA;AAC3F,MAAA;AACM,IAAA;AACW,MAAA;AAClB,IAAA;AACsC,IAAA;AACJ,MAAA;AACiB,MAAA;AACK,MAAA;AACxD,IAAA;AACwC,IAAA;AACzC,EAAA;AACiB,EAAA;AAC6E,IAAA;AACM,MAAA;AAC3C,QAAA;AACvD,MAAA;AACA,IAAA;AACF,EAAA;AACkB,EAAA;AACiF,IAAA;AACnG,EAAA;AACoF,EAAA;AACnE,IAAA;AACjB,EAAA;AACO,EAAA;AACR;AACwD;AACvC,EAAA;AACuD,EAAA;AACjD,IAAA;AACoB,IAAA;AACL,MAAA;AACC,QAAA;AACuB,QAAA;AAClC,QAAA;AAClB,MAAA;AACkB,QAAA;AACzB,MAAA;AACD,IAAA;AACoB,IAAA;AACsC,MAAA;AACV,MAAA;AACzC,IAAA;AACmB,MAAA;AAC1B,IAAA;AACD,EAAA;AACsB,EAAA;AACvB;AAC2E;AACM,EAAA;AACxB,EAAA;AACQ,EAAA;AACH,IAAA;AAC/B,IAAA;AACjB,MAAA;AACL,IAAA;AAC0B,MAAA;AAC3B,MAAA;AACN,IAAA;AACD,EAAA;AACD;AAC6C;AACQ;AAE+B;AACpB;AAC3B,EAAA;AAC5B,IAAA;AACD,EAAA;AAC8F,IAAA;AACrG,EAAA;AACD;AACiD;AACO,EAAA;AACc,EAAA;AACX,IAAA;AACpD,IAAA;AACN,EAAA;AACD;AAE6F;AAC9B;AAC1B,EAAA;AAC5B,IAAA;AACD,EAAA;AAC4F,IAAA;AACnG,EAAA;AACD;AAC+C;AACS,EAAA;AACY,EAAA;AACX,IAAA;AAClD,IAAA;AACN,EAAA;AACD;AAE6E;AACd;AAC5B,EAAA;AAC1B,IAAA;AACD,EAAA;AAC8F,IAAA;AACrG,EAAA;AACD;AACiD;AACO,EAAA;AACc,EAAA;AACX,IAAA;AACpD,IAAA;AACN,EAAA;AACD;AAE8B;AACiC,EAAA;AACnB,IAAA;AACrC,IAAA;AACN,EAAA;AACD;AAEsG;AACrC;AACT,EAAA;AAC9B,EAAA;AACmC,IAAA;AAC5D,EAAA;AAC2B,EAAA;AACH,EAAA;AACS,IAAA;AAC+D,MAAA;AAC7D,IAAA;AAC2D,MAAA;AAC7F,IAAA;AACoB,IAAA;AACpB,EAAA;AACqB,EAAA;AACvB;AACsC;AACkB,EAAA;AACG,EAAA;AACb,IAAA;AACvC,IAAA;AACN,EAAA;AACD;AAEwC;AACM;AACH,EAAA;AAClB,IAAA;AACjB,EAAA;AAC6D,IAAA;AACpE,EAAA;AACD;AAC8C;AACpB,EAAA;AACR,IAAA;AACjB,EAAA;AACoC,EAAA;AACnB,IAAA;AACjB,EAAA;AAC4D,EAAA;AACc,EAAA;AACtC,IAAA;AACpC,EAAA;AACqB,EAAA;AACK,IAAA;AAC1B,EAAA;AAC2B,EAAA;AAC5B;AAC+C;AACS,EAAA;AACY,EAAA;AACZ,IAAA;AACjD,IAAA;AACN,EAAA;AACD;AAE+B;AACiC,EAAA;AACb,IAAA;AAC5C,IAAA;AACN,EAAA;AACD;AAE2C;AACC,EAAA;AACoB,EAAA;AACX,IAAA;AAC9C,IAAA;AACN,EAAA;AACD;AAE4B;AACiC,EAAA;AACf,IAAA;AACvC,IAAA;AACN,EAAA;AACD;AAE8D;AACgB,EAAA;AACnD,EAAA;AACpB,IAAA;AACG,MAAA;AACH,IAAA;AACA,IAAA;AACG,MAAA;AACR,IAAA;AACuF,MAAA;AACxF,EAAA;AACD;AACqC;AACmB,EAAA;AACE,EAAA;AACZ,IAAA;AACvC,IAAA;AACN,EAAA;AACD;AAE4F;AAC3B;AACT,EAAA;AAC/C,IAAA;AACD,EAAA;AACmG,IAAA;AAC1G,EAAA;AACD;AACqD;AACC,EAAA;AACoB,EAAA;AACV,IAAA;AACzD,IAAA;AACN,EAAA;AACD;AAEsB;AACiC,EAAA;AACtB,IAAA;AAC1B,IAAA;AACN,EAAA;AACD;AAE0B;AACiC,EAAA;AACpB,IAAA;AAChC,IAAA;AACN,EAAA;AACD;AAEoD;AACnC,EAAA;AACuB,EAAA;AACjC,IAAA;AACA,IAAA;AAC+B,MAAA;AACnC,MAAA;AACI,IAAA;AACJ,MAAA;AACD,IAAA;AACiE,MAAA;AAChE,MAAA;AACF,EAAA;AAC2C,EAAA;AACrC,IAAA;AACA,IAAA;AACJ,MAAA;AACI,IAAA;AACmC,MAAA;AACvC,MAAA;AACD,IAAA;AACyE,MAAA;AACxE,MAAA;AACF,EAAA;AACyC,EAAA;AACnC,IAAA;AACA,IAAA;AACiC,MAAA;AACrC,MAAA;AACI,IAAA;AACJ,MAAA;AACD,IAAA;AACqE,MAAA;AACpE,MAAA;AACF,EAAA;AAC2C,EAAA;AACrC,IAAA;AACA,IAAA;AACmC,MAAA;AACvC,MAAA;AACI,IAAA;AACJ,MAAA;AACD,IAAA;AACyE,MAAA;AACxE,MAAA;AACF,EAAA;AACoC,EAAA;AAC9B,IAAA;AACA,IAAA;AAC4B,MAAA;AAChC,MAAA;AACI,IAAA;AACJ,MAAA;AACD,IAAA;AACwG,MAAA;AACvE,MAAA;AAChC,MAAA;AACF,EAAA;AACgC,EAAA;AAC1B,IAAA;AACA,IAAA;AACwB,MAAA;AAC5B,MAAA;AACI,IAAA;AACJ,MAAA;AACD,IAAA;AACmD,MAAA;AAClD,MAAA;AACF,EAAA;AAC+D,EAAA;AACgD,IAAA;AAC/G,EAAA;AACiF,EAAA;AAC1C,EAAA;AACjC,IAAA;AACA,IAAA;AACiC,MAAA;AACrC,MAAA;AACI,IAAA;AACJ,MAAA;AACD,IAAA;AACmE,MAAA;AAClE,MAAA;AACF,EAAA;AAC8D,EAAA;AACiD,IAAA;AAC/G,EAAA;AACyE,EAAA;AACtC,EAAA;AAC7B,IAAA;AACA,IAAA;AAC6B,MAAA;AACjC,MAAA;AACI,IAAA;AACJ,MAAA;AACD,IAAA;AAC0G,MAAA;AACxE,MAAA;AACjC,MAAA;AACF,EAAA;AACyE,EAAA;AACxD,IAAA;AACjB,EAAA;AACyE,EAAA;AACtC,EAAA;AAC7B,IAAA;AACA,IAAA;AAC6B,MAAA;AACjC,MAAA;AACI,IAAA;AACJ,MAAA;AACD,IAAA;AAC2D,MAAA;AAC1D,MAAA;AACF,EAAA;AAC4D,EAAA;AACgD,IAAA;AAC5G,EAAA;AACmE,EAAA;AACnC,EAAA;AAC1B,IAAA;AACA,IAAA;AAC0B,MAAA;AAC9B,MAAA;AACI,IAAA;AACJ,MAAA;AACD,IAAA;AACsG,MAAA;AACvE,MAAA;AAC9B,MAAA;AACF,EAAA;AAC2D,EAAA;AACgD,IAAA;AAC3G,EAAA;AAC6D,EAAA;AAChC,EAAA;AACvB,IAAA;AACA,IAAA;AACuB,MAAA;AAC3B,MAAA;AACI,IAAA;AACJ,MAAA;AACD,IAAA;AAC+C,MAAA;AAC9C,MAAA;AACF,EAAA;AAC6F,EAAA;AAC5E,IAAA;AACjB,EAAA;AAC6F,EAAA;AAChD,EAAA;AACvC,IAAA;AACA,IAAA;AACuC,MAAA;AAC3C,MAAA;AACI,IAAA;AACJ,MAAA;AACD,IAAA;AAC+E,MAAA;AAC9E,MAAA;AACF,EAAA;AAC2D,EAAA;AACgD,IAAA;AAC3G,EAAA;AACuD,EAAA;AAC7B,EAAA;AACpB,IAAA;AACA,IAAA;AACoB,MAAA;AACxB,MAAA;AACI,IAAA;AACJ,MAAA;AACD,IAAA;AACgG,MAAA;AACvE,MAAA;AACxB,MAAA;AACF,EAAA;AAC2D,EAAA;AACgD,IAAA;AAC3G,EAAA;AAC+D,EAAA;AACjC,EAAA;AACxB,IAAA;AACA,IAAA;AACwB,MAAA;AAC5B,MAAA;AACI,IAAA;AACJ,MAAA;AACD,IAAA;AACoG,MAAA;AACvE,MAAA;AAC5B,MAAA;AACF,EAAA;AACO,EAAA;AACR;AACsB;AACS,EAAA;AAIwB,IAAA;AACpC,MAAA;AACjB,IAAA;AACqE,IAAA;AACpB,IAAA;AAC1B,MAAA;AACO,MAAA;AACnB,QAAA;AACA,UAAA;AACR,UAAA;AACD,QAAA;AAC8D,QAAA;AACtC,QAAA;AACvB,UAAA;AACyC,UAAA;AACnC,QAAA;AACD,UAAA;AACN,QAAA;AACE,MAAA;AACJ,IAAA;AACD,EAAA;AACA,EAAA;AACC,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AAAA;AAEoB,IAAA;AACT,IAAA;AACmB,IAAA;AACpB,IAAA;AACD,IAAA;AACG,IAAA;AACG,IAAA;AACT,IAAA;AACP,EAAA;AACD;AFqBqH;AACA;AC9jBzF;AAqCN;AAAA;AAEd,EAAA;AAAA;AAGA,EAAA;AAAA;AAGA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AAAA;AAGA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBL,EAAA;AACkB,IAAA;AAGH,IAAA;AAGW,IAAA;AACF,IAAA;AACA,IAAA;AACG,IAAA;AAEV,IAAA;AAES,IAAA;AACM,IAAA;AACL,IAAA;AAC7B,EAAA;AAAA;AAAA;AAAA;AAAA;AAMsC,EAAA;AAChB,IAAA;AACF,IAAA;AACyB,IAAA;AACsB,IAAA;AACnE,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ2D,EAAA;AAC1C,IAAA;AACR,MAAA;AACR,IAAA;AAEI,IAAA;AAC0B,MAAA;AACuB,MAAA;AACpC,IAAA;AACT,MAAA;AACR,IAAA;AACD,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW4C,iBAAA;AACC,IAAA;AAC5B,IAAA;AAET,IAAA;AACc,MAAA;AACO,MAAA;AACJ,MAAA;AACJ,MAAA;AACL,MAAA;AACF,QAAA;AAAA;AACQ,QAAA;AAAA;AACK,QAAA;AAAA;AACzB,MAAA;AAC0B,MAAA;AACgB,MAAA;AAAA;AACjC,MAAA;AAC0B,MAAA;AACpC,IAAA;AACD,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAa0D,kBAAA;AACV,IAAA;AAED,IAAA;AACD,MAAA;AAC5B,MAAA;AACf,QAAA;AACmC,0BAAA;AAClB,QAAA;AAAA;AAER,MAAA;AACV,MAAA;AACA,IAAA;AAEmE,IAAA;AAC/D,MAAA;AACiC,QAAA;AACvB,QAAA;AACG,MAAA;AACsC,QAAA;AACvD,MAAA;AACA,IAAA;AAEQ,IAAA;AACR,MAAA;AACgB,MAAA;AACmB,MAAA;AACpC,IAAA;AAC6D,IAAA;AAErB,IAAA;AACG,MAAA;AAC3C,IAAA;AACD,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOgD,EAAA;AACX,IAAA;AACR,IAAA;AAC6B,MAAA;AACxD,IAAA;AACF,EAAA;AACD;ADigBqH;AACA;AACA","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/index.cjs","sourcesContent":[null,"import type { AgentCard } from \"@a2a-js/sdk\";\nimport cors from \"cors\";\nimport express, { type Response } from \"express\";\nimport helmet from \"helmet\";\nimport { StatusCodes } from \"http-status-codes\";\nimport { loggers } from \"@/utils/logger\";\nimport { AuthMiddleware } from \"./middlewares/auth.middleware\";\nimport { errorMiddleware } from \"./middlewares/error.middleware\";\nimport type {\n\tA2AModule,\n\tBaseAuth,\n\tMCPModule,\n\tMemoryModule,\n\tModelModule,\n} from \"./modules\";\nimport { createA2ARouter, createApiRouter, createQueryRouter } from \"./routes\";\nimport type { AinAgentManifest } from \"./types/agent\";\n\n/**\n * Main class for AI Network Agent Development Kit (AIN-ADK).\n *\n * AINAgent orchestrates all modules and provides an Express server for handling\n * agent interactions through both standard query endpoints and A2A protocol endpoints.\n *\n * @example\n * ```typescript\n * const manifest = {\n * name: \"MyAgent\",\n * description: \"An example AI agent\",\n * version: \"1.0.0\"\n * };\n *\n * const agent = new AINAgent(manifest, {\n * modelModule: new ModelModule(),\n * a2aModule: new A2AModule(),\n * mcpModule: new MCPModule()\n * });\n *\n * agent.start(3000);\n * ```\n */\nexport class AINAgent {\n\t/** Express application instance */\n\tpublic app: express.Application;\n\n\t/** Agent manifest containing metadata and configuration */\n\tpublic manifest: AinAgentManifest;\n\n\t/** Modules */\n\tpublic modelModule: ModelModule;\n\tpublic a2aModule?: A2AModule;\n\tpublic mcpModule?: MCPModule;\n\tpublic memoryModule?: MemoryModule;\n\n\t/** Optional authentication scheme for securing endpoints */\n\tpublic authScheme: BaseAuth;\n\n\t/**\n\t * Creates a new AINAgent instance.\n\t *\n\t * @param manifest - Agent manifest containing name, description, version, and optional URL\n\t * @param modules - Required and optional modules for the agent\n\t * @param modules.modelModule - Required module for AI model integrations\n\t * @param modules.a2aModule - Optional module for A2A protocol support\n\t * @param modules.mcpModule - Optional module for MCP server connections\n\t * @param modules.memoryModule - Optional module for memory management\n\t * @param modules.folModule - Optional module for fol management\n\t * @param authScheme - Optional authentication middleware for securing endpoints\n\t */\n\tconstructor(\n\t\tmanifest: AinAgentManifest,\n\t\tmodules: {\n\t\t\tmodelModule: ModelModule;\n\t\t\ta2aModule?: A2AModule;\n\t\t\tmcpModule?: MCPModule;\n\t\t\tmemoryModule?: MemoryModule;\n\t\t},\n\t\tauthScheme: BaseAuth,\n\t\tallowStream = false,\n\t) {\n\t\tthis.app = express();\n\n\t\t// Set manifest\n\t\tthis.manifest = manifest;\n\n\t\t// Set modules\n\t\tthis.modelModule = modules.modelModule;\n\t\tthis.a2aModule = modules.a2aModule;\n\t\tthis.mcpModule = modules.mcpModule;\n\t\tthis.memoryModule = modules.memoryModule;\n\n\t\tthis.authScheme = authScheme;\n\n\t\tthis.initializeMiddlewares();\n\t\tthis.initializeRoutes(allowStream);\n\t\tthis.app.use(errorMiddleware);\n\t}\n\n\t/**\n\t * Initializes Express middlewares for security, CORS, and body parsing.\n\t * Also applies authentication middleware if configured.\n\t */\n\tprivate initializeMiddlewares(): void {\n\t\tthis.app.use(helmet());\n\t\tthis.app.use(cors());\n\t\tthis.app.use(express.json({ limit: \"25mb\" }));\n\t\tthis.app.use(express.urlencoded({ limit: \"25mb\", extended: true }));\n\t}\n\n\t/**\n\t * Validates if a string is a valid HTTP or HTTPS URL.\n\t *\n\t * @param urlString - The URL string to validate\n\t * @returns true if the URL is valid HTTP/HTTPS, false otherwise\n\t */\n\tprivate isValidUrl(urlString: string | undefined): boolean {\n\t\tif (!urlString) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\tconst url = new URL(urlString);\n\t\t\treturn url.protocol === \"http:\" || url.protocol === \"https:\";\n\t\t} catch (_error) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Generates an A2A protocol agent card for discovery.\n\t *\n\t * The agent card contains metadata about the agent's capabilities,\n\t * supported input/output modes, and connection information.\n\t *\n\t * @returns AgentCard object with agent metadata and capabilities\n\t * @throws Error if manifest URL is invalid or missing\n\t */\n\tpublic generateAgentCard = (): AgentCard => {\n\t\tconst _url = new URL(this.manifest.url || \"\");\n\t\t_url.pathname = \"a2a\";\n\n\t\treturn {\n\t\t\tname: this.manifest.name,\n\t\t\tdescription: this.manifest.description,\n\t\t\tversion: this.manifest.version,\n\t\t\turl: _url.toString(),\n\t\t\tcapabilities: {\n\t\t\t\tstreaming: true, // The new framework supports streaming\n\t\t\t\tpushNotifications: false, // Assuming not implemented for this agent yet\n\t\t\t\tstateTransitionHistory: true, // Agent uses history\n\t\t\t},\n\t\t\tdefaultInputModes: [\"text\"],\n\t\t\tdefaultOutputModes: [\"text\", \"task-status\"], // task-status is a common output mode\n\t\t\tskills: [],\n\t\t\tsupportsAuthenticatedExtendedCard: false,\n\t\t};\n\t};\n\n\t/**\n\t * Initializes all HTTP routes including health check, agent discovery,\n\t * query endpoints, and optional A2A endpoints.\n\t *\n\t * Routes initialized:\n\t * - GET / - Health check endpoint\n\t * - GET /.well-known/agent.json - Agent card discovery endpoint\n\t * - /query/* - Query processing endpoints\n\t * - /api/* - API endpoints for agent management\n\t * - /a2a/* - A2A protocol endpoints (only if valid URL is configured)\n\t */\n\tprivate initializeRoutes = (allowStream = false): void => {\n\t\tconst auth = new AuthMiddleware(this.authScheme);\n\n\t\tthis.app.get(\"/\", async (_, res: Response) => {\n\t\t\tconst { name, description, version } = this.manifest;\n\t\t\tres.status(200).send(\n\t\t\t\t`\n ⚡ AIN Agent: ${name} v${version}<br/>\n ${description}<br/><br/>\n Agent status: Online and ready.\n `.trim(),\n\t\t\t);\n\t\t});\n\n\t\tthis.app.get(\"/.well-known/agent.json\", async (_, res: Response) => {\n\t\t\ttry {\n\t\t\t\tconst card = this.generateAgentCard();\n\t\t\t\tres.json(card);\n\t\t\t} catch (_error) {\n\t\t\t\tres.status(StatusCodes.NOT_FOUND).send(\"No agent card\");\n\t\t\t}\n\t\t});\n\n\t\tthis.app.use(\n\t\t\t\"/query\",\n\t\t\tauth.middleware(),\n\t\t\tcreateQueryRouter(this, allowStream),\n\t\t);\n\t\tthis.app.use(\"/api\", auth.middleware(), createApiRouter(this));\n\n\t\tif (this.isValidUrl(this.manifest.url)) {\n\t\t\tthis.app.use(\"/a2a\", createA2ARouter(this));\n\t\t}\n\t};\n\n\t/**\n\t * Starts the Express server on the specified port.\n\t *\n\t * @param port - The port number to listen on\n\t */\n\tpublic async start(port: number): Promise<void> {\n\t\tawait this.memoryModule?.initialize();\n\t\tthis.app.listen(port, () => {\n\t\t\tloggers.agent.info(`AINAgent is running on port ${port}`);\n\t\t});\n\t}\n}\n","const dangerouslyDisableDefaultSrc = Symbol(\"dangerouslyDisableDefaultSrc\")\nconst SHOULD_BE_QUOTED = new Set([\"none\", \"self\", \"strict-dynamic\", \"report-sample\", \"inline-speculation-rules\", \"unsafe-inline\", \"unsafe-eval\", \"unsafe-hashes\", \"wasm-unsafe-eval\"])\nconst getDefaultDirectives = () => ({\n\t\"default-src\": [\"'self'\"],\n\t\"base-uri\": [\"'self'\"],\n\t\"font-src\": [\"'self'\", \"https:\", \"data:\"],\n\t\"form-action\": [\"'self'\"],\n\t\"frame-ancestors\": [\"'self'\"],\n\t\"img-src\": [\"'self'\", \"data:\"],\n\t\"object-src\": [\"'none'\"],\n\t\"script-src\": [\"'self'\"],\n\t\"script-src-attr\": [\"'none'\"],\n\t\"style-src\": [\"'self'\", \"https:\", \"'unsafe-inline'\"],\n\t\"upgrade-insecure-requests\": []\n})\nconst dashify = str => str.replace(/[A-Z]/g, capitalLetter => \"-\" + capitalLetter.toLowerCase())\nconst assertDirectiveValueIsValid = (directiveName, directiveValue) => {\n\tif (/;|,/.test(directiveValue)) {\n\t\tthrow new Error(`Content-Security-Policy received an invalid directive value for ${JSON.stringify(directiveName)}`)\n\t}\n}\nconst assertDirectiveValueEntryIsValid = (directiveName, directiveValueEntry) => {\n\tif (SHOULD_BE_QUOTED.has(directiveValueEntry) || directiveValueEntry.startsWith(\"nonce-\") || directiveValueEntry.startsWith(\"sha256-\") || directiveValueEntry.startsWith(\"sha384-\") || directiveValueEntry.startsWith(\"sha512-\")) {\n\t\tthrow new Error(`Content-Security-Policy received an invalid directive value for ${JSON.stringify(directiveName)}. ${JSON.stringify(directiveValueEntry)} should be quoted`)\n\t}\n}\nfunction normalizeDirectives(options) {\n\tconst defaultDirectives = getDefaultDirectives()\n\tconst {useDefaults = true, directives: rawDirectives = defaultDirectives} = options\n\tconst result = new Map()\n\tconst directiveNamesSeen = new Set()\n\tconst directivesExplicitlyDisabled = new Set()\n\tfor (const rawDirectiveName in rawDirectives) {\n\t\tif (!Object.hasOwn(rawDirectives, rawDirectiveName)) {\n\t\t\tcontinue\n\t\t}\n\t\tif (rawDirectiveName.length === 0 || /[^a-zA-Z0-9-]/.test(rawDirectiveName)) {\n\t\t\tthrow new Error(`Content-Security-Policy received an invalid directive name ${JSON.stringify(rawDirectiveName)}`)\n\t\t}\n\t\tconst directiveName = dashify(rawDirectiveName)\n\t\tif (directiveNamesSeen.has(directiveName)) {\n\t\t\tthrow new Error(`Content-Security-Policy received a duplicate directive ${JSON.stringify(directiveName)}`)\n\t\t}\n\t\tdirectiveNamesSeen.add(directiveName)\n\t\tconst rawDirectiveValue = rawDirectives[rawDirectiveName]\n\t\tlet directiveValue\n\t\tif (rawDirectiveValue === null) {\n\t\t\tif (directiveName === \"default-src\") {\n\t\t\t\tthrow new Error(\"Content-Security-Policy needs a default-src but it was set to `null`. If you really want to disable it, set it to `contentSecurityPolicy.dangerouslyDisableDefaultSrc`.\")\n\t\t\t}\n\t\t\tdirectivesExplicitlyDisabled.add(directiveName)\n\t\t\tcontinue\n\t\t} else if (typeof rawDirectiveValue === \"string\") {\n\t\t\tdirectiveValue = [rawDirectiveValue]\n\t\t} else if (!rawDirectiveValue) {\n\t\t\tthrow new Error(`Content-Security-Policy received an invalid directive value for ${JSON.stringify(directiveName)}`)\n\t\t} else if (rawDirectiveValue === dangerouslyDisableDefaultSrc) {\n\t\t\tif (directiveName === \"default-src\") {\n\t\t\t\tdirectivesExplicitlyDisabled.add(\"default-src\")\n\t\t\t\tcontinue\n\t\t\t} else {\n\t\t\t\tthrow new Error(`Content-Security-Policy: tried to disable ${JSON.stringify(directiveName)} as if it were default-src; simply omit the key`)\n\t\t\t}\n\t\t} else {\n\t\t\tdirectiveValue = rawDirectiveValue\n\t\t}\n\t\tfor (const element of directiveValue) {\n\t\t\tif (typeof element !== \"string\") continue\n\t\t\tassertDirectiveValueIsValid(directiveName, element)\n\t\t\tassertDirectiveValueEntryIsValid(directiveName, element)\n\t\t}\n\t\tresult.set(directiveName, directiveValue)\n\t}\n\tif (useDefaults) {\n\t\tObject.entries(defaultDirectives).forEach(([defaultDirectiveName, defaultDirectiveValue]) => {\n\t\t\tif (!result.has(defaultDirectiveName) && !directivesExplicitlyDisabled.has(defaultDirectiveName)) {\n\t\t\t\tresult.set(defaultDirectiveName, defaultDirectiveValue)\n\t\t\t}\n\t\t})\n\t}\n\tif (!result.size) {\n\t\tthrow new Error(\"Content-Security-Policy has no directives. Either set some or disable the header\")\n\t}\n\tif (!result.has(\"default-src\") && !directivesExplicitlyDisabled.has(\"default-src\")) {\n\t\tthrow new Error(\"Content-Security-Policy needs a default-src but none was provided. If you really want to disable it, set it to `contentSecurityPolicy.dangerouslyDisableDefaultSrc`.\")\n\t}\n\treturn result\n}\nfunction getHeaderValue(req, res, normalizedDirectives) {\n\tconst result = []\n\tfor (const [directiveName, rawDirectiveValue] of normalizedDirectives) {\n\t\tlet directiveValue = \"\"\n\t\tfor (const element of rawDirectiveValue) {\n\t\t\tif (typeof element === \"function\") {\n\t\t\t\tconst newElement = element(req, res)\n\t\t\t\tassertDirectiveValueEntryIsValid(directiveName, newElement)\n\t\t\t\tdirectiveValue += \" \" + newElement\n\t\t\t} else {\n\t\t\t\tdirectiveValue += \" \" + element\n\t\t\t}\n\t\t}\n\t\tif (directiveValue) {\n\t\t\tassertDirectiveValueIsValid(directiveName, directiveValue)\n\t\t\tresult.push(`${directiveName}${directiveValue}`)\n\t\t} else {\n\t\t\tresult.push(directiveName)\n\t\t}\n\t}\n\treturn result.join(\";\")\n}\nconst contentSecurityPolicy = function contentSecurityPolicy(options = {}) {\n\tconst headerName = options.reportOnly ? \"Content-Security-Policy-Report-Only\" : \"Content-Security-Policy\"\n\tconst normalizedDirectives = normalizeDirectives(options)\n\treturn function contentSecurityPolicyMiddleware(req, res, next) {\n\t\tconst result = getHeaderValue(req, res, normalizedDirectives)\n\t\tif (result instanceof Error) {\n\t\t\tnext(result)\n\t\t} else {\n\t\t\tres.setHeader(headerName, result)\n\t\t\tnext()\n\t\t}\n\t}\n}\ncontentSecurityPolicy.getDefaultDirectives = getDefaultDirectives\ncontentSecurityPolicy.dangerouslyDisableDefaultSrc = dangerouslyDisableDefaultSrc\n\nconst ALLOWED_POLICIES$2 = new Set([\"require-corp\", \"credentialless\", \"unsafe-none\"])\nfunction getHeaderValueFromOptions$6({policy = \"require-corp\"}) {\n\tif (ALLOWED_POLICIES$2.has(policy)) {\n\t\treturn policy\n\t} else {\n\t\tthrow new Error(`Cross-Origin-Embedder-Policy does not support the ${JSON.stringify(policy)} policy`)\n\t}\n}\nfunction crossOriginEmbedderPolicy(options = {}) {\n\tconst headerValue = getHeaderValueFromOptions$6(options)\n\treturn function crossOriginEmbedderPolicyMiddleware(_req, res, next) {\n\t\tres.setHeader(\"Cross-Origin-Embedder-Policy\", headerValue)\n\t\tnext()\n\t}\n}\n\nconst ALLOWED_POLICIES$1 = new Set([\"same-origin\", \"same-origin-allow-popups\", \"unsafe-none\"])\nfunction getHeaderValueFromOptions$5({policy = \"same-origin\"}) {\n\tif (ALLOWED_POLICIES$1.has(policy)) {\n\t\treturn policy\n\t} else {\n\t\tthrow new Error(`Cross-Origin-Opener-Policy does not support the ${JSON.stringify(policy)} policy`)\n\t}\n}\nfunction crossOriginOpenerPolicy(options = {}) {\n\tconst headerValue = getHeaderValueFromOptions$5(options)\n\treturn function crossOriginOpenerPolicyMiddleware(_req, res, next) {\n\t\tres.setHeader(\"Cross-Origin-Opener-Policy\", headerValue)\n\t\tnext()\n\t}\n}\n\nconst ALLOWED_POLICIES = new Set([\"same-origin\", \"same-site\", \"cross-origin\"])\nfunction getHeaderValueFromOptions$4({policy = \"same-origin\"}) {\n\tif (ALLOWED_POLICIES.has(policy)) {\n\t\treturn policy\n\t} else {\n\t\tthrow new Error(`Cross-Origin-Resource-Policy does not support the ${JSON.stringify(policy)} policy`)\n\t}\n}\nfunction crossOriginResourcePolicy(options = {}) {\n\tconst headerValue = getHeaderValueFromOptions$4(options)\n\treturn function crossOriginResourcePolicyMiddleware(_req, res, next) {\n\t\tres.setHeader(\"Cross-Origin-Resource-Policy\", headerValue)\n\t\tnext()\n\t}\n}\n\nfunction originAgentCluster() {\n\treturn function originAgentClusterMiddleware(_req, res, next) {\n\t\tres.setHeader(\"Origin-Agent-Cluster\", \"?1\")\n\t\tnext()\n\t}\n}\n\nconst ALLOWED_TOKENS = new Set([\"no-referrer\", \"no-referrer-when-downgrade\", \"same-origin\", \"origin\", \"strict-origin\", \"origin-when-cross-origin\", \"strict-origin-when-cross-origin\", \"unsafe-url\", \"\"])\nfunction getHeaderValueFromOptions$3({policy = [\"no-referrer\"]}) {\n\tconst tokens = typeof policy === \"string\" ? [policy] : policy\n\tif (tokens.length === 0) {\n\t\tthrow new Error(\"Referrer-Policy received no policy tokens\")\n\t}\n\tconst tokensSeen = new Set()\n\ttokens.forEach(token => {\n\t\tif (!ALLOWED_TOKENS.has(token)) {\n\t\t\tthrow new Error(`Referrer-Policy received an unexpected policy token ${JSON.stringify(token)}`)\n\t\t} else if (tokensSeen.has(token)) {\n\t\t\tthrow new Error(`Referrer-Policy received a duplicate policy token ${JSON.stringify(token)}`)\n\t\t}\n\t\ttokensSeen.add(token)\n\t})\n\treturn tokens.join(\",\")\n}\nfunction referrerPolicy(options = {}) {\n\tconst headerValue = getHeaderValueFromOptions$3(options)\n\treturn function referrerPolicyMiddleware(_req, res, next) {\n\t\tres.setHeader(\"Referrer-Policy\", headerValue)\n\t\tnext()\n\t}\n}\n\nconst DEFAULT_MAX_AGE = 365 * 24 * 60 * 60\nfunction parseMaxAge(value = DEFAULT_MAX_AGE) {\n\tif (value >= 0 && Number.isFinite(value)) {\n\t\treturn Math.floor(value)\n\t} else {\n\t\tthrow new Error(`Strict-Transport-Security: ${JSON.stringify(value)} is not a valid value for maxAge. Please choose a positive integer.`)\n\t}\n}\nfunction getHeaderValueFromOptions$2(options) {\n\tif (\"maxage\" in options) {\n\t\tthrow new Error(\"Strict-Transport-Security received an unsupported property, `maxage`. Did you mean to pass `maxAge`?\")\n\t}\n\tif (\"includeSubdomains\" in options) {\n\t\tthrow new Error('Strict-Transport-Security middleware should use `includeSubDomains` instead of `includeSubdomains`. (The correct one has an uppercase \"D\".)')\n\t}\n\tconst directives = [`max-age=${parseMaxAge(options.maxAge)}`]\n\tif (options.includeSubDomains === undefined || options.includeSubDomains) {\n\t\tdirectives.push(\"includeSubDomains\")\n\t}\n\tif (options.preload) {\n\t\tdirectives.push(\"preload\")\n\t}\n\treturn directives.join(\"; \")\n}\nfunction strictTransportSecurity(options = {}) {\n\tconst headerValue = getHeaderValueFromOptions$2(options)\n\treturn function strictTransportSecurityMiddleware(_req, res, next) {\n\t\tres.setHeader(\"Strict-Transport-Security\", headerValue)\n\t\tnext()\n\t}\n}\n\nfunction xContentTypeOptions() {\n\treturn function xContentTypeOptionsMiddleware(_req, res, next) {\n\t\tres.setHeader(\"X-Content-Type-Options\", \"nosniff\")\n\t\tnext()\n\t}\n}\n\nfunction xDnsPrefetchControl(options = {}) {\n\tconst headerValue = options.allow ? \"on\" : \"off\"\n\treturn function xDnsPrefetchControlMiddleware(_req, res, next) {\n\t\tres.setHeader(\"X-DNS-Prefetch-Control\", headerValue)\n\t\tnext()\n\t}\n}\n\nfunction xDownloadOptions() {\n\treturn function xDownloadOptionsMiddleware(_req, res, next) {\n\t\tres.setHeader(\"X-Download-Options\", \"noopen\")\n\t\tnext()\n\t}\n}\n\nfunction getHeaderValueFromOptions$1({action = \"sameorigin\"}) {\n\tconst normalizedAction = typeof action === \"string\" ? action.toUpperCase() : action\n\tswitch (normalizedAction) {\n\t\tcase \"SAME-ORIGIN\":\n\t\t\treturn \"SAMEORIGIN\"\n\t\tcase \"DENY\":\n\t\tcase \"SAMEORIGIN\":\n\t\t\treturn normalizedAction\n\t\tdefault:\n\t\t\tthrow new Error(`X-Frame-Options received an invalid action ${JSON.stringify(action)}`)\n\t}\n}\nfunction xFrameOptions(options = {}) {\n\tconst headerValue = getHeaderValueFromOptions$1(options)\n\treturn function xFrameOptionsMiddleware(_req, res, next) {\n\t\tres.setHeader(\"X-Frame-Options\", headerValue)\n\t\tnext()\n\t}\n}\n\nconst ALLOWED_PERMITTED_POLICIES = new Set([\"none\", \"master-only\", \"by-content-type\", \"all\"])\nfunction getHeaderValueFromOptions({permittedPolicies = \"none\"}) {\n\tif (ALLOWED_PERMITTED_POLICIES.has(permittedPolicies)) {\n\t\treturn permittedPolicies\n\t} else {\n\t\tthrow new Error(`X-Permitted-Cross-Domain-Policies does not support ${JSON.stringify(permittedPolicies)}`)\n\t}\n}\nfunction xPermittedCrossDomainPolicies(options = {}) {\n\tconst headerValue = getHeaderValueFromOptions(options)\n\treturn function xPermittedCrossDomainPoliciesMiddleware(_req, res, next) {\n\t\tres.setHeader(\"X-Permitted-Cross-Domain-Policies\", headerValue)\n\t\tnext()\n\t}\n}\n\nfunction xPoweredBy() {\n\treturn function xPoweredByMiddleware(_req, res, next) {\n\t\tres.removeHeader(\"X-Powered-By\")\n\t\tnext()\n\t}\n}\n\nfunction xXssProtection() {\n\treturn function xXssProtectionMiddleware(_req, res, next) {\n\t\tres.setHeader(\"X-XSS-Protection\", \"0\")\n\t\tnext()\n\t}\n}\n\nfunction getMiddlewareFunctionsFromOptions(options) {\n\tconst result = []\n\tswitch (options.contentSecurityPolicy) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(contentSecurityPolicy())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(contentSecurityPolicy(options.contentSecurityPolicy))\n\t\t\tbreak\n\t}\n\tswitch (options.crossOriginEmbedderPolicy) {\n\t\tcase undefined:\n\t\tcase false:\n\t\t\tbreak\n\t\tcase true:\n\t\t\tresult.push(crossOriginEmbedderPolicy())\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(crossOriginEmbedderPolicy(options.crossOriginEmbedderPolicy))\n\t\t\tbreak\n\t}\n\tswitch (options.crossOriginOpenerPolicy) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(crossOriginOpenerPolicy())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(crossOriginOpenerPolicy(options.crossOriginOpenerPolicy))\n\t\t\tbreak\n\t}\n\tswitch (options.crossOriginResourcePolicy) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(crossOriginResourcePolicy())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(crossOriginResourcePolicy(options.crossOriginResourcePolicy))\n\t\t\tbreak\n\t}\n\tswitch (options.originAgentCluster) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(originAgentCluster())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tconsole.warn(\"Origin-Agent-Cluster does not take options. Remove the property to silence this warning.\")\n\t\t\tresult.push(originAgentCluster())\n\t\t\tbreak\n\t}\n\tswitch (options.referrerPolicy) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(referrerPolicy())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(referrerPolicy(options.referrerPolicy))\n\t\t\tbreak\n\t}\n\tif (\"strictTransportSecurity\" in options && \"hsts\" in options) {\n\t\tthrow new Error(\"Strict-Transport-Security option was specified twice. Remove `hsts` to silence this warning.\")\n\t}\n\tconst strictTransportSecurityOption = options.strictTransportSecurity ?? options.hsts\n\tswitch (strictTransportSecurityOption) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(strictTransportSecurity())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(strictTransportSecurity(strictTransportSecurityOption))\n\t\t\tbreak\n\t}\n\tif (\"xContentTypeOptions\" in options && \"noSniff\" in options) {\n\t\tthrow new Error(\"X-Content-Type-Options option was specified twice. Remove `noSniff` to silence this warning.\")\n\t}\n\tconst xContentTypeOptionsOption = options.xContentTypeOptions ?? options.noSniff\n\tswitch (xContentTypeOptionsOption) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(xContentTypeOptions())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tconsole.warn(\"X-Content-Type-Options does not take options. Remove the property to silence this warning.\")\n\t\t\tresult.push(xContentTypeOptions())\n\t\t\tbreak\n\t}\n\tif (\"xDnsPrefetchControl\" in options && \"dnsPrefetchControl\" in options) {\n\t\tthrow new Error(\"X-DNS-Prefetch-Control option was specified twice. Remove `dnsPrefetchControl` to silence this warning.\")\n\t}\n\tconst xDnsPrefetchControlOption = options.xDnsPrefetchControl ?? options.dnsPrefetchControl\n\tswitch (xDnsPrefetchControlOption) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(xDnsPrefetchControl())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(xDnsPrefetchControl(xDnsPrefetchControlOption))\n\t\t\tbreak\n\t}\n\tif (\"xDownloadOptions\" in options && \"ieNoOpen\" in options) {\n\t\tthrow new Error(\"X-Download-Options option was specified twice. Remove `ieNoOpen` to silence this warning.\")\n\t}\n\tconst xDownloadOptionsOption = options.xDownloadOptions ?? options.ieNoOpen\n\tswitch (xDownloadOptionsOption) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(xDownloadOptions())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tconsole.warn(\"X-Download-Options does not take options. Remove the property to silence this warning.\")\n\t\t\tresult.push(xDownloadOptions())\n\t\t\tbreak\n\t}\n\tif (\"xFrameOptions\" in options && \"frameguard\" in options) {\n\t\tthrow new Error(\"X-Frame-Options option was specified twice. Remove `frameguard` to silence this warning.\")\n\t}\n\tconst xFrameOptionsOption = options.xFrameOptions ?? options.frameguard\n\tswitch (xFrameOptionsOption) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(xFrameOptions())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(xFrameOptions(xFrameOptionsOption))\n\t\t\tbreak\n\t}\n\tif (\"xPermittedCrossDomainPolicies\" in options && \"permittedCrossDomainPolicies\" in options) {\n\t\tthrow new Error(\"X-Permitted-Cross-Domain-Policies option was specified twice. Remove `permittedCrossDomainPolicies` to silence this warning.\")\n\t}\n\tconst xPermittedCrossDomainPoliciesOption = options.xPermittedCrossDomainPolicies ?? options.permittedCrossDomainPolicies\n\tswitch (xPermittedCrossDomainPoliciesOption) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(xPermittedCrossDomainPolicies())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(xPermittedCrossDomainPolicies(xPermittedCrossDomainPoliciesOption))\n\t\t\tbreak\n\t}\n\tif (\"xPoweredBy\" in options && \"hidePoweredBy\" in options) {\n\t\tthrow new Error(\"X-Powered-By option was specified twice. Remove `hidePoweredBy` to silence this warning.\")\n\t}\n\tconst xPoweredByOption = options.xPoweredBy ?? options.hidePoweredBy\n\tswitch (xPoweredByOption) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(xPoweredBy())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tconsole.warn(\"X-Powered-By does not take options. Remove the property to silence this warning.\")\n\t\t\tresult.push(xPoweredBy())\n\t\t\tbreak\n\t}\n\tif (\"xXssProtection\" in options && \"xssFilter\" in options) {\n\t\tthrow new Error(\"X-XSS-Protection option was specified twice. Remove `xssFilter` to silence this warning.\")\n\t}\n\tconst xXssProtectionOption = options.xXssProtection ?? options.xssFilter\n\tswitch (xXssProtectionOption) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(xXssProtection())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tconsole.warn(\"X-XSS-Protection does not take options. Remove the property to silence this warning.\")\n\t\t\tresult.push(xXssProtection())\n\t\t\tbreak\n\t}\n\treturn result\n}\nconst helmet = Object.assign(\n\tfunction helmet(options = {}) {\n\t\t// People should be able to pass an options object with no prototype,\n\t\t// so we want this optional chaining.\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (options.constructor?.name === \"IncomingMessage\") {\n\t\t\tthrow new Error(\"It appears you have done something like `app.use(helmet)`, but it should be `app.use(helmet())`.\")\n\t\t}\n\t\tconst middlewareFunctions = getMiddlewareFunctionsFromOptions(options)\n\t\treturn function helmetMiddleware(req, res, next) {\n\t\t\tlet middlewareIndex = 0\n\t\t\t;(function internalNext(err) {\n\t\t\t\tif (err) {\n\t\t\t\t\tnext(err)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst middlewareFunction = middlewareFunctions[middlewareIndex]\n\t\t\t\tif (middlewareFunction) {\n\t\t\t\t\tmiddlewareIndex++\n\t\t\t\t\tmiddlewareFunction(req, res, internalNext)\n\t\t\t\t} else {\n\t\t\t\t\tnext()\n\t\t\t\t}\n\t\t\t})()\n\t\t}\n\t},\n\t{\n\t\tcontentSecurityPolicy,\n\t\tcrossOriginEmbedderPolicy,\n\t\tcrossOriginOpenerPolicy,\n\t\tcrossOriginResourcePolicy,\n\t\toriginAgentCluster,\n\t\treferrerPolicy,\n\t\tstrictTransportSecurity,\n\t\txContentTypeOptions,\n\t\txDnsPrefetchControl,\n\t\txDownloadOptions,\n\t\txFrameOptions,\n\t\txPermittedCrossDomainPolicies,\n\t\txPoweredBy,\n\t\txXssProtection,\n\t\t// Legacy aliases\n\t\tdnsPrefetchControl: xDnsPrefetchControl,\n\t\txssFilter: xXssProtection,\n\t\tpermittedCrossDomainPolicies: xPermittedCrossDomainPolicies,\n\t\tieNoOpen: xDownloadOptions,\n\t\tnoSniff: xContentTypeOptions,\n\t\tframeguard: xFrameOptions,\n\t\thidePoweredBy: xPoweredBy,\n\t\thsts: strictTransportSecurity\n\t}\n)\n\nexport {contentSecurityPolicy, crossOriginEmbedderPolicy, crossOriginOpenerPolicy, crossOriginResourcePolicy, helmet as default, xDnsPrefetchControl as dnsPrefetchControl, xFrameOptions as frameguard, xPoweredBy as hidePoweredBy, strictTransportSecurity as hsts, xDownloadOptions as ieNoOpen, xContentTypeOptions as noSniff, originAgentCluster, xPermittedCrossDomainPolicies as permittedCrossDomainPolicies, referrerPolicy, strictTransportSecurity, xContentTypeOptions, xDnsPrefetchControl, xDownloadOptions, xFrameOptions, xPermittedCrossDomainPolicies, xPoweredBy, xXssProtection, xXssProtection as xssFilter}\n"]}
1
+ {"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/index.cjs","../../src/index.ts","../../node_modules/helmet/index.mjs","../../package.json"],"names":[],"mappings":"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","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/index.cjs","sourcesContent":[null,"import type { AgentCard } from \"@a2a-js/sdk\";\nimport cors from \"cors\";\nimport express, { type Response } from \"express\";\nimport helmet from \"helmet\";\nimport { StatusCodes } from \"http-status-codes\";\nimport { loggers } from \"@/utils/logger\";\nimport { version } from \"../package.json\";\nimport { AuthMiddleware } from \"./middlewares/auth.middleware\";\nimport { errorMiddleware } from \"./middlewares/error.middleware\";\nimport type {\n\tA2AModule,\n\tBaseAuth,\n\tMCPModule,\n\tMemoryModule,\n\tModelModule,\n} from \"./modules\";\nimport { createA2ARouter, createApiRouter, createQueryRouter } from \"./routes\";\nimport type { AinAgentManifest } from \"./types/agent\";\n\n/**\n * Main class for AI Network Agent Development Kit (AIN-ADK).\n *\n * AINAgent orchestrates all modules and provides an Express server for handling\n * agent interactions through both standard query endpoints and A2A protocol endpoints.\n *\n * @example\n * ```typescript\n * const manifest = {\n * name: \"MyAgent\",\n * description: \"An example AI agent\",\n * };\n *\n * const agent = new AINAgent(manifest, {\n * modelModule: new ModelModule(),\n * a2aModule: new A2AModule(),\n * mcpModule: new MCPModule()\n * });\n *\n * agent.start(3000);\n * ```\n */\nexport class AINAgent {\n\t/** Express application instance */\n\tpublic app: express.Application;\n\n\t/** Agent manifest containing metadata and configuration */\n\tpublic manifest: AinAgentManifest;\n\n\t/** Modules */\n\tpublic modelModule: ModelModule;\n\tpublic a2aModule?: A2AModule;\n\tpublic mcpModule?: MCPModule;\n\tpublic memoryModule?: MemoryModule;\n\n\t/** Optional authentication scheme for securing endpoints */\n\tpublic authScheme: BaseAuth;\n\n\t/**\n\t * Creates a new AINAgent instance.\n\t *\n\t * @param manifest - Agent manifest containing name, description, version, and optional URL\n\t * @param modules - Required and optional modules for the agent\n\t * @param modules.modelModule - Required module for AI model integrations\n\t * @param modules.a2aModule - Optional module for A2A protocol support\n\t * @param modules.mcpModule - Optional module for MCP server connections\n\t * @param modules.memoryModule - Optional module for memory management\n\t * @param authScheme - Optional authentication middleware for securing endpoints\n\t * @param allowStream - Enable streaming query endpoints (default: false)\n\t */\n\tconstructor(\n\t\tmanifest: AinAgentManifest,\n\t\tmodules: {\n\t\t\tmodelModule: ModelModule;\n\t\t\ta2aModule?: A2AModule;\n\t\t\tmcpModule?: MCPModule;\n\t\t\tmemoryModule?: MemoryModule;\n\t\t},\n\t\tauthScheme: BaseAuth,\n\t\tallowStream = false,\n\t) {\n\t\tthis.app = express();\n\n\t\t// Set manifest\n\t\tthis.manifest = manifest;\n\n\t\t// Set modules\n\t\tthis.modelModule = modules.modelModule;\n\t\tthis.a2aModule = modules.a2aModule;\n\t\tthis.mcpModule = modules.mcpModule;\n\t\tthis.memoryModule = modules.memoryModule;\n\n\t\tthis.authScheme = authScheme;\n\n\t\tthis.initializeMiddlewares();\n\t\tthis.initializeRoutes(allowStream);\n\t\tthis.app.use(errorMiddleware);\n\t}\n\n\t/**\n\t * Initializes Express middlewares for security, CORS, and body parsing.\n\t * Also applies authentication middleware if configured.\n\t */\n\tprivate initializeMiddlewares(): void {\n\t\tthis.app.use(helmet());\n\t\tthis.app.use(cors());\n\t\tthis.app.use(express.json({ limit: \"25mb\" }));\n\t\tthis.app.use(express.urlencoded({ limit: \"25mb\", extended: true }));\n\t}\n\n\t/**\n\t * Validates if a string is a valid HTTP or HTTPS URL.\n\t *\n\t * @param urlString - The URL string to validate\n\t * @returns true if the URL is valid HTTP/HTTPS, false otherwise\n\t */\n\tprivate isValidUrl(urlString: string | undefined): boolean {\n\t\tif (!urlString) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\tconst url = new URL(urlString);\n\t\t\treturn url.protocol === \"http:\" || url.protocol === \"https:\";\n\t\t} catch (_error) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Generates an A2A protocol agent card for discovery.\n\t *\n\t * The agent card contains metadata about the agent's capabilities,\n\t * supported input/output modes, and connection information.\n\t *\n\t * @returns AgentCard object with agent metadata and capabilities\n\t * @throws Error if manifest URL is invalid or missing\n\t */\n\tpublic generateAgentCard = (): AgentCard => {\n\t\tconst _url = new URL(this.manifest.url || \"\");\n\t\t_url.pathname = \"a2a\";\n\n\t\treturn {\n\t\t\tname: this.manifest.name,\n\t\t\tdescription: this.manifest.description,\n\t\t\tversion: version,\n\t\t\tprotocolVersion: \"0.3.0\",\n\t\t\turl: _url.toString(),\n\t\t\tcapabilities: {\n\t\t\t\tstreaming: true, // The new framework supports streaming\n\t\t\t\tpushNotifications: false, // Assuming not implemented for this agent yet\n\t\t\t\tstateTransitionHistory: true, // Agent uses history\n\t\t\t},\n\t\t\tdefaultInputModes: [\"text\"],\n\t\t\tdefaultOutputModes: [\"text\", \"task-status\"], // task-status is a common output mode\n\t\t\tskills: [],\n\t\t\tsupportsAuthenticatedExtendedCard: false,\n\t\t};\n\t};\n\n\t/**\n\t * Initializes all HTTP routes including health check, agent discovery,\n\t * query endpoints, and optional A2A endpoints.\n\t *\n\t * Routes initialized:\n\t * - GET / - Health check endpoint\n\t * - GET /.well-known/agent.json - Agent card discovery endpoint\n\t * - /query/* - Query processing endpoints\n\t * - /api/* - API endpoints for agent management\n\t * - /a2a/* - A2A protocol endpoints (only if valid URL is configured)\n\t */\n\tprivate initializeRoutes = (allowStream = false): void => {\n\t\tconst auth = new AuthMiddleware(this.authScheme);\n\n\t\tthis.app.get(\"/\", async (_, res: Response) => {\n\t\t\tconst { name, description } = this.manifest;\n\t\t\tres.status(200).send(\n\t\t\t\t`\n ⚡ AIN Agent: ${name} with ain-adk v${version}<br/>\n ${description}<br/><br/>\n Agent status: Online and ready.\n `.trim(),\n\t\t\t);\n\t\t});\n\n\t\tthis.app.get(\n\t\t\t[\n\t\t\t\t\"/.well-known/agent.json\", // ~v0.2.0\n\t\t\t\t\"/.well-known/agent-card.json\", // v0.3.0~\n\t\t\t],\n\t\t\tasync (_, res: Response) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst card = this.generateAgentCard();\n\t\t\t\t\tres.json(card);\n\t\t\t\t} catch (_error) {\n\t\t\t\t\tres.status(StatusCodes.NOT_FOUND).send(\"No agent card\");\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\tthis.app.use(\n\t\t\t\"/query\",\n\t\t\tauth.middleware(),\n\t\t\tcreateQueryRouter(this, allowStream),\n\t\t);\n\t\tthis.app.use(\"/api\", auth.middleware(), createApiRouter(this));\n\n\t\tif (this.isValidUrl(this.manifest.url)) {\n\t\t\tthis.app.use(\"/a2a\", createA2ARouter(this));\n\t\t}\n\t};\n\n\t/**\n\t * Starts the Express server on the specified port.\n\t *\n\t * @param port - The port number to listen on\n\t */\n\tpublic async start(port: number): Promise<void> {\n\t\tconst server = this.app.listen(port, async () => {\n\t\t\tawait this.memoryModule?.initialize();\n\t\t\tawait this.mcpModule?.connectToServers();\n\t\t\tloggers.agent.info(`AINAgent is running on port ${port}`);\n\t\t});\n\n\t\t// Graceful shutdown handling\n\t\tconst gracefulShutdown = async (signal: string) => {\n\t\t\tloggers.agent.info(`Received ${signal}, starting graceful shutdown...`);\n\n\t\t\t// Stop accepting new connections\n\t\t\tserver.close(() => {\n\t\t\t\tloggers.agent.info(\"HTTP server closed\");\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\t// Cleanup modules\n\t\t\t\tif (this.mcpModule) {\n\t\t\t\t\tloggers.agent.info(\"Disconnecting from MCP servers...\");\n\t\t\t\t\tawait this.mcpModule.cleanup();\n\t\t\t\t}\n\n\t\t\t\tif (this.memoryModule) {\n\t\t\t\t\tloggers.agent.info(\"Closing memory module...\");\n\t\t\t\t\tawait this.memoryModule.shutdown();\n\t\t\t\t}\n\n\t\t\t\tloggers.agent.info(\"Graceful shutdown completed\");\n\t\t\t\tprocess.exit(0);\n\t\t\t} catch (error) {\n\t\t\t\tloggers.agent.error(\"Error during graceful shutdown:\", error);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t};\n\n\t\t// Register signal handlers\n\t\tprocess.on(\"SIGTERM\", () => gracefulShutdown(\"SIGTERM\"));\n\t\tprocess.on(\"SIGINT\", () => gracefulShutdown(\"SIGINT\"));\n\t\tprocess.on(\"SIGHUP\", () => gracefulShutdown(\"SIGHUP\"));\n\t}\n}\n","const dangerouslyDisableDefaultSrc = Symbol(\"dangerouslyDisableDefaultSrc\")\nconst SHOULD_BE_QUOTED = new Set([\"none\", \"self\", \"strict-dynamic\", \"report-sample\", \"inline-speculation-rules\", \"unsafe-inline\", \"unsafe-eval\", \"unsafe-hashes\", \"wasm-unsafe-eval\"])\nconst getDefaultDirectives = () => ({\n\t\"default-src\": [\"'self'\"],\n\t\"base-uri\": [\"'self'\"],\n\t\"font-src\": [\"'self'\", \"https:\", \"data:\"],\n\t\"form-action\": [\"'self'\"],\n\t\"frame-ancestors\": [\"'self'\"],\n\t\"img-src\": [\"'self'\", \"data:\"],\n\t\"object-src\": [\"'none'\"],\n\t\"script-src\": [\"'self'\"],\n\t\"script-src-attr\": [\"'none'\"],\n\t\"style-src\": [\"'self'\", \"https:\", \"'unsafe-inline'\"],\n\t\"upgrade-insecure-requests\": []\n})\nconst dashify = str => str.replace(/[A-Z]/g, capitalLetter => \"-\" + capitalLetter.toLowerCase())\nconst assertDirectiveValueIsValid = (directiveName, directiveValue) => {\n\tif (/;|,/.test(directiveValue)) {\n\t\tthrow new Error(`Content-Security-Policy received an invalid directive value for ${JSON.stringify(directiveName)}`)\n\t}\n}\nconst assertDirectiveValueEntryIsValid = (directiveName, directiveValueEntry) => {\n\tif (SHOULD_BE_QUOTED.has(directiveValueEntry) || directiveValueEntry.startsWith(\"nonce-\") || directiveValueEntry.startsWith(\"sha256-\") || directiveValueEntry.startsWith(\"sha384-\") || directiveValueEntry.startsWith(\"sha512-\")) {\n\t\tthrow new Error(`Content-Security-Policy received an invalid directive value for ${JSON.stringify(directiveName)}. ${JSON.stringify(directiveValueEntry)} should be quoted`)\n\t}\n}\nfunction normalizeDirectives(options) {\n\tconst defaultDirectives = getDefaultDirectives()\n\tconst {useDefaults = true, directives: rawDirectives = defaultDirectives} = options\n\tconst result = new Map()\n\tconst directiveNamesSeen = new Set()\n\tconst directivesExplicitlyDisabled = new Set()\n\tfor (const rawDirectiveName in rawDirectives) {\n\t\tif (!Object.hasOwn(rawDirectives, rawDirectiveName)) {\n\t\t\tcontinue\n\t\t}\n\t\tif (rawDirectiveName.length === 0 || /[^a-zA-Z0-9-]/.test(rawDirectiveName)) {\n\t\t\tthrow new Error(`Content-Security-Policy received an invalid directive name ${JSON.stringify(rawDirectiveName)}`)\n\t\t}\n\t\tconst directiveName = dashify(rawDirectiveName)\n\t\tif (directiveNamesSeen.has(directiveName)) {\n\t\t\tthrow new Error(`Content-Security-Policy received a duplicate directive ${JSON.stringify(directiveName)}`)\n\t\t}\n\t\tdirectiveNamesSeen.add(directiveName)\n\t\tconst rawDirectiveValue = rawDirectives[rawDirectiveName]\n\t\tlet directiveValue\n\t\tif (rawDirectiveValue === null) {\n\t\t\tif (directiveName === \"default-src\") {\n\t\t\t\tthrow new Error(\"Content-Security-Policy needs a default-src but it was set to `null`. If you really want to disable it, set it to `contentSecurityPolicy.dangerouslyDisableDefaultSrc`.\")\n\t\t\t}\n\t\t\tdirectivesExplicitlyDisabled.add(directiveName)\n\t\t\tcontinue\n\t\t} else if (typeof rawDirectiveValue === \"string\") {\n\t\t\tdirectiveValue = [rawDirectiveValue]\n\t\t} else if (!rawDirectiveValue) {\n\t\t\tthrow new Error(`Content-Security-Policy received an invalid directive value for ${JSON.stringify(directiveName)}`)\n\t\t} else if (rawDirectiveValue === dangerouslyDisableDefaultSrc) {\n\t\t\tif (directiveName === \"default-src\") {\n\t\t\t\tdirectivesExplicitlyDisabled.add(\"default-src\")\n\t\t\t\tcontinue\n\t\t\t} else {\n\t\t\t\tthrow new Error(`Content-Security-Policy: tried to disable ${JSON.stringify(directiveName)} as if it were default-src; simply omit the key`)\n\t\t\t}\n\t\t} else {\n\t\t\tdirectiveValue = rawDirectiveValue\n\t\t}\n\t\tfor (const element of directiveValue) {\n\t\t\tif (typeof element !== \"string\") continue\n\t\t\tassertDirectiveValueIsValid(directiveName, element)\n\t\t\tassertDirectiveValueEntryIsValid(directiveName, element)\n\t\t}\n\t\tresult.set(directiveName, directiveValue)\n\t}\n\tif (useDefaults) {\n\t\tObject.entries(defaultDirectives).forEach(([defaultDirectiveName, defaultDirectiveValue]) => {\n\t\t\tif (!result.has(defaultDirectiveName) && !directivesExplicitlyDisabled.has(defaultDirectiveName)) {\n\t\t\t\tresult.set(defaultDirectiveName, defaultDirectiveValue)\n\t\t\t}\n\t\t})\n\t}\n\tif (!result.size) {\n\t\tthrow new Error(\"Content-Security-Policy has no directives. Either set some or disable the header\")\n\t}\n\tif (!result.has(\"default-src\") && !directivesExplicitlyDisabled.has(\"default-src\")) {\n\t\tthrow new Error(\"Content-Security-Policy needs a default-src but none was provided. If you really want to disable it, set it to `contentSecurityPolicy.dangerouslyDisableDefaultSrc`.\")\n\t}\n\treturn result\n}\nfunction getHeaderValue(req, res, normalizedDirectives) {\n\tconst result = []\n\tfor (const [directiveName, rawDirectiveValue] of normalizedDirectives) {\n\t\tlet directiveValue = \"\"\n\t\tfor (const element of rawDirectiveValue) {\n\t\t\tif (typeof element === \"function\") {\n\t\t\t\tconst newElement = element(req, res)\n\t\t\t\tassertDirectiveValueEntryIsValid(directiveName, newElement)\n\t\t\t\tdirectiveValue += \" \" + newElement\n\t\t\t} else {\n\t\t\t\tdirectiveValue += \" \" + element\n\t\t\t}\n\t\t}\n\t\tif (directiveValue) {\n\t\t\tassertDirectiveValueIsValid(directiveName, directiveValue)\n\t\t\tresult.push(`${directiveName}${directiveValue}`)\n\t\t} else {\n\t\t\tresult.push(directiveName)\n\t\t}\n\t}\n\treturn result.join(\";\")\n}\nconst contentSecurityPolicy = function contentSecurityPolicy(options = {}) {\n\tconst headerName = options.reportOnly ? \"Content-Security-Policy-Report-Only\" : \"Content-Security-Policy\"\n\tconst normalizedDirectives = normalizeDirectives(options)\n\treturn function contentSecurityPolicyMiddleware(req, res, next) {\n\t\tconst result = getHeaderValue(req, res, normalizedDirectives)\n\t\tif (result instanceof Error) {\n\t\t\tnext(result)\n\t\t} else {\n\t\t\tres.setHeader(headerName, result)\n\t\t\tnext()\n\t\t}\n\t}\n}\ncontentSecurityPolicy.getDefaultDirectives = getDefaultDirectives\ncontentSecurityPolicy.dangerouslyDisableDefaultSrc = dangerouslyDisableDefaultSrc\n\nconst ALLOWED_POLICIES$2 = new Set([\"require-corp\", \"credentialless\", \"unsafe-none\"])\nfunction getHeaderValueFromOptions$6({policy = \"require-corp\"}) {\n\tif (ALLOWED_POLICIES$2.has(policy)) {\n\t\treturn policy\n\t} else {\n\t\tthrow new Error(`Cross-Origin-Embedder-Policy does not support the ${JSON.stringify(policy)} policy`)\n\t}\n}\nfunction crossOriginEmbedderPolicy(options = {}) {\n\tconst headerValue = getHeaderValueFromOptions$6(options)\n\treturn function crossOriginEmbedderPolicyMiddleware(_req, res, next) {\n\t\tres.setHeader(\"Cross-Origin-Embedder-Policy\", headerValue)\n\t\tnext()\n\t}\n}\n\nconst ALLOWED_POLICIES$1 = new Set([\"same-origin\", \"same-origin-allow-popups\", \"unsafe-none\"])\nfunction getHeaderValueFromOptions$5({policy = \"same-origin\"}) {\n\tif (ALLOWED_POLICIES$1.has(policy)) {\n\t\treturn policy\n\t} else {\n\t\tthrow new Error(`Cross-Origin-Opener-Policy does not support the ${JSON.stringify(policy)} policy`)\n\t}\n}\nfunction crossOriginOpenerPolicy(options = {}) {\n\tconst headerValue = getHeaderValueFromOptions$5(options)\n\treturn function crossOriginOpenerPolicyMiddleware(_req, res, next) {\n\t\tres.setHeader(\"Cross-Origin-Opener-Policy\", headerValue)\n\t\tnext()\n\t}\n}\n\nconst ALLOWED_POLICIES = new Set([\"same-origin\", \"same-site\", \"cross-origin\"])\nfunction getHeaderValueFromOptions$4({policy = \"same-origin\"}) {\n\tif (ALLOWED_POLICIES.has(policy)) {\n\t\treturn policy\n\t} else {\n\t\tthrow new Error(`Cross-Origin-Resource-Policy does not support the ${JSON.stringify(policy)} policy`)\n\t}\n}\nfunction crossOriginResourcePolicy(options = {}) {\n\tconst headerValue = getHeaderValueFromOptions$4(options)\n\treturn function crossOriginResourcePolicyMiddleware(_req, res, next) {\n\t\tres.setHeader(\"Cross-Origin-Resource-Policy\", headerValue)\n\t\tnext()\n\t}\n}\n\nfunction originAgentCluster() {\n\treturn function originAgentClusterMiddleware(_req, res, next) {\n\t\tres.setHeader(\"Origin-Agent-Cluster\", \"?1\")\n\t\tnext()\n\t}\n}\n\nconst ALLOWED_TOKENS = new Set([\"no-referrer\", \"no-referrer-when-downgrade\", \"same-origin\", \"origin\", \"strict-origin\", \"origin-when-cross-origin\", \"strict-origin-when-cross-origin\", \"unsafe-url\", \"\"])\nfunction getHeaderValueFromOptions$3({policy = [\"no-referrer\"]}) {\n\tconst tokens = typeof policy === \"string\" ? [policy] : policy\n\tif (tokens.length === 0) {\n\t\tthrow new Error(\"Referrer-Policy received no policy tokens\")\n\t}\n\tconst tokensSeen = new Set()\n\ttokens.forEach(token => {\n\t\tif (!ALLOWED_TOKENS.has(token)) {\n\t\t\tthrow new Error(`Referrer-Policy received an unexpected policy token ${JSON.stringify(token)}`)\n\t\t} else if (tokensSeen.has(token)) {\n\t\t\tthrow new Error(`Referrer-Policy received a duplicate policy token ${JSON.stringify(token)}`)\n\t\t}\n\t\ttokensSeen.add(token)\n\t})\n\treturn tokens.join(\",\")\n}\nfunction referrerPolicy(options = {}) {\n\tconst headerValue = getHeaderValueFromOptions$3(options)\n\treturn function referrerPolicyMiddleware(_req, res, next) {\n\t\tres.setHeader(\"Referrer-Policy\", headerValue)\n\t\tnext()\n\t}\n}\n\nconst DEFAULT_MAX_AGE = 365 * 24 * 60 * 60\nfunction parseMaxAge(value = DEFAULT_MAX_AGE) {\n\tif (value >= 0 && Number.isFinite(value)) {\n\t\treturn Math.floor(value)\n\t} else {\n\t\tthrow new Error(`Strict-Transport-Security: ${JSON.stringify(value)} is not a valid value for maxAge. Please choose a positive integer.`)\n\t}\n}\nfunction getHeaderValueFromOptions$2(options) {\n\tif (\"maxage\" in options) {\n\t\tthrow new Error(\"Strict-Transport-Security received an unsupported property, `maxage`. Did you mean to pass `maxAge`?\")\n\t}\n\tif (\"includeSubdomains\" in options) {\n\t\tthrow new Error('Strict-Transport-Security middleware should use `includeSubDomains` instead of `includeSubdomains`. (The correct one has an uppercase \"D\".)')\n\t}\n\tconst directives = [`max-age=${parseMaxAge(options.maxAge)}`]\n\tif (options.includeSubDomains === undefined || options.includeSubDomains) {\n\t\tdirectives.push(\"includeSubDomains\")\n\t}\n\tif (options.preload) {\n\t\tdirectives.push(\"preload\")\n\t}\n\treturn directives.join(\"; \")\n}\nfunction strictTransportSecurity(options = {}) {\n\tconst headerValue = getHeaderValueFromOptions$2(options)\n\treturn function strictTransportSecurityMiddleware(_req, res, next) {\n\t\tres.setHeader(\"Strict-Transport-Security\", headerValue)\n\t\tnext()\n\t}\n}\n\nfunction xContentTypeOptions() {\n\treturn function xContentTypeOptionsMiddleware(_req, res, next) {\n\t\tres.setHeader(\"X-Content-Type-Options\", \"nosniff\")\n\t\tnext()\n\t}\n}\n\nfunction xDnsPrefetchControl(options = {}) {\n\tconst headerValue = options.allow ? \"on\" : \"off\"\n\treturn function xDnsPrefetchControlMiddleware(_req, res, next) {\n\t\tres.setHeader(\"X-DNS-Prefetch-Control\", headerValue)\n\t\tnext()\n\t}\n}\n\nfunction xDownloadOptions() {\n\treturn function xDownloadOptionsMiddleware(_req, res, next) {\n\t\tres.setHeader(\"X-Download-Options\", \"noopen\")\n\t\tnext()\n\t}\n}\n\nfunction getHeaderValueFromOptions$1({action = \"sameorigin\"}) {\n\tconst normalizedAction = typeof action === \"string\" ? action.toUpperCase() : action\n\tswitch (normalizedAction) {\n\t\tcase \"SAME-ORIGIN\":\n\t\t\treturn \"SAMEORIGIN\"\n\t\tcase \"DENY\":\n\t\tcase \"SAMEORIGIN\":\n\t\t\treturn normalizedAction\n\t\tdefault:\n\t\t\tthrow new Error(`X-Frame-Options received an invalid action ${JSON.stringify(action)}`)\n\t}\n}\nfunction xFrameOptions(options = {}) {\n\tconst headerValue = getHeaderValueFromOptions$1(options)\n\treturn function xFrameOptionsMiddleware(_req, res, next) {\n\t\tres.setHeader(\"X-Frame-Options\", headerValue)\n\t\tnext()\n\t}\n}\n\nconst ALLOWED_PERMITTED_POLICIES = new Set([\"none\", \"master-only\", \"by-content-type\", \"all\"])\nfunction getHeaderValueFromOptions({permittedPolicies = \"none\"}) {\n\tif (ALLOWED_PERMITTED_POLICIES.has(permittedPolicies)) {\n\t\treturn permittedPolicies\n\t} else {\n\t\tthrow new Error(`X-Permitted-Cross-Domain-Policies does not support ${JSON.stringify(permittedPolicies)}`)\n\t}\n}\nfunction xPermittedCrossDomainPolicies(options = {}) {\n\tconst headerValue = getHeaderValueFromOptions(options)\n\treturn function xPermittedCrossDomainPoliciesMiddleware(_req, res, next) {\n\t\tres.setHeader(\"X-Permitted-Cross-Domain-Policies\", headerValue)\n\t\tnext()\n\t}\n}\n\nfunction xPoweredBy() {\n\treturn function xPoweredByMiddleware(_req, res, next) {\n\t\tres.removeHeader(\"X-Powered-By\")\n\t\tnext()\n\t}\n}\n\nfunction xXssProtection() {\n\treturn function xXssProtectionMiddleware(_req, res, next) {\n\t\tres.setHeader(\"X-XSS-Protection\", \"0\")\n\t\tnext()\n\t}\n}\n\nfunction getMiddlewareFunctionsFromOptions(options) {\n\tconst result = []\n\tswitch (options.contentSecurityPolicy) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(contentSecurityPolicy())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(contentSecurityPolicy(options.contentSecurityPolicy))\n\t\t\tbreak\n\t}\n\tswitch (options.crossOriginEmbedderPolicy) {\n\t\tcase undefined:\n\t\tcase false:\n\t\t\tbreak\n\t\tcase true:\n\t\t\tresult.push(crossOriginEmbedderPolicy())\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(crossOriginEmbedderPolicy(options.crossOriginEmbedderPolicy))\n\t\t\tbreak\n\t}\n\tswitch (options.crossOriginOpenerPolicy) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(crossOriginOpenerPolicy())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(crossOriginOpenerPolicy(options.crossOriginOpenerPolicy))\n\t\t\tbreak\n\t}\n\tswitch (options.crossOriginResourcePolicy) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(crossOriginResourcePolicy())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(crossOriginResourcePolicy(options.crossOriginResourcePolicy))\n\t\t\tbreak\n\t}\n\tswitch (options.originAgentCluster) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(originAgentCluster())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tconsole.warn(\"Origin-Agent-Cluster does not take options. Remove the property to silence this warning.\")\n\t\t\tresult.push(originAgentCluster())\n\t\t\tbreak\n\t}\n\tswitch (options.referrerPolicy) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(referrerPolicy())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(referrerPolicy(options.referrerPolicy))\n\t\t\tbreak\n\t}\n\tif (\"strictTransportSecurity\" in options && \"hsts\" in options) {\n\t\tthrow new Error(\"Strict-Transport-Security option was specified twice. Remove `hsts` to silence this warning.\")\n\t}\n\tconst strictTransportSecurityOption = options.strictTransportSecurity ?? options.hsts\n\tswitch (strictTransportSecurityOption) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(strictTransportSecurity())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(strictTransportSecurity(strictTransportSecurityOption))\n\t\t\tbreak\n\t}\n\tif (\"xContentTypeOptions\" in options && \"noSniff\" in options) {\n\t\tthrow new Error(\"X-Content-Type-Options option was specified twice. Remove `noSniff` to silence this warning.\")\n\t}\n\tconst xContentTypeOptionsOption = options.xContentTypeOptions ?? options.noSniff\n\tswitch (xContentTypeOptionsOption) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(xContentTypeOptions())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tconsole.warn(\"X-Content-Type-Options does not take options. Remove the property to silence this warning.\")\n\t\t\tresult.push(xContentTypeOptions())\n\t\t\tbreak\n\t}\n\tif (\"xDnsPrefetchControl\" in options && \"dnsPrefetchControl\" in options) {\n\t\tthrow new Error(\"X-DNS-Prefetch-Control option was specified twice. Remove `dnsPrefetchControl` to silence this warning.\")\n\t}\n\tconst xDnsPrefetchControlOption = options.xDnsPrefetchControl ?? options.dnsPrefetchControl\n\tswitch (xDnsPrefetchControlOption) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(xDnsPrefetchControl())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(xDnsPrefetchControl(xDnsPrefetchControlOption))\n\t\t\tbreak\n\t}\n\tif (\"xDownloadOptions\" in options && \"ieNoOpen\" in options) {\n\t\tthrow new Error(\"X-Download-Options option was specified twice. Remove `ieNoOpen` to silence this warning.\")\n\t}\n\tconst xDownloadOptionsOption = options.xDownloadOptions ?? options.ieNoOpen\n\tswitch (xDownloadOptionsOption) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(xDownloadOptions())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tconsole.warn(\"X-Download-Options does not take options. Remove the property to silence this warning.\")\n\t\t\tresult.push(xDownloadOptions())\n\t\t\tbreak\n\t}\n\tif (\"xFrameOptions\" in options && \"frameguard\" in options) {\n\t\tthrow new Error(\"X-Frame-Options option was specified twice. Remove `frameguard` to silence this warning.\")\n\t}\n\tconst xFrameOptionsOption = options.xFrameOptions ?? options.frameguard\n\tswitch (xFrameOptionsOption) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(xFrameOptions())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(xFrameOptions(xFrameOptionsOption))\n\t\t\tbreak\n\t}\n\tif (\"xPermittedCrossDomainPolicies\" in options && \"permittedCrossDomainPolicies\" in options) {\n\t\tthrow new Error(\"X-Permitted-Cross-Domain-Policies option was specified twice. Remove `permittedCrossDomainPolicies` to silence this warning.\")\n\t}\n\tconst xPermittedCrossDomainPoliciesOption = options.xPermittedCrossDomainPolicies ?? options.permittedCrossDomainPolicies\n\tswitch (xPermittedCrossDomainPoliciesOption) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(xPermittedCrossDomainPolicies())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tresult.push(xPermittedCrossDomainPolicies(xPermittedCrossDomainPoliciesOption))\n\t\t\tbreak\n\t}\n\tif (\"xPoweredBy\" in options && \"hidePoweredBy\" in options) {\n\t\tthrow new Error(\"X-Powered-By option was specified twice. Remove `hidePoweredBy` to silence this warning.\")\n\t}\n\tconst xPoweredByOption = options.xPoweredBy ?? options.hidePoweredBy\n\tswitch (xPoweredByOption) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(xPoweredBy())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tconsole.warn(\"X-Powered-By does not take options. Remove the property to silence this warning.\")\n\t\t\tresult.push(xPoweredBy())\n\t\t\tbreak\n\t}\n\tif (\"xXssProtection\" in options && \"xssFilter\" in options) {\n\t\tthrow new Error(\"X-XSS-Protection option was specified twice. Remove `xssFilter` to silence this warning.\")\n\t}\n\tconst xXssProtectionOption = options.xXssProtection ?? options.xssFilter\n\tswitch (xXssProtectionOption) {\n\t\tcase undefined:\n\t\tcase true:\n\t\t\tresult.push(xXssProtection())\n\t\t\tbreak\n\t\tcase false:\n\t\t\tbreak\n\t\tdefault:\n\t\t\tconsole.warn(\"X-XSS-Protection does not take options. Remove the property to silence this warning.\")\n\t\t\tresult.push(xXssProtection())\n\t\t\tbreak\n\t}\n\treturn result\n}\nconst helmet = Object.assign(\n\tfunction helmet(options = {}) {\n\t\t// People should be able to pass an options object with no prototype,\n\t\t// so we want this optional chaining.\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (options.constructor?.name === \"IncomingMessage\") {\n\t\t\tthrow new Error(\"It appears you have done something like `app.use(helmet)`, but it should be `app.use(helmet())`.\")\n\t\t}\n\t\tconst middlewareFunctions = getMiddlewareFunctionsFromOptions(options)\n\t\treturn function helmetMiddleware(req, res, next) {\n\t\t\tlet middlewareIndex = 0\n\t\t\t;(function internalNext(err) {\n\t\t\t\tif (err) {\n\t\t\t\t\tnext(err)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst middlewareFunction = middlewareFunctions[middlewareIndex]\n\t\t\t\tif (middlewareFunction) {\n\t\t\t\t\tmiddlewareIndex++\n\t\t\t\t\tmiddlewareFunction(req, res, internalNext)\n\t\t\t\t} else {\n\t\t\t\t\tnext()\n\t\t\t\t}\n\t\t\t})()\n\t\t}\n\t},\n\t{\n\t\tcontentSecurityPolicy,\n\t\tcrossOriginEmbedderPolicy,\n\t\tcrossOriginOpenerPolicy,\n\t\tcrossOriginResourcePolicy,\n\t\toriginAgentCluster,\n\t\treferrerPolicy,\n\t\tstrictTransportSecurity,\n\t\txContentTypeOptions,\n\t\txDnsPrefetchControl,\n\t\txDownloadOptions,\n\t\txFrameOptions,\n\t\txPermittedCrossDomainPolicies,\n\t\txPoweredBy,\n\t\txXssProtection,\n\t\t// Legacy aliases\n\t\tdnsPrefetchControl: xDnsPrefetchControl,\n\t\txssFilter: xXssProtection,\n\t\tpermittedCrossDomainPolicies: xPermittedCrossDomainPolicies,\n\t\tieNoOpen: xDownloadOptions,\n\t\tnoSniff: xContentTypeOptions,\n\t\tframeguard: xFrameOptions,\n\t\thidePoweredBy: xPoweredBy,\n\t\thsts: strictTransportSecurity\n\t}\n)\n\nexport {contentSecurityPolicy, crossOriginEmbedderPolicy, crossOriginOpenerPolicy, crossOriginResourcePolicy, helmet as default, xDnsPrefetchControl as dnsPrefetchControl, xFrameOptions as frameguard, xPoweredBy as hidePoweredBy, strictTransportSecurity as hsts, xDownloadOptions as ieNoOpen, xContentTypeOptions as noSniff, originAgentCluster, xPermittedCrossDomainPolicies as permittedCrossDomainPolicies, referrerPolicy, strictTransportSecurity, xContentTypeOptions, xDnsPrefetchControl, xDownloadOptions, xFrameOptions, xPermittedCrossDomainPolicies, xPoweredBy, xXssProtection, xXssProtection as xssFilter}\n","{\n\t\"name\": \"@ainetwork/adk\",\n\t\"version\": \"0.2.1\",\n\t\"description\": \"AI Network Agent Development Kit\",\n\t\"repository\": \"git@github.com:ainetwork-ai/ain-adk.git\",\n\t\"author\": \"AI Network (https://ainetwork.ai)\",\n\t\"type\": \"module\",\n\t\"engines\": {\n\t\t\"node\": \">=20\"\n\t},\n\t\"main\": \"./dist/cjs/index.cjs\",\n\t\"module\": \"./dist/esm/index.js\",\n\t\"types\": \"./dist/esm/index.d.ts\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/esm/index.d.ts\",\n\t\t\t\"import\": \"./dist/esm/index.js\",\n\t\t\t\"require\": \"./dist/cjs/index.cjs\",\n\t\t\t\"default\": \"./dist/esm/index.js\"\n\t\t},\n\t\t\"./modules\": {\n\t\t\t\"types\": \"./dist/esm/modules/index.d.ts\",\n\t\t\t\"import\": \"./dist/esm/modules/index.js\",\n\t\t\t\"require\": \"./dist/cjs/modules/index.cjs\",\n\t\t\t\"default\": \"./dist/esm/modules/index.js\"\n\t\t},\n\t\t\"./types/*\": {\n\t\t\t\"types\": \"./dist/esm/types/*.d.ts\",\n\t\t\t\"import\": \"./dist/esm/types/*.js\",\n\t\t\t\"require\": \"./dist/cjs/types/*.cjs\",\n\t\t\t\"default\": \"./dist/esm/types/*.js\"\n\t\t},\n\t\t\"./utils/*\": {\n\t\t\t\"types\": \"./dist/esm/utils/*.d.ts\",\n\t\t\t\"import\": \"./dist/esm/utils/*.js\",\n\t\t\t\"require\": \"./dist/cjs/utils/*.cjs\",\n\t\t\t\"default\": \"./dist/esm/utils/*.js\"\n\t\t}\n\t},\n\t\"files\": [\n\t\t\"dist\"\n\t],\n\t\"scripts\": {\n\t\t\"build\": \"tsup\",\n\t\t\"clean\": \"rm -rf dist\",\n\t\t\"biome\": \"npx @biomejs/biome check\",\n\t\t\"biome:write\": \"npx @biomejs/biome check --write\",\n\t\t\"test\": \"jest --passWithNoTests\",\n\t\t\"prepare\": \"husky\",\n\t\t\"release\": \"release-it\"\n\t},\n\t\"keywords\": [],\n\t\"license\": \"MIT\",\n\t\"devDependencies\": {\n\t\t\"@biomejs/biome\": \"2.0.4\",\n\t\t\"@eslint/js\": \"^9.29.0\",\n\t\t\"@types/cors\": \"^2.8.19\",\n\t\t\"@types/express\": \"^5.0.3\",\n\t\t\"@types/helmet\": \"^4.0.0\",\n\t\t\"@types/jest\": \"^30.0.0\",\n\t\t\"@types/node\": \"^24.0.1\",\n\t\t\"eslint\": \"^9.29.0\",\n\t\t\"husky\": \"^9.1.7\",\n\t\t\"jest\": \"^30.0.0\",\n\t\t\"release-it\": \"^19.0.4\",\n\t\t\"ts-jest\": \"^29.4.0\",\n\t\t\"ts-node\": \"^10.9.2\",\n\t\t\"tsup\": \"^8.5.0\",\n\t\t\"tsx\": \"^4.20.3\",\n\t\t\"typescript\": \"^5.8.3\",\n\t\t\"typescript-eslint\": \"^8.34.1\"\n\t},\n\t\"dependencies\": {\n\t\t\"@a2a-js/sdk\": \"^0.3.2\",\n\t\t\"@modelcontextprotocol/sdk\": \"^1.17.3\",\n\t\t\"cors\": \"^2.8.5\",\n\t\t\"dotenv\": \"^16.5.0\",\n\t\t\"express\": \"^5.1.0\",\n\t\t\"http-status-codes\": \"^2.3.0\",\n\t\t\"uuid\": \"^11.1.0\",\n\t\t\"winston\": \"^3.17.0\"\n\t},\n\t\"publishConfig\": {\n \"registry\": \"https://registry.npmjs.org\"\n\t}\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkLRBRG2DScjs = require('../chunk-LRBRG2DS.cjs');
4
- require('../chunk-DX2JH3FJ.cjs');
3
+ var _chunkE35E4LQYcjs = require('../chunk-E35E4LQY.cjs');
4
+ require('../chunk-QHQLU7BI.cjs');
5
5
 
6
6
 
7
- exports.AuthMiddleware = _chunkLRBRG2DScjs.AuthMiddleware;
7
+ exports.AuthMiddleware = _chunkE35E4LQYcjs.AuthMiddleware;
8
8
  //# sourceMappingURL=auth.middleware.cjs.map
@@ -1,11 +1,11 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunk6YVTJEMQcjs = require('../../chunk-6YVTJEMQ.cjs');
3
+ var _chunkBBFYVWE2cjs = require('../../chunk-BBFYVWE2.cjs');
4
4
  require('../../chunk-F7I4G6JG.cjs');
5
5
  require('../../chunk-M4MYRCSF.cjs');
6
6
  require('../../chunk-LPXYZH22.cjs');
7
7
  require('../../chunk-466ED5WN.cjs');
8
8
 
9
9
 
10
- exports.A2AModule = _chunk6YVTJEMQcjs.A2AModule;
10
+ exports.A2AModule = _chunkBBFYVWE2cjs.A2AModule;
11
11
  //# sourceMappingURL=a2a.module.cjs.map
@@ -1,22 +1,22 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkQWASSVCUcjs = require('../chunk-QWASSVCU.cjs');
3
+ var _chunkRIJV7J5Zcjs = require('../chunk-RIJV7J5Z.cjs');
4
4
 
5
5
 
6
- var _chunkSCOMNXDAcjs = require('../chunk-SCOMNXDA.cjs');
7
-
8
-
9
- var _chunk6YVTJEMQcjs = require('../chunk-6YVTJEMQ.cjs');
6
+ var _chunkBBFYVWE2cjs = require('../chunk-BBFYVWE2.cjs');
10
7
  require('../chunk-F7I4G6JG.cjs');
11
8
 
12
9
 
13
10
  var _chunkXQTVE64Wcjs = require('../chunk-XQTVE64W.cjs');
14
11
 
15
12
 
16
- var _chunkCYW6ICAWcjs = require('../chunk-CYW6ICAW.cjs');
13
+ var _chunk3ZFV2K7Ocjs = require('../chunk-3ZFV2K7O.cjs');
17
14
  require('../chunk-E433ONEN.cjs');
18
15
 
19
16
 
17
+ var _chunkSCOMNXDAcjs = require('../chunk-SCOMNXDA.cjs');
18
+
19
+
20
20
  var _chunk7K2R2UKBcjs = require('../chunk-7K2R2UKB.cjs');
21
21
  require('../chunk-M4MYRCSF.cjs');
22
22
  require('../chunk-LPXYZH22.cjs');
@@ -28,5 +28,5 @@ require('../chunk-466ED5WN.cjs');
28
28
 
29
29
 
30
30
 
31
- exports.A2AModule = _chunk6YVTJEMQcjs.A2AModule; exports.BaseAuth = _chunkXQTVE64Wcjs.BaseAuth; exports.BaseModel = _chunk7K2R2UKBcjs.BaseModel; exports.MCPModule = _chunkCYW6ICAWcjs.MCPModule; exports.MemoryModule = _chunkSCOMNXDAcjs.MemoryModule; exports.ModelModule = _chunkQWASSVCUcjs.ModelModule;
31
+ exports.A2AModule = _chunkBBFYVWE2cjs.A2AModule; exports.BaseAuth = _chunkXQTVE64Wcjs.BaseAuth; exports.BaseModel = _chunk7K2R2UKBcjs.BaseModel; exports.MCPModule = _chunk3ZFV2K7Ocjs.MCPModule; exports.MemoryModule = _chunkSCOMNXDAcjs.MemoryModule; exports.ModelModule = _chunkRIJV7J5Zcjs.ModelModule;
32
32
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/modules/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACF,yDAA8B;AAC9B;AACE;AACF,yDAA8B;AAC9B;AACE;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACF,yDAA8B;AAC9B;AACE;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,6SAAC","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/modules/index.cjs"}
1
+ {"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/modules/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACF,yDAA8B;AAC9B;AACE;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACF,yDAA8B;AAC9B;AACE;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACF,yDAA8B;AAC9B;AACE;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,6SAAC","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/modules/index.cjs"}