@flink-app/flink 0.14.3 → 2.0.0-alpha.100

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 (280) hide show
  1. package/CHANGELOG.md +1051 -0
  2. package/SCHEMA_EXTRACTION_ANALYSIS.md +494 -0
  3. package/SIMPLE_AST_FEASIBILITY.md +570 -0
  4. package/bin/flink.ts +13 -2
  5. package/cli/build.ts +24 -44
  6. package/cli/clean.ts +13 -25
  7. package/cli/cli-utils.ts +190 -17
  8. package/cli/dev.ts +252 -0
  9. package/cli/loadEnvFiles.ts +116 -0
  10. package/cli/run.ts +45 -62
  11. package/dist/bin/flink.js +61 -2
  12. package/dist/cli/build.js +20 -25
  13. package/dist/cli/clean.js +12 -10
  14. package/dist/cli/cli-utils.d.ts +34 -3
  15. package/dist/cli/cli-utils.js +193 -12
  16. package/dist/cli/dev.d.ts +2 -0
  17. package/dist/cli/dev.js +279 -0
  18. package/dist/cli/loadEnvFiles.d.ts +30 -0
  19. package/dist/cli/loadEnvFiles.js +113 -0
  20. package/dist/cli/run.js +47 -46
  21. package/dist/src/DependencyTracker.d.ts +44 -0
  22. package/dist/src/DependencyTracker.js +239 -0
  23. package/dist/src/FlinkApp.d.ts +163 -10
  24. package/dist/src/FlinkApp.js +847 -184
  25. package/dist/src/FlinkContext.d.ts +41 -0
  26. package/dist/src/FlinkErrors.d.ts +19 -6
  27. package/dist/src/FlinkErrors.js +36 -42
  28. package/dist/src/FlinkHttpHandler.d.ts +219 -26
  29. package/dist/src/FlinkHttpHandler.js +37 -1
  30. package/dist/src/FlinkJob.d.ts +10 -0
  31. package/dist/src/FlinkLog.d.ts +82 -18
  32. package/dist/src/FlinkLog.js +165 -13
  33. package/dist/src/FlinkLogFactory.d.ts +288 -0
  34. package/dist/src/FlinkLogFactory.js +619 -0
  35. package/dist/src/FlinkRepo.d.ts +10 -2
  36. package/dist/src/FlinkRepo.js +11 -1
  37. package/dist/src/FlinkRequestContext.d.ts +63 -0
  38. package/dist/src/FlinkRequestContext.js +74 -0
  39. package/dist/src/FlinkResponse.d.ts +6 -0
  40. package/dist/src/FlinkService.d.ts +38 -0
  41. package/dist/src/FlinkService.js +46 -0
  42. package/dist/src/LeaderElection.d.ts +45 -0
  43. package/dist/src/LeaderElection.js +269 -0
  44. package/dist/src/SchemaCache.d.ts +84 -0
  45. package/dist/src/SchemaCache.js +289 -0
  46. package/dist/src/TypeScriptCompiler.d.ts +161 -51
  47. package/dist/src/TypeScriptCompiler.js +1253 -617
  48. package/dist/src/TypeScriptUtils.js +4 -0
  49. package/dist/src/ai/AgentRunner.d.ts +39 -0
  50. package/dist/src/ai/AgentRunner.js +760 -0
  51. package/dist/src/ai/ConversationAgent.d.ts +279 -0
  52. package/dist/src/ai/ConversationAgent.js +404 -0
  53. package/dist/src/ai/ConversationFlinkAgent.d.ts +278 -0
  54. package/dist/src/ai/ConversationFlinkAgent.js +404 -0
  55. package/dist/src/ai/FlinkAgent.d.ts +690 -0
  56. package/dist/src/ai/FlinkAgent.js +729 -0
  57. package/dist/src/ai/FlinkTool.d.ts +135 -0
  58. package/dist/src/ai/FlinkTool.js +2 -0
  59. package/dist/src/ai/InMemoryConversationAgent.d.ts +121 -0
  60. package/dist/src/ai/InMemoryConversationAgent.js +209 -0
  61. package/dist/src/ai/LLMAdapter.d.ts +148 -0
  62. package/dist/src/ai/LLMAdapter.js +2 -0
  63. package/dist/src/ai/PersistentFlinkAgent.d.ts +278 -0
  64. package/dist/src/ai/PersistentFlinkAgent.js +403 -0
  65. package/dist/src/ai/SubAgentExecutor.d.ts +38 -0
  66. package/dist/src/ai/SubAgentExecutor.js +223 -0
  67. package/dist/src/ai/ToolExecutor.d.ts +64 -0
  68. package/dist/src/ai/ToolExecutor.js +497 -0
  69. package/dist/src/ai/agentInstructions.d.ts +68 -0
  70. package/dist/src/ai/agentInstructions.js +286 -0
  71. package/dist/src/ai/index.d.ts +8 -0
  72. package/dist/src/ai/index.js +26 -0
  73. package/dist/src/ai/instructionFileLoader.d.ts +44 -0
  74. package/dist/src/ai/instructionFileLoader.js +179 -0
  75. package/dist/src/auth/FlinkAuthPlugin.d.ts +1 -1
  76. package/dist/src/handlers/StreamWriterFactory.d.ts +20 -0
  77. package/dist/src/handlers/StreamWriterFactory.js +83 -0
  78. package/dist/src/index.d.ts +14 -0
  79. package/dist/src/index.js +17 -0
  80. package/dist/src/loadPluginSchemas.d.ts +45 -0
  81. package/dist/src/loadPluginSchemas.js +143 -0
  82. package/dist/src/schema-extraction/ComplexTypeDetection.d.ts +40 -0
  83. package/dist/src/schema-extraction/ComplexTypeDetection.js +75 -0
  84. package/dist/src/schema-extraction/TypeScriptSourceParser.d.ts +321 -0
  85. package/dist/src/schema-extraction/TypeScriptSourceParser.js +925 -0
  86. package/dist/src/schema-extraction/TypeScriptSourceParser.spec.d.ts +1 -0
  87. package/dist/src/schema-extraction/TypeScriptSourceParser.spec.js +233 -0
  88. package/dist/src/schema-extraction/TypeScriptTokenizer.d.ts +57 -0
  89. package/dist/src/schema-extraction/TypeScriptTokenizer.js +177 -0
  90. package/dist/src/schema-extraction/index.d.ts +2 -0
  91. package/dist/src/schema-extraction/index.js +20 -0
  92. package/dist/src/schema-extraction/types.d.ts +31 -0
  93. package/dist/src/schema-extraction/types.js +2 -0
  94. package/dist/src/utils/loadFlinkConfig.d.ts +53 -0
  95. package/dist/src/utils/loadFlinkConfig.js +77 -0
  96. package/dist/src/utils.d.ts +30 -0
  97. package/dist/src/utils.js +52 -0
  98. package/dist/src/workers/SchemaGeneratorWorker.d.ts +1 -0
  99. package/dist/src/workers/SchemaGeneratorWorker.js +49 -0
  100. package/dist/src/workers/WorkerPool.d.ts +60 -0
  101. package/dist/src/workers/WorkerPool.js +306 -0
  102. package/examples/logging-hierarchical-example.ts +125 -0
  103. package/package.json +29 -4
  104. package/readme.md +499 -0
  105. package/spec/AgentDescendantDetection.spec.ts +335 -0
  106. package/spec/AgentDuplicateDetection.spec.ts +112 -0
  107. package/spec/AgentObserver.spec.ts +266 -0
  108. package/spec/AgentRunner.spec.ts +1062 -0
  109. package/spec/AsyncLocalStorageContext.spec.ts +223 -0
  110. package/spec/ConversationHooks.spec.ts +257 -0
  111. package/spec/FlinkAgent.spec.ts +681 -0
  112. package/spec/FlinkApp.htmlResponse.spec.ts +260 -0
  113. package/spec/FlinkApp.onError.invocation.spec.ts +151 -0
  114. package/spec/FlinkApp.onError.spec.ts +1 -2
  115. package/spec/FlinkApp.query.spec.ts +107 -0
  116. package/spec/FlinkApp.routeOrdering.spec.ts +61 -0
  117. package/spec/FlinkApp.undefinedResponse.spec.ts +123 -0
  118. package/spec/FlinkApp.validationMode.spec.ts +155 -0
  119. package/spec/FlinkJob.spec.ts +171 -0
  120. package/spec/FlinkLogFactory.spec.ts +337 -0
  121. package/spec/FlinkRepo.spec.ts +1 -1
  122. package/spec/LeaderElection.spec.ts +174 -0
  123. package/spec/StreamingIntegration.spec.ts +139 -0
  124. package/spec/ToolExecutor.spec.ts +465 -0
  125. package/spec/TypeScriptCompiler.spec.ts +1 -1
  126. package/spec/TypeScriptSourceParser.spec.ts +1215 -0
  127. package/spec/TypeScriptTokenizer.spec.ts +366 -0
  128. package/spec/ai/ContextCompaction.spec.ts +405 -0
  129. package/spec/ai/ConversationAgent.spec.ts +520 -0
  130. package/spec/ai/InMemoryConversationAgent.spec.ts +144 -0
  131. package/spec/ai/agentInstructions.spec.ts +358 -0
  132. package/spec/fixtures/agent-instructions/TestAgent.ts +24 -0
  133. package/spec/fixtures/agent-instructions/simple.md +3 -0
  134. package/spec/fixtures/agent-instructions/template.md +18 -0
  135. package/spec/fixtures/agent-instructions/yaml-format.yaml +9 -0
  136. package/spec/mock-project/dist/.tsbuildinfo +1 -0
  137. package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCar.js +56 -0
  138. package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCar2.js +58 -0
  139. package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCarWithArraySchema.js +52 -0
  140. package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCarWithArraySchema2.js +52 -0
  141. package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCarWithArraySchema3.js +52 -0
  142. package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCarWithLiteralSchema.js +54 -0
  143. package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCarWithLiteralSchema2.js +54 -0
  144. package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCarWithSchemaInFile.js +57 -0
  145. package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCarWithSchemaInFile2.js +57 -0
  146. package/spec/mock-project/dist/spec/mock-project/src/handlers/ManuallyAddedHandler.js +53 -0
  147. package/spec/mock-project/dist/spec/mock-project/src/handlers/ManuallyAddedHandler2.js +55 -0
  148. package/spec/mock-project/dist/spec/mock-project/src/handlers/PatchCar.js +57 -0
  149. package/spec/mock-project/dist/spec/mock-project/src/handlers/PatchOnboardingSession.js +75 -0
  150. package/spec/mock-project/dist/spec/mock-project/src/handlers/PatchOrderWithComplexTypes.js +57 -0
  151. package/spec/mock-project/dist/spec/mock-project/src/handlers/PatchProductWithIntersection.js +58 -0
  152. package/spec/mock-project/dist/spec/mock-project/src/handlers/PatchUserWithUnion.js +58 -0
  153. package/spec/mock-project/dist/spec/mock-project/src/handlers/PostCar.js +54 -0
  154. package/spec/mock-project/dist/spec/mock-project/src/handlers/PostLogin.js +55 -0
  155. package/spec/mock-project/dist/spec/mock-project/src/handlers/PostLogout.js +54 -0
  156. package/spec/mock-project/dist/spec/mock-project/src/handlers/PutCar.js +54 -0
  157. package/spec/mock-project/dist/spec/mock-project/src/index.js +83 -0
  158. package/spec/mock-project/dist/spec/mock-project/src/repos/CarRepo.js +26 -0
  159. package/spec/mock-project/dist/spec/mock-project/src/schemas/Car.js +2 -0
  160. package/spec/mock-project/dist/spec/mock-project/src/schemas/DefaultExportSchema.js +2 -0
  161. package/spec/mock-project/dist/spec/mock-project/src/schemas/FileWithTwoSchemas.js +2 -0
  162. package/spec/mock-project/dist/src/FlinkApp.js +1000 -0
  163. package/spec/mock-project/dist/src/FlinkContext.js +2 -0
  164. package/spec/mock-project/dist/src/FlinkErrors.js +143 -0
  165. package/spec/mock-project/dist/src/FlinkHttpHandler.js +47 -0
  166. package/spec/mock-project/dist/src/FlinkJob.js +2 -0
  167. package/spec/mock-project/dist/src/FlinkLog.js +119 -0
  168. package/spec/mock-project/dist/src/FlinkLogFactory.js +617 -0
  169. package/spec/mock-project/dist/src/FlinkPlugin.js +2 -0
  170. package/spec/mock-project/dist/src/FlinkRepo.js +224 -0
  171. package/spec/mock-project/dist/src/FlinkRequestContext.js +74 -0
  172. package/spec/mock-project/dist/src/FlinkResponse.js +2 -0
  173. package/spec/mock-project/dist/src/ai/AgentExecutor.js +279 -0
  174. package/spec/mock-project/dist/src/ai/AgentRunner.js +632 -0
  175. package/spec/mock-project/dist/src/ai/ConversationAgent.js +402 -0
  176. package/spec/mock-project/dist/src/ai/ConversationFlinkAgent.js +422 -0
  177. package/spec/mock-project/dist/src/ai/FlinkAgent.js +699 -0
  178. package/spec/mock-project/dist/src/ai/FlinkTool.js +2 -0
  179. package/spec/mock-project/dist/src/ai/InMemoryConversationAgent.js +209 -0
  180. package/spec/mock-project/dist/src/ai/LLMAdapter.js +2 -0
  181. package/spec/mock-project/dist/src/ai/SubAgentExecutor.js +223 -0
  182. package/spec/mock-project/dist/src/ai/ToolExecutor.js +412 -0
  183. package/spec/mock-project/dist/src/ai/agentInstructions.js +246 -0
  184. package/spec/mock-project/dist/src/auth/FlinkAuthPlugin.js +2 -0
  185. package/spec/mock-project/dist/src/auth/FlinkAuthUser.js +2 -0
  186. package/spec/mock-project/dist/src/handlers/GetCar.js +26 -52
  187. package/spec/mock-project/dist/src/handlers/GetCar.js.map +1 -0
  188. package/spec/mock-project/dist/src/handlers/GetCar2.js +32 -54
  189. package/spec/mock-project/dist/src/handlers/GetCar2.js.map +1 -0
  190. package/spec/mock-project/dist/src/handlers/GetCarWithArraySchema.js +26 -48
  191. package/spec/mock-project/dist/src/handlers/GetCarWithArraySchema.js.map +1 -0
  192. package/spec/mock-project/dist/src/handlers/GetCarWithArraySchema2.js +28 -48
  193. package/spec/mock-project/dist/src/handlers/GetCarWithArraySchema2.js.map +1 -0
  194. package/spec/mock-project/dist/src/handlers/GetCarWithArraySchema3.js +29 -48
  195. package/spec/mock-project/dist/src/handlers/GetCarWithArraySchema3.js.map +1 -0
  196. package/spec/mock-project/dist/src/handlers/GetCarWithLiteralSchema.js +26 -50
  197. package/spec/mock-project/dist/src/handlers/GetCarWithLiteralSchema.js.map +1 -0
  198. package/spec/mock-project/dist/src/handlers/GetCarWithLiteralSchema2.js +28 -50
  199. package/spec/mock-project/dist/src/handlers/GetCarWithLiteralSchema2.js.map +1 -0
  200. package/spec/mock-project/dist/src/handlers/GetCarWithSchemaInFile.js +27 -53
  201. package/spec/mock-project/dist/src/handlers/GetCarWithSchemaInFile.js.map +1 -0
  202. package/spec/mock-project/dist/src/handlers/GetCarWithSchemaInFile2.js +29 -53
  203. package/spec/mock-project/dist/src/handlers/GetCarWithSchemaInFile2.js.map +1 -0
  204. package/spec/mock-project/dist/src/handlers/ManuallyAddedHandler.js +16 -49
  205. package/spec/mock-project/dist/src/handlers/ManuallyAddedHandler.js.map +1 -0
  206. package/spec/mock-project/dist/src/handlers/ManuallyAddedHandler2.js +25 -50
  207. package/spec/mock-project/dist/src/handlers/ManuallyAddedHandler2.js.map +1 -0
  208. package/spec/mock-project/dist/src/handlers/PatchCar.js +27 -53
  209. package/spec/mock-project/dist/src/handlers/PatchCar.js.map +1 -0
  210. package/spec/mock-project/dist/src/handlers/PatchOnboardingSession.js +44 -70
  211. package/spec/mock-project/dist/src/handlers/PatchOnboardingSession.js.map +1 -0
  212. package/spec/mock-project/dist/src/handlers/PatchOrderWithComplexTypes.js +27 -53
  213. package/spec/mock-project/dist/src/handlers/PatchOrderWithComplexTypes.js.map +1 -0
  214. package/spec/mock-project/dist/src/handlers/PatchProductWithIntersection.js +28 -54
  215. package/spec/mock-project/dist/src/handlers/PatchProductWithIntersection.js.map +1 -0
  216. package/spec/mock-project/dist/src/handlers/PatchUserWithUnion.js +28 -54
  217. package/spec/mock-project/dist/src/handlers/PatchUserWithUnion.js.map +1 -0
  218. package/spec/mock-project/dist/src/handlers/PostCar.js +24 -50
  219. package/spec/mock-project/dist/src/handlers/PostCar.js.map +1 -0
  220. package/spec/mock-project/dist/src/handlers/PostLogin.js +25 -51
  221. package/spec/mock-project/dist/src/handlers/PostLogin.js.map +1 -0
  222. package/spec/mock-project/dist/src/handlers/PostLogout.js +24 -50
  223. package/spec/mock-project/dist/src/handlers/PostLogout.js.map +1 -0
  224. package/spec/mock-project/dist/src/handlers/PutCar.js +24 -50
  225. package/spec/mock-project/dist/src/handlers/PutCar.js.map +1 -0
  226. package/spec/mock-project/dist/src/handlers/StreamWriterFactory.js +83 -0
  227. package/spec/mock-project/dist/src/index.js +52 -76
  228. package/spec/mock-project/dist/src/index.js.map +1 -0
  229. package/spec/mock-project/dist/src/mock-data-generator.js +9 -0
  230. package/spec/mock-project/dist/src/repos/CarRepo.js +12 -24
  231. package/spec/mock-project/dist/src/repos/CarRepo.js.map +1 -0
  232. package/spec/mock-project/dist/src/schemas/Car.js +3 -1
  233. package/spec/mock-project/dist/src/schemas/Car.js.map +1 -0
  234. package/spec/mock-project/dist/src/schemas/DefaultExportSchema.js +3 -1
  235. package/spec/mock-project/dist/src/schemas/DefaultExportSchema.js.map +1 -0
  236. package/spec/mock-project/dist/src/schemas/FileWithTwoSchemas.js +3 -1
  237. package/spec/mock-project/dist/src/schemas/FileWithTwoSchemas.js.map +1 -0
  238. package/spec/mock-project/dist/src/utils.js +290 -0
  239. package/spec/mock-project/tsconfig.json +6 -1
  240. package/spec/schema-generation-nested-objects.spec.ts +97 -0
  241. package/spec/testHelpers.ts +49 -0
  242. package/spec/utils.caseConversion.spec.ts +78 -0
  243. package/spec/utils.spec.ts +13 -13
  244. package/src/DependencyTracker.ts +166 -0
  245. package/src/FlinkApp.ts +919 -155
  246. package/src/FlinkContext.ts +43 -0
  247. package/src/FlinkErrors.ts +32 -12
  248. package/src/FlinkHttpHandler.ts +246 -28
  249. package/src/FlinkJob.ts +11 -0
  250. package/src/FlinkLog.ts +119 -12
  251. package/src/FlinkLogFactory.ts +699 -0
  252. package/src/FlinkRepo.ts +10 -3
  253. package/src/FlinkRequestContext.ts +95 -0
  254. package/src/FlinkResponse.ts +6 -0
  255. package/src/FlinkService.ts +49 -0
  256. package/src/LeaderElection.ts +203 -0
  257. package/src/SchemaCache.ts +232 -0
  258. package/src/TypeScriptCompiler.ts +1347 -610
  259. package/src/TypeScriptUtils.ts +5 -0
  260. package/src/ai/AgentRunner.ts +646 -0
  261. package/src/ai/ConversationAgent.ts +413 -0
  262. package/src/ai/FlinkAgent.ts +1069 -0
  263. package/src/ai/FlinkTool.ts +165 -0
  264. package/src/ai/InMemoryConversationAgent.ts +149 -0
  265. package/src/ai/LLMAdapter.ts +126 -0
  266. package/src/ai/ToolExecutor.ts +485 -0
  267. package/src/ai/agentInstructions.ts +245 -0
  268. package/src/ai/index.ts +8 -0
  269. package/src/ai/instructionFileLoader.ts +156 -0
  270. package/src/auth/FlinkAuthPlugin.ts +2 -1
  271. package/src/handlers/StreamWriterFactory.ts +84 -0
  272. package/src/index.ts +14 -0
  273. package/src/loadPluginSchemas.ts +141 -0
  274. package/src/schema-extraction/TypeScriptSourceParser.ts +1058 -0
  275. package/src/schema-extraction/TypeScriptTokenizer.ts +205 -0
  276. package/src/schema-extraction/index.ts +2 -0
  277. package/src/schema-extraction/types.ts +34 -0
  278. package/src/utils/loadFlinkConfig.ts +89 -0
  279. package/src/utils.ts +52 -0
  280. package/tsconfig.json +6 -1
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
45
+ var __generator = (this && this.__generator) || function (thisArg, body) {
46
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
47
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
+ function verb(n) { return function (v) { return step([n, v]); }; }
49
+ function step(op) {
50
+ if (f) throw new TypeError("Generator is already executing.");
51
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
52
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
53
+ if (y = 0, t) op = [op[0] & 2, t.value];
54
+ switch (op[0]) {
55
+ case 0: case 1: t = op; break;
56
+ case 4: _.label++; return { value: op[1], done: false };
57
+ case 5: _.label++; y = op[1]; op = [0]; continue;
58
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
+ default:
60
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
+ if (t[2]) _.ops.pop();
65
+ _.trys.pop(); continue;
66
+ }
67
+ op = body.call(thisArg, _);
68
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
+ }
71
+ };
72
+ var __importDefault = (this && this.__importDefault) || function (mod) {
73
+ return (mod && mod.__esModule) ? mod : { "default": mod };
74
+ };
75
+ Object.defineProperty(exports, "__esModule", { value: true });
76
+ exports.agentInstructions = agentInstructions;
77
+ var fs = __importStar(require("fs"));
78
+ var path = __importStar(require("path"));
79
+ var handlebars_1 = __importDefault(require("handlebars"));
80
+ /**
81
+ * In-memory file cache (per-process, not persistent)
82
+ */
83
+ var fileCache = new Map();
84
+ /**
85
+ * Get caller's file location using stack trace API
86
+ * This enables agent-relative path resolution for ./ and ../ prefixes
87
+ *
88
+ * Walks the stack to find the first frame outside this file,
89
+ * which is the agent class that called agentInstructions().
90
+ */
91
+ function getCallerFilePath() {
92
+ var _a, _b;
93
+ var originalPrepareStackTrace = Error.prepareStackTrace;
94
+ Error.prepareStackTrace = function (_, stack) { return stack; };
95
+ var stack = new Error().stack;
96
+ Error.prepareStackTrace = originalPrepareStackTrace;
97
+ // Find first frame outside this file (skips getCallerFilePath, resolveFilePath, agentInstructions)
98
+ var thisFile = (_a = stack[0]) === null || _a === void 0 ? void 0 : _a.getFileName();
99
+ for (var i = 1; i < stack.length; i++) {
100
+ var fileName = (_b = stack[i]) === null || _b === void 0 ? void 0 : _b.getFileName();
101
+ if (fileName && fileName !== thisFile) {
102
+ return fileName;
103
+ }
104
+ }
105
+ throw new Error("Could not determine caller file location for agent-relative path");
106
+ }
107
+ /**
108
+ * Resolve file path based on prefix:
109
+ * - ./ or ../ = agent-relative (using caller's location)
110
+ * - otherwise = project root-relative
111
+ */
112
+ function resolveFilePath(filePath) {
113
+ // Always try project root-relative first (most intuitive for users)
114
+ var cwdResolved = path.join(process.cwd(), filePath);
115
+ if (fs.existsSync(cwdResolved)) {
116
+ return cwdResolved;
117
+ }
118
+ if (filePath.startsWith("./") || filePath.startsWith("../")) {
119
+ // Agent-relative: get caller's file location via stack trace
120
+ var callerFile = getCallerFilePath();
121
+ var resolved = path.resolve(path.dirname(callerFile), filePath);
122
+ if (fs.existsSync(resolved)) {
123
+ return resolved;
124
+ }
125
+ // At runtime, callerFile points to compiled JS in dist/.
126
+ // Non-JS assets (e.g. .md instruction files) live in the source tree,
127
+ // so try the equivalent source path with dist/ removed.
128
+ var distIndex = resolved.lastIndexOf(path.sep + "dist" + path.sep);
129
+ if (distIndex !== -1) {
130
+ var sourcePath = resolved.substring(0, distIndex) + resolved.substring(distIndex + 5); // remove "/dist"
131
+ if (fs.existsSync(sourcePath)) {
132
+ return sourcePath;
133
+ }
134
+ }
135
+ return resolved;
136
+ }
137
+ else {
138
+ // Project root-relative
139
+ return cwdResolved;
140
+ }
141
+ }
142
+ /**
143
+ * Load file contents with smart caching
144
+ * Cache is invalidated when file modification time changes
145
+ */
146
+ function loadFile(resolvedPath, originalPath) {
147
+ try {
148
+ var stats = fs.statSync(resolvedPath);
149
+ var mtime = stats.mtimeMs;
150
+ // Check cache
151
+ var cached = fileCache.get(resolvedPath);
152
+ if (cached && cached.mtime === mtime) {
153
+ return cached;
154
+ }
155
+ // Read file and update cache (clear compiled template on file change)
156
+ var content = fs.readFileSync(resolvedPath, "utf-8");
157
+ var entry = { content: content, mtime: mtime };
158
+ fileCache.set(resolvedPath, entry);
159
+ return entry;
160
+ }
161
+ catch (err) {
162
+ if (err.code === "ENOENT") {
163
+ throw new Error("Agent instructions file not found: ".concat(resolvedPath, " (from: ").concat(originalPath, ")"));
164
+ }
165
+ throw new Error("Failed to load agent instructions file: ".concat(resolvedPath, " - ").concat(err.message));
166
+ }
167
+ }
168
+ /**
169
+ * Render template using Handlebars with compiled template caching.
170
+ * Skips Handlebars entirely when content has no template expressions.
171
+ */
172
+ function renderTemplate(cached, data, filePath) {
173
+ if (cached.hasTemplateExpressions === false) {
174
+ return cached.content;
175
+ }
176
+ try {
177
+ if (!cached.compiledTemplate) {
178
+ cached.hasTemplateExpressions = /\{\{/.test(cached.content);
179
+ if (!cached.hasTemplateExpressions) {
180
+ return cached.content;
181
+ }
182
+ cached.compiledTemplate = handlebars_1.default.compile(cached.content);
183
+ }
184
+ return cached.compiledTemplate(data);
185
+ }
186
+ catch (err) {
187
+ throw new Error("Failed to render template in ".concat(filePath, ": ").concat(err.message));
188
+ }
189
+ }
190
+ /**
191
+ * Load agent instructions from external files with template variable support
192
+ *
193
+ * Supports multiple file types: .md, .yaml, .txt, etc. (loaded as plain text)
194
+ *
195
+ * ## Path Resolution
196
+ *
197
+ * - `./` or `../` prefix: Agent-relative path (based on caller's file location)
198
+ * - Otherwise: Project root-relative path
199
+ *
200
+ * ## Template Variables
201
+ *
202
+ * Uses Handlebars templating with automatic context helpers:
203
+ * - `ctx`: Full FlinkContext
204
+ * - `agentContext`: AgentExecuteContext
205
+ * - `user`: Shortcut to agentContext.user
206
+ * - Custom variables from static object or callback
207
+ *
208
+ * ## Caching
209
+ *
210
+ * Files are cached in-memory and reloaded only when modification time changes
211
+ *
212
+ * @example Agent-relative path with static variables
213
+ * ```typescript
214
+ * export default class CarAgent extends FlinkAgent<AppCtx> {
215
+ * id = "car-agent";
216
+ * instructions = agentInstructions("./instructions/car-agent.md");
217
+ * tools = [SearchCarsTool];
218
+ * }
219
+ * ```
220
+ *
221
+ * @example Dynamic variables with callback
222
+ * ```typescript
223
+ * export default class SupportAgent extends FlinkAgent<AppCtx> {
224
+ * id = "support-agent";
225
+ * instructions = agentInstructions(
226
+ * "./instructions/support-agent.md",
227
+ * (ctx, agentContext) => ({
228
+ * isBusinessHours: new Date().getHours() >= 9 && new Date().getHours() < 17,
229
+ * customerTier: agentContext.user?.tier || "standard",
230
+ * })
231
+ * );
232
+ * tools = [CreateTicketTool];
233
+ * }
234
+ * ```
235
+ *
236
+ * @example Template file (instructions/support-agent.md)
237
+ * ```markdown
238
+ * You are a customer support agent.
239
+ *
240
+ * Customer: {{user.name}} ({{customerTier}})
241
+ * {{#if user.isPremium}}
242
+ * ⭐ VIP CUSTOMER - Provide white-glove service!
243
+ * {{/if}}
244
+ *
245
+ * {{#unless isBusinessHours}}
246
+ * NOTE: Outside business hours. Suggest emergency contact.
247
+ * {{/unless}}
248
+ * ```
249
+ *
250
+ * @param filePath - Path to instructions file (./ for agent-relative, otherwise project root)
251
+ * @param variables - Static object or callback returning template variables
252
+ * @returns InstructionsCallback compatible with FlinkAgent.instructions property
253
+ */
254
+ function agentInstructions(filePath, variables) {
255
+ var _this = this;
256
+ // Resolve path once at definition time for early validation
257
+ var resolvedPath = resolveFilePath(filePath);
258
+ // Return callback that will be invoked by FlinkAgent
259
+ return function (ctx, agentContext) { return __awaiter(_this, void 0, void 0, function () {
260
+ var cached, vars, templateData;
261
+ return __generator(this, function (_a) {
262
+ switch (_a.label) {
263
+ case 0:
264
+ cached = loadFile(resolvedPath, filePath);
265
+ // Skip template processing entirely when no expressions exist
266
+ if (cached.hasTemplateExpressions === false) {
267
+ return [2 /*return*/, cached.content];
268
+ }
269
+ vars = {};
270
+ if (!variables) return [3 /*break*/, 3];
271
+ if (!(typeof variables === "function")) return [3 /*break*/, 2];
272
+ return [4 /*yield*/, Promise.resolve(variables(ctx, agentContext))];
273
+ case 1:
274
+ vars = _a.sent();
275
+ return [3 /*break*/, 3];
276
+ case 2:
277
+ vars = variables;
278
+ _a.label = 3;
279
+ case 3:
280
+ templateData = __assign(__assign({}, vars), { ctx: ctx, agentContext: agentContext, user: agentContext.user });
281
+ // Render template (compiles and caches Handlebars template on first call)
282
+ return [2 /*return*/, renderTemplate(cached, templateData, resolvedPath)];
283
+ }
284
+ });
285
+ }); };
286
+ }
@@ -0,0 +1,8 @@
1
+ export * from "./FlinkTool";
2
+ export * from "./FlinkAgent";
3
+ export * from "./ConversationAgent";
4
+ export * from "./InMemoryConversationAgent";
5
+ export * from "./ToolExecutor";
6
+ export * from "./AgentRunner";
7
+ export * from "./LLMAdapter";
8
+ export { agentInstructions } from "./agentInstructions";
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.agentInstructions = void 0;
18
+ __exportStar(require("./FlinkTool"), exports);
19
+ __exportStar(require("./FlinkAgent"), exports);
20
+ __exportStar(require("./ConversationAgent"), exports);
21
+ __exportStar(require("./InMemoryConversationAgent"), exports);
22
+ __exportStar(require("./ToolExecutor"), exports);
23
+ __exportStar(require("./AgentRunner"), exports);
24
+ __exportStar(require("./LLMAdapter"), exports);
25
+ var agentInstructions_1 = require("./agentInstructions");
26
+ Object.defineProperty(exports, "agentInstructions", { enumerable: true, get: function () { return agentInstructions_1.agentInstructions; } });
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Return type for the FlinkAgent.instructions() method.
3
+ *
4
+ * Supported forms:
5
+ * - `string` — Plain text used as-is, OR a file path (see below) which is auto-loaded.
6
+ * - `{ file, params? }` — Explicitly load a file with optional Handlebars template params.
7
+ *
8
+ * **Path resolution** — all paths resolve relative to the **project root** (`process.cwd()`):
9
+ * - `"instructions/foo.md"` → `<project-root>/instructions/foo.md`
10
+ * - `"./instructions/foo.md"` → `<project-root>/instructions/foo.md`
11
+ * - `"/instructions/foo.md"` → `<project-root>/instructions/foo.md` (leading slash stripped)
12
+ *
13
+ * Auto-loaded string extensions: `.md`, `.txt`, `.yaml`, `.yml`, `.xml`, `.toml`, `.ini`, `.json`, `.html`
14
+ *
15
+ * @example Plain text
16
+ * instructions() {
17
+ * return "You are a helpful car assistant.";
18
+ * }
19
+ *
20
+ * @example Auto-load file (project-root-relative)
21
+ * instructions() {
22
+ * return "instructions/car-agent.md";
23
+ * }
24
+ *
25
+ * @example File with template params
26
+ * async instructions(_ctx, agentCtx) {
27
+ * return {
28
+ * file: "instructions/support.md",
29
+ * params: {
30
+ * customerTier: agentCtx.user?.tier || "standard",
31
+ * isBusinessHours: new Date().getHours() >= 9,
32
+ * },
33
+ * };
34
+ * }
35
+ */
36
+ export type InstructionsReturn = string | {
37
+ file: string;
38
+ params?: Record<string, any>;
39
+ };
40
+ /**
41
+ * Resolve an InstructionsReturn value to a plain string.
42
+ * @internal Used by FlinkAgent.toAgentProps()
43
+ */
44
+ export declare function resolveInstructionsReturn(result: InstructionsReturn, ctx: any, agentContext: any): Promise<string>;
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
45
+ var __generator = (this && this.__generator) || function (thisArg, body) {
46
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
47
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
+ function verb(n) { return function (v) { return step([n, v]); }; }
49
+ function step(op) {
50
+ if (f) throw new TypeError("Generator is already executing.");
51
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
52
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
53
+ if (y = 0, t) op = [op[0] & 2, t.value];
54
+ switch (op[0]) {
55
+ case 0: case 1: t = op; break;
56
+ case 4: _.label++; return { value: op[1], done: false };
57
+ case 5: _.label++; y = op[1]; op = [0]; continue;
58
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
+ default:
60
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
+ if (t[2]) _.ops.pop();
65
+ _.trys.pop(); continue;
66
+ }
67
+ op = body.call(thisArg, _);
68
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
+ }
71
+ };
72
+ var __importDefault = (this && this.__importDefault) || function (mod) {
73
+ return (mod && mod.__esModule) ? mod : { "default": mod };
74
+ };
75
+ Object.defineProperty(exports, "__esModule", { value: true });
76
+ exports.resolveInstructionsReturn = resolveInstructionsReturn;
77
+ var fs = __importStar(require("fs"));
78
+ var path = __importStar(require("path"));
79
+ var handlebars_1 = __importDefault(require("handlebars"));
80
+ // Enable {{{{raw}}}}...{{{{/raw}}}} blocks to pass content through unprocessed.
81
+ // Without this, content inside raw blocks is silently dropped.
82
+ handlebars_1.default.registerHelper("raw", function (options) {
83
+ return options.fn(this);
84
+ });
85
+ var fileCache = new Map();
86
+ var IMPORT_REGEX = /\{\{\s*import\s+["']([^"']+)['"]\s*\}\}/g;
87
+ function resolveImports(content, currentDir, visited) {
88
+ if (visited === void 0) { visited = new Set(); }
89
+ return content.replace(IMPORT_REGEX, function (match, importPath) {
90
+ var resolved = path.resolve(currentDir, importPath);
91
+ if (visited.has(resolved)) {
92
+ throw new Error("Circular import detected: ".concat(resolved));
93
+ }
94
+ var nextVisited = new Set(visited);
95
+ nextVisited.add(resolved);
96
+ try {
97
+ var importedContent = fs.readFileSync(resolved, "utf-8");
98
+ return resolveImports(importedContent, path.dirname(resolved), nextVisited);
99
+ }
100
+ catch (err) {
101
+ if (err.code === "ENOENT") {
102
+ throw new Error("Imported markdown file not found: ".concat(resolved, " (imported from: ").concat(currentDir, ")"));
103
+ }
104
+ throw err;
105
+ }
106
+ });
107
+ }
108
+ /**
109
+ * Resolve a file path relative to project root (process.cwd()).
110
+ * Leading `./` and `/` are normalised away — all paths are treated as project-root-relative.
111
+ */
112
+ function resolveFilePath(filePath) {
113
+ // Strip leading slash so "/foo.md" behaves the same as "foo.md"
114
+ var normalised = filePath.replace(/^\/+/, "");
115
+ return path.resolve(process.cwd(), normalised);
116
+ }
117
+ function loadFile(filePath) {
118
+ var resolvedPath = resolveFilePath(filePath);
119
+ try {
120
+ var stats = fs.statSync(resolvedPath);
121
+ var mtime = stats.mtimeMs;
122
+ var cached = fileCache.get(resolvedPath);
123
+ if (cached && cached.mtime === mtime) {
124
+ return cached;
125
+ }
126
+ var content = fs.readFileSync(resolvedPath, "utf-8");
127
+ var resolvedContent = resolveImports(content, path.dirname(resolvedPath));
128
+ var entry = { content: content, resolvedContent: resolvedContent, mtime: mtime };
129
+ fileCache.set(resolvedPath, entry);
130
+ return entry;
131
+ }
132
+ catch (err) {
133
+ if (err.code === "ENOENT") {
134
+ throw new Error("Agent instructions file not found: ".concat(resolvedPath, " (from: ").concat(filePath, ")"));
135
+ }
136
+ throw new Error("Failed to load agent instructions file: ".concat(resolvedPath, " - ").concat(err.message));
137
+ }
138
+ }
139
+ function renderTemplate(entry, data) {
140
+ if (entry.hasTemplateExpressions === false) {
141
+ return entry.resolvedContent;
142
+ }
143
+ if (!entry.compiledTemplate) {
144
+ entry.hasTemplateExpressions = /\{\{/.test(entry.resolvedContent);
145
+ if (!entry.hasTemplateExpressions) {
146
+ return entry.resolvedContent;
147
+ }
148
+ entry.compiledTemplate = handlebars_1.default.compile(entry.resolvedContent);
149
+ }
150
+ return entry.compiledTemplate(data);
151
+ }
152
+ var TEXT_FILE_EXTENSIONS = [".md", ".txt", ".yaml", ".yml", ".xml", ".toml", ".ini", ".json", ".html", ".htm"];
153
+ function isTextFilePath(value) {
154
+ var trimmed = value.trimEnd().toLowerCase();
155
+ return TEXT_FILE_EXTENSIONS.some(function (ext) { return trimmed.endsWith(ext); });
156
+ }
157
+ /**
158
+ * Resolve an InstructionsReturn value to a plain string.
159
+ * @internal Used by FlinkAgent.toAgentProps()
160
+ */
161
+ function resolveInstructionsReturn(result, ctx, agentContext) {
162
+ return __awaiter(this, void 0, void 0, function () {
163
+ var entry_1, templateData_1, file, params, entry, templateData;
164
+ return __generator(this, function (_a) {
165
+ if (typeof result === "string") {
166
+ if (isTextFilePath(result)) {
167
+ entry_1 = loadFile(result.trimEnd());
168
+ templateData_1 = { ctx: ctx, agentContext: agentContext, user: agentContext === null || agentContext === void 0 ? void 0 : agentContext.user };
169
+ return [2 /*return*/, renderTemplate(entry_1, templateData_1)];
170
+ }
171
+ return [2 /*return*/, result];
172
+ }
173
+ file = result.file, params = result.params;
174
+ entry = loadFile(file);
175
+ templateData = __assign(__assign({}, params), { ctx: ctx, agentContext: agentContext, user: agentContext === null || agentContext === void 0 ? void 0 : agentContext.user });
176
+ return [2 /*return*/, renderTemplate(entry, templateData)];
177
+ });
178
+ });
179
+ }
@@ -1,5 +1,5 @@
1
1
  import { FlinkRequest } from "../FlinkHttpHandler";
2
2
  export interface FlinkAuthPlugin {
3
- authenticateRequest: (req: FlinkRequest, permissions: string | string[]) => Promise<boolean>;
3
+ authenticateRequest: (req: FlinkRequest, permissions: string | string[], ctx?: any) => Promise<boolean>;
4
4
  createToken: (payload: any, roles: string[]) => Promise<string>;
5
5
  }
@@ -0,0 +1,20 @@
1
+ import { Response } from "express";
2
+ import { StreamWriter, StreamFormat } from "../FlinkHttpHandler";
3
+ /**
4
+ * Factory for creating StreamWriter instances for SSE and NDJSON streaming.
5
+ *
6
+ * Handles HTTP headers, connection lifecycle, and format-specific serialization.
7
+ */
8
+ export declare class StreamWriterFactory {
9
+ /**
10
+ * Create a StreamWriter for the given format.
11
+ *
12
+ * Sets appropriate HTTP headers and manages the stream lifecycle including
13
+ * client disconnect detection.
14
+ *
15
+ * @param res - Express response object
16
+ * @param format - Stream format (sse or ndjson)
17
+ * @returns StreamWriter instance for writing data to the stream
18
+ */
19
+ static create<T = any>(res: Response, format: StreamFormat): StreamWriter<T>;
20
+ }
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StreamWriterFactory = void 0;
4
+ var FlinkLog_1 = require("../FlinkLog");
5
+ /**
6
+ * Factory for creating StreamWriter instances for SSE and NDJSON streaming.
7
+ *
8
+ * Handles HTTP headers, connection lifecycle, and format-specific serialization.
9
+ */
10
+ var StreamWriterFactory = /** @class */ (function () {
11
+ function StreamWriterFactory() {
12
+ }
13
+ /**
14
+ * Create a StreamWriter for the given format.
15
+ *
16
+ * Sets appropriate HTTP headers and manages the stream lifecycle including
17
+ * client disconnect detection.
18
+ *
19
+ * @param res - Express response object
20
+ * @param format - Stream format (sse or ndjson)
21
+ * @returns StreamWriter instance for writing data to the stream
22
+ */
23
+ StreamWriterFactory.create = function (res, format) {
24
+ // Set appropriate headers based on format
25
+ if (format === "sse") {
26
+ res.setHeader("Content-Type", "text/event-stream");
27
+ res.setHeader("Cache-Control", "no-cache");
28
+ res.setHeader("Connection", "keep-alive");
29
+ res.flushHeaders();
30
+ }
31
+ else if (format === "ndjson") {
32
+ res.setHeader("Content-Type", "application/x-ndjson");
33
+ res.setHeader("Cache-Control", "no-cache");
34
+ res.flushHeaders();
35
+ }
36
+ var isOpen = true;
37
+ // Detect client disconnect
38
+ res.on("close", function () {
39
+ isOpen = false;
40
+ });
41
+ return {
42
+ write: function (data) {
43
+ if (!isOpen)
44
+ return;
45
+ try {
46
+ var json = JSON.stringify(data);
47
+ if (format === "sse") {
48
+ res.write("data: ".concat(json, "\n\n"));
49
+ }
50
+ else if (format === "ndjson") {
51
+ res.write("".concat(json, "\n"));
52
+ }
53
+ }
54
+ catch (err) {
55
+ FlinkLog_1.log.error("StreamWriter serialization error:", { error: err });
56
+ isOpen = false;
57
+ }
58
+ },
59
+ error: function (error) {
60
+ if (!isOpen)
61
+ return;
62
+ var errorMessage = typeof error === "string" ? error : error.message;
63
+ if (format === "sse") {
64
+ res.write("event: error\ndata: ".concat(JSON.stringify({ error: errorMessage }), "\n\n"));
65
+ }
66
+ else if (format === "ndjson") {
67
+ res.write("".concat(JSON.stringify({ error: errorMessage }), "\n"));
68
+ }
69
+ res.end();
70
+ isOpen = false;
71
+ },
72
+ end: function () {
73
+ if (isOpen) {
74
+ res.end();
75
+ isOpen = false;
76
+ }
77
+ },
78
+ isOpen: function () { return isOpen; },
79
+ };
80
+ };
81
+ return StreamWriterFactory;
82
+ }());
83
+ exports.StreamWriterFactory = StreamWriterFactory;