@kalenkevich/agent_007 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/dist/agent/agent.d.ts +17 -0
  2. package/dist/agent/agent.js +6 -0
  3. package/dist/agent/agent.js.map +1 -0
  4. package/dist/agent/agent_event.d.ts +108 -0
  5. package/dist/agent/agent_event.js +56 -0
  6. package/dist/agent/agent_event.js.map +1 -0
  7. package/dist/agent/agent_event_utils.d.ts +5 -0
  8. package/dist/agent/agent_event_utils.js +66 -0
  9. package/dist/agent/agent_event_utils.js.map +1 -0
  10. package/dist/agent/cli_agent/cli_agent.d.ts +41 -0
  11. package/dist/agent/cli_agent/cli_agent.js +324 -0
  12. package/dist/agent/cli_agent/cli_agent.js.map +1 -0
  13. package/dist/agent/cli_agent/system_prompt.d.ts +1 -0
  14. package/dist/agent/cli_agent/system_prompt.js +58 -0
  15. package/dist/agent/cli_agent/system_prompt.js.map +1 -0
  16. package/dist/agent/cli_agent.d.ts +34 -0
  17. package/dist/agent/cli_agent.js +91 -0
  18. package/dist/agent/cli_agent.js.map +1 -0
  19. package/dist/agent/planner_agent/planner_agent.d.ts +28 -0
  20. package/dist/agent/planner_agent/planner_agent.js +102 -0
  21. package/dist/agent/planner_agent/planner_agent.js.map +1 -0
  22. package/dist/agent/request_processor/basic_request_processor.d.ts +17 -0
  23. package/dist/agent/request_processor/basic_request_processor.js +28 -0
  24. package/dist/agent/request_processor/basic_request_processor.js.map +1 -0
  25. package/dist/agent/request_processor/compaction_processor.d.ts +17 -0
  26. package/dist/agent/request_processor/compaction_processor.js +118 -0
  27. package/dist/agent/request_processor/compaction_processor.js.map +1 -0
  28. package/dist/agent/request_processor/request_processor.d.ts +11 -0
  29. package/dist/agent/request_processor/request_processor.js +2 -0
  30. package/dist/agent/request_processor/request_processor.js.map +1 -0
  31. package/dist/cli/init_project_command_handler.d.ts +3 -0
  32. package/dist/cli/init_project_command_handler.js +58 -0
  33. package/dist/cli/init_project_command_handler.js.map +1 -0
  34. package/dist/cli/loader.d.ts +6 -0
  35. package/dist/cli/loader.js +27 -0
  36. package/dist/cli/loader.js.map +1 -0
  37. package/dist/cli/prompt_utils.d.ts +11 -0
  38. package/dist/cli/prompt_utils.js +18 -0
  39. package/dist/cli/prompt_utils.js.map +1 -0
  40. package/dist/cli/run_command.d.ts +6 -0
  41. package/dist/cli/run_command.js +72 -0
  42. package/dist/cli/run_command.js.map +1 -0
  43. package/dist/cli/run_interactive_command.d.ts +6 -0
  44. package/dist/cli/run_interactive_command.js +282 -0
  45. package/dist/cli/run_interactive_command.js.map +1 -0
  46. package/dist/cli/run_noninteractive_command.d.ts +6 -0
  47. package/dist/cli/run_noninteractive_command.js +60 -0
  48. package/dist/cli/run_noninteractive_command.js.map +1 -0
  49. package/dist/cli_entrypoint.d.ts +2 -0
  50. package/dist/cli_entrypoint.js +110 -0
  51. package/dist/cli_entrypoint.js.map +1 -0
  52. package/dist/command/commnad_handler.d.ts +3 -0
  53. package/dist/command/commnad_handler.js +2 -0
  54. package/dist/command/commnad_handler.js.map +1 -0
  55. package/dist/command/init_project_command_handler.d.ts +4 -0
  56. package/dist/command/init_project_command_handler.js +58 -0
  57. package/dist/command/init_project_command_handler.js.map +1 -0
  58. package/dist/config/app_dir.d.ts +1 -0
  59. package/dist/config/app_dir.js +4 -0
  60. package/dist/config/app_dir.js.map +1 -0
  61. package/dist/config/config.d.ts +21 -0
  62. package/dist/config/config.js +2 -0
  63. package/dist/config/config.js.map +1 -0
  64. package/dist/config/config_loader.d.ts +2 -0
  65. package/dist/config/config_loader.js +47 -0
  66. package/dist/config/config_loader.js.map +1 -0
  67. package/dist/config/config_store.d.ts +10 -0
  68. package/dist/config/config_store.js +44 -0
  69. package/dist/config/config_store.js.map +1 -0
  70. package/dist/content.d.ts +51 -0
  71. package/dist/content.js +16 -0
  72. package/dist/content.js.map +1 -0
  73. package/dist/core/functions.d.ts +1 -0
  74. package/dist/core/functions.js +6 -0
  75. package/dist/core/functions.js.map +1 -0
  76. package/dist/core/loop.d.ts +20 -0
  77. package/dist/core/loop.js +121 -0
  78. package/dist/core/loop.js.map +1 -0
  79. package/dist/core/project_service.d.ts +11 -0
  80. package/dist/core/project_service.js +26 -0
  81. package/dist/core/project_service.js.map +1 -0
  82. package/dist/core/run.d.ts +6 -0
  83. package/dist/core/run.js +25 -0
  84. package/dist/core/run.js.map +1 -0
  85. package/dist/index.d.ts +1 -0
  86. package/dist/index.js +2 -0
  87. package/dist/index.js.map +1 -0
  88. package/dist/logger.d.ts +27 -0
  89. package/dist/logger.js +98 -0
  90. package/dist/logger.js.map +1 -0
  91. package/dist/model/adaptive_model.d.ts +16 -0
  92. package/dist/model/adaptive_model.js +57 -0
  93. package/dist/model/adaptive_model.js.map +1 -0
  94. package/dist/model/google/gemini_model.d.ts +15 -0
  95. package/dist/model/google/gemini_model.js +131 -0
  96. package/dist/model/google/gemini_model.js.map +1 -0
  97. package/dist/model/google/gemini_response_utils.d.ts +3 -0
  98. package/dist/model/google/gemini_response_utils.js +36 -0
  99. package/dist/model/google/gemini_response_utils.js.map +1 -0
  100. package/dist/model/google/gemini_streaming_utils.d.ts +28 -0
  101. package/dist/model/google/gemini_streaming_utils.js +235 -0
  102. package/dist/model/google/gemini_streaming_utils.js.map +1 -0
  103. package/dist/model/google/gen_ai_convert_utils.d.ts +6 -0
  104. package/dist/model/google/gen_ai_convert_utils.js +117 -0
  105. package/dist/model/google/gen_ai_convert_utils.js.map +1 -0
  106. package/dist/model/model.d.ts +11 -0
  107. package/dist/model/model.js +2 -0
  108. package/dist/model/model.js.map +1 -0
  109. package/dist/model/registry.d.ts +19 -0
  110. package/dist/model/registry.js +47 -0
  111. package/dist/model/registry.js.map +1 -0
  112. package/dist/model/request.d.ts +13 -0
  113. package/dist/model/request.js +2 -0
  114. package/dist/model/request.js.map +1 -0
  115. package/dist/model/request_builder_utils.d.ts +19 -0
  116. package/dist/model/request_builder_utils.js +43 -0
  117. package/dist/model/request_builder_utils.js.map +1 -0
  118. package/dist/model/response.d.ts +60 -0
  119. package/dist/model/response.js +2 -0
  120. package/dist/model/response.js.map +1 -0
  121. package/dist/model/util_llm.d.ts +10 -0
  122. package/dist/model/util_llm.js +149 -0
  123. package/dist/model/util_llm.js.map +1 -0
  124. package/dist/session/session.d.ts +14 -0
  125. package/dist/session/session.js +2 -0
  126. package/dist/session/session.js.map +1 -0
  127. package/dist/session/session_file_service.d.ts +23 -0
  128. package/dist/session/session_file_service.js +147 -0
  129. package/dist/session/session_file_service.js.map +1 -0
  130. package/dist/skills/skill.d.ts +23 -0
  131. package/dist/skills/skill.js +12 -0
  132. package/dist/skills/skill.js.map +1 -0
  133. package/dist/tools/build_in/find.d.ts +3 -0
  134. package/dist/tools/build_in/find.js +71 -0
  135. package/dist/tools/build_in/find.js.map +1 -0
  136. package/dist/tools/build_in/grep.d.ts +3 -0
  137. package/dist/tools/build_in/grep.js +97 -0
  138. package/dist/tools/build_in/grep.js.map +1 -0
  139. package/dist/tools/build_in/index.d.ts +1 -0
  140. package/dist/tools/build_in/index.js +13 -0
  141. package/dist/tools/build_in/index.js.map +1 -0
  142. package/dist/tools/build_in/list_dir.d.ts +3 -0
  143. package/dist/tools/build_in/list_dir.js +46 -0
  144. package/dist/tools/build_in/list_dir.js.map +1 -0
  145. package/dist/tools/build_in/view_file.d.ts +3 -0
  146. package/dist/tools/build_in/view_file.js +44 -0
  147. package/dist/tools/build_in/view_file.js.map +1 -0
  148. package/dist/tools/build_in/write_file.d.ts +3 -0
  149. package/dist/tools/build_in/write_file.js +50 -0
  150. package/dist/tools/build_in/write_file.js.map +1 -0
  151. package/dist/tools/functional_tool.d.ts +18 -0
  152. package/dist/tools/functional_tool.js +20 -0
  153. package/dist/tools/functional_tool.js.map +1 -0
  154. package/dist/tools/schema.d.ts +86 -0
  155. package/dist/tools/schema.js +37 -0
  156. package/dist/tools/schema.js.map +1 -0
  157. package/dist/tools/tool.d.ts +30 -0
  158. package/dist/tools/tool.js +9 -0
  159. package/dist/tools/tool.js.map +1 -0
  160. package/dist/tools/tool_call_policy.d.ts +4 -0
  161. package/dist/tools/tool_call_policy.js +4 -0
  162. package/dist/tools/tool_call_policy.js.map +1 -0
  163. package/dist/tools/tool_policy.d.ts +4 -0
  164. package/dist/tools/tool_policy.js +4 -0
  165. package/dist/tools/tool_policy.js.map +1 -0
  166. package/dist/ui/ui.d.ts +1 -0
  167. package/dist/ui/ui.js +2 -0
  168. package/dist/ui/ui.js.map +1 -0
  169. package/dist/user_input.d.ts +20 -0
  170. package/dist/user_input.js +21 -0
  171. package/dist/user_input.js.map +1 -0
  172. package/package.json +44 -0
  173. package/src/agent/agent.ts +18 -0
  174. package/src/agent/agent_event.ts +171 -0
  175. package/src/agent/agent_event_utils.ts +87 -0
  176. package/src/agent/cli_agent/cli_agent.ts +418 -0
  177. package/src/agent/cli_agent/system_prompt.ts +57 -0
  178. package/src/agent/planner_agent/planner_agent.ts +136 -0
  179. package/src/agent/request_processor/basic_request_processor.ts +46 -0
  180. package/src/agent/request_processor/compaction_processor.ts +164 -0
  181. package/src/agent/request_processor/request_processor.ts +13 -0
  182. package/src/cli/loader.ts +27 -0
  183. package/src/cli/prompt_utils.ts +19 -0
  184. package/src/cli/run_interactive_command.ts +337 -0
  185. package/src/cli/run_noninteractive_command.ts +74 -0
  186. package/src/cli_entrypoint.ts +128 -0
  187. package/src/command/commnad_handler.ts +3 -0
  188. package/src/command/init_project_command_handler.ts +66 -0
  189. package/src/config/app_dir.ts +4 -0
  190. package/src/config/config.ts +24 -0
  191. package/src/config/config_loader.ts +57 -0
  192. package/src/config/config_store.ts +50 -0
  193. package/src/content.ts +87 -0
  194. package/src/core/functions.ts +7 -0
  195. package/src/core/loop.ts +165 -0
  196. package/src/core/project_service.ts +38 -0
  197. package/src/core/run.ts +36 -0
  198. package/src/index.ts +1 -0
  199. package/src/logger.ts +128 -0
  200. package/src/model/adaptive_model.ts +77 -0
  201. package/src/model/google/gemini_model.ts +194 -0
  202. package/src/model/google/gemini_response_utils.ts +46 -0
  203. package/src/model/google/gemini_streaming_utils.ts +294 -0
  204. package/src/model/google/gen_ai_convert_utils.ts +149 -0
  205. package/src/model/model.ts +18 -0
  206. package/src/model/registry.ts +61 -0
  207. package/src/model/request.ts +15 -0
  208. package/src/model/request_builder_utils.ts +79 -0
  209. package/src/model/response.ts +66 -0
  210. package/src/model/util_llm.ts +167 -0
  211. package/src/session/session.ts +16 -0
  212. package/src/session/session_file_service.ts +207 -0
  213. package/src/skills/skill.ts +38 -0
  214. package/src/tools/build_in/find.ts +80 -0
  215. package/src/tools/build_in/grep.ts +101 -0
  216. package/src/tools/build_in/index.ts +13 -0
  217. package/src/tools/build_in/list_dir.ts +50 -0
  218. package/src/tools/build_in/view_file.ts +47 -0
  219. package/src/tools/build_in/write_file.ts +53 -0
  220. package/src/tools/functional_tool.ts +59 -0
  221. package/src/tools/schema.ts +87 -0
  222. package/src/tools/tool.ts +68 -0
  223. package/src/tools/tool_call_policy.ts +7 -0
  224. package/src/ui/ui.ts +0 -0
  225. package/src/user_input.ts +51 -0
  226. package/tests/integration/util_llm_test.ts +42 -0
  227. package/tests/unit/adaptive_model_test.ts +122 -0
  228. package/tests/unit/agent/request_processor/compaction_processor_test.ts +121 -0
  229. package/tests/unit/cli/prompt_utils_test.ts +47 -0
  230. package/tests/unit/cli_agent_test.ts +476 -0
  231. package/tests/unit/content_test.ts +56 -0
  232. package/tests/unit/logger_test.ts +109 -0
  233. package/tests/unit/loop_test.ts +141 -0
  234. package/tests/unit/model/gemini_model_test.ts +111 -0
  235. package/tests/unit/planner_agent_test.ts +52 -0
  236. package/tests/unit/project_service_test.ts +102 -0
  237. package/tests/unit/session_file_service_test.ts +160 -0
  238. package/tests/unit/tools/find_test.ts +40 -0
  239. package/tests/unit/tools/grep_test.ts +43 -0
  240. package/tests/unit/tools/list_dir_test.ts +32 -0
  241. package/tests/unit/tools/view_file_test.ts +32 -0
  242. package/tests/unit/tools/write_file_test.ts +44 -0
  243. package/tests/unit/user_input_test.ts +55 -0
  244. package/tests/unit/util_llm_test.ts +61 -0
  245. package/todo.md +29 -0
  246. package/tsconfig.json +33 -0
  247. package/vitest.config.ts +33 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli_entrypoint.js","sourceRoot":"","sources":["../src/cli_entrypoint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export interface CommandHandler {
2
+ handle(): Promise<void>;
3
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=commnad_handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commnad_handler.js","sourceRoot":"","sources":["../../src/command/commnad_handler.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { type CommandHandler } from "./commnad_handler.js";
2
+ export declare class InitProjectCommandHandler implements CommandHandler {
3
+ handle(): Promise<void>;
4
+ }
@@ -0,0 +1,58 @@
1
+ import * as fs from "node:fs/promises";
2
+ import * as path from "node:path";
3
+ import { projectService } from "../core/project_service.js";
4
+ import { loadConfig } from "../config/config_loader.js";
5
+ import { UtilLlm } from "../model/util_llm.js";
6
+ import { resolveLlmModel } from "../model/registry.js";
7
+ import {} from "./commnad_handler.js";
8
+ import { logger } from "../logger.js";
9
+ export class InitProjectCommandHandler {
10
+ async handle() {
11
+ const cwd = process.cwd();
12
+ const projectId = projectService.getProjectId();
13
+ logger.info(`Initializing project in ${cwd}`);
14
+ logger.info(`Project ID: ${projectId}`);
15
+ // Gather context
16
+ let context = `Project Path: ${cwd}\n\n`;
17
+ // List top level files and dirs
18
+ try {
19
+ const files = await fs.readdir(cwd);
20
+ context += `Top level files and directories:\n${files.join("\n")}\n\n`;
21
+ }
22
+ catch (e) {
23
+ logger.error("Failed to read directory:", e);
24
+ }
25
+ // Read package.json if exists
26
+ const packageJsonPath = path.join(cwd, "package.json");
27
+ try {
28
+ const packageJson = await fs.readFile(packageJsonPath, "utf-8");
29
+ context += `package.json:\n${packageJson}\n\n`;
30
+ }
31
+ catch (e) {
32
+ // Ignore if doesn't exist
33
+ }
34
+ // Read tsconfig.json if exists
35
+ const tsconfigPath = path.join(cwd, "tsconfig.json");
36
+ try {
37
+ const tsconfig = await fs.readFile(tsconfigPath, "utf-8");
38
+ context += `tsconfig.json:\n${tsconfig}\n\n`;
39
+ }
40
+ catch (e) {
41
+ // Ignore if doesn't exist
42
+ }
43
+ // Load config for UtilLlm
44
+ const config = await loadConfig();
45
+ const utilModelConfig = config.models.util;
46
+ if (!utilModelConfig) {
47
+ throw new Error("Util model config is missing");
48
+ }
49
+ const UtilModelClass = resolveLlmModel(utilModelConfig.modelName);
50
+ const utilLlm = new UtilLlm(new UtilModelClass(utilModelConfig));
51
+ logger.info("Scanning project constants with LLM...");
52
+ const constants = await utilLlm.scanProjectConstants(context);
53
+ logger.info("Saving constants...");
54
+ await projectService.saveConstants(constants);
55
+ logger.info(`Project constants saved to ${projectService.getConstantsPath()} in config store.`);
56
+ }
57
+ }
58
+ //# sourceMappingURL=init_project_command_handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init_project_command_handler.js","sourceRoot":"","sources":["../../src/command/init_project_command_handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAuB,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,OAAO,yBAAyB;IACpC,KAAK,CAAC,MAAM;QACV,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,cAAc,CAAC,YAAY,EAAE,CAAC;QAEhD,MAAM,CAAC,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC;QAExC,iBAAiB;QACjB,IAAI,OAAO,GAAG,iBAAiB,GAAG,MAAM,CAAC;QAEzC,gCAAgC;QAChC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,OAAO,IAAI,qCAAqC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACzE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,8BAA8B;QAC9B,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAChE,OAAO,IAAI,kBAAkB,WAAW,MAAM,CAAC;QACjD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,0BAA0B;QAC5B,CAAC;QAED,+BAA+B;QAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QACrD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAC1D,OAAO,IAAI,mBAAmB,QAAQ,MAAM,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,0BAA0B;QAC5B,CAAC;QAED,0BAA0B;QAC1B,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAClC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QAC3C,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,cAAc,GAAG,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;QAEjE,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAE9D,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACnC,MAAM,cAAc,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAE9C,MAAM,CAAC,IAAI,CACT,8BAA8B,cAAc,CAAC,gBAAgB,EAAE,mBAAmB,CACnF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export declare const APP_FILE_DIR: string;
@@ -0,0 +1,4 @@
1
+ import * as path from "node:path";
2
+ import * as os from "node:os";
3
+ export const APP_FILE_DIR = path.join(os.homedir(), ".agent_007");
4
+ //# sourceMappingURL=app_dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app_dir.js","sourceRoot":"","sources":["../../src/config/app_dir.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { type ThinkingConfig } from "../model/request.js";
2
+ export interface ModelConfig {
3
+ modelName: string;
4
+ apiKey: string;
5
+ tokenLimit?: number;
6
+ }
7
+ export interface CompactionConfig {
8
+ enabled: boolean;
9
+ strategy: "truncate" | "summarize" | "hybrid" | "compact";
10
+ maxTokens: number;
11
+ triggerThreshold?: number;
12
+ }
13
+ export interface Config {
14
+ models: {
15
+ main: ModelConfig;
16
+ fallback?: ModelConfig[];
17
+ util?: ModelConfig;
18
+ };
19
+ thinkingConfig: ThinkingConfig;
20
+ compactionConfig: CompactionConfig;
21
+ }
@@ -0,0 +1,2 @@
1
+ import {} from "../model/request.js";
2
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Config } from "./config.js";
2
+ export declare function loadConfig(): Promise<Config>;
@@ -0,0 +1,47 @@
1
+ import { configStore } from "./config_store.js";
2
+ export async function loadConfig() {
3
+ const geminiApiKey = process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY || "";
4
+ let thinkingLevel = process.env.THINKING_LEVEL;
5
+ if (!thinkingLevel) {
6
+ const storedLevel = await configStore.get("thinking_level");
7
+ if (storedLevel) {
8
+ thinkingLevel = storedLevel;
9
+ }
10
+ }
11
+ return {
12
+ models: {
13
+ main: {
14
+ modelName: process.env.MODEL_NAME || "gemini-3.1-pro-preview",
15
+ apiKey: geminiApiKey,
16
+ },
17
+ fallback: [
18
+ {
19
+ modelName: process.env.FALLBACK_MODEL_NAME || "gemini-2.5-pro",
20
+ apiKey: geminiApiKey,
21
+ },
22
+ {
23
+ modelName: process.env.FALLBACK_MODEL_NAME || "gemini-3-flash-preview",
24
+ apiKey: geminiApiKey,
25
+ },
26
+ {
27
+ modelName: process.env.FALLBACK_MODEL_NAME || "gemini-2.5-flash",
28
+ apiKey: geminiApiKey,
29
+ },
30
+ ],
31
+ util: {
32
+ modelName: process.env.UTIL_MODEL_NAME || "gemini-3.1-flash-lite-preview",
33
+ apiKey: geminiApiKey,
34
+ },
35
+ },
36
+ thinkingConfig: {
37
+ enabled: process.env.ENABLE_THINKING !== "false",
38
+ level: thinkingLevel,
39
+ },
40
+ compactionConfig: {
41
+ maxTokens: 10000,
42
+ enabled: process.env.ENABLE_COMPACTION !== "false",
43
+ strategy: process.env.COMPACTION_STRATEGY,
44
+ },
45
+ };
46
+ }
47
+ //# sourceMappingURL=config_loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config_loader.js","sourceRoot":"","sources":["../../src/config/config_loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,YAAY,GAChB,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;IAEjE,IAAI,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,cAAqD,CAAC;IACtF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC5D,IAAI,WAAW,EAAE,CAAC;YAChB,aAAa,GAAG,WAAsC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE;gBACJ,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,wBAAwB;gBAC7D,MAAM,EAAE,YAAY;aACrB;YACD,QAAQ,EAAE;gBACR;oBACE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,gBAAgB;oBAC9D,MAAM,EAAE,YAAY;iBACrB;gBACD;oBACE,SAAS,EACP,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,wBAAwB;oBAC7D,MAAM,EAAE,YAAY;iBACrB;gBACD;oBACE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,kBAAkB;oBAChE,MAAM,EAAE,YAAY;iBACrB;aACF;YACD,IAAI,EAAE;gBACJ,SAAS,EACP,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,+BAA+B;gBAChE,MAAM,EAAE,YAAY;aACrB;SACF;QACD,cAAc,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,OAAO;YAChD,KAAK,EAAE,aAAa;SACrB;QACD,gBAAgB,EAAE;YAChB,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,OAAO;YAClD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,mBAGV;SACb;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare class ConfigStore {
2
+ private configDir;
3
+ constructor();
4
+ private ensureDir;
5
+ getApiKey(): Promise<string | null>;
6
+ setApiKey(key: string): Promise<void>;
7
+ get(filename: string): Promise<string | null>;
8
+ set(filename: string, value: string): Promise<void>;
9
+ }
10
+ export declare const configStore: ConfigStore;
@@ -0,0 +1,44 @@
1
+ import * as fs from "node:fs/promises";
2
+ import * as path from "node:path";
3
+ import { APP_FILE_DIR } from "./app_dir.js";
4
+ export class ConfigStore {
5
+ constructor() {
6
+ this.configDir = APP_FILE_DIR;
7
+ }
8
+ async ensureDir() {
9
+ await fs.mkdir(this.configDir, { recursive: true });
10
+ }
11
+ async getApiKey() {
12
+ const keyFilePath = path.join(this.configDir, "api_key");
13
+ try {
14
+ const content = await fs.readFile(keyFilePath, "utf-8");
15
+ return content.trim();
16
+ }
17
+ catch (error) {
18
+ return null;
19
+ }
20
+ }
21
+ async setApiKey(key) {
22
+ await this.ensureDir();
23
+ const keyFilePath = path.join(this.configDir, "api_key");
24
+ await fs.writeFile(keyFilePath, key.trim(), "utf-8");
25
+ }
26
+ async get(filename) {
27
+ const filePath = path.join(this.configDir, filename);
28
+ try {
29
+ const content = await fs.readFile(filePath, "utf-8");
30
+ return content.trim();
31
+ }
32
+ catch (error) {
33
+ return null;
34
+ }
35
+ }
36
+ async set(filename, value) {
37
+ await this.ensureDir();
38
+ const filePath = path.join(this.configDir, filename);
39
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
40
+ await fs.writeFile(filePath, value.trim(), "utf-8");
41
+ }
42
+ }
43
+ export const configStore = new ConfigStore();
44
+ //# sourceMappingURL=config_store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config_store.js","sourceRoot":"","sources":["../../src/config/config_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,OAAO,WAAW;IAGtB;QACE,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACxD,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACzD,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,QAAgB;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,QAAgB,EAAE,KAAa;QACvC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACrD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC"}
@@ -0,0 +1,51 @@
1
+ export type ContentRole = "user" | "agent" | "developer";
2
+ export interface Content {
3
+ role: ContentRole;
4
+ parts: ContentPart[];
5
+ }
6
+ export type ContentPart = TextContentPart | ThoughtContentPart | MediaContentPart | FunctionCallContentPart | FunctionResponseContentPart;
7
+ export interface TextContentPart {
8
+ type: "text";
9
+ text: string;
10
+ }
11
+ export declare function isTextContentPart(part: ContentPart): part is TextContentPart;
12
+ export interface ThoughtContentPart {
13
+ type: "thought";
14
+ thought: string;
15
+ thoughtSignature?: string;
16
+ }
17
+ export declare function isThoughtContentPart(part: ContentPart): part is ThoughtContentPart;
18
+ export interface MediaContentPart {
19
+ type: "media";
20
+ data?: string;
21
+ uri?: string;
22
+ mimeType?: string;
23
+ }
24
+ export declare function isMediaContentPart(part: ContentPart): part is MediaContentPart;
25
+ export interface FunctionCallContentPart {
26
+ type: "function_call";
27
+ id?: string;
28
+ args?: Record<string, unknown>;
29
+ partialArgs?: PartialArg[];
30
+ name?: string;
31
+ willContinue?: boolean;
32
+ thoughtSignature?: string;
33
+ }
34
+ export declare function isFunctionCallContentPart(part: ContentPart): part is FunctionCallContentPart;
35
+ export interface FunctionResponseContentPart {
36
+ type: "function_response";
37
+ willContinue?: boolean;
38
+ id?: string;
39
+ name?: string;
40
+ response?: Record<string, unknown>;
41
+ thoughtSignature?: string;
42
+ }
43
+ export declare function isFunctionResponseContentPart(part: ContentPart): part is FunctionResponseContentPart;
44
+ export interface PartialArg {
45
+ boolValue?: boolean;
46
+ jsonPath?: string;
47
+ nullValue?: "NULL_VALUE";
48
+ numberValue?: number;
49
+ stringValue?: string;
50
+ willContinue?: boolean;
51
+ }
@@ -0,0 +1,16 @@
1
+ export function isTextContentPart(part) {
2
+ return part.type === "text";
3
+ }
4
+ export function isThoughtContentPart(part) {
5
+ return part.type === "thought";
6
+ }
7
+ export function isMediaContentPart(part) {
8
+ return part.type === "media";
9
+ }
10
+ export function isFunctionCallContentPart(part) {
11
+ return part.type === "function_call";
12
+ }
13
+ export function isFunctionResponseContentPart(part) {
14
+ return part.type === "function_response";
15
+ }
16
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IACjD,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAC9B,CAAC;AAQD,MAAM,UAAU,oBAAoB,CAClC,IAAiB;IAEjB,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;AACjC,CAAC;AASD,MAAM,UAAU,kBAAkB,CAChC,IAAiB;IAEjB,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;AAC/B,CAAC;AAYD,MAAM,UAAU,yBAAyB,CACvC,IAAiB;IAEjB,OAAO,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC;AACvC,CAAC;AAWD,MAAM,UAAU,6BAA6B,CAC3C,IAAiB;IAEjB,OAAO,IAAI,CAAC,IAAI,KAAK,mBAAmB,CAAC;AAC3C,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function generateClientFunctionCallId(): string;
@@ -0,0 +1,6 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ const FUNCTION_CALL_ID_PREFIX = 'kalenkevich_agent_';
3
+ export function generateClientFunctionCallId() {
4
+ return `${FUNCTION_CALL_ID_PREFIX}${randomUUID()}`;
5
+ }
6
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../src/core/functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AAEvC,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAErD,MAAM,UAAU,4BAA4B;IAC1C,OAAO,GAAG,uBAAuB,GAAG,UAAU,EAAE,EAAE,CAAC;AACrD,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import type { UserInput } from "../user_input.js";
3
+ import type { Config } from "../config/config.js";
4
+ export declare enum AgentLoopType {
5
+ AGENT_EVENT = "AGENT_EVENT"
6
+ }
7
+ export declare class CoreAgentLoop extends EventEmitter {
8
+ private agent?;
9
+ private initialized;
10
+ private currentRun?;
11
+ private config;
12
+ private sessionService;
13
+ private sessionId?;
14
+ private utilLlm?;
15
+ private sessionTitleGenerated;
16
+ constructor(config: Config, sessionId?: string);
17
+ private init;
18
+ run(userInput: UserInput): Promise<void>;
19
+ abort(): Promise<void>;
20
+ }
@@ -0,0 +1,121 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import { CliAgent } from "../agent/cli_agent/cli_agent.js";
3
+ import { Run } from "./run.js";
4
+ import { AdaptiveLlmModel } from "../model/adaptive_model.js";
5
+ import { randomUUID } from "node:crypto";
6
+ import { UtilLlm } from "../model/util_llm.js";
7
+ import { AgentEventType, } from "../agent/agent_event.js";
8
+ import { logger } from "../logger.js";
9
+ import { SessionFileService } from "../session/session_file_service.js";
10
+ import { resolveLlmModel } from "../model/registry.js";
11
+ import { projectService } from "./project_service.js";
12
+ import { CLI_AGENT_SYSTEM_PROMPT } from "../agent/cli_agent/system_prompt.js";
13
+ export var AgentLoopType;
14
+ (function (AgentLoopType) {
15
+ AgentLoopType["AGENT_EVENT"] = "AGENT_EVENT";
16
+ })(AgentLoopType || (AgentLoopType = {}));
17
+ export class CoreAgentLoop extends EventEmitter {
18
+ constructor(config, sessionId) {
19
+ super();
20
+ this.initialized = false;
21
+ this.sessionTitleGenerated = false;
22
+ this.config = config;
23
+ this.sessionId = sessionId;
24
+ this.sessionService = new SessionFileService();
25
+ }
26
+ async init() {
27
+ if (this.initialized) {
28
+ return;
29
+ }
30
+ let history = [];
31
+ if (this.sessionId) {
32
+ const session = await this.sessionService.getSession(this.sessionId);
33
+ history = session.events;
34
+ }
35
+ const model = new AdaptiveLlmModel(this.config.models);
36
+ const constantsStr = await projectService.getConstants();
37
+ let instructions = CLI_AGENT_SYSTEM_PROMPT;
38
+ if (constantsStr) {
39
+ instructions += `\n\nProject Constants and Conventions:\n${constantsStr}`;
40
+ }
41
+ this.agent = new CliAgent({
42
+ model: model,
43
+ thinkingConfig: this.config.thinkingConfig,
44
+ history,
45
+ instructions,
46
+ });
47
+ const utilModelConfig = this.config.models.util;
48
+ if (!utilModelConfig) {
49
+ throw new Error("Util model config is missing");
50
+ }
51
+ const UtilModelClass = resolveLlmModel(utilModelConfig.modelName);
52
+ this.utilLlm = new UtilLlm(new UtilModelClass(utilModelConfig));
53
+ if (!this.sessionId) {
54
+ const session = await this.sessionService.createSession(this.agent.name, []);
55
+ this.sessionId = session.id;
56
+ }
57
+ this.initialized = true;
58
+ logger.debug("[CoreAgentLoop] initialized");
59
+ }
60
+ async run(userInput) {
61
+ logger.debug("[CoreAgentLoop] run called with input:", JSON.stringify(userInput, null, 2));
62
+ await this.currentRun?.wait();
63
+ this.currentRun = new Run();
64
+ this.currentRun.start();
65
+ await this.init();
66
+ let streamId = "unknown";
67
+ try {
68
+ for await (const event of this.agent.run(userInput)) {
69
+ streamId = event.streamId;
70
+ if (this.sessionId) {
71
+ this.sessionService.appendEvent(this.sessionId, event);
72
+ }
73
+ this.emit(AgentLoopType.AGENT_EVENT, event);
74
+ }
75
+ if (!this.sessionTitleGenerated && this.sessionId) {
76
+ const sessionMeta = await this.sessionService.getSessionMetadata(this.sessionId);
77
+ if (sessionMeta && !sessionMeta.title) {
78
+ const session = await this.sessionService.getSession(this.sessionId);
79
+ const userMessages = session.events.filter((e) => e.type === AgentEventType.MESSAGE && e.role === "user");
80
+ const agentMessages = session.events.filter((e) => e.type === AgentEventType.MESSAGE && e.role === "agent");
81
+ if (userMessages.length >= 1 && agentMessages.length >= 1) {
82
+ const title = await this.utilLlm.generateSessionTitle(session.events);
83
+ await this.sessionService.updateSession(this.sessionId, {
84
+ title,
85
+ });
86
+ this.sessionTitleGenerated = true;
87
+ logger.debug(`[CoreAgentLoop] Generated session title: ${title}`);
88
+ }
89
+ }
90
+ }
91
+ }
92
+ catch (e) {
93
+ logger.error("[CoreAgentLoop] run error:", e);
94
+ const error = e;
95
+ const errorEvent = {
96
+ id: randomUUID(),
97
+ streamId: streamId,
98
+ timestamp: new Date().toISOString(),
99
+ role: "agent",
100
+ type: AgentEventType.ERROR,
101
+ statusCode: 500,
102
+ errorMessage: error.message || String(error),
103
+ fatal: true,
104
+ };
105
+ if (this.sessionId) {
106
+ this.sessionService.appendEvent(this.sessionId, errorEvent);
107
+ }
108
+ this.emit(AgentLoopType.AGENT_EVENT, errorEvent);
109
+ }
110
+ finally {
111
+ this.currentRun.finish();
112
+ this.currentRun = undefined;
113
+ }
114
+ }
115
+ async abort() {
116
+ if (this.currentRun) {
117
+ this.agent?.abort();
118
+ }
119
+ }
120
+ }
121
+ //# sourceMappingURL=loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/core/loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare class ProjectService {
2
+ private cwd;
3
+ private projectId;
4
+ constructor(cwd?: string);
5
+ getProjectId(): string;
6
+ getConstantsPath(): string;
7
+ getConstants(): Promise<string | null>;
8
+ saveConstants(constants: any): Promise<void>;
9
+ isInitialized(): Promise<boolean>;
10
+ }
11
+ export declare const projectService: ProjectService;
@@ -0,0 +1,26 @@
1
+ import { createHash } from "node:crypto";
2
+ import { configStore } from "../config/config_store.js";
3
+ export class ProjectService {
4
+ constructor(cwd = process.cwd()) {
5
+ this.cwd = cwd;
6
+ this.projectId = createHash("sha256").update(this.cwd).digest("hex");
7
+ }
8
+ getProjectId() {
9
+ return this.projectId;
10
+ }
11
+ getConstantsPath() {
12
+ return `projects/${this.projectId}/constants.json`;
13
+ }
14
+ async getConstants() {
15
+ return await configStore.get(this.getConstantsPath());
16
+ }
17
+ async saveConstants(constants) {
18
+ await configStore.set(this.getConstantsPath(), JSON.stringify(constants, null, 2));
19
+ }
20
+ async isInitialized() {
21
+ const constants = await this.getConstants();
22
+ return constants !== null;
23
+ }
24
+ }
25
+ export const projectService = new ProjectService();
26
+ //# sourceMappingURL=project_service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project_service.js","sourceRoot":"","sources":["../../src/core/project_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,OAAO,cAAc;IAIzB,YAAY,MAAc,OAAO,CAAC,GAAG,EAAE;QACrC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,gBAAgB;QACd,OAAO,YAAY,IAAI,CAAC,SAAS,iBAAiB,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,OAAO,MAAM,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAc;QAChC,MAAM,WAAW,CAAC,GAAG,CACnB,IAAI,CAAC,gBAAgB,EAAE,EACvB,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CACnC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5C,OAAO,SAAS,KAAK,IAAI,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare class Run {
2
+ private deferred?;
3
+ start(): void;
4
+ finish(): void;
5
+ wait(): Promise<void>;
6
+ }
@@ -0,0 +1,25 @@
1
+ function createDeferred() {
2
+ let resolve;
3
+ let reject;
4
+ const promise = new Promise((res, rej) => {
5
+ resolve = res;
6
+ reject = rej;
7
+ });
8
+ return { promise, resolve: resolve, reject: reject };
9
+ }
10
+ export class Run {
11
+ start() {
12
+ this.deferred = createDeferred();
13
+ }
14
+ finish() {
15
+ this.deferred?.resolve();
16
+ this.deferred = undefined;
17
+ }
18
+ wait() {
19
+ if (!this.deferred) {
20
+ return Promise.resolve();
21
+ }
22
+ return this.deferred.promise;
23
+ }
24
+ }
25
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/core/run.ts"],"names":[],"mappings":"AAMA,SAAS,cAAc;IACrB,IAAI,OAAmB,CAAC;IACxB,IAAI,MAA8B,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC7C,OAAO,GAAG,GAAG,CAAC;QACd,MAAM,GAAG,GAAG,CAAC;IACf,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAQ,EAAE,MAAM,EAAE,MAAO,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,OAAO,GAAG;IAGd,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,cAAc,EAAE,CAAC;IACnC,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export { type Agent } from "./agent/agent.js";
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export {} from "./agent/agent.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,27 @@
1
+ export interface LogTransport {
2
+ enabled: boolean;
3
+ log(level: string, formattedMessage: string, args: any[]): void;
4
+ }
5
+ export declare class ConsoleTransport implements LogTransport {
6
+ enabled: boolean;
7
+ constructor(enabled: boolean);
8
+ log(level: string, formattedMessage: string, args: any[]): void;
9
+ }
10
+ export declare class FileTransport implements LogTransport {
11
+ private logFile;
12
+ enabled: boolean;
13
+ constructor(enabled: boolean, logFile: string);
14
+ log(level: string, formattedMessage: string, args: any[]): void;
15
+ }
16
+ export declare class Logger {
17
+ private transports;
18
+ constructor(transports?: LogTransport[]);
19
+ getTransports(): LogTransport[];
20
+ private formatMessage;
21
+ log(...args: any[]): void;
22
+ debug(...args: any[]): void;
23
+ info(...args: any[]): void;
24
+ warn(...args: any[]): void;
25
+ error(...args: any[]): void;
26
+ }
27
+ export declare const logger: Logger;