@itphx/synth-core 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (510) hide show
  1. package/definitions/protected-paths.json +36 -0
  2. package/definitions/shell-policy.json +36 -0
  3. package/dist/definitions/protected-paths.json +36 -0
  4. package/dist/definitions/shell-policy.json +36 -0
  5. package/dist/engine/agents/definitions/admin.json +3 -1
  6. package/dist/engine/agents/definitions/analyst.json +3 -1
  7. package/dist/engine/agents/definitions/assistant.json +2 -2
  8. package/dist/engine/agents/definitions/auditor.json +4 -1
  9. package/dist/engine/agents/definitions/developer.json +4 -1
  10. package/dist/engine/agents/definitions/devops.json +4 -1
  11. package/dist/engine/agents/definitions/explore.json +3 -3
  12. package/dist/engine/agents/definitions/general.json +2 -2
  13. package/dist/engine/agents/definitions/pm.json +5 -1
  14. package/dist/engine/agents/definitions/qa.json +4 -1
  15. package/dist/engine/agents/definitions/title.json +2 -2
  16. package/dist/engine/agents/index.d.ts +4 -0
  17. package/dist/engine/agents/index.d.ts.map +1 -1
  18. package/dist/engine/agents/index.js +9 -3
  19. package/dist/engine/agents/index.js.map +1 -1
  20. package/dist/engine/agents/mode.d.ts +5 -3
  21. package/dist/engine/agents/mode.d.ts.map +1 -1
  22. package/dist/engine/agents/mode.js +6 -6
  23. package/dist/engine/agents/mode.js.map +1 -1
  24. package/dist/engine/agents/mode.test.js +9 -3
  25. package/dist/engine/agents/mode.test.js.map +1 -1
  26. package/dist/engine/agents/normalize.d.ts +9 -0
  27. package/dist/engine/agents/normalize.d.ts.map +1 -0
  28. package/dist/engine/agents/normalize.js +22 -0
  29. package/dist/engine/agents/normalize.js.map +1 -0
  30. package/dist/engine/agents/normalize.test.d.ts +2 -0
  31. package/dist/engine/agents/normalize.test.d.ts.map +1 -0
  32. package/dist/engine/agents/normalize.test.js +37 -0
  33. package/dist/engine/agents/normalize.test.js.map +1 -0
  34. package/dist/engine/agents/registry.d.ts +2 -1
  35. package/dist/engine/agents/registry.d.ts.map +1 -1
  36. package/dist/engine/agents/registry.js +7 -6
  37. package/dist/engine/agents/registry.js.map +1 -1
  38. package/dist/engine/agents/registry.test.js +24 -0
  39. package/dist/engine/agents/registry.test.js.map +1 -1
  40. package/dist/engine/context/config.d.ts +43 -6
  41. package/dist/engine/context/config.d.ts.map +1 -1
  42. package/dist/engine/context/config.js +123 -26
  43. package/dist/engine/context/config.js.map +1 -1
  44. package/dist/engine/context/config.security.test.d.ts +2 -0
  45. package/dist/engine/context/config.security.test.d.ts.map +1 -0
  46. package/dist/engine/context/config.security.test.js +82 -0
  47. package/dist/engine/context/config.security.test.js.map +1 -0
  48. package/dist/engine/context/config.test.js +199 -10
  49. package/dist/engine/context/config.test.js.map +1 -1
  50. package/dist/engine/context/optimizer.d.ts +20 -1
  51. package/dist/engine/context/optimizer.d.ts.map +1 -1
  52. package/dist/engine/context/optimizer.js +63 -29
  53. package/dist/engine/context/optimizer.js.map +1 -1
  54. package/dist/engine/context/optimizer.test.js +156 -0
  55. package/dist/engine/context/optimizer.test.js.map +1 -1
  56. package/dist/engine/gateway/gateway-provider.d.ts +4 -0
  57. package/dist/engine/gateway/gateway-provider.d.ts.map +1 -1
  58. package/dist/engine/gateway/gateway-provider.js +7 -2
  59. package/dist/engine/gateway/gateway-provider.js.map +1 -1
  60. package/dist/engine/gateway/gateway-provider.test.js +3 -3
  61. package/dist/engine/gateway/gateway-provider.test.js.map +1 -1
  62. package/dist/engine/gateway/input-guard.d.ts.map +1 -1
  63. package/dist/engine/gateway/input-guard.js +2 -1
  64. package/dist/engine/gateway/input-guard.js.map +1 -1
  65. package/dist/engine/gateway/secret-detector.d.ts.map +1 -1
  66. package/dist/engine/gateway/secret-detector.js +2 -3
  67. package/dist/engine/gateway/secret-detector.js.map +1 -1
  68. package/dist/engine/gateway/secret-detector.test.js +4 -4
  69. package/dist/engine/gateway/secret-detector.test.js.map +1 -1
  70. package/dist/engine/llm-error.d.ts +23 -0
  71. package/dist/engine/llm-error.d.ts.map +1 -0
  72. package/dist/engine/llm-error.js +86 -0
  73. package/dist/engine/llm-error.js.map +1 -0
  74. package/dist/engine/llm-error.test.d.ts +2 -0
  75. package/dist/engine/llm-error.test.d.ts.map +1 -0
  76. package/dist/engine/llm-error.test.js +101 -0
  77. package/dist/engine/llm-error.test.js.map +1 -0
  78. package/dist/engine/orchestrator-deny-abort.test.d.ts +2 -0
  79. package/dist/engine/orchestrator-deny-abort.test.d.ts.map +1 -0
  80. package/dist/engine/orchestrator-deny-abort.test.js +414 -0
  81. package/dist/engine/orchestrator-deny-abort.test.js.map +1 -0
  82. package/dist/engine/orchestrator-error.test.d.ts +2 -0
  83. package/dist/engine/orchestrator-error.test.d.ts.map +1 -0
  84. package/dist/engine/orchestrator-error.test.js +136 -0
  85. package/dist/engine/orchestrator-error.test.js.map +1 -0
  86. package/dist/engine/orchestrator.d.ts +123 -10
  87. package/dist/engine/orchestrator.d.ts.map +1 -1
  88. package/dist/engine/orchestrator.js +791 -181
  89. package/dist/engine/orchestrator.js.map +1 -1
  90. package/dist/engine/orchestrator.test.js +723 -0
  91. package/dist/engine/orchestrator.test.js.map +1 -1
  92. package/dist/engine/permission/approval.d.ts.map +1 -1
  93. package/dist/engine/permission/approval.js +29 -10
  94. package/dist/engine/permission/approval.js.map +1 -1
  95. package/dist/engine/permission/approval.test.js +57 -0
  96. package/dist/engine/permission/approval.test.js.map +1 -1
  97. package/dist/engine/permission/evaluator.d.ts +13 -0
  98. package/dist/engine/permission/evaluator.d.ts.map +1 -1
  99. package/dist/engine/permission/evaluator.js +121 -22
  100. package/dist/engine/permission/evaluator.js.map +1 -1
  101. package/dist/engine/permission/evaluator.test.js +188 -4
  102. package/dist/engine/permission/evaluator.test.js.map +1 -1
  103. package/dist/engine/permission/groups.d.ts.map +1 -1
  104. package/dist/engine/permission/groups.js +19 -1
  105. package/dist/engine/permission/groups.js.map +1 -1
  106. package/dist/engine/permission/integration.test.js +165 -4
  107. package/dist/engine/permission/integration.test.js.map +1 -1
  108. package/dist/engine/plan.integration.test.js +142 -33
  109. package/dist/engine/plan.integration.test.js.map +1 -1
  110. package/dist/engine/router/micro/tasks/classify-intent.d.ts.map +1 -1
  111. package/dist/engine/router/micro/tasks/classify-intent.js +24 -18
  112. package/dist/engine/router/micro/tasks/classify-intent.js.map +1 -1
  113. package/dist/engine/router/micro/tasks/classify-intent.test.js +4 -4
  114. package/dist/engine/router/micro/tasks/classify-intent.test.js.map +1 -1
  115. package/dist/engine/router/micro/tasks/enum-decision.d.ts.map +1 -1
  116. package/dist/engine/router/micro/tasks/enum-decision.js +14 -8
  117. package/dist/engine/router/micro/tasks/enum-decision.js.map +1 -1
  118. package/dist/engine/router/micro/tasks/enum-decision.test.js +2 -2
  119. package/dist/engine/router/micro/tasks/enum-decision.test.js.map +1 -1
  120. package/dist/engine/router/micro/tasks/small-talk.d.ts.map +1 -1
  121. package/dist/engine/router/micro/tasks/small-talk.js +20 -17
  122. package/dist/engine/router/micro/tasks/small-talk.js.map +1 -1
  123. package/dist/engine/router/micro/types.d.ts +2 -0
  124. package/dist/engine/router/micro/types.d.ts.map +1 -1
  125. package/dist/engine/router/provider-pool.d.ts +2 -2
  126. package/dist/engine/router/provider-pool.d.ts.map +1 -1
  127. package/dist/engine/router/provider-pool.js +5 -3
  128. package/dist/engine/router/provider-pool.js.map +1 -1
  129. package/dist/engine/router/quality-checker.d.ts.map +1 -1
  130. package/dist/engine/router/quality-checker.js +15 -14
  131. package/dist/engine/router/quality-checker.js.map +1 -1
  132. package/dist/engine/router/router.d.ts +2 -2
  133. package/dist/engine/router/router.d.ts.map +1 -1
  134. package/dist/engine/router/router.js +8 -5
  135. package/dist/engine/router/router.js.map +1 -1
  136. package/dist/engine/router/utils.d.ts +2 -2
  137. package/dist/engine/router/utils.d.ts.map +1 -1
  138. package/dist/engine/router/utils.js +2 -1
  139. package/dist/engine/router/utils.js.map +1 -1
  140. package/dist/engine/security/index.d.ts +6 -0
  141. package/dist/engine/security/index.d.ts.map +1 -1
  142. package/dist/engine/security/index.js +3 -0
  143. package/dist/engine/security/index.js.map +1 -1
  144. package/dist/engine/security/integration.test.js +11 -11
  145. package/dist/engine/security/integration.test.js.map +1 -1
  146. package/dist/engine/security/prompt-injection.d.ts +1 -1
  147. package/dist/engine/security/prompt-injection.d.ts.map +1 -1
  148. package/dist/engine/security/prompt-injection.js +2 -1
  149. package/dist/engine/security/prompt-injection.js.map +1 -1
  150. package/dist/engine/security/prompt-injection.test.js +1 -1
  151. package/dist/engine/security/prompt-injection.test.js.map +1 -1
  152. package/dist/engine/security/protected-paths-store.d.ts +56 -0
  153. package/dist/engine/security/protected-paths-store.d.ts.map +1 -0
  154. package/dist/engine/security/protected-paths-store.js +239 -0
  155. package/dist/engine/security/protected-paths-store.js.map +1 -0
  156. package/dist/engine/security/protected-paths.d.ts +54 -0
  157. package/dist/engine/security/protected-paths.d.ts.map +1 -0
  158. package/dist/engine/security/protected-paths.js +193 -0
  159. package/dist/engine/security/protected-paths.js.map +1 -0
  160. package/dist/engine/security/protected-paths.test.d.ts +2 -0
  161. package/dist/engine/security/protected-paths.test.d.ts.map +1 -0
  162. package/dist/engine/security/protected-paths.test.js +166 -0
  163. package/dist/engine/security/protected-paths.test.js.map +1 -0
  164. package/dist/engine/security/shell-guard.d.ts +117 -0
  165. package/dist/engine/security/shell-guard.d.ts.map +1 -0
  166. package/dist/engine/security/shell-guard.js +578 -0
  167. package/dist/engine/security/shell-guard.js.map +1 -0
  168. package/dist/engine/security/shell-guard.test.d.ts +2 -0
  169. package/dist/engine/security/shell-guard.test.d.ts.map +1 -0
  170. package/dist/engine/security/shell-guard.test.js +378 -0
  171. package/dist/engine/security/shell-guard.test.js.map +1 -0
  172. package/dist/engine/system-messages.d.ts +237 -0
  173. package/dist/engine/system-messages.d.ts.map +1 -0
  174. package/dist/engine/system-messages.js +276 -0
  175. package/dist/engine/system-messages.js.map +1 -0
  176. package/dist/engine/system-messages.test.d.ts +2 -0
  177. package/dist/engine/system-messages.test.d.ts.map +1 -0
  178. package/dist/engine/system-messages.test.js +81 -0
  179. package/dist/engine/system-messages.test.js.map +1 -0
  180. package/dist/engine/tools/abort.d.ts +21 -0
  181. package/dist/engine/tools/abort.d.ts.map +1 -0
  182. package/dist/engine/tools/abort.js +44 -0
  183. package/dist/engine/tools/abort.js.map +1 -0
  184. package/dist/engine/tools/classify-conversation.d.ts.map +1 -1
  185. package/dist/engine/tools/classify-conversation.js +7 -2
  186. package/dist/engine/tools/classify-conversation.js.map +1 -1
  187. package/dist/engine/tools/fs-read.d.ts.map +1 -1
  188. package/dist/engine/tools/fs-read.js +17 -6
  189. package/dist/engine/tools/fs-read.js.map +1 -1
  190. package/dist/engine/tools/fs-read.test.js +43 -0
  191. package/dist/engine/tools/fs-read.test.js.map +1 -1
  192. package/dist/engine/tools/fs-write.d.ts.map +1 -1
  193. package/dist/engine/tools/fs-write.js +47 -17
  194. package/dist/engine/tools/fs-write.js.map +1 -1
  195. package/dist/engine/tools/git.d.ts +2 -1
  196. package/dist/engine/tools/git.d.ts.map +1 -1
  197. package/dist/engine/tools/git.js +85 -17
  198. package/dist/engine/tools/git.js.map +1 -1
  199. package/dist/engine/tools/git.test.js +39 -0
  200. package/dist/engine/tools/git.test.js.map +1 -1
  201. package/dist/engine/tools/index.d.ts.map +1 -1
  202. package/dist/engine/tools/index.js +16 -2
  203. package/dist/engine/tools/index.js.map +1 -1
  204. package/dist/engine/tools/json-schema.js +38 -0
  205. package/dist/engine/tools/json-schema.js.map +1 -1
  206. package/dist/engine/tools/json-schema.test.d.ts +2 -0
  207. package/dist/engine/tools/json-schema.test.d.ts.map +1 -0
  208. package/dist/engine/tools/json-schema.test.js +40 -0
  209. package/dist/engine/tools/json-schema.test.js.map +1 -0
  210. package/dist/engine/tools/path-utils.d.ts.map +1 -1
  211. package/dist/engine/tools/path-utils.js +24 -0
  212. package/dist/engine/tools/path-utils.js.map +1 -1
  213. package/dist/engine/tools/path-utils.test.js +15 -0
  214. package/dist/engine/tools/path-utils.test.js.map +1 -1
  215. package/dist/engine/tools/plan.d.ts +11 -3
  216. package/dist/engine/tools/plan.d.ts.map +1 -1
  217. package/dist/engine/tools/plan.js +326 -95
  218. package/dist/engine/tools/plan.js.map +1 -1
  219. package/dist/engine/tools/plan.test.js +161 -47
  220. package/dist/engine/tools/plan.test.js.map +1 -1
  221. package/dist/engine/tools/project-context.d.ts.map +1 -1
  222. package/dist/engine/tools/project-context.js +54 -42
  223. package/dist/engine/tools/project-context.js.map +1 -1
  224. package/dist/engine/tools/project-context.test.js +37 -22
  225. package/dist/engine/tools/project-context.test.js.map +1 -1
  226. package/dist/engine/tools/project-manage.d.ts +24 -0
  227. package/dist/engine/tools/project-manage.d.ts.map +1 -0
  228. package/dist/engine/tools/project-manage.js +311 -0
  229. package/dist/engine/tools/project-manage.js.map +1 -0
  230. package/dist/engine/tools/project-manage.test.d.ts +2 -0
  231. package/dist/engine/tools/project-manage.test.d.ts.map +1 -0
  232. package/dist/engine/tools/project-manage.test.js +196 -0
  233. package/dist/engine/tools/project-manage.test.js.map +1 -0
  234. package/dist/engine/tools/read-reference.d.ts.map +1 -1
  235. package/dist/engine/tools/read-reference.js +10 -5
  236. package/dist/engine/tools/read-reference.js.map +1 -1
  237. package/dist/engine/tools/read-reference.test.js +5 -2
  238. package/dist/engine/tools/read-reference.test.js.map +1 -1
  239. package/dist/engine/tools/search.d.ts.map +1 -1
  240. package/dist/engine/tools/search.js +16 -6
  241. package/dist/engine/tools/search.js.map +1 -1
  242. package/dist/engine/tools/shell.d.ts.map +1 -1
  243. package/dist/engine/tools/shell.js +17 -4
  244. package/dist/engine/tools/shell.js.map +1 -1
  245. package/dist/engine/tools/shell.test.js +63 -1
  246. package/dist/engine/tools/shell.test.js.map +1 -1
  247. package/dist/engine/tools/task-resume.d.ts +93 -0
  248. package/dist/engine/tools/task-resume.d.ts.map +1 -0
  249. package/dist/engine/tools/task-resume.js +269 -0
  250. package/dist/engine/tools/task-resume.js.map +1 -0
  251. package/dist/engine/tools/task-resume.test.d.ts +2 -0
  252. package/dist/engine/tools/task-resume.test.d.ts.map +1 -0
  253. package/dist/engine/tools/task-resume.test.js +423 -0
  254. package/dist/engine/tools/task-resume.test.js.map +1 -0
  255. package/dist/engine/tools/task.d.ts +81 -2
  256. package/dist/engine/tools/task.d.ts.map +1 -1
  257. package/dist/engine/tools/task.js +898 -471
  258. package/dist/engine/tools/task.js.map +1 -1
  259. package/dist/engine/tools/task.test.js +371 -3
  260. package/dist/engine/tools/task.test.js.map +1 -1
  261. package/dist/engine/tools/todo.d.ts +27 -1
  262. package/dist/engine/tools/todo.d.ts.map +1 -1
  263. package/dist/engine/tools/todo.js +320 -14
  264. package/dist/engine/tools/todo.js.map +1 -1
  265. package/dist/engine/tools/todo.test.js +150 -48
  266. package/dist/engine/tools/todo.test.js.map +1 -1
  267. package/dist/engine/tools/web.d.ts.map +1 -1
  268. package/dist/engine/tools/web.js +65 -18
  269. package/dist/engine/tools/web.js.map +1 -1
  270. package/dist/engine/tools/web.test.js +94 -2
  271. package/dist/engine/tools/web.test.js.map +1 -1
  272. package/dist/index.d.ts +8 -2
  273. package/dist/index.d.ts.map +1 -1
  274. package/dist/index.js +5 -2
  275. package/dist/index.js.map +1 -1
  276. package/dist/logger.d.ts.map +1 -1
  277. package/dist/logger.js +0 -1
  278. package/dist/logger.js.map +1 -1
  279. package/dist/main.js +3 -2
  280. package/dist/main.js.map +1 -1
  281. package/dist/prompts/roles/ADMIN.en.md +12 -11
  282. package/dist/prompts/roles/ADMIN.ru.md +12 -11
  283. package/dist/prompts/roles/ANALYST.en.md +12 -11
  284. package/dist/prompts/roles/ANALYST.ru.md +12 -11
  285. package/dist/prompts/roles/ASSISTANT.en.md +12 -11
  286. package/dist/prompts/roles/ASSISTANT.ru.md +12 -11
  287. package/dist/prompts/roles/AUDITOR.en.md +12 -11
  288. package/dist/prompts/roles/AUDITOR.ru.md +12 -11
  289. package/dist/prompts/roles/DEVELOPER.en.md +12 -11
  290. package/dist/prompts/roles/DEVELOPER.ru.md +12 -11
  291. package/dist/prompts/roles/DEVOPS.en.md +12 -11
  292. package/dist/prompts/roles/DEVOPS.ru.md +12 -11
  293. package/dist/prompts/roles/PM.en.md +12 -11
  294. package/dist/prompts/roles/PM.ru.md +12 -11
  295. package/dist/prompts/roles/QA.en.md +12 -11
  296. package/dist/prompts/roles/QA.ru.md +12 -11
  297. package/dist/prompts/roles/TITLE.en.md +30 -0
  298. package/dist/prompts/roles/TITLE.ru.md +3 -11
  299. package/dist/prompts/security/ask-protected-path.en.md +1 -0
  300. package/dist/prompts/security/ask-protected-path.ru.md +1 -0
  301. package/dist/prompts/security/deny-command.en.md +1 -0
  302. package/dist/prompts/security/deny-command.ru.md +1 -0
  303. package/dist/prompts/security/deny-protected-dir.en.md +1 -0
  304. package/dist/prompts/security/deny-protected-dir.ru.md +1 -0
  305. package/dist/prompts/security/deny-protected-path.en.md +1 -0
  306. package/dist/prompts/security/deny-protected-path.ru.md +1 -0
  307. package/dist/prompts/subagents/explore.en.md +23 -0
  308. package/dist/prompts/subagents/general.en.md +19 -0
  309. package/dist/prompts/system/MODE_ACT.en.md +20 -0
  310. package/{prompts/modes/act.md → dist/prompts/system/MODE_ACT.ru.md} +2 -0
  311. package/dist/prompts/system/MODE_PLAN.en.md +22 -0
  312. package/dist/prompts/{modes/plan.md → system/MODE_PLAN.ru.md} +4 -3
  313. package/dist/prompts/system/MODE_YOLO.en.md +22 -0
  314. package/{prompts/modes/yolo.md → dist/prompts/system/MODE_YOLO.ru.md} +2 -0
  315. package/dist/prompts/system/PLAN_GUIDE.en.md +36 -0
  316. package/dist/prompts/system/PLAN_GUIDE.ru.md +33 -0
  317. package/dist/prompts/system/PLAN_MODE_AUTO.en.md +11 -0
  318. package/dist/prompts/system/PLAN_MODE_AUTO.ru.md +12 -0
  319. package/dist/prompts/system/PLAN_MODE_STRICT_APPROVED.en.md +8 -0
  320. package/dist/prompts/system/PLAN_MODE_STRICT_APPROVED.ru.md +8 -0
  321. package/dist/prompts/system/PLAN_MODE_STRICT_NOT_APPROVED.en.md +7 -0
  322. package/dist/prompts/system/PLAN_MODE_STRICT_NOT_APPROVED.ru.md +7 -0
  323. package/dist/providers/anthropic.d.ts.map +1 -1
  324. package/dist/providers/anthropic.js +28 -2
  325. package/dist/providers/anthropic.js.map +1 -1
  326. package/dist/providers/base.d.ts +20 -1
  327. package/dist/providers/base.d.ts.map +1 -1
  328. package/dist/providers/base.js +17 -0
  329. package/dist/providers/base.js.map +1 -1
  330. package/dist/providers/exceptions.d.ts.map +1 -1
  331. package/dist/providers/exceptions.js +3 -2
  332. package/dist/providers/exceptions.js.map +1 -1
  333. package/dist/providers/ollama.d.ts +23 -0
  334. package/dist/providers/ollama.d.ts.map +1 -1
  335. package/dist/providers/ollama.js +128 -12
  336. package/dist/providers/ollama.js.map +1 -1
  337. package/dist/providers/ollama.test.d.ts +2 -0
  338. package/dist/providers/ollama.test.d.ts.map +1 -0
  339. package/dist/providers/ollama.test.js +129 -0
  340. package/dist/providers/ollama.test.js.map +1 -0
  341. package/dist/providers/openai.d.ts.map +1 -1
  342. package/dist/providers/openai.js +82 -9
  343. package/dist/providers/openai.js.map +1 -1
  344. package/dist/providers/openai.test.d.ts +2 -0
  345. package/dist/providers/openai.test.d.ts.map +1 -0
  346. package/dist/providers/openai.test.js +84 -0
  347. package/dist/providers/openai.test.js.map +1 -0
  348. package/dist/providers/stream-error.test.d.ts +2 -0
  349. package/dist/providers/stream-error.test.d.ts.map +1 -0
  350. package/dist/providers/stream-error.test.js +63 -0
  351. package/dist/providers/stream-error.test.js.map +1 -0
  352. package/dist/providers/timeout.test.d.ts +2 -0
  353. package/dist/providers/timeout.test.d.ts.map +1 -0
  354. package/dist/providers/timeout.test.js +129 -0
  355. package/dist/providers/timeout.test.js.map +1 -0
  356. package/dist/queue/processor.d.ts +22 -0
  357. package/dist/queue/processor.d.ts.map +1 -1
  358. package/dist/queue/processor.js +150 -25
  359. package/dist/queue/processor.js.map +1 -1
  360. package/dist/queue/processor.test.d.ts +2 -0
  361. package/dist/queue/processor.test.d.ts.map +1 -0
  362. package/dist/queue/processor.test.js +211 -0
  363. package/dist/queue/processor.test.js.map +1 -0
  364. package/dist/server/app.d.ts.map +1 -1
  365. package/dist/server/app.js +30 -8
  366. package/dist/server/app.js.map +1 -1
  367. package/dist/server/chat.d.ts.map +1 -1
  368. package/dist/server/chat.js +18 -2
  369. package/dist/server/chat.js.map +1 -1
  370. package/dist/server/routes/agents.d.ts.map +1 -1
  371. package/dist/server/routes/agents.js +39 -23
  372. package/dist/server/routes/agents.js.map +1 -1
  373. package/dist/server/routes/fs.d.ts.map +1 -1
  374. package/dist/server/routes/fs.js +185 -6
  375. package/dist/server/routes/fs.js.map +1 -1
  376. package/dist/server/routes/models.d.ts.map +1 -1
  377. package/dist/server/routes/models.js +3 -1
  378. package/dist/server/routes/models.js.map +1 -1
  379. package/dist/server/routes/queue.d.ts.map +1 -1
  380. package/dist/server/routes/queue.js +91 -17
  381. package/dist/server/routes/queue.js.map +1 -1
  382. package/dist/server/routes/sessions.d.ts +2 -1
  383. package/dist/server/routes/sessions.d.ts.map +1 -1
  384. package/dist/server/routes/sessions.js +68 -10
  385. package/dist/server/routes/sessions.js.map +1 -1
  386. package/dist/server/routes/sessions.test.js +102 -2
  387. package/dist/server/routes/sessions.test.js.map +1 -1
  388. package/dist/server/routes/settings.d.ts +6 -1
  389. package/dist/server/routes/settings.d.ts.map +1 -1
  390. package/dist/server/routes/settings.js +138 -0
  391. package/dist/server/routes/settings.js.map +1 -1
  392. package/dist/server/routes/settings.test.js +65 -1
  393. package/dist/server/routes/settings.test.js.map +1 -1
  394. package/dist/server/serialize.d.ts +9 -3
  395. package/dist/server/serialize.d.ts.map +1 -1
  396. package/dist/server/serialize.js +9 -3
  397. package/dist/server/serialize.js.map +1 -1
  398. package/dist/sessions/auto-title.d.ts +1 -1
  399. package/dist/sessions/auto-title.d.ts.map +1 -1
  400. package/dist/sessions/auto-title.js +24 -13
  401. package/dist/sessions/auto-title.js.map +1 -1
  402. package/dist/sessions/manager.d.ts +1 -2
  403. package/dist/sessions/manager.d.ts.map +1 -1
  404. package/dist/sessions/manager.js +11 -36
  405. package/dist/sessions/manager.js.map +1 -1
  406. package/dist/sessions/manager.test.js +2 -10
  407. package/dist/sessions/manager.test.js.map +1 -1
  408. package/dist/storage/file-store.d.ts.map +1 -1
  409. package/dist/storage/file-store.js +2 -6
  410. package/dist/storage/file-store.js.map +1 -1
  411. package/dist/storage/file-store.test.js +1 -6
  412. package/dist/storage/file-store.test.js.map +1 -1
  413. package/dist/storage/project-store.d.ts.map +1 -1
  414. package/dist/storage/project-store.js +12 -0
  415. package/dist/storage/project-store.js.map +1 -1
  416. package/dist/storage/runtime-settings.d.ts +25 -1
  417. package/dist/storage/runtime-settings.d.ts.map +1 -1
  418. package/dist/storage/runtime-settings.js +31 -0
  419. package/dist/storage/runtime-settings.js.map +1 -1
  420. package/package.json +6 -5
  421. package/prompts/roles/TITLE.en.md +30 -0
  422. package/prompts/security/ask-protected-path.en.md +1 -0
  423. package/prompts/security/ask-protected-path.ru.md +1 -0
  424. package/prompts/security/deny-command.en.md +1 -0
  425. package/prompts/security/deny-command.ru.md +1 -0
  426. package/prompts/security/deny-protected-dir.en.md +1 -0
  427. package/prompts/security/deny-protected-dir.ru.md +1 -0
  428. package/prompts/security/deny-protected-path.en.md +1 -0
  429. package/prompts/security/deny-protected-path.ru.md +1 -0
  430. package/prompts/subagents/explore.en.md +23 -0
  431. package/prompts/subagents/general.en.md +19 -0
  432. package/prompts/system/MODE_ACT.en.md +20 -0
  433. package/{dist/prompts/modes/act.md → prompts/system/MODE_ACT.ru.md} +2 -0
  434. package/prompts/system/MODE_PLAN.en.md +22 -0
  435. package/{dist/prompts/prompts/modes/plan.md → prompts/system/MODE_PLAN.ru.md} +4 -3
  436. package/prompts/system/MODE_YOLO.en.md +22 -0
  437. package/{dist/prompts/prompts/modes/yolo.md → prompts/system/MODE_YOLO.ru.md} +2 -0
  438. package/prompts/system/PLAN_GUIDE.en.md +36 -0
  439. package/prompts/system/PLAN_GUIDE.ru.md +33 -0
  440. package/prompts/system/PLAN_MODE_AUTO.en.md +11 -0
  441. package/prompts/system/PLAN_MODE_AUTO.ru.md +12 -0
  442. package/prompts/system/PLAN_MODE_STRICT_APPROVED.en.md +8 -0
  443. package/prompts/system/PLAN_MODE_STRICT_APPROVED.ru.md +8 -0
  444. package/prompts/system/PLAN_MODE_STRICT_NOT_APPROVED.en.md +7 -0
  445. package/prompts/system/PLAN_MODE_STRICT_NOT_APPROVED.ru.md +7 -0
  446. package/dist/dictionaries/dictionaries/coding.en.yaml +0 -20
  447. package/dist/dictionaries/dictionaries/coding.ru.yaml +0 -22
  448. package/dist/dictionaries/dictionaries/coding.tools.yaml +0 -12
  449. package/dist/dictionaries/dictionaries/enum.en.yaml +0 -54
  450. package/dist/dictionaries/dictionaries/enum.ru.yaml +0 -67
  451. package/dist/dictionaries/dictionaries/injection.en.yaml +0 -51
  452. package/dist/dictionaries/dictionaries/injection.ru.yaml +0 -51
  453. package/dist/dictionaries/dictionaries/intents.en.yaml +0 -68
  454. package/dist/dictionaries/dictionaries/intents.ru.yaml +0 -78
  455. package/dist/dictionaries/dictionaries/research.en.yaml +0 -17
  456. package/dist/dictionaries/dictionaries/research.ru.yaml +0 -17
  457. package/dist/dictionaries/dictionaries/small-talk.en.yaml +0 -67
  458. package/dist/dictionaries/dictionaries/small-talk.ru.yaml +0 -81
  459. package/dist/prompts/modes/yolo.md +0 -20
  460. package/dist/prompts/prompts/modes/act.md +0 -18
  461. package/dist/prompts/prompts/roles/ADMIN.en.md +0 -33
  462. package/dist/prompts/prompts/roles/ADMIN.ru.md +0 -33
  463. package/dist/prompts/prompts/roles/ANALYST.en.md +0 -33
  464. package/dist/prompts/prompts/roles/ANALYST.ru.md +0 -33
  465. package/dist/prompts/prompts/roles/ASSISTANT.en.md +0 -38
  466. package/dist/prompts/prompts/roles/ASSISTANT.ru.md +0 -38
  467. package/dist/prompts/prompts/roles/AUDITOR.en.md +0 -33
  468. package/dist/prompts/prompts/roles/AUDITOR.ru.md +0 -33
  469. package/dist/prompts/prompts/roles/DEVELOPER.en.md +0 -42
  470. package/dist/prompts/prompts/roles/DEVELOPER.ru.md +0 -42
  471. package/dist/prompts/prompts/roles/DEVOPS.en.md +0 -35
  472. package/dist/prompts/prompts/roles/DEVOPS.ru.md +0 -35
  473. package/dist/prompts/prompts/roles/PM.en.md +0 -33
  474. package/dist/prompts/prompts/roles/PM.ru.md +0 -33
  475. package/dist/prompts/prompts/roles/QA.en.md +0 -33
  476. package/dist/prompts/prompts/roles/QA.ru.md +0 -33
  477. package/dist/prompts/prompts/roles/TITLE.ru.md +0 -30
  478. package/dist/prompts/prompts/subagents/explore.ru.md +0 -23
  479. package/dist/prompts/prompts/subagents/general.ru.md +0 -19
  480. package/dist/prompts/prompts/system/COMPRESSED_DIALOG.en.md +0 -5
  481. package/dist/prompts/prompts/system/COMPRESSED_DIALOG.ru.md +0 -5
  482. package/dist/prompts/prompts/system/INTERVIEW.en.md +0 -18
  483. package/dist/prompts/prompts/system/INTERVIEW.ru.md +0 -18
  484. package/dist/prompts/prompts/system/PARTICIPANTS_NOTICE.en.md +0 -7
  485. package/dist/prompts/prompts/system/PARTICIPANTS_NOTICE.ru.md +0 -7
  486. package/dist/prompts/prompts/system/ROLES_DESCRIPTION.en.md +0 -16
  487. package/dist/prompts/prompts/system/ROLES_DESCRIPTION.ru.md +0 -16
  488. package/dist/prompts/prompts/system/ROUTING.en.md +0 -13
  489. package/dist/prompts/prompts/system/ROUTING.md +0 -6
  490. package/dist/prompts/prompts/system/ROUTING.ru.md +0 -13
  491. package/dist/prompts/prompts/system/RULES.en.md +0 -10
  492. package/dist/prompts/prompts/system/RULES.md +0 -10
  493. package/dist/prompts/prompts/system/RULES.ru.md +0 -10
  494. package/dist/prompts/prompts/system/STICKY_NOTES.en.md +0 -6
  495. package/dist/prompts/prompts/system/STICKY_NOTES.ru.md +0 -6
  496. package/dist/prompts/prompts/system/SUMMARIZER.en.md +0 -54
  497. package/dist/prompts/prompts/system/SUMMARIZER.ru.md +0 -54
  498. package/dist/prompts/prompts/system/USER_CONTEXT.en.md +0 -5
  499. package/dist/prompts/prompts/system/USER_CONTEXT.ru.md +0 -5
  500. package/dist/prompts/system/ROUTING.md +0 -6
  501. package/dist/prompts/system/RULES.md +0 -10
  502. package/dist/server/routes/i18n.d.ts +0 -3
  503. package/dist/server/routes/i18n.d.ts.map +0 -1
  504. package/dist/server/routes/i18n.js +0 -83
  505. package/dist/server/routes/i18n.js.map +0 -1
  506. package/prompts/modes/plan.md +0 -20
  507. package/prompts/system/ROUTING.md +0 -6
  508. package/prompts/system/RULES.md +0 -10
  509. /package/dist/prompts/{prompts/system → system}/GATEWAY.en.md +0 -0
  510. /package/dist/prompts/{prompts/system → system}/GATEWAY.ru.md +0 -0
@@ -0,0 +1,237 @@
1
+ /**
2
+ * SystemMessages — словарь системных сообщений ядра (i18n ядра).
3
+ *
4
+ * Схема «LLM = один язык / UI = локализация»:
5
+ * - LLM-канал: все системные тексты (tool_result, assistant-фоллбеки,
6
+ * INFO-сообщения) — на английском, через t(key, params).
7
+ * - UI-канал: вместе с текстом наружу отдаётся metadata.i18n =
8
+ * { key, params } — UI рендерит перевод по ключу (formatMessage),
9
+ * fallback — на content (en).
10
+ *
11
+ * Плейсхолдеры — `{param}`, совместимы с formatMessage на UI.
12
+ * Словарь — типобезопасный TS-объект (без файлового I/O).
13
+ * Ключи — стабильные en-like идентификаторы с группировкой по префиксам:
14
+ * session.*, task.*, tool.*, fs.*, plan.*, todo.*, project.*, permission.*,
15
+ * shellguard.*, protectedpaths.*, security.*, gateway.*, router.*, qc.*, micro.*
16
+ */
17
+ import { type EngineMessageKey } from '@itphx/synth-shared/i18n';
18
+ import type { MessageI18n } from '@itphx/synth-shared';
19
+ export declare const ENGINE_MESSAGE_KEYS_REGISTRY: readonly ["session.max_iterations", "session.stopped", "session.stopped_reason_denied", "session.denied_blocked", "session.empty_response", "session.dialog_title", "session.default_title", "session.reference_label", "session.reference_link", "session.retry_cancelled", "session.subtask_title", "task.stopped_by_user", "task.stopped_before_completion", "task.stopped_by_deny", "task.empty_response", "task.subagent_exec_error", "task.subagent_not_found", "task.subagent_not_allowed", "task.deps_unavailable", "task.subagent_exec_error_after_retries", "task.resume_marker", "task.resume_result", "task.resume_failed", "task.resume_aborted", "task.resume_session_not_found", "task.resume_no_parent", "task.resume_parent_not_found", "task.resume_locked", "task.resume_agent_not_found", "task.resume_provider_unavailable", "tool.args_error", "tool.exec_error", "tool.not_found", "tool.permission_denied_default", "tool.doom_loop", "tool.empty_output", "tool.output_truncated", "tool.shell_error", "tool.command_failed_default", "tool.aborted", "fs.file_written", "fs.file_edited", "fs.replace_not_found", "fs.replace_multiple", "fs.dir_created", "fs.file_deleted", "fsread.empty_directory", "fsread.no_files", "fsread.glob_error", "web.duckduckgo_blocked", "web.search_failed", "web.search_results", "web.fetch_args_url_required", "web.js_framework_warning", "web.low_content_warning", "web.content_truncated", "web.block_timeout", "web.block_error", "web.fetch_all_failed", "web.no_results", "web.search_error", "search.no_matches", "search.matches_truncated", "search.rg_not_installed", "search.error", "plan.enter_success", "plan.exit_success", "plan.session_manager_unavailable", "plan.enter_failed", "plan.exit_failed", "plan.project_store_unavailable", "plan.no_project", "plan.no_project_read", "plan.column_not_found", "plan.item_not_found", "plan.save_error", "plan.markdown_title", "plan.markdown_empty", "plan.markdown_column_empty", "plan.markdown_dependencies", "plan.default_column_backlog", "plan.default_column_todo", "plan.default_column_in_progress", "plan.default_column_done", "todo.save_error", "todo.read_error", "todo.list_empty", "todo.list", "todo.item_not_found", "todo.items_not_found", "todo.status_pending", "todo.status_in_progress", "todo.status_completed", "todo.status_cancelled", "todo.priority_high", "todo.priority_medium", "todo.priority_low", "project.deps_unavailable", "project.session_read_error", "project.session_not_found", "project.save_error", "project.created", "project.read_error", "project.not_found", "project.attached", "project.log_no_project", "project.log_save_error", "project.log_added", "project.log_empty", "project.log_list", "project.invariants_no_project", "project.invariants_empty", "project.invariants_saved", "project.invariants_save_error", "projectctx.info_title", "projectctx.info_id", "projectctx.info_workspace", "projectctx.info_description", "projectctx.not_found", "projectctx.missing", "projectctx.working_dir", "projectctx.no_plan_hint", "projectctx.git_section", "projectctx.repo_branch", "projectctx.repo_remote", "projectctx.repo_state", "projectctx.repo_state_dirty", "projectctx.repo_state_clean", "projectctx.repo_last_commit", "projectctx.repos_title", "projectctx.repo_not_found", "projectctx.repos_none", "projectctx.repos_found", "tool.classified", "reference.session_manager_unavailable", "reference.session_not_found", "reference.no_messages", "reference.session_title", "permission.yolo_auto_approved", "permission.plan_write_blocked", "permission.plan_source_mode", "permission.plan_source_strict", "permission.plan_shell_denied", "permission.mcp_unavailable", "permission.no_rules", "permission.rule_matched", "permission.rule_pattern_matched", "permission.rule_prefix_matched", "permission.rule_command_matched", "permission.ask_timeout", "permission.ask_no_subscribers", "permission.ask_denied", "shellguard.allow_default", "shellguard.deny_prefix", "shellguard.deny_path", "shellguard.ask_path", "shellguard.deny_dir", "protectedpaths.unresolvable", "protectedpaths.dynamic", "protectedpaths.allow_default", "security.warn_prefix", "security.injection_blocked", "gateway.input_blocked", "gateway.rate_limit_warning", "gateway.output_secrets_reason", "router.timeout", "router.network_error", "router.provider_not_found", "router.provider_unspecified", "router.escalation", "router.context_length_exceeded", "router.rate_limit_exceeded", "qc.min_length_ok", "qc.min_length_fail_detail", "qc.min_length_fail", "qc.constraint_empty", "qc.constraint_parse_error", "qc.constraint_ok", "qc.self_check_skipped", "qc.self_check_unparsed", "qc.self_check_low", "qc.self_check_low_reason", "qc.self_check_ok", "qc.self_check_error", "qc.all_passed", "micro.greeting", "micro.farewell", "micro.thanks", "micro.enum.yes", "micro.enum.no", "micro.enum.approve", "micro.enum.reject", "micro.enum.mode_plan", "micro.enum.mode_act", "micro.intent.question", "micro.intent.command", "micro.intent.review", "micro.intent.explain", "micro.intent.debug", "micro.intent.fix", "micro.intent.test"];
20
+ export declare const SYSTEM_MESSAGES: {
21
+ readonly 'session.max_iterations': "(tool iteration limit reached)";
22
+ readonly 'session.stopped': "Processing stopped: {reason}";
23
+ readonly 'session.stopped_reason_denied': "the user denied the request";
24
+ readonly 'session.denied_blocked': "Could not proceed: the action was blocked by the security policy";
25
+ readonly 'session.empty_response': "Could not complete the request: the model response was empty";
26
+ readonly 'session.dialog_title': "Dialog — {id}";
27
+ readonly 'session.default_title': "New session";
28
+ readonly 'session.reference_label': "Session";
29
+ readonly 'session.reference_link': "Session link: {label} ({id}, messages {from}-{to})";
30
+ readonly 'session.retry_cancelled': "Retries cancelled by the user";
31
+ readonly 'session.subtask_title': "Subtask: {description}";
32
+ readonly 'task.stopped_by_user': "Task stopped by the user";
33
+ readonly 'task.stopped_before_completion': "The task was stopped by the user before completion. Above is the partial subagent answer; completed steps are listed. Details and history are in the child session.";
34
+ readonly 'task.stopped_by_deny': "Processing stopped: the user denied the tool execution request";
35
+ readonly 'task.empty_response': "(empty subagent response)";
36
+ readonly 'task.subagent_exec_error': "Subagent execution error \"{type}\": {error}";
37
+ readonly 'task.subagent_not_found': "Subagent \"{type}\" not found. Available types: {types}";
38
+ readonly 'task.subagent_not_allowed': "Agent \"{type}\" cannot be used as a subagent (modes: {modes})";
39
+ readonly 'task.deps_unavailable': "Error: provider or agent registry unavailable for subagent launch";
40
+ readonly 'task.subagent_exec_error_after_retries': "Subagent execution error \"{type}\" after {attempts} attempt(s): {error}";
41
+ readonly 'task.resume_marker': "Resume the interrupted task. Continue from where you stopped.";
42
+ readonly 'task.resume_result': "Resumed subagent \"{type}\" completed. Result:\n\n{summary}";
43
+ readonly 'task.resume_failed': "Resumed subagent \"{type}\" failed: {error}";
44
+ readonly 'task.resume_aborted': "Resumed subagent \"{type}\" was stopped by the user before completion.";
45
+ readonly 'task.resume_session_not_found': "Session {id} not found";
46
+ readonly 'task.resume_no_parent': "Session {id} is not a subagent session (no parent session) — resume is not applicable";
47
+ readonly 'task.resume_parent_not_found': "Parent session {id} not found — cannot resume the subagent session";
48
+ readonly 'task.resume_locked': "Session {id} is busy or already being resumed";
49
+ readonly 'task.resume_agent_not_found': "Agent \"{type}\" not found or cannot be used as a subagent";
50
+ readonly 'task.resume_provider_unavailable': "Provider is not configured for session {id} — cannot resume";
51
+ readonly 'tool.args_error': "Tool \"{tool}\" argument error: {issues}";
52
+ readonly 'tool.exec_error': "Tool \"{tool}\" execution error: {error}";
53
+ readonly 'tool.not_found': "Tool \"{tool}\" not found";
54
+ readonly 'tool.permission_denied_default': "Access denied by the security policy";
55
+ readonly 'tool.doom_loop': "Error: tool \"{tool}\" called {count} time(s) with the same arguments. Loop broken.";
56
+ readonly 'tool.empty_output': "(empty output)";
57
+ readonly 'tool.output_truncated': "\n... (output truncated)";
58
+ readonly 'tool.shell_error': "Error: {message}";
59
+ readonly 'tool.command_failed_default': "Command failed";
60
+ readonly 'tool.aborted': "Execution interrupted by the user.";
61
+ readonly 'fs.file_written': "File written: {path} ({lines} lines, {bytes} bytes)";
62
+ readonly 'fs.file_edited': "File edited: {path} ({count} replacements)";
63
+ readonly 'fs.replace_not_found': "Error: replacement string not found in file \"{path}\"";
64
+ readonly 'fs.replace_multiple': "Error: found {count} matches of the replacement string. Provide more context for a unique match.";
65
+ readonly 'fs.dir_created': "Directory created: {path}";
66
+ readonly 'fs.file_deleted': "File deleted: {path}";
67
+ readonly 'fsread.empty_directory': "(empty directory)";
68
+ readonly 'fsread.no_files': "(no files found)";
69
+ readonly 'fsread.glob_error': "(file search error)";
70
+ readonly 'web.duckduckgo_blocked': "DuckDuckGo is temporarily blocking requests (anti-bot challenge)";
71
+ readonly 'web.search_failed': "Failed to get results from DuckDuckGo";
72
+ readonly 'web.search_results': "Search results for \"{query}\" ({count}):\n\n{items}";
73
+ readonly 'web.fetch_args_url_required': "specify url or urls";
74
+ readonly 'web.js_framework_warning': "\n\n⚠️ The site uses a JavaScript framework — some content may be unavailable without executing JS.";
75
+ readonly 'web.low_content_warning': "\n\n⚠️ The page has very little text content (possibly JavaScript rendering).";
76
+ readonly 'web.content_truncated': "\n... (content truncated)";
77
+ readonly 'web.block_timeout': "❌ Timeout";
78
+ readonly 'web.block_error': "❌ Load error: {error}";
79
+ readonly 'web.fetch_all_failed': "Failed to load any of the URLs";
80
+ readonly 'web.no_results': "No results found for \"{query}\".";
81
+ readonly 'web.search_error': "Web search error: {error}";
82
+ readonly 'search.no_matches': "(no matches found)";
83
+ readonly 'search.matches_truncated': "... (showing 200 of {total} matches)";
84
+ readonly 'search.rg_not_installed': "(rg (ripgrep) is not installed. Search is unavailable)";
85
+ readonly 'search.error': "Search error: {error}";
86
+ readonly 'plan.enter_success': "Plan mode activated: file writes are blocked, reading is allowed. Investigate the task, work with the plan via plan_read/plan_write and finish via plan_exit to switch back to act mode.";
87
+ readonly 'plan.exit_success': "Plan approved. Act mode activated: file writes are allowed.";
88
+ readonly 'plan.session_manager_unavailable': "Error: session manager unavailable for {tool}";
89
+ readonly 'plan.enter_failed': "Error: failed to switch the session to plan mode";
90
+ readonly 'plan.exit_failed': "Error: failed to switch the session to act mode";
91
+ readonly 'plan.project_store_unavailable': "Error: project store unavailable for plan_write";
92
+ readonly 'plan.no_project': "Error: no project (the plan belongs to the project)";
93
+ readonly 'plan.no_project_read': "No project: the plan is unavailable (the plan belongs to the project)";
94
+ readonly 'plan.column_not_found': "Error: column \"{columnId}\" not found";
95
+ readonly 'plan.item_not_found': "Error: plan item with id \"{itemId}\" not found";
96
+ readonly 'plan.save_error': "Error saving the plan: {error}";
97
+ readonly 'plan.markdown_title': "# Plan (v{version})";
98
+ readonly 'plan.markdown_empty': "No items";
99
+ readonly 'plan.markdown_column_empty': "(empty)";
100
+ readonly 'plan.markdown_dependencies': " - Dependencies: {deps}";
101
+ readonly 'plan.default_column_backlog': "Backlog";
102
+ readonly 'plan.default_column_todo': "To do";
103
+ readonly 'plan.default_column_in_progress': "In progress";
104
+ readonly 'plan.default_column_done': "Done";
105
+ readonly 'todo.save_error': "Error saving the todo list: {error}";
106
+ readonly 'todo.read_error': "Error reading the todo list: {error}";
107
+ readonly 'todo.list_empty': "Todo list is empty";
108
+ readonly 'todo.list': "Todo list ({count}):\n{items}";
109
+ readonly 'todo.item_not_found': "Error: todo item with id \"{id}\" not found";
110
+ readonly 'todo.items_not_found': "Error: todo items with ids \"{ids}\" not found";
111
+ readonly 'todo.status_pending': "pending";
112
+ readonly 'todo.status_in_progress': "in progress";
113
+ readonly 'todo.status_completed': "done";
114
+ readonly 'todo.status_cancelled': "cancelled";
115
+ readonly 'todo.priority_high': "high";
116
+ readonly 'todo.priority_medium': "medium";
117
+ readonly 'todo.priority_low': "low";
118
+ readonly 'project.deps_unavailable': "Error: session manager or project store unavailable for {tool}";
119
+ readonly 'project.session_read_error': "Error: failed to read the session";
120
+ readonly 'project.session_not_found': "Error: session not found";
121
+ readonly 'project.save_error': "Error saving the project: {error}";
122
+ readonly 'project.created': "Project \"{name}\" created and attached to the session.\n{json}";
123
+ readonly 'project.read_error': "Error: failed to read the project";
124
+ readonly 'project.not_found': "Project {id} not found";
125
+ readonly 'project.attached': "Session attached to project \"{name}\".";
126
+ readonly 'project.log_no_project': "No project: the log is available only within a project";
127
+ readonly 'project.log_save_error': "Error saving the project log: {error}";
128
+ readonly 'project.log_added': "Log entry added. Total entries: {count}.";
129
+ readonly 'project.log_empty': "Log is empty";
130
+ readonly 'project.log_list': "Project log ({count}):\n{items}";
131
+ readonly 'project.invariants_no_project': "No project: invariants are available only within a project";
132
+ readonly 'project.invariants_empty': "Invariants are not set";
133
+ readonly 'project.invariants_saved': "Project invariants saved.";
134
+ readonly 'project.invariants_save_error': "Error saving the invariants: {error}";
135
+ readonly 'projectctx.info_title': "# Project: {name}";
136
+ readonly 'projectctx.info_id': "- ID: {id}";
137
+ readonly 'projectctx.info_workspace': "- Project working directory: {dir}";
138
+ readonly 'projectctx.info_description': "- Description: {description}";
139
+ readonly 'projectctx.not_found': "# Project: not found (id: {id})";
140
+ readonly 'projectctx.missing': "# Project: none";
141
+ readonly 'projectctx.working_dir': "- Working directory: {dir}";
142
+ readonly 'projectctx.no_plan_hint': "- The plan is unavailable (the plan belongs to the project). To work with the plan — create a project.";
143
+ readonly 'projectctx.git_section': "## Git repository";
144
+ readonly 'projectctx.repo_branch': " - Branch: {branch}";
145
+ readonly 'projectctx.repo_remote': " - Remote: {url}";
146
+ readonly 'projectctx.repo_state': " - State: {state}";
147
+ readonly 'projectctx.repo_state_dirty': "has changes";
148
+ readonly 'projectctx.repo_state_clean': "clean";
149
+ readonly 'projectctx.repo_last_commit': " - Last commit: {commit}";
150
+ readonly 'projectctx.repos_title': "# Repositories of project {name}:";
151
+ readonly 'projectctx.repo_not_found': "- {path} (not found or not a git repository)";
152
+ readonly 'projectctx.repos_none': "No git repositories in \"{dir}\"";
153
+ readonly 'projectctx.repos_found': "# Git repositories in {dir}:";
154
+ readonly 'tool.classified': "Conversation classified as \"{category}\"";
155
+ readonly 'reference.session_manager_unavailable': "SessionManager unavailable";
156
+ readonly 'reference.session_not_found': "Session {id} not found";
157
+ readonly 'reference.no_messages': "No messages in session {id} in the specified range";
158
+ readonly 'reference.session_title': "# Session: {title}";
159
+ readonly 'permission.yolo_auto_approved': "{reason} (yolo mode: auto-approved)";
160
+ readonly 'permission.plan_write_blocked': "plan mode: file writes are blocked ({source})";
161
+ readonly 'permission.plan_source_mode': "plan mode";
162
+ readonly 'permission.plan_source_strict': "strict: plan not approved";
163
+ readonly 'permission.plan_shell_denied': "plan mode: shell command mutates state";
164
+ readonly 'permission.mcp_unavailable': "MCP tool unavailable in {mode} mode";
165
+ readonly 'permission.no_rules': "no permission rules for \"{tool}\" — allowed by default";
166
+ readonly 'permission.rule_matched': "rule \"{key}\" → {action}";
167
+ readonly 'permission.rule_pattern_matched': "rule \"{key}.{pattern}\" → {action} (path: {path})";
168
+ readonly 'permission.rule_prefix_matched': "rule \"{key}.*\" → {action}";
169
+ readonly 'permission.rule_command_matched': "rule \"{key}.{pattern}\" → {action} (command: {command})";
170
+ readonly 'permission.ask_timeout': "approval timed out";
171
+ readonly 'permission.ask_no_subscribers': "no connected user to approve";
172
+ readonly 'permission.ask_denied': "denied by the user";
173
+ readonly 'shellguard.allow_default': "command does not violate the shell policy";
174
+ readonly 'shellguard.deny_prefix': "Command denied by shell policy: prefix \"{prefix}\"";
175
+ readonly 'shellguard.deny_path': "Access denied by shell policy: path \"{path}\" is protected";
176
+ readonly 'shellguard.ask_path': "Path \"{path}\" requires approval per shell policy";
177
+ readonly 'shellguard.deny_dir': "Access denied by shell policy: path \"{path}\" is in protected directory \"{dir}\"";
178
+ readonly 'protectedpaths.unresolvable': "path cannot be resolved — not blocking";
179
+ readonly 'protectedpaths.dynamic': "path contains dynamic parts — could not verify (not blocking)";
180
+ readonly 'protectedpaths.allow_default': "path does not violate the protected paths policy";
181
+ readonly 'security.warn_prefix': "[WARN: prompt injection signs detected";
182
+ readonly 'security.injection_blocked': "[BLOCKED] Tool \"{tool}\" result blocked: prompt injection signs detected ({matches})";
183
+ readonly 'gateway.input_blocked': "Secrets detected in the request ({reason}). Request blocked by LLM Gateway.";
184
+ readonly 'gateway.rate_limit_warning': "⚠️ Rate limit exceeded. Please retry later.";
185
+ readonly 'gateway.output_secrets_reason': "secrets in the model response";
186
+ readonly 'router.timeout': "Timeout or connection drop to the LLM provider";
187
+ readonly 'router.network_error': "Failed to connect to the LLM provider (network error)";
188
+ readonly 'router.provider_not_found': "Provider {provider} not found or not configured";
189
+ readonly 'router.provider_unspecified': "unspecified";
190
+ readonly 'router.escalation': "Escalated to {provider}/{model}: {reason}";
191
+ readonly 'router.context_length_exceeded': "Context window exceeded";
192
+ readonly 'router.rate_limit_exceeded': "Request rate limit exceeded";
193
+ readonly 'qc.min_length_ok': "Response length {length} >= {min}";
194
+ readonly 'qc.min_length_fail_detail': "Response is shorter than {min} characters ({length})";
195
+ readonly 'qc.min_length_fail': "Response is shorter than {min} characters";
196
+ readonly 'qc.constraint_empty': "Response is empty or contains only whitespace";
197
+ readonly 'qc.constraint_parse_error': "Response contains an explicit parsing error: {snippet}";
198
+ readonly 'qc.constraint_ok': "Constraints passed";
199
+ readonly 'qc.self_check_skipped': "Self-check skipped: provider not specified";
200
+ readonly 'qc.self_check_unparsed': "Failed to parse the score: \"{score}\" — counting as passed";
201
+ readonly 'qc.self_check_low': "Self-check score: {score}/10 (threshold: 5)";
202
+ readonly 'qc.self_check_low_reason': "Model self-assessment is low: {score}/10";
203
+ readonly 'qc.self_check_ok': "Self-check score: {score}/10";
204
+ readonly 'qc.self_check_error': "Self-check error: {error} — counting as passed";
205
+ readonly 'qc.all_passed': "All checks passed";
206
+ readonly 'micro.greeting': "Hi! How can I help you?";
207
+ readonly 'micro.farewell': "Goodbye! Reach out anytime you need me.";
208
+ readonly 'micro.thanks': "You're welcome! Glad to help.";
209
+ readonly 'micro.enum.yes': "Yes.";
210
+ readonly 'micro.enum.no': "No.";
211
+ readonly 'micro.enum.approve': "Approved.";
212
+ readonly 'micro.enum.reject': "Rejected.";
213
+ readonly 'micro.enum.mode_plan': "Switching to planning mode. Investigating and drafting a plan.";
214
+ readonly 'micro.enum.mode_act': "Switching to working mode. Executing.";
215
+ readonly 'micro.intent.question': "Got a good question. I need more context for a precise answer — what exactly are you interested in?";
216
+ readonly 'micro.intent.command': "Understood. What's the specific task? Describe what needs to be done.";
217
+ readonly 'micro.intent.review': "Got it, a review is needed. Show me the code fragment and I'll assess its quality.";
218
+ readonly 'micro.intent.explain': "Got it, an explanation is needed. Which fragment/concept are we talking about?";
219
+ readonly 'micro.intent.debug': "Looks like a debugging task. Describe the error or attach the log — we'll figure it out.";
220
+ readonly 'micro.intent.fix': "Got it, a bug fix is needed. Show me the problematic code — we'll find the cause.";
221
+ readonly 'micro.intent.test': "Got it, tests are needed. Specify the function or module — I'll write the tests.";
222
+ };
223
+ export type SystemMessageKey = EngineMessageKey;
224
+ /**
225
+ * Возвращает en-текст системного сообщения по ключу с интерполяцией.
226
+ * Неизвестный ключ → fallback на сам ключ (никогда не undefined).
227
+ */
228
+ export declare function t(key: SystemMessageKey, params?: Record<string, string>): string;
229
+ /**
230
+ * metadata.i18n для сообщения/tool_result: ключ + параметры подстановки.
231
+ * Помимо ключей словаря допускаются динамические ключи (например
232
+ * `security.{messageId}` из prompts/security/*.md).
233
+ */
234
+ export declare function i18n(key: SystemMessageKey | (string & {}), params?: Record<string, string>): MessageI18n;
235
+ /** Проверка существования ключа в словаре. */
236
+ export declare function hasSystemMessage(key: string): key is SystemMessageKey;
237
+ //# sourceMappingURL=system-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-messages.d.ts","sourceRoot":"","sources":["../../src/engine/system-messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,eAAO,MAAM,4BAA4B,08JAAsB,CAAC;AAEhE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyPyB,CAAC;AAEtD,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAYhD;;;GAGG;AACH,wBAAgB,CAAC,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAIhF;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,gBAAgB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,CAExG;AAED,8CAA8C;AAC9C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAErE"}
@@ -0,0 +1,276 @@
1
+ /**
2
+ * SystemMessages — словарь системных сообщений ядра (i18n ядра).
3
+ *
4
+ * Схема «LLM = один язык / UI = локализация»:
5
+ * - LLM-канал: все системные тексты (tool_result, assistant-фоллбеки,
6
+ * INFO-сообщения) — на английском, через t(key, params).
7
+ * - UI-канал: вместе с текстом наружу отдаётся metadata.i18n =
8
+ * { key, params } — UI рендерит перевод по ключу (formatMessage),
9
+ * fallback — на content (en).
10
+ *
11
+ * Плейсхолдеры — `{param}`, совместимы с formatMessage на UI.
12
+ * Словарь — типобезопасный TS-объект (без файлового I/O).
13
+ * Ключи — стабильные en-like идентификаторы с группировкой по префиксам:
14
+ * session.*, task.*, tool.*, fs.*, plan.*, todo.*, project.*, permission.*,
15
+ * shellguard.*, protectedpaths.*, security.*, gateway.*, router.*, qc.*, micro.*
16
+ */
17
+ import { ENGINE_MESSAGE_KEYS } from '@itphx/synth-shared/i18n';
18
+ export const ENGINE_MESSAGE_KEYS_REGISTRY = ENGINE_MESSAGE_KEYS;
19
+ export const SYSTEM_MESSAGES = {
20
+ // --- Сессия: статусы, заголовки, ссылки ---
21
+ 'session.max_iterations': '(tool iteration limit reached)',
22
+ 'session.stopped': 'Processing stopped: {reason}',
23
+ 'session.stopped_reason_denied': 'the user denied the request',
24
+ 'session.denied_blocked': 'Could not proceed: the action was blocked by the security policy',
25
+ 'session.empty_response': 'Could not complete the request: the model response was empty',
26
+ 'session.dialog_title': 'Dialog — {id}',
27
+ 'session.default_title': 'New session',
28
+ 'session.reference_label': 'Session',
29
+ 'session.reference_link': 'Session link: {label} ({id}, messages {from}-{to})',
30
+ 'session.retry_cancelled': 'Retries cancelled by the user',
31
+ 'session.subtask_title': 'Subtask: {description}',
32
+ // --- Сабагент (task) ---
33
+ 'task.stopped_by_user': 'Task stopped by the user',
34
+ 'task.stopped_before_completion': 'The task was stopped by the user before completion. Above is the partial subagent answer; completed steps are listed. Details and history are in the child session.',
35
+ 'task.stopped_by_deny': 'Processing stopped: the user denied the tool execution request',
36
+ 'task.empty_response': '(empty subagent response)',
37
+ 'task.subagent_exec_error': 'Subagent execution error "{type}": {error}',
38
+ 'task.subagent_not_found': 'Subagent "{type}" not found. Available types: {types}',
39
+ 'task.subagent_not_allowed': 'Agent "{type}" cannot be used as a subagent (modes: {modes})',
40
+ 'task.deps_unavailable': 'Error: provider or agent registry unavailable for subagent launch',
41
+ 'task.subagent_exec_error_after_retries': 'Subagent execution error "{type}" after {attempts} attempt(s): {error}',
42
+ // --- Возобновление дочерней сессии саб-агента (resume) ---
43
+ 'task.resume_marker': 'Resume the interrupted task. Continue from where you stopped.',
44
+ 'task.resume_result': 'Resumed subagent "{type}" completed. Result:\n\n{summary}',
45
+ 'task.resume_failed': 'Resumed subagent "{type}" failed: {error}',
46
+ 'task.resume_aborted': 'Resumed subagent "{type}" was stopped by the user before completion.',
47
+ 'task.resume_session_not_found': 'Session {id} not found',
48
+ 'task.resume_no_parent': 'Session {id} is not a subagent session (no parent session) — resume is not applicable',
49
+ 'task.resume_parent_not_found': 'Parent session {id} not found — cannot resume the subagent session',
50
+ 'task.resume_locked': 'Session {id} is busy or already being resumed',
51
+ 'task.resume_agent_not_found': 'Agent "{type}" not found or cannot be used as a subagent',
52
+ 'task.resume_provider_unavailable': 'Provider is not configured for session {id} — cannot resume',
53
+ // --- Тулы: общие ошибки и результаты ---
54
+ 'tool.args_error': 'Tool "{tool}" argument error: {issues}',
55
+ 'tool.exec_error': 'Tool "{tool}" execution error: {error}',
56
+ 'tool.not_found': 'Tool "{tool}" not found',
57
+ 'tool.permission_denied_default': 'Access denied by the security policy',
58
+ 'tool.doom_loop': 'Error: tool "{tool}" called {count} time(s) with the same arguments. Loop broken.',
59
+ 'tool.empty_output': '(empty output)',
60
+ 'tool.output_truncated': '\n... (output truncated)',
61
+ 'tool.shell_error': 'Error: {message}',
62
+ 'tool.command_failed_default': 'Command failed',
63
+ 'tool.aborted': 'Execution interrupted by the user.',
64
+ // --- Файлы (fs-write) ---
65
+ 'fs.file_written': 'File written: {path} ({lines} lines, {bytes} bytes)',
66
+ 'fs.file_edited': 'File edited: {path} ({count} replacements)',
67
+ 'fs.replace_not_found': 'Error: replacement string not found in file "{path}"',
68
+ 'fs.replace_multiple': 'Error: found {count} matches of the replacement string. Provide more context for a unique match.',
69
+ 'fs.dir_created': 'Directory created: {path}',
70
+ 'fs.file_deleted': 'File deleted: {path}',
71
+ // --- Чтение файлов (fs-read) ---
72
+ 'fsread.empty_directory': '(empty directory)',
73
+ 'fsread.no_files': '(no files found)',
74
+ 'fsread.glob_error': '(file search error)',
75
+ // --- Веб (web_fetch / web_search) ---
76
+ 'web.duckduckgo_blocked': 'DuckDuckGo is temporarily blocking requests (anti-bot challenge)',
77
+ 'web.search_failed': 'Failed to get results from DuckDuckGo',
78
+ 'web.search_results': 'Search results for "{query}" ({count}):\n\n{items}',
79
+ 'web.fetch_args_url_required': 'specify url or urls',
80
+ 'web.js_framework_warning': '\n\n⚠️ The site uses a JavaScript framework — some content may be unavailable without executing JS.',
81
+ 'web.low_content_warning': '\n\n⚠️ The page has very little text content (possibly JavaScript rendering).',
82
+ 'web.content_truncated': '\n... (content truncated)',
83
+ 'web.block_timeout': '❌ Timeout',
84
+ 'web.block_error': '❌ Load error: {error}',
85
+ 'web.fetch_all_failed': 'Failed to load any of the URLs',
86
+ 'web.no_results': 'No results found for "{query}".',
87
+ 'web.search_error': 'Web search error: {error}',
88
+ // --- Поиск ---
89
+ 'search.no_matches': '(no matches found)',
90
+ 'search.matches_truncated': '... (showing 200 of {total} matches)',
91
+ 'search.rg_not_installed': '(rg (ripgrep) is not installed. Search is unavailable)',
92
+ 'search.error': 'Search error: {error}',
93
+ // --- План ---
94
+ 'plan.enter_success': 'Plan mode activated: file writes are blocked, reading is allowed. Investigate the task, work with the plan via plan_read/plan_write and finish via plan_exit to switch back to act mode.',
95
+ 'plan.exit_success': 'Plan approved. Act mode activated: file writes are allowed.',
96
+ 'plan.session_manager_unavailable': 'Error: session manager unavailable for {tool}',
97
+ 'plan.enter_failed': 'Error: failed to switch the session to plan mode',
98
+ 'plan.exit_failed': 'Error: failed to switch the session to act mode',
99
+ 'plan.project_store_unavailable': 'Error: project store unavailable for plan_write',
100
+ 'plan.no_project': 'Error: no project (the plan belongs to the project)',
101
+ 'plan.no_project_read': 'No project: the plan is unavailable (the plan belongs to the project)',
102
+ 'plan.column_not_found': 'Error: column "{columnId}" not found',
103
+ 'plan.item_not_found': 'Error: plan item with id "{itemId}" not found',
104
+ 'plan.save_error': 'Error saving the plan: {error}',
105
+ 'plan.markdown_title': '# Plan (v{version})',
106
+ 'plan.markdown_empty': 'No items',
107
+ 'plan.markdown_column_empty': '(empty)',
108
+ 'plan.markdown_dependencies': ' - Dependencies: {deps}',
109
+ 'plan.default_column_backlog': 'Backlog',
110
+ 'plan.default_column_todo': 'To do',
111
+ 'plan.default_column_in_progress': 'In progress',
112
+ 'plan.default_column_done': 'Done',
113
+ // --- Todo ---
114
+ 'todo.save_error': 'Error saving the todo list: {error}',
115
+ 'todo.read_error': 'Error reading the todo list: {error}',
116
+ 'todo.list_empty': 'Todo list is empty',
117
+ 'todo.list': 'Todo list ({count}):\n{items}',
118
+ 'todo.item_not_found': 'Error: todo item with id "{id}" not found',
119
+ 'todo.items_not_found': 'Error: todo items with ids "{ids}" not found',
120
+ 'todo.status_pending': 'pending',
121
+ 'todo.status_in_progress': 'in progress',
122
+ 'todo.status_completed': 'done',
123
+ 'todo.status_cancelled': 'cancelled',
124
+ 'todo.priority_high': 'high',
125
+ 'todo.priority_medium': 'medium',
126
+ 'todo.priority_low': 'low',
127
+ // --- Проект ---
128
+ 'project.deps_unavailable': 'Error: session manager or project store unavailable for {tool}',
129
+ 'project.session_read_error': 'Error: failed to read the session',
130
+ 'project.session_not_found': 'Error: session not found',
131
+ 'project.save_error': 'Error saving the project: {error}',
132
+ 'project.created': 'Project "{name}" created and attached to the session.\n{json}',
133
+ 'project.read_error': 'Error: failed to read the project',
134
+ 'project.not_found': 'Project {id} not found',
135
+ 'project.attached': 'Session attached to project "{name}".',
136
+ 'project.log_no_project': 'No project: the log is available only within a project',
137
+ 'project.log_save_error': 'Error saving the project log: {error}',
138
+ 'project.log_added': 'Log entry added. Total entries: {count}.',
139
+ 'project.log_empty': 'Log is empty',
140
+ 'project.log_list': 'Project log ({count}):\n{items}',
141
+ 'project.invariants_no_project': 'No project: invariants are available only within a project',
142
+ 'project.invariants_empty': 'Invariants are not set',
143
+ 'project.invariants_saved': 'Project invariants saved.',
144
+ 'project.invariants_save_error': 'Error saving the invariants: {error}',
145
+ // --- Контекст проекта (get_project_info / list_repos) ---
146
+ 'projectctx.info_title': '# Project: {name}',
147
+ 'projectctx.info_id': '- ID: {id}',
148
+ 'projectctx.info_workspace': '- Project working directory: {dir}',
149
+ 'projectctx.info_description': '- Description: {description}',
150
+ 'projectctx.not_found': '# Project: not found (id: {id})',
151
+ 'projectctx.missing': '# Project: none',
152
+ 'projectctx.working_dir': '- Working directory: {dir}',
153
+ 'projectctx.no_plan_hint': '- The plan is unavailable (the plan belongs to the project). To work with the plan — create a project.',
154
+ 'projectctx.git_section': '## Git repository',
155
+ 'projectctx.repo_branch': ' - Branch: {branch}',
156
+ 'projectctx.repo_remote': ' - Remote: {url}',
157
+ 'projectctx.repo_state': ' - State: {state}',
158
+ 'projectctx.repo_state_dirty': 'has changes',
159
+ 'projectctx.repo_state_clean': 'clean',
160
+ 'projectctx.repo_last_commit': ' - Last commit: {commit}',
161
+ 'projectctx.repos_title': '# Repositories of project {name}:',
162
+ 'projectctx.repo_not_found': '- {path} (not found or not a git repository)',
163
+ 'projectctx.repos_none': 'No git repositories in "{dir}"',
164
+ 'projectctx.repos_found': '# Git repositories in {dir}:',
165
+ // --- Классификация ---
166
+ 'tool.classified': 'Conversation classified as "{category}"',
167
+ // --- Ссылки на сессии ---
168
+ 'reference.session_manager_unavailable': 'SessionManager unavailable',
169
+ 'reference.session_not_found': 'Session {id} not found',
170
+ 'reference.no_messages': 'No messages in session {id} in the specified range',
171
+ 'reference.session_title': '# Session: {title}',
172
+ // --- Permissions (evaluator) ---
173
+ 'permission.yolo_auto_approved': '{reason} (yolo mode: auto-approved)',
174
+ 'permission.plan_write_blocked': 'plan mode: file writes are blocked ({source})',
175
+ 'permission.plan_source_mode': 'plan mode',
176
+ 'permission.plan_source_strict': 'strict: plan not approved',
177
+ 'permission.plan_shell_denied': 'plan mode: shell command mutates state',
178
+ 'permission.mcp_unavailable': 'MCP tool unavailable in {mode} mode',
179
+ 'permission.no_rules': 'no permission rules for "{tool}" — allowed by default',
180
+ 'permission.rule_matched': 'rule "{key}" → {action}',
181
+ 'permission.rule_pattern_matched': 'rule "{key}.{pattern}" → {action} (path: {path})',
182
+ 'permission.rule_prefix_matched': 'rule "{key}.*" → {action}',
183
+ 'permission.rule_command_matched': 'rule "{key}.{pattern}" → {action} (command: {command})',
184
+ 'permission.ask_timeout': 'approval timed out',
185
+ 'permission.ask_no_subscribers': 'no connected user to approve',
186
+ 'permission.ask_denied': 'denied by the user',
187
+ // --- Shell-политика (shell-guard) ---
188
+ 'shellguard.allow_default': 'command does not violate the shell policy',
189
+ 'shellguard.deny_prefix': 'Command denied by shell policy: prefix "{prefix}"',
190
+ 'shellguard.deny_path': 'Access denied by shell policy: path "{path}" is protected',
191
+ 'shellguard.ask_path': 'Path "{path}" requires approval per shell policy',
192
+ 'shellguard.deny_dir': 'Access denied by shell policy: path "{path}" is in protected directory "{dir}"',
193
+ // --- Защищённые пути (protected-paths) ---
194
+ 'protectedpaths.unresolvable': 'path cannot be resolved — not blocking',
195
+ 'protectedpaths.dynamic': 'path contains dynamic parts — could not verify (not blocking)',
196
+ 'protectedpaths.allow_default': 'path does not violate the protected paths policy',
197
+ // --- Prompt injection ---
198
+ 'security.warn_prefix': '[WARN: prompt injection signs detected',
199
+ 'security.injection_blocked': '[BLOCKED] Tool "{tool}" result blocked: prompt injection signs detected ({matches})',
200
+ // --- LLM Gateway ---
201
+ 'gateway.input_blocked': 'Secrets detected in the request ({reason}). Request blocked by LLM Gateway.',
202
+ 'gateway.rate_limit_warning': '⚠️ Rate limit exceeded. Please retry later.',
203
+ 'gateway.output_secrets_reason': 'secrets in the model response',
204
+ // --- Router / провайдеры ---
205
+ 'router.timeout': 'Timeout or connection drop to the LLM provider',
206
+ 'router.network_error': 'Failed to connect to the LLM provider (network error)',
207
+ 'router.provider_not_found': 'Provider {provider} not found or not configured',
208
+ 'router.provider_unspecified': 'unspecified',
209
+ 'router.escalation': 'Escalated to {provider}/{model}: {reason}',
210
+ 'router.context_length_exceeded': 'Context window exceeded',
211
+ 'router.rate_limit_exceeded': 'Request rate limit exceeded',
212
+ // --- Quality check (AD-034) ---
213
+ 'qc.min_length_ok': 'Response length {length} >= {min}',
214
+ 'qc.min_length_fail_detail': 'Response is shorter than {min} characters ({length})',
215
+ 'qc.min_length_fail': 'Response is shorter than {min} characters',
216
+ 'qc.constraint_empty': 'Response is empty or contains only whitespace',
217
+ 'qc.constraint_parse_error': 'Response contains an explicit parsing error: {snippet}',
218
+ 'qc.constraint_ok': 'Constraints passed',
219
+ 'qc.self_check_skipped': 'Self-check skipped: provider not specified',
220
+ 'qc.self_check_unparsed': 'Failed to parse the score: "{score}" — counting as passed',
221
+ 'qc.self_check_low': 'Self-check score: {score}/10 (threshold: 5)',
222
+ 'qc.self_check_low_reason': 'Model self-assessment is low: {score}/10',
223
+ 'qc.self_check_ok': 'Self-check score: {score}/10',
224
+ 'qc.self_check_error': 'Self-check error: {error} — counting as passed',
225
+ 'qc.all_passed': 'All checks passed',
226
+ // --- Микро-слой (AD-035) ---
227
+ 'micro.greeting': 'Hi! How can I help you?',
228
+ 'micro.farewell': 'Goodbye! Reach out anytime you need me.',
229
+ 'micro.thanks': "You're welcome! Glad to help.",
230
+ 'micro.enum.yes': 'Yes.',
231
+ 'micro.enum.no': 'No.',
232
+ 'micro.enum.approve': 'Approved.',
233
+ 'micro.enum.reject': 'Rejected.',
234
+ 'micro.enum.mode_plan': 'Switching to planning mode. Investigating and drafting a plan.',
235
+ 'micro.enum.mode_act': 'Switching to working mode. Executing.',
236
+ 'micro.intent.question': 'Got a good question. I need more context for a precise answer — what exactly are you interested in?',
237
+ 'micro.intent.command': "Understood. What's the specific task? Describe what needs to be done.",
238
+ 'micro.intent.review': "Got it, a review is needed. Show me the code fragment and I'll assess its quality.",
239
+ 'micro.intent.explain': 'Got it, an explanation is needed. Which fragment/concept are we talking about?',
240
+ 'micro.intent.debug': "Looks like a debugging task. Describe the error or attach the log — we'll figure it out.",
241
+ 'micro.intent.fix': "Got it, a bug fix is needed. Show me the problematic code — we'll find the cause.",
242
+ 'micro.intent.test': "Got it, tests are needed. Specify the function or module — I'll write the tests.",
243
+ };
244
+ /** Интерполяция `{param}` в шаблоне. Неизвестные плейсхолдеры остаются как есть. */
245
+ function interpolate(template, params) {
246
+ if (!params)
247
+ return template;
248
+ let out = template;
249
+ for (const [name, value] of Object.entries(params)) {
250
+ out = out.split(`{${name}}`).join(value);
251
+ }
252
+ return out;
253
+ }
254
+ /**
255
+ * Возвращает en-текст системного сообщения по ключу с интерполяцией.
256
+ * Неизвестный ключ → fallback на сам ключ (никогда не undefined).
257
+ */
258
+ export function t(key, params) {
259
+ const template = SYSTEM_MESSAGES[key];
260
+ if (template === undefined)
261
+ return key;
262
+ return interpolate(template, params);
263
+ }
264
+ /**
265
+ * metadata.i18n для сообщения/tool_result: ключ + параметры подстановки.
266
+ * Помимо ключей словаря допускаются динамические ключи (например
267
+ * `security.{messageId}` из prompts/security/*.md).
268
+ */
269
+ export function i18n(key, params) {
270
+ return params ? { key, params } : { key };
271
+ }
272
+ /** Проверка существования ключа в словаре. */
273
+ export function hasSystemMessage(key) {
274
+ return Object.prototype.hasOwnProperty.call(SYSTEM_MESSAGES, key);
275
+ }
276
+ //# sourceMappingURL=system-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-messages.js","sourceRoot":"","sources":["../../src/engine/system-messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=system-messages.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-messages.test.d.ts","sourceRoot":"","sources":["../../src/engine/system-messages.test.ts"],"names":[],"mappings":""}