@elizaos/plugin-training 2.0.3-beta.6 → 2.0.3-beta.7

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 (363) hide show
  1. package/dist/backends/native.d.ts +96 -0
  2. package/dist/backends/native.d.ts.map +1 -0
  3. package/dist/backends/native.js +308 -0
  4. package/dist/backends/native.js.map +1 -0
  5. package/dist/cli/train.d.ts +22 -0
  6. package/dist/cli/train.d.ts.map +1 -0
  7. package/dist/cli/train.js +219 -0
  8. package/dist/cli/train.js.map +1 -0
  9. package/dist/core/action-benchmark-runner.d.ts +55 -0
  10. package/dist/core/action-benchmark-runner.d.ts.map +1 -0
  11. package/dist/core/action-benchmark-runner.js +341 -0
  12. package/dist/core/action-benchmark-runner.js.map +1 -0
  13. package/dist/core/artifact-store.d.ts +72 -0
  14. package/dist/core/artifact-store.d.ts.map +1 -0
  15. package/dist/core/artifact-store.js +50 -0
  16. package/dist/core/artifact-store.js.map +1 -0
  17. package/dist/core/benchmark-matrix-artifact.d.ts +102 -0
  18. package/dist/core/benchmark-matrix-artifact.d.ts.map +1 -0
  19. package/dist/core/benchmark-matrix-artifact.js +381 -0
  20. package/dist/core/benchmark-matrix-artifact.js.map +1 -0
  21. package/dist/core/benchmark-vs-cerebras-runner.d.ts +37 -0
  22. package/dist/core/benchmark-vs-cerebras-runner.d.ts.map +1 -0
  23. package/dist/core/benchmark-vs-cerebras-runner.js +151 -0
  24. package/dist/core/benchmark-vs-cerebras-runner.js.map +1 -0
  25. package/dist/core/cerebras-eval-model.d.ts +54 -0
  26. package/dist/core/cerebras-eval-model.d.ts.map +1 -0
  27. package/dist/core/cerebras-eval-model.js +249 -0
  28. package/dist/core/cerebras-eval-model.js.map +1 -0
  29. package/dist/core/cli.d.ts +15 -0
  30. package/dist/core/cli.d.ts.map +1 -0
  31. package/dist/core/cli.js +1003 -0
  32. package/dist/core/cli.js.map +1 -0
  33. package/dist/core/context-audit.d.ts +51 -0
  34. package/dist/core/context-audit.d.ts.map +1 -0
  35. package/dist/core/context-audit.js +166 -0
  36. package/dist/core/context-audit.js.map +1 -0
  37. package/dist/core/context-catalog.d.ts +47 -0
  38. package/dist/core/context-catalog.d.ts.map +1 -0
  39. package/dist/core/context-catalog.js +269 -0
  40. package/dist/core/context-catalog.js.map +1 -0
  41. package/dist/core/context-types.d.ts +3 -0
  42. package/dist/core/context-types.d.ts.map +1 -0
  43. package/dist/core/context-types.js +18 -0
  44. package/dist/core/context-types.js.map +1 -0
  45. package/dist/core/dataset-generator.d.ts +135 -0
  46. package/dist/core/dataset-generator.d.ts.map +1 -0
  47. package/dist/core/dataset-generator.js +895 -0
  48. package/dist/core/dataset-generator.js.map +1 -0
  49. package/dist/core/eliza1-benchmark-recipe.d.ts +18 -0
  50. package/dist/core/eliza1-benchmark-recipe.d.ts.map +1 -0
  51. package/dist/core/eliza1-benchmark-recipe.js +64 -0
  52. package/dist/core/eliza1-benchmark-recipe.js.map +1 -0
  53. package/dist/core/eliza1-bundle-stager.d.ts +57 -0
  54. package/dist/core/eliza1-bundle-stager.d.ts.map +1 -0
  55. package/dist/core/eliza1-bundle-stager.js +149 -0
  56. package/dist/core/eliza1-bundle-stager.js.map +1 -0
  57. package/dist/core/ensure-cron-job.d.ts +53 -0
  58. package/dist/core/ensure-cron-job.d.ts.map +1 -0
  59. package/dist/core/ensure-cron-job.js +51 -0
  60. package/dist/core/ensure-cron-job.js.map +1 -0
  61. package/dist/core/eval-comparison-artifact.d.ts +72 -0
  62. package/dist/core/eval-comparison-artifact.d.ts.map +1 -0
  63. package/dist/core/eval-comparison-artifact.js +281 -0
  64. package/dist/core/eval-comparison-artifact.js.map +1 -0
  65. package/dist/core/feed-generation-runner.d.ts +37 -0
  66. package/dist/core/feed-generation-runner.d.ts.map +1 -0
  67. package/dist/core/feed-generation-runner.js +232 -0
  68. package/dist/core/feed-generation-runner.js.map +1 -0
  69. package/dist/core/html-escape.d.ts +5 -0
  70. package/dist/core/html-escape.d.ts.map +1 -0
  71. package/dist/core/html-escape.js +11 -0
  72. package/dist/core/html-escape.js.map +1 -0
  73. package/dist/core/huggingface-dataset-ingest.d.ts +52 -0
  74. package/dist/core/huggingface-dataset-ingest.d.ts.map +1 -0
  75. package/dist/core/huggingface-dataset-ingest.js +134 -0
  76. package/dist/core/huggingface-dataset-ingest.js.map +1 -0
  77. package/dist/core/index.d.ts +29 -0
  78. package/dist/core/index.d.ts.map +1 -0
  79. package/dist/core/index.js +204 -0
  80. package/dist/core/index.js.map +1 -0
  81. package/dist/core/privacy-filter.d.ts +95 -0
  82. package/dist/core/privacy-filter.d.ts.map +1 -0
  83. package/dist/core/privacy-filter.js +324 -0
  84. package/dist/core/privacy-filter.js.map +1 -0
  85. package/dist/core/promotion-gate.d.ts +117 -0
  86. package/dist/core/promotion-gate.d.ts.map +1 -0
  87. package/dist/core/promotion-gate.js +85 -0
  88. package/dist/core/promotion-gate.js.map +1 -0
  89. package/dist/core/promotion-persist.d.ts +116 -0
  90. package/dist/core/promotion-persist.d.ts.map +1 -0
  91. package/dist/core/promotion-persist.js +93 -0
  92. package/dist/core/promotion-persist.js.map +1 -0
  93. package/dist/core/prompt-compare.d.ts +99 -0
  94. package/dist/core/prompt-compare.d.ts.map +1 -0
  95. package/dist/core/prompt-compare.js +210 -0
  96. package/dist/core/prompt-compare.js.map +1 -0
  97. package/dist/core/replay-validator.d.ts +136 -0
  98. package/dist/core/replay-validator.d.ts.map +1 -0
  99. package/dist/core/replay-validator.js +312 -0
  100. package/dist/core/replay-validator.js.map +1 -0
  101. package/dist/core/roleplay-executor.d.ts +123 -0
  102. package/dist/core/roleplay-executor.d.ts.map +1 -0
  103. package/dist/core/roleplay-executor.js +675 -0
  104. package/dist/core/roleplay-executor.js.map +1 -0
  105. package/dist/core/roleplay-trajectories.d.ts +54 -0
  106. package/dist/core/roleplay-trajectories.d.ts.map +1 -0
  107. package/dist/core/roleplay-trajectories.js +88 -0
  108. package/dist/core/roleplay-trajectories.js.map +1 -0
  109. package/dist/core/scenario-blueprints.d.ts +62 -0
  110. package/dist/core/scenario-blueprints.d.ts.map +1 -0
  111. package/dist/core/scenario-blueprints.js +850 -0
  112. package/dist/core/scenario-blueprints.js.map +1 -0
  113. package/dist/core/scenario-runner.d.ts +36 -0
  114. package/dist/core/scenario-runner.d.ts.map +1 -0
  115. package/dist/core/scenario-runner.js +216 -0
  116. package/dist/core/scenario-runner.js.map +1 -0
  117. package/dist/core/skill-scoring-cron.d.ts +57 -0
  118. package/dist/core/skill-scoring-cron.d.ts.map +1 -0
  119. package/dist/core/skill-scoring-cron.js +180 -0
  120. package/dist/core/skill-scoring-cron.js.map +1 -0
  121. package/dist/core/test-trajectory-collector.d.ts +37 -0
  122. package/dist/core/test-trajectory-collector.d.ts.map +1 -0
  123. package/dist/core/test-trajectory-collector.js +225 -0
  124. package/dist/core/test-trajectory-collector.js.map +1 -0
  125. package/dist/core/track-c-queue-task.d.ts +37 -0
  126. package/dist/core/track-c-queue-task.d.ts.map +1 -0
  127. package/dist/core/track-c-queue-task.js +104 -0
  128. package/dist/core/track-c-queue-task.js.map +1 -0
  129. package/dist/core/training-analysis-index.d.ts +104 -0
  130. package/dist/core/training-analysis-index.d.ts.map +1 -0
  131. package/dist/core/training-analysis-index.js +3297 -0
  132. package/dist/core/training-analysis-index.js.map +1 -0
  133. package/dist/core/training-collection-runner.d.ts +508 -0
  134. package/dist/core/training-collection-runner.d.ts.map +1 -0
  135. package/dist/core/training-collection-runner.js +2299 -0
  136. package/dist/core/training-collection-runner.js.map +1 -0
  137. package/dist/core/training-config.d.ts +52 -0
  138. package/dist/core/training-config.d.ts.map +1 -0
  139. package/dist/core/training-config.js +117 -0
  140. package/dist/core/training-config.js.map +1 -0
  141. package/dist/core/training-orchestrator.d.ts +112 -0
  142. package/dist/core/training-orchestrator.d.ts.map +1 -0
  143. package/dist/core/training-orchestrator.js +729 -0
  144. package/dist/core/training-orchestrator.js.map +1 -0
  145. package/dist/core/training-readiness-report.d.ts +52 -0
  146. package/dist/core/training-readiness-report.d.ts.map +1 -0
  147. package/dist/core/training-readiness-report.js +765 -0
  148. package/dist/core/training-readiness-report.js.map +1 -0
  149. package/dist/core/trajectory-consumer.d.ts +15 -0
  150. package/dist/core/trajectory-consumer.d.ts.map +1 -0
  151. package/dist/core/trajectory-consumer.js +61 -0
  152. package/dist/core/trajectory-consumer.js.map +1 -0
  153. package/dist/core/trajectory-export-bundle.d.ts +95 -0
  154. package/dist/core/trajectory-export-bundle.d.ts.map +1 -0
  155. package/dist/core/trajectory-export-bundle.js +561 -0
  156. package/dist/core/trajectory-export-bundle.js.map +1 -0
  157. package/dist/core/trajectory-export-cron.d.ts +57 -0
  158. package/dist/core/trajectory-export-cron.d.ts.map +1 -0
  159. package/dist/core/trajectory-export-cron.js +170 -0
  160. package/dist/core/trajectory-export-cron.js.map +1 -0
  161. package/dist/core/trajectory-hf-upload.d.ts +50 -0
  162. package/dist/core/trajectory-hf-upload.d.ts.map +1 -0
  163. package/dist/core/trajectory-hf-upload.js +111 -0
  164. package/dist/core/trajectory-hf-upload.js.map +1 -0
  165. package/dist/core/trajectory-task-datasets.d.ts +62 -0
  166. package/dist/core/trajectory-task-datasets.d.ts.map +1 -0
  167. package/dist/core/trajectory-task-datasets.js +427 -0
  168. package/dist/core/trajectory-task-datasets.js.map +1 -0
  169. package/dist/core/wait-for-service.d.ts +25 -0
  170. package/dist/core/wait-for-service.d.ts.map +1 -0
  171. package/dist/core/wait-for-service.js +19 -0
  172. package/dist/core/wait-for-service.js.map +1 -0
  173. package/dist/core/workspace-runtime.d.ts +4 -0
  174. package/dist/core/workspace-runtime.d.ts.map +1 -0
  175. package/dist/core/workspace-runtime.js +25 -0
  176. package/dist/core/workspace-runtime.js.map +1 -0
  177. package/dist/dspy/artifact.d.ts +54 -0
  178. package/dist/dspy/artifact.d.ts.map +1 -0
  179. package/dist/dspy/artifact.js +61 -0
  180. package/dist/dspy/artifact.js.map +1 -0
  181. package/dist/dspy/chain-of-thought.d.ts +27 -0
  182. package/dist/dspy/chain-of-thought.d.ts.map +1 -0
  183. package/dist/dspy/chain-of-thought.js +43 -0
  184. package/dist/dspy/chain-of-thought.js.map +1 -0
  185. package/dist/dspy/examples.d.ts +72 -0
  186. package/dist/dspy/examples.d.ts.map +1 -0
  187. package/dist/dspy/examples.js +105 -0
  188. package/dist/dspy/examples.js.map +1 -0
  189. package/dist/dspy/index.d.ts +15 -0
  190. package/dist/dspy/index.d.ts.map +1 -0
  191. package/dist/dspy/index.js +40 -0
  192. package/dist/dspy/index.js.map +1 -0
  193. package/dist/dspy/lm-adapter.d.ts +100 -0
  194. package/dist/dspy/lm-adapter.d.ts.map +1 -0
  195. package/dist/dspy/lm-adapter.js +81 -0
  196. package/dist/dspy/lm-adapter.js.map +1 -0
  197. package/dist/dspy/optimizers/dspy-bootstrap-fewshot.d.ts +23 -0
  198. package/dist/dspy/optimizers/dspy-bootstrap-fewshot.d.ts.map +1 -0
  199. package/dist/dspy/optimizers/dspy-bootstrap-fewshot.js +85 -0
  200. package/dist/dspy/optimizers/dspy-bootstrap-fewshot.js.map +1 -0
  201. package/dist/dspy/optimizers/dspy-copro.d.ts +29 -0
  202. package/dist/dspy/optimizers/dspy-copro.d.ts.map +1 -0
  203. package/dist/dspy/optimizers/dspy-copro.js +141 -0
  204. package/dist/dspy/optimizers/dspy-copro.js.map +1 -0
  205. package/dist/dspy/optimizers/dspy-mipro.d.ts +37 -0
  206. package/dist/dspy/optimizers/dspy-mipro.d.ts.map +1 -0
  207. package/dist/dspy/optimizers/dspy-mipro.js +194 -0
  208. package/dist/dspy/optimizers/dspy-mipro.js.map +1 -0
  209. package/dist/dspy/optimizers/index.d.ts +5 -0
  210. package/dist/dspy/optimizers/index.d.ts.map +1 -0
  211. package/dist/dspy/optimizers/index.js +11 -0
  212. package/dist/dspy/optimizers/index.js.map +1 -0
  213. package/dist/dspy/optimizers/types.d.ts +39 -0
  214. package/dist/dspy/optimizers/types.d.ts.map +1 -0
  215. package/dist/dspy/optimizers/types.js +1 -0
  216. package/dist/dspy/optimizers/types.js.map +1 -0
  217. package/dist/dspy/predict.d.ts +49 -0
  218. package/dist/dspy/predict.d.ts.map +1 -0
  219. package/dist/dspy/predict.js +73 -0
  220. package/dist/dspy/predict.js.map +1 -0
  221. package/dist/dspy/signature.d.ts +88 -0
  222. package/dist/dspy/signature.d.ts.map +1 -0
  223. package/dist/dspy/signature.js +205 -0
  224. package/dist/dspy/signature.js.map +1 -0
  225. package/dist/index.d.ts +15 -0
  226. package/dist/index.d.ts.map +1 -0
  227. package/dist/index.js +15 -0
  228. package/dist/index.js.map +1 -0
  229. package/dist/optimizers/bootstrap-fewshot.d.ts +42 -0
  230. package/dist/optimizers/bootstrap-fewshot.d.ts.map +1 -0
  231. package/dist/optimizers/bootstrap-fewshot.js +92 -0
  232. package/dist/optimizers/bootstrap-fewshot.js.map +1 -0
  233. package/dist/optimizers/gepa.d.ts +63 -0
  234. package/dist/optimizers/gepa.d.ts.map +1 -0
  235. package/dist/optimizers/gepa.js +232 -0
  236. package/dist/optimizers/gepa.js.map +1 -0
  237. package/dist/optimizers/index.d.ts +7 -0
  238. package/dist/optimizers/index.d.ts.map +1 -0
  239. package/dist/optimizers/index.js +51 -0
  240. package/dist/optimizers/index.js.map +1 -0
  241. package/dist/optimizers/instruction-search.d.ts +39 -0
  242. package/dist/optimizers/instruction-search.d.ts.map +1 -0
  243. package/dist/optimizers/instruction-search.js +108 -0
  244. package/dist/optimizers/instruction-search.js.map +1 -0
  245. package/dist/optimizers/prompt-evolution.d.ts +39 -0
  246. package/dist/optimizers/prompt-evolution.d.ts.map +1 -0
  247. package/dist/optimizers/prompt-evolution.js +101 -0
  248. package/dist/optimizers/prompt-evolution.js.map +1 -0
  249. package/dist/optimizers/scoring.d.ts +139 -0
  250. package/dist/optimizers/scoring.d.ts.map +1 -0
  251. package/dist/optimizers/scoring.js +299 -0
  252. package/dist/optimizers/scoring.js.map +1 -0
  253. package/dist/optimizers/types.d.ts +105 -0
  254. package/dist/optimizers/types.d.ts.map +1 -0
  255. package/dist/optimizers/types.js +1 -0
  256. package/dist/optimizers/types.js.map +1 -0
  257. package/dist/register-runtime.d.ts +3 -0
  258. package/dist/register-runtime.d.ts.map +1 -0
  259. package/dist/register-runtime.js +60 -0
  260. package/dist/register-runtime.js.map +1 -0
  261. package/dist/register-terminal-view.d.ts +15 -0
  262. package/dist/register-terminal-view.d.ts.map +1 -0
  263. package/dist/register-terminal-view.js +31 -0
  264. package/dist/register-terminal-view.js.map +1 -0
  265. package/dist/routes/experience-routes.d.ts +21 -0
  266. package/dist/routes/experience-routes.d.ts.map +1 -0
  267. package/dist/routes/experience-routes.js +513 -0
  268. package/dist/routes/experience-routes.js.map +1 -0
  269. package/dist/routes/index.d.ts +5 -0
  270. package/dist/routes/index.d.ts.map +1 -0
  271. package/dist/routes/index.js +17 -0
  272. package/dist/routes/index.js.map +1 -0
  273. package/dist/routes/training-routes.d.ts +10 -0
  274. package/dist/routes/training-routes.d.ts.map +1 -0
  275. package/dist/routes/training-routes.js +1239 -0
  276. package/dist/routes/training-routes.js.map +1 -0
  277. package/dist/routes/training-vast-routes.d.ts +35 -0
  278. package/dist/routes/training-vast-routes.d.ts.map +1 -0
  279. package/dist/routes/training-vast-routes.js +249 -0
  280. package/dist/routes/training-vast-routes.js.map +1 -0
  281. package/dist/routes/trajectory-routes.d.ts +19 -0
  282. package/dist/routes/trajectory-routes.d.ts.map +1 -0
  283. package/dist/routes/trajectory-routes.js +1122 -0
  284. package/dist/routes/trajectory-routes.js.map +1 -0
  285. package/dist/services/index.d.ts +9 -0
  286. package/dist/services/index.d.ts.map +1 -0
  287. package/dist/services/index.js +63 -0
  288. package/dist/services/index.js.map +1 -0
  289. package/dist/services/training-backend-check.d.ts +8 -0
  290. package/dist/services/training-backend-check.d.ts.map +1 -0
  291. package/dist/services/training-backend-check.js +31 -0
  292. package/dist/services/training-backend-check.js.map +1 -0
  293. package/dist/services/training-service-like.d.ts +40 -0
  294. package/dist/services/training-service-like.d.ts.map +1 -0
  295. package/dist/services/training-service-like.js +1 -0
  296. package/dist/services/training-service-like.js.map +1 -0
  297. package/dist/services/training-service-registry.d.ts +4 -0
  298. package/dist/services/training-service-registry.d.ts.map +1 -0
  299. package/dist/services/training-service-registry.js +12 -0
  300. package/dist/services/training-service-registry.js.map +1 -0
  301. package/dist/services/training-service.d.ts +59 -0
  302. package/dist/services/training-service.d.ts.map +1 -0
  303. package/dist/services/training-service.js +154 -0
  304. package/dist/services/training-service.js.map +1 -0
  305. package/dist/services/training-trigger.d.ts +177 -0
  306. package/dist/services/training-trigger.d.ts.map +1 -0
  307. package/dist/services/training-trigger.js +300 -0
  308. package/dist/services/training-trigger.js.map +1 -0
  309. package/dist/services/training-vast-service.d.ts +149 -0
  310. package/dist/services/training-vast-service.d.ts.map +1 -0
  311. package/dist/services/training-vast-service.js +648 -0
  312. package/dist/services/training-vast-service.js.map +1 -0
  313. package/dist/services/vast-inference-stats.d.ts +37 -0
  314. package/dist/services/vast-inference-stats.d.ts.map +1 -0
  315. package/dist/services/vast-inference-stats.js +81 -0
  316. package/dist/services/vast-inference-stats.js.map +1 -0
  317. package/dist/services/vast-job-store.d.ts +74 -0
  318. package/dist/services/vast-job-store.d.ts.map +1 -0
  319. package/dist/services/vast-job-store.js +194 -0
  320. package/dist/services/vast-job-store.js.map +1 -0
  321. package/dist/services/vast-subprocess.d.ts +27 -0
  322. package/dist/services/vast-subprocess.d.ts.map +1 -0
  323. package/dist/services/vast-subprocess.js +78 -0
  324. package/dist/services/vast-subprocess.js.map +1 -0
  325. package/dist/setup-routes.d.ts +17 -0
  326. package/dist/setup-routes.d.ts.map +1 -0
  327. package/dist/setup-routes.js +319 -0
  328. package/dist/setup-routes.js.map +1 -0
  329. package/dist/ui/FineTuningSpatialView.d.ts +49 -0
  330. package/dist/ui/FineTuningSpatialView.d.ts.map +1 -0
  331. package/dist/ui/FineTuningSpatialView.js +154 -0
  332. package/dist/ui/FineTuningSpatialView.js.map +1 -0
  333. package/dist/ui/FineTuningView.d.ts +7 -0
  334. package/dist/ui/FineTuningView.d.ts.map +1 -0
  335. package/dist/ui/FineTuningView.helpers.d.ts +17 -0
  336. package/dist/ui/FineTuningView.helpers.d.ts.map +1 -0
  337. package/dist/ui/FineTuningView.helpers.js +30 -0
  338. package/dist/ui/FineTuningView.helpers.js.map +1 -0
  339. package/dist/ui/FineTuningView.interact.d.ts +2 -0
  340. package/dist/ui/FineTuningView.interact.d.ts.map +1 -0
  341. package/dist/ui/FineTuningView.interact.js +300 -0
  342. package/dist/ui/FineTuningView.interact.js.map +1 -0
  343. package/dist/ui/FineTuningView.js +4653 -0
  344. package/dist/ui/FineTuningView.js.map +1 -0
  345. package/dist/ui/fine-tuning-panels.d.ts +100 -0
  346. package/dist/ui/fine-tuning-panels.d.ts.map +1 -0
  347. package/dist/ui/fine-tuning-panels.helpers.d.ts +19 -0
  348. package/dist/ui/fine-tuning-panels.helpers.d.ts.map +1 -0
  349. package/dist/ui/fine-tuning-panels.helpers.js +77 -0
  350. package/dist/ui/fine-tuning-panels.helpers.js.map +1 -0
  351. package/dist/ui/fine-tuning-panels.js +928 -0
  352. package/dist/ui/fine-tuning-panels.js.map +1 -0
  353. package/dist/ui/index.d.ts +5 -0
  354. package/dist/ui/index.d.ts.map +1 -0
  355. package/dist/ui/index.js +5 -0
  356. package/dist/ui/index.js.map +1 -0
  357. package/dist/ui/training-view-bundle.d.ts +3 -0
  358. package/dist/ui/training-view-bundle.d.ts.map +1 -0
  359. package/dist/ui/training-view-bundle.js +7 -0
  360. package/dist/ui/training-view-bundle.js.map +1 -0
  361. package/dist/views/bundle.js +5312 -0
  362. package/dist/views/bundle.js.map +1 -0
  363. package/package.json +7 -7
@@ -0,0 +1,513 @@
1
+ var ExperienceType = /* @__PURE__ */ ((ExperienceType2) => {
2
+ ExperienceType2["SUCCESS"] = "success";
3
+ ExperienceType2["FAILURE"] = "failure";
4
+ ExperienceType2["DISCOVERY"] = "discovery";
5
+ ExperienceType2["CORRECTION"] = "correction";
6
+ ExperienceType2["LEARNING"] = "learning";
7
+ ExperienceType2["HYPOTHESIS"] = "hypothesis";
8
+ ExperienceType2["VALIDATION"] = "validation";
9
+ ExperienceType2["WARNING"] = "warning";
10
+ return ExperienceType2;
11
+ })(ExperienceType || {});
12
+ var OutcomeType = /* @__PURE__ */ ((OutcomeType2) => {
13
+ OutcomeType2["POSITIVE"] = "positive";
14
+ OutcomeType2["NEGATIVE"] = "negative";
15
+ OutcomeType2["NEUTRAL"] = "neutral";
16
+ OutcomeType2["MIXED"] = "mixed";
17
+ return OutcomeType2;
18
+ })(OutcomeType || {});
19
+ const EXPERIENCE_ROUTE_PREFIXES = [
20
+ "/api/experiences",
21
+ "/api/character/experiences"
22
+ ];
23
+ const EXPERIENCE_LIST_DEFAULT_LIMIT = 100;
24
+ const EXPERIENCE_LIST_MAX_LIMIT = 200;
25
+ function isExperienceService(service) {
26
+ if (!service || typeof service !== "object") {
27
+ return false;
28
+ }
29
+ const candidate = service;
30
+ const requiredMethods = [
31
+ "recordExperience",
32
+ "listExperiences",
33
+ "getExperience",
34
+ "updateExperience",
35
+ "deleteExperience",
36
+ "getExperienceGraph",
37
+ "dedupeDuplicateExperiences"
38
+ ];
39
+ return requiredMethods.every(
40
+ (method) => typeof candidate[method] === "function"
41
+ );
42
+ }
43
+ function getExperienceService(runtime) {
44
+ const service = runtime?.getService("EXPERIENCE");
45
+ return isExperienceService(service) ? service : null;
46
+ }
47
+ function matchExperiencePath(pathname) {
48
+ for (const basePath of EXPERIENCE_ROUTE_PREFIXES) {
49
+ if (pathname === basePath || pathname.startsWith(`${basePath}/`)) {
50
+ return {
51
+ basePath,
52
+ suffix: pathname.slice(basePath.length)
53
+ };
54
+ }
55
+ }
56
+ return null;
57
+ }
58
+ function parseCsvSearchParams(url, key) {
59
+ const values = url.searchParams.getAll(key).flatMap((value) => value.split(",")).map((value) => value.trim()).filter((value) => value.length > 0);
60
+ return values.length > 0 ? values : void 0;
61
+ }
62
+ function parseNumberParam(value, field) {
63
+ if (value == null || value.trim().length === 0) {
64
+ return {};
65
+ }
66
+ const parsed = Number(value);
67
+ if (!Number.isFinite(parsed)) {
68
+ return { error: `${field} must be a number.` };
69
+ }
70
+ return { value: parsed };
71
+ }
72
+ function parseLimit(url) {
73
+ const rawLimit = url.searchParams.get("limit");
74
+ if (!rawLimit) {
75
+ return { value: EXPERIENCE_LIST_DEFAULT_LIMIT };
76
+ }
77
+ const parsed = Number.parseInt(rawLimit, 10);
78
+ if (!Number.isFinite(parsed) || parsed < 1) {
79
+ return {
80
+ value: EXPERIENCE_LIST_DEFAULT_LIMIT,
81
+ error: "limit must be a positive integer."
82
+ };
83
+ }
84
+ return {
85
+ value: Math.min(parsed, EXPERIENCE_LIST_MAX_LIMIT)
86
+ };
87
+ }
88
+ function parseBooleanParam(value) {
89
+ if (value == null || value.trim().length === 0) {
90
+ return void 0;
91
+ }
92
+ return value === "1" || value.toLowerCase() === "true";
93
+ }
94
+ function parseEnumValue(value, validValues, field) {
95
+ if (value === void 0) {
96
+ return {};
97
+ }
98
+ if (typeof value !== "string" || !validValues.includes(value)) {
99
+ return {
100
+ error: `${field} must be one of: ${validValues.join(", ")}.`
101
+ };
102
+ }
103
+ return { value };
104
+ }
105
+ function parseStringField(value, field, options) {
106
+ if (value === void 0) {
107
+ return {};
108
+ }
109
+ if (value === null && options?.allowNull) {
110
+ return { clear: true };
111
+ }
112
+ if (typeof value !== "string") {
113
+ return { error: `${field} must be a string.` };
114
+ }
115
+ return { value };
116
+ }
117
+ function parseStringArrayField(value, field) {
118
+ if (value === void 0) {
119
+ return {};
120
+ }
121
+ if (!Array.isArray(value) || value.some((item) => typeof item !== "string")) {
122
+ return { error: `${field} must be an array of strings.` };
123
+ }
124
+ return { value: [...value] };
125
+ }
126
+ function parseScoreField(value, field) {
127
+ if (value === void 0) {
128
+ return {};
129
+ }
130
+ if (typeof value !== "number" || !Number.isFinite(value)) {
131
+ return { error: `${field} must be a number.` };
132
+ }
133
+ if (value < 0 || value > 1) {
134
+ return { error: `${field} must be between 0 and 1.` };
135
+ }
136
+ return { value };
137
+ }
138
+ function parseExperienceMutationBody(body, mode) {
139
+ const parsed = {};
140
+ const type = parseEnumValue(body.type, Object.values(ExperienceType), "type");
141
+ if (type.error) return { error: type.error };
142
+ if (type.value !== void 0) {
143
+ parsed.type = type.value;
144
+ }
145
+ const outcome = parseEnumValue(
146
+ body.outcome,
147
+ Object.values(OutcomeType),
148
+ "outcome"
149
+ );
150
+ if (outcome.error) return { error: outcome.error };
151
+ if (outcome.value !== void 0) {
152
+ parsed.outcome = outcome.value;
153
+ }
154
+ const context = parseStringField(body.context, "context");
155
+ if (context.error) return { error: context.error };
156
+ if ("value" in context) {
157
+ parsed.context = context.value ?? "";
158
+ }
159
+ const action = parseStringField(body.action, "action");
160
+ if (action.error) return { error: action.error };
161
+ if ("value" in action) {
162
+ parsed.action = action.value ?? "";
163
+ }
164
+ const result = parseStringField(body.result, "result");
165
+ if (result.error) return { error: result.error };
166
+ if ("value" in result) {
167
+ parsed.result = result.value ?? "";
168
+ }
169
+ const learning = parseStringField(body.learning, "learning");
170
+ if (learning.error) return { error: learning.error };
171
+ if ("value" in learning) {
172
+ parsed.learning = learning.value ?? "";
173
+ }
174
+ const domain = parseStringField(body.domain, "domain");
175
+ if (domain.error) return { error: domain.error };
176
+ if ("value" in domain) {
177
+ parsed.domain = domain.value ?? "";
178
+ }
179
+ const tags = parseStringArrayField(body.tags, "tags");
180
+ if (tags.error) return { error: tags.error };
181
+ if (tags.value !== void 0) {
182
+ parsed.tags = tags.value;
183
+ }
184
+ const keywords = parseStringArrayField(body.keywords, "keywords");
185
+ if (keywords.error) return { error: keywords.error };
186
+ if (keywords.value !== void 0) {
187
+ parsed.keywords = keywords.value;
188
+ }
189
+ const associatedEntityIds = parseStringArrayField(
190
+ body.associatedEntityIds,
191
+ "associatedEntityIds"
192
+ );
193
+ if (associatedEntityIds.error) return { error: associatedEntityIds.error };
194
+ if (associatedEntityIds.value !== void 0) {
195
+ parsed.associatedEntityIds = associatedEntityIds.value;
196
+ }
197
+ const relatedExperiences = parseStringArrayField(
198
+ body.relatedExperiences,
199
+ "relatedExperiences"
200
+ );
201
+ if (relatedExperiences.error) return { error: relatedExperiences.error };
202
+ if (relatedExperiences.value !== void 0) {
203
+ parsed.relatedExperiences = relatedExperiences.value;
204
+ }
205
+ const mergedExperienceIds = parseStringArrayField(
206
+ body.mergedExperienceIds,
207
+ "mergedExperienceIds"
208
+ );
209
+ if (mergedExperienceIds.error) return { error: mergedExperienceIds.error };
210
+ if (mergedExperienceIds.value !== void 0) {
211
+ parsed.mergedExperienceIds = mergedExperienceIds.value;
212
+ }
213
+ const confidence = parseScoreField(body.confidence, "confidence");
214
+ if (confidence.error) return { error: confidence.error };
215
+ if (confidence.value !== void 0) {
216
+ parsed.confidence = confidence.value;
217
+ }
218
+ const importance = parseScoreField(body.importance, "importance");
219
+ if (importance.error) return { error: importance.error };
220
+ if (importance.value !== void 0) {
221
+ parsed.importance = importance.value;
222
+ }
223
+ const supersedes = parseStringField(body.supersedes, "supersedes", {
224
+ allowNull: true
225
+ });
226
+ if (supersedes.error) return { error: supersedes.error };
227
+ if (supersedes.clear) {
228
+ parsed.supersedes = void 0;
229
+ } else if (supersedes.value !== void 0) {
230
+ parsed.supersedes = supersedes.value;
231
+ }
232
+ const previousBelief = parseStringField(
233
+ body.previousBelief,
234
+ "previousBelief",
235
+ { allowNull: true }
236
+ );
237
+ if (previousBelief.error) return { error: previousBelief.error };
238
+ if (previousBelief.clear) {
239
+ parsed.previousBelief = void 0;
240
+ } else if (previousBelief.value !== void 0) {
241
+ parsed.previousBelief = previousBelief.value;
242
+ }
243
+ const correctedBelief = parseStringField(
244
+ body.correctedBelief,
245
+ "correctedBelief",
246
+ { allowNull: true }
247
+ );
248
+ if (correctedBelief.error) return { error: correctedBelief.error };
249
+ if (correctedBelief.clear) {
250
+ parsed.correctedBelief = void 0;
251
+ } else if (correctedBelief.value !== void 0) {
252
+ parsed.correctedBelief = correctedBelief.value;
253
+ }
254
+ if (mode === "create" && !parsed.learning?.trim()) {
255
+ return { error: "learning is required." };
256
+ }
257
+ if (mode === "update" && Object.keys(parsed).length === 0) {
258
+ return { error: "At least one editable field is required." };
259
+ }
260
+ return { data: parsed };
261
+ }
262
+ function parseExperienceQuery(url) {
263
+ const limit = parseLimit(url);
264
+ if (limit.error) {
265
+ return { error: limit.error };
266
+ }
267
+ const minConfidence = parseNumberParam(
268
+ url.searchParams.get("minConfidence"),
269
+ "minConfidence"
270
+ );
271
+ if (minConfidence.error) {
272
+ return { error: minConfidence.error };
273
+ }
274
+ const minImportance = parseNumberParam(
275
+ url.searchParams.get("minImportance"),
276
+ "minImportance"
277
+ );
278
+ if (minImportance.error) {
279
+ return { error: minImportance.error };
280
+ }
281
+ const start = parseNumberParam(url.searchParams.get("start"), "start");
282
+ if (start.error) {
283
+ return { error: start.error };
284
+ }
285
+ const end = parseNumberParam(url.searchParams.get("end"), "end");
286
+ if (end.error) {
287
+ return { error: end.error };
288
+ }
289
+ const type = parseCsvSearchParams(url, "type");
290
+ const invalidType = type?.find(
291
+ (value) => !Object.values(ExperienceType).includes(value)
292
+ );
293
+ if (invalidType) {
294
+ return {
295
+ error: `type must be one of: ${Object.values(ExperienceType).join(", ")}.`
296
+ };
297
+ }
298
+ const outcome = parseCsvSearchParams(url, "outcome");
299
+ const invalidOutcome = outcome?.find(
300
+ (value) => !Object.values(OutcomeType).includes(value)
301
+ );
302
+ if (invalidOutcome) {
303
+ return {
304
+ error: `outcome must be one of: ${Object.values(OutcomeType).join(", ")}.`
305
+ };
306
+ }
307
+ const domain = parseCsvSearchParams(url, "domain");
308
+ const tags = parseCsvSearchParams(url, "tag") ?? parseCsvSearchParams(url, "tags");
309
+ const includeRelated = parseBooleanParam(
310
+ url.searchParams.get("includeRelated")
311
+ );
312
+ return {
313
+ query: {
314
+ query: url.searchParams.get("q") ?? url.searchParams.get("query") ?? void 0,
315
+ type: type && type.length === 1 ? type[0] : type,
316
+ outcome: outcome && outcome.length === 1 ? outcome[0] : outcome,
317
+ domain: domain && domain.length === 1 ? domain[0] : domain,
318
+ tags,
319
+ minConfidence: minConfidence.value,
320
+ minImportance: minImportance.value,
321
+ timeRange: start.value !== void 0 || end.value !== void 0 ? {
322
+ start: start.value,
323
+ end: end.value
324
+ } : void 0,
325
+ limit: limit.value,
326
+ includeRelated
327
+ }
328
+ };
329
+ }
330
+ function toExperienceResponse(experience) {
331
+ const { embedding: _embedding, ...rest } = experience;
332
+ return {
333
+ ...rest,
334
+ tags: [...experience.tags],
335
+ keywords: [...experience.keywords],
336
+ associatedEntityIds: [...experience.associatedEntityIds],
337
+ embeddingDimensions: experience.embedding?.length,
338
+ relatedExperiences: experience.relatedExperiences ? [...experience.relatedExperiences] : void 0,
339
+ mergedExperienceIds: experience.mergedExperienceIds ? [...experience.mergedExperienceIds] : void 0
340
+ };
341
+ }
342
+ async function handleExperienceRoutes(ctx) {
343
+ const {
344
+ req,
345
+ res,
346
+ method,
347
+ pathname,
348
+ runtime,
349
+ url,
350
+ json,
351
+ error,
352
+ readJsonBody
353
+ } = ctx;
354
+ const matchedPath = matchExperiencePath(pathname);
355
+ if (!matchedPath) {
356
+ return false;
357
+ }
358
+ if (!runtime) {
359
+ error(res, "Agent runtime not available. Start the agent first.", 503);
360
+ return true;
361
+ }
362
+ const experienceService = getExperienceService(runtime);
363
+ if (!experienceService) {
364
+ error(
365
+ res,
366
+ "Experience service is not available. Make sure advanced capabilities are enabled.",
367
+ 503
368
+ );
369
+ return true;
370
+ }
371
+ if (matchedPath.suffix === "") {
372
+ if (method === "GET") {
373
+ const parsedQuery = parseExperienceQuery(url);
374
+ if (parsedQuery.error) {
375
+ error(res, parsedQuery.error, 400);
376
+ return true;
377
+ }
378
+ const experiences = await experienceService.listExperiences(
379
+ parsedQuery.query
380
+ );
381
+ json(
382
+ res,
383
+ {
384
+ data: experiences.map(toExperienceResponse),
385
+ total: experiences.length
386
+ },
387
+ 200
388
+ );
389
+ return true;
390
+ }
391
+ if (method === "POST") {
392
+ const body = await readJsonBody(req, res);
393
+ if (!body) {
394
+ return true;
395
+ }
396
+ const parsedBody = parseExperienceMutationBody(body, "create");
397
+ if (parsedBody.error) {
398
+ error(res, parsedBody.error, 400);
399
+ return true;
400
+ }
401
+ const experience = await experienceService.recordExperience(
402
+ parsedBody.data ?? {}
403
+ );
404
+ json(res, { data: toExperienceResponse(experience) }, 201);
405
+ return true;
406
+ }
407
+ error(res, "Method not allowed.", 405);
408
+ return true;
409
+ }
410
+ if (matchedPath.suffix === "/graph") {
411
+ if (method !== "GET") {
412
+ error(res, "Method not allowed.", 405);
413
+ return true;
414
+ }
415
+ const parsedQuery = parseExperienceQuery(url);
416
+ if (parsedQuery.error) {
417
+ error(res, parsedQuery.error, 400);
418
+ return true;
419
+ }
420
+ const graph = await experienceService.getExperienceGraph(parsedQuery.query);
421
+ json(res, { data: graph }, 200);
422
+ return true;
423
+ }
424
+ if (matchedPath.suffix === "/maintenance") {
425
+ if (method !== "POST") {
426
+ error(res, "Method not allowed.", 405);
427
+ return true;
428
+ }
429
+ const body = await readJsonBody(req, res);
430
+ if (!body) {
431
+ return true;
432
+ }
433
+ const limit = typeof body.limit === "number" && Number.isFinite(body.limit) ? Math.max(
434
+ 1,
435
+ Math.min(EXPERIENCE_LIST_MAX_LIMIT, Math.floor(body.limit))
436
+ ) : void 0;
437
+ const result = await experienceService.dedupeDuplicateExperiences({
438
+ deleteDuplicates: body.deleteDuplicates === true,
439
+ limit
440
+ });
441
+ json(res, { data: result }, 200);
442
+ return true;
443
+ }
444
+ const experienceId = matchedPath.suffix.startsWith("/") && matchedPath.suffix.slice(1).length > 0 && !matchedPath.suffix.slice(1).includes("/") ? decodeURIComponent(matchedPath.suffix.slice(1)) : null;
445
+ if (!experienceId) {
446
+ error(res, "Experience not found.", 404);
447
+ return true;
448
+ }
449
+ if (method === "GET") {
450
+ const experience = await experienceService.getExperience(experienceId);
451
+ if (!experience) {
452
+ error(res, "Experience not found.", 404);
453
+ return true;
454
+ }
455
+ json(res, { data: toExperienceResponse(experience) }, 200);
456
+ return true;
457
+ }
458
+ if (method === "PUT" || method === "PATCH") {
459
+ const body = await readJsonBody(req, res);
460
+ if (!body) {
461
+ return true;
462
+ }
463
+ const parsedBody = parseExperienceMutationBody(body, "update");
464
+ if (parsedBody.error) {
465
+ error(res, parsedBody.error, 400);
466
+ return true;
467
+ }
468
+ const experience = await experienceService.updateExperience(
469
+ experienceId,
470
+ parsedBody.data ?? {}
471
+ );
472
+ if (!experience) {
473
+ error(res, "Experience not found.", 404);
474
+ return true;
475
+ }
476
+ json(res, { data: toExperienceResponse(experience) }, 200);
477
+ return true;
478
+ }
479
+ if (method === "DELETE") {
480
+ const deleted = await experienceService.deleteExperience(experienceId);
481
+ if (!deleted) {
482
+ error(res, "Experience not found.", 404);
483
+ return true;
484
+ }
485
+ json(res, { ok: true, id: experienceId }, 200);
486
+ return true;
487
+ }
488
+ error(res, "Method not allowed.", 405);
489
+ return true;
490
+ }
491
+ const EXPERIENCE_ROUTE_PATHS = [
492
+ { type: "GET", path: "/api/experiences" },
493
+ { type: "POST", path: "/api/experiences" },
494
+ { type: "GET", path: "/api/experiences/graph" },
495
+ { type: "POST", path: "/api/experiences/maintenance" },
496
+ { type: "GET", path: "/api/experiences/:experienceId" },
497
+ { type: "PUT", path: "/api/experiences/:experienceId" },
498
+ { type: "PATCH", path: "/api/experiences/:experienceId" },
499
+ { type: "DELETE", path: "/api/experiences/:experienceId" },
500
+ { type: "GET", path: "/api/character/experiences" },
501
+ { type: "POST", path: "/api/character/experiences" },
502
+ { type: "GET", path: "/api/character/experiences/graph" },
503
+ { type: "POST", path: "/api/character/experiences/maintenance" },
504
+ { type: "GET", path: "/api/character/experiences/:experienceId" },
505
+ { type: "PUT", path: "/api/character/experiences/:experienceId" },
506
+ { type: "PATCH", path: "/api/character/experiences/:experienceId" },
507
+ { type: "DELETE", path: "/api/character/experiences/:experienceId" }
508
+ ];
509
+ export {
510
+ EXPERIENCE_ROUTE_PATHS,
511
+ handleExperienceRoutes
512
+ };
513
+ //# sourceMappingURL=experience-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/routes/experience-routes.ts"],"sourcesContent":["/**\n * Experience HTTP routes.\n *\n * Migrated from `packages/agent/src/api/experience-routes.ts` so the experience\n * service surface lives next to the rest of the training/trajectory plumbing.\n *\n * The runtime mounts these routes through the plugin route registry; see\n * `setup-routes.ts` for the registered Plugin and the `rawPath: true` paths.\n */\n\nimport type { AgentRuntime, UUID } from \"@elizaos/core\";\nimport type { RouteRequestContext } from \"@elizaos/shared\";\n\n// These enums and types are defined in @elizaos/core's advanced-capabilities\n// experience module but not re-exported from the compiled dist bundle (tsdown\n// tree-shakes them). Inlined here so the packaged desktop build works without\n// a cross-package source import.\nenum ExperienceType {\n SUCCESS = \"success\",\n FAILURE = \"failure\",\n DISCOVERY = \"discovery\",\n CORRECTION = \"correction\",\n LEARNING = \"learning\",\n HYPOTHESIS = \"hypothesis\",\n VALIDATION = \"validation\",\n WARNING = \"warning\",\n}\n\nenum OutcomeType {\n POSITIVE = \"positive\",\n NEGATIVE = \"negative\",\n NEUTRAL = \"neutral\",\n MIXED = \"mixed\",\n}\n\ninterface Experience {\n id: UUID;\n agentId: UUID;\n type: ExperienceType;\n outcome: OutcomeType;\n context: string;\n action: string;\n result: string;\n learning: string;\n tags: string[];\n domain: string;\n keywords: string[];\n associatedEntityIds: UUID[];\n relatedExperiences?: UUID[];\n supersedes?: UUID;\n mergedExperienceIds?: UUID[];\n confidence: number;\n importance: number;\n createdAt?: number;\n updatedAt: number;\n lastAccessedAt?: number;\n accessCount: number;\n previousBelief?: string;\n correctedBelief?: string;\n embedding?: number[];\n memoryIds?: UUID[];\n sourceMessageIds?: UUID[];\n sourceRoomId?: UUID;\n sourceTriggerMessageId?: UUID;\n sourceTrajectoryId?: string;\n sourceTrajectoryStepId?: string;\n extractionMethod?: string;\n extractionReason?: string;\n}\n\ninterface ExperienceQuery {\n query?: string;\n type?: ExperienceType | ExperienceType[];\n outcome?: OutcomeType | OutcomeType[];\n domain?: string | string[];\n tags?: string[];\n minImportance?: number;\n minConfidence?: number;\n timeRange?: {\n start?: number;\n end?: number;\n };\n limit?: number;\n includeRelated?: boolean;\n}\n\ninterface ExperienceService {\n recordExperience(experienceData: Partial<Experience>): Promise<Experience>;\n listExperiences(query?: ExperienceQuery): Promise<Experience[]>;\n getExperience(id: UUID): Promise<Experience | null>;\n updateExperience(\n id: UUID,\n updates: Partial<Experience>,\n ): Promise<Experience | null>;\n deleteExperience(id: UUID): Promise<boolean>;\n getExperienceGraph(query?: ExperienceQuery): Promise<unknown>;\n dedupeDuplicateExperiences(options?: {\n deleteDuplicates?: boolean;\n limit?: number;\n }): Promise<unknown>;\n}\n\nconst EXPERIENCE_ROUTE_PREFIXES = [\n \"/api/experiences\",\n \"/api/character/experiences\",\n] as const;\nconst EXPERIENCE_LIST_DEFAULT_LIMIT = 100;\nconst EXPERIENCE_LIST_MAX_LIMIT = 200;\n\ntype ExperienceMutationBody = Record<string, unknown>;\n\ntype ExperienceMutationInput = Partial<Experience>;\n\ntype ExperienceResponse = Omit<Experience, \"embedding\"> & {\n embeddingDimensions?: number;\n};\n\nexport interface ExperienceRouteContext extends RouteRequestContext {\n runtime: AgentRuntime | null;\n url: URL;\n}\n\nfunction isExperienceService(service: unknown): service is ExperienceService {\n if (!service || typeof service !== \"object\") {\n return false;\n }\n const candidate = service as Record<string, unknown>;\n const requiredMethods = [\n \"recordExperience\",\n \"listExperiences\",\n \"getExperience\",\n \"updateExperience\",\n \"deleteExperience\",\n \"getExperienceGraph\",\n \"dedupeDuplicateExperiences\",\n ];\n return requiredMethods.every(\n (method) => typeof candidate[method] === \"function\",\n );\n}\n\nfunction getExperienceService(\n runtime: AgentRuntime | null,\n): ExperienceService | null {\n const service = runtime?.getService(\"EXPERIENCE\");\n return isExperienceService(service) ? service : null;\n}\n\nfunction matchExperiencePath(pathname: string): {\n basePath: (typeof EXPERIENCE_ROUTE_PREFIXES)[number];\n suffix: string;\n} | null {\n for (const basePath of EXPERIENCE_ROUTE_PREFIXES) {\n if (pathname === basePath || pathname.startsWith(`${basePath}/`)) {\n return {\n basePath,\n suffix: pathname.slice(basePath.length),\n };\n }\n }\n\n return null;\n}\n\nfunction parseCsvSearchParams(url: URL, key: string): string[] | undefined {\n const values = url.searchParams\n .getAll(key)\n .flatMap((value) => value.split(\",\"))\n .map((value) => value.trim())\n .filter((value) => value.length > 0);\n return values.length > 0 ? values : undefined;\n}\n\nfunction parseNumberParam(\n value: string | null,\n field: string,\n): { value?: number; error?: string } {\n if (value == null || value.trim().length === 0) {\n return {};\n }\n\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) {\n return { error: `${field} must be a number.` };\n }\n\n return { value: parsed };\n}\n\nfunction parseLimit(url: URL): { value: number; error?: string } {\n const rawLimit = url.searchParams.get(\"limit\");\n if (!rawLimit) {\n return { value: EXPERIENCE_LIST_DEFAULT_LIMIT };\n }\n\n const parsed = Number.parseInt(rawLimit, 10);\n if (!Number.isFinite(parsed) || parsed < 1) {\n return {\n value: EXPERIENCE_LIST_DEFAULT_LIMIT,\n error: \"limit must be a positive integer.\",\n };\n }\n\n return {\n value: Math.min(parsed, EXPERIENCE_LIST_MAX_LIMIT),\n };\n}\n\nfunction parseBooleanParam(value: string | null): boolean | undefined {\n if (value == null || value.trim().length === 0) {\n return undefined;\n }\n\n return value === \"1\" || value.toLowerCase() === \"true\";\n}\n\nfunction parseEnumValue<T extends string>(\n value: unknown,\n validValues: readonly T[],\n field: string,\n): { value?: T; error?: string } {\n if (value === undefined) {\n return {};\n }\n if (typeof value !== \"string\" || !validValues.includes(value as T)) {\n return {\n error: `${field} must be one of: ${validValues.join(\", \")}.`,\n };\n }\n return { value: value as T };\n}\n\nfunction parseStringField(\n value: unknown,\n field: string,\n options?: { allowNull?: boolean },\n): { value?: string; error?: string; clear?: true } {\n if (value === undefined) {\n return {};\n }\n if (value === null && options?.allowNull) {\n return { clear: true };\n }\n if (typeof value !== \"string\") {\n return { error: `${field} must be a string.` };\n }\n return { value };\n}\n\nfunction parseStringArrayField(\n value: unknown,\n field: string,\n): { value?: string[]; error?: string } {\n if (value === undefined) {\n return {};\n }\n if (!Array.isArray(value) || value.some((item) => typeof item !== \"string\")) {\n return { error: `${field} must be an array of strings.` };\n }\n return { value: [...value] };\n}\n\nfunction parseScoreField(\n value: unknown,\n field: string,\n): { value?: number; error?: string } {\n if (value === undefined) {\n return {};\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return { error: `${field} must be a number.` };\n }\n if (value < 0 || value > 1) {\n return { error: `${field} must be between 0 and 1.` };\n }\n return { value };\n}\n\nfunction parseExperienceMutationBody(\n body: ExperienceMutationBody,\n mode: \"create\" | \"update\",\n): { data?: ExperienceMutationInput; error?: string } {\n const parsed: ExperienceMutationInput = {};\n\n const type = parseEnumValue(body.type, Object.values(ExperienceType), \"type\");\n if (type.error) return { error: type.error };\n if (type.value !== undefined) {\n parsed.type = type.value;\n }\n\n const outcome = parseEnumValue(\n body.outcome,\n Object.values(OutcomeType),\n \"outcome\",\n );\n if (outcome.error) return { error: outcome.error };\n if (outcome.value !== undefined) {\n parsed.outcome = outcome.value;\n }\n\n const context = parseStringField(body.context, \"context\");\n if (context.error) return { error: context.error };\n if (\"value\" in context) {\n parsed.context = context.value ?? \"\";\n }\n\n const action = parseStringField(body.action, \"action\");\n if (action.error) return { error: action.error };\n if (\"value\" in action) {\n parsed.action = action.value ?? \"\";\n }\n\n const result = parseStringField(body.result, \"result\");\n if (result.error) return { error: result.error };\n if (\"value\" in result) {\n parsed.result = result.value ?? \"\";\n }\n\n const learning = parseStringField(body.learning, \"learning\");\n if (learning.error) return { error: learning.error };\n if (\"value\" in learning) {\n parsed.learning = learning.value ?? \"\";\n }\n\n const domain = parseStringField(body.domain, \"domain\");\n if (domain.error) return { error: domain.error };\n if (\"value\" in domain) {\n parsed.domain = domain.value ?? \"\";\n }\n\n const tags = parseStringArrayField(body.tags, \"tags\");\n if (tags.error) return { error: tags.error };\n if (tags.value !== undefined) {\n parsed.tags = tags.value;\n }\n\n const keywords = parseStringArrayField(body.keywords, \"keywords\");\n if (keywords.error) return { error: keywords.error };\n if (keywords.value !== undefined) {\n parsed.keywords = keywords.value;\n }\n\n const associatedEntityIds = parseStringArrayField(\n body.associatedEntityIds,\n \"associatedEntityIds\",\n );\n if (associatedEntityIds.error) return { error: associatedEntityIds.error };\n if (associatedEntityIds.value !== undefined) {\n parsed.associatedEntityIds = associatedEntityIds.value as UUID[];\n }\n\n const relatedExperiences = parseStringArrayField(\n body.relatedExperiences,\n \"relatedExperiences\",\n );\n if (relatedExperiences.error) return { error: relatedExperiences.error };\n if (relatedExperiences.value !== undefined) {\n parsed.relatedExperiences = relatedExperiences.value as UUID[];\n }\n\n const mergedExperienceIds = parseStringArrayField(\n body.mergedExperienceIds,\n \"mergedExperienceIds\",\n );\n if (mergedExperienceIds.error) return { error: mergedExperienceIds.error };\n if (mergedExperienceIds.value !== undefined) {\n parsed.mergedExperienceIds = mergedExperienceIds.value as UUID[];\n }\n\n const confidence = parseScoreField(body.confidence, \"confidence\");\n if (confidence.error) return { error: confidence.error };\n if (confidence.value !== undefined) {\n parsed.confidence = confidence.value;\n }\n\n const importance = parseScoreField(body.importance, \"importance\");\n if (importance.error) return { error: importance.error };\n if (importance.value !== undefined) {\n parsed.importance = importance.value;\n }\n\n const supersedes = parseStringField(body.supersedes, \"supersedes\", {\n allowNull: true,\n });\n if (supersedes.error) return { error: supersedes.error };\n if (supersedes.clear) {\n parsed.supersedes = undefined;\n } else if (supersedes.value !== undefined) {\n parsed.supersedes = supersedes.value as UUID;\n }\n\n const previousBelief = parseStringField(\n body.previousBelief,\n \"previousBelief\",\n { allowNull: true },\n );\n if (previousBelief.error) return { error: previousBelief.error };\n if (previousBelief.clear) {\n parsed.previousBelief = undefined;\n } else if (previousBelief.value !== undefined) {\n parsed.previousBelief = previousBelief.value;\n }\n\n const correctedBelief = parseStringField(\n body.correctedBelief,\n \"correctedBelief\",\n { allowNull: true },\n );\n if (correctedBelief.error) return { error: correctedBelief.error };\n if (correctedBelief.clear) {\n parsed.correctedBelief = undefined;\n } else if (correctedBelief.value !== undefined) {\n parsed.correctedBelief = correctedBelief.value;\n }\n\n if (mode === \"create\" && !parsed.learning?.trim()) {\n return { error: \"learning is required.\" };\n }\n\n if (mode === \"update\" && Object.keys(parsed).length === 0) {\n return { error: \"At least one editable field is required.\" };\n }\n\n return { data: parsed };\n}\n\nfunction parseExperienceQuery(url: URL): {\n query?: ExperienceQuery;\n error?: string;\n} {\n const limit = parseLimit(url);\n if (limit.error) {\n return { error: limit.error };\n }\n\n const minConfidence = parseNumberParam(\n url.searchParams.get(\"minConfidence\"),\n \"minConfidence\",\n );\n if (minConfidence.error) {\n return { error: minConfidence.error };\n }\n\n const minImportance = parseNumberParam(\n url.searchParams.get(\"minImportance\"),\n \"minImportance\",\n );\n if (minImportance.error) {\n return { error: minImportance.error };\n }\n\n const start = parseNumberParam(url.searchParams.get(\"start\"), \"start\");\n if (start.error) {\n return { error: start.error };\n }\n\n const end = parseNumberParam(url.searchParams.get(\"end\"), \"end\");\n if (end.error) {\n return { error: end.error };\n }\n\n const type = parseCsvSearchParams(url, \"type\");\n const invalidType = type?.find(\n (value) => !Object.values(ExperienceType).includes(value as ExperienceType),\n );\n if (invalidType) {\n return {\n error: `type must be one of: ${Object.values(ExperienceType).join(\", \")}.`,\n };\n }\n\n const outcome = parseCsvSearchParams(url, \"outcome\");\n const invalidOutcome = outcome?.find(\n (value) => !Object.values(OutcomeType).includes(value as OutcomeType),\n );\n if (invalidOutcome) {\n return {\n error: `outcome must be one of: ${Object.values(OutcomeType).join(\", \")}.`,\n };\n }\n\n const domain = parseCsvSearchParams(url, \"domain\");\n const tags =\n parseCsvSearchParams(url, \"tag\") ?? parseCsvSearchParams(url, \"tags\");\n const includeRelated = parseBooleanParam(\n url.searchParams.get(\"includeRelated\"),\n );\n\n return {\n query: {\n query:\n url.searchParams.get(\"q\") ?? url.searchParams.get(\"query\") ?? undefined,\n type:\n type && type.length === 1\n ? (type[0] as ExperienceType)\n : (type as ExperienceType[] | undefined),\n outcome:\n outcome && outcome.length === 1\n ? (outcome[0] as OutcomeType)\n : (outcome as OutcomeType[] | undefined),\n domain: domain && domain.length === 1 ? domain[0] : domain,\n tags,\n minConfidence: minConfidence.value,\n minImportance: minImportance.value,\n timeRange:\n start.value !== undefined || end.value !== undefined\n ? {\n start: start.value,\n end: end.value,\n }\n : undefined,\n limit: limit.value,\n includeRelated,\n },\n };\n}\n\nfunction toExperienceResponse(experience: Experience): ExperienceResponse {\n const { embedding: _embedding, ...rest } = experience;\n return {\n ...rest,\n tags: [...experience.tags],\n keywords: [...experience.keywords],\n associatedEntityIds: [...experience.associatedEntityIds],\n embeddingDimensions: experience.embedding?.length,\n relatedExperiences: experience.relatedExperiences\n ? [...experience.relatedExperiences]\n : undefined,\n mergedExperienceIds: experience.mergedExperienceIds\n ? [...experience.mergedExperienceIds]\n : undefined,\n };\n}\n\nexport async function handleExperienceRoutes(\n ctx: ExperienceRouteContext,\n): Promise<boolean> {\n const {\n req,\n res,\n method,\n pathname,\n runtime,\n url,\n json,\n error,\n readJsonBody,\n } = ctx;\n const matchedPath = matchExperiencePath(pathname);\n if (!matchedPath) {\n return false;\n }\n\n if (!runtime) {\n error(res, \"Agent runtime not available. Start the agent first.\", 503);\n return true;\n }\n\n const experienceService = getExperienceService(runtime);\n if (!experienceService) {\n error(\n res,\n \"Experience service is not available. Make sure advanced capabilities are enabled.\",\n 503,\n );\n return true;\n }\n\n if (matchedPath.suffix === \"\") {\n if (method === \"GET\") {\n const parsedQuery = parseExperienceQuery(url);\n if (parsedQuery.error) {\n error(res, parsedQuery.error, 400);\n return true;\n }\n\n const experiences = await experienceService.listExperiences(\n parsedQuery.query,\n );\n json(\n res,\n {\n data: experiences.map(toExperienceResponse),\n total: experiences.length,\n },\n 200,\n );\n return true;\n }\n\n if (method === \"POST\") {\n const body = await readJsonBody<ExperienceMutationBody>(req, res);\n if (!body) {\n return true;\n }\n\n const parsedBody = parseExperienceMutationBody(body, \"create\");\n if (parsedBody.error) {\n error(res, parsedBody.error, 400);\n return true;\n }\n\n const experience = await experienceService.recordExperience(\n parsedBody.data ?? {},\n );\n json(res, { data: toExperienceResponse(experience) }, 201);\n return true;\n }\n\n error(res, \"Method not allowed.\", 405);\n return true;\n }\n\n if (matchedPath.suffix === \"/graph\") {\n if (method !== \"GET\") {\n error(res, \"Method not allowed.\", 405);\n return true;\n }\n\n const parsedQuery = parseExperienceQuery(url);\n if (parsedQuery.error) {\n error(res, parsedQuery.error, 400);\n return true;\n }\n\n const graph = await experienceService.getExperienceGraph(parsedQuery.query);\n json(res, { data: graph }, 200);\n return true;\n }\n\n if (matchedPath.suffix === \"/maintenance\") {\n if (method !== \"POST\") {\n error(res, \"Method not allowed.\", 405);\n return true;\n }\n\n const body = await readJsonBody<Record<string, unknown>>(req, res);\n if (!body) {\n return true;\n }\n\n const limit =\n typeof body.limit === \"number\" && Number.isFinite(body.limit)\n ? Math.max(\n 1,\n Math.min(EXPERIENCE_LIST_MAX_LIMIT, Math.floor(body.limit)),\n )\n : undefined;\n const result = await experienceService.dedupeDuplicateExperiences({\n deleteDuplicates: body.deleteDuplicates === true,\n limit,\n });\n json(res, { data: result }, 200);\n return true;\n }\n\n const experienceId =\n matchedPath.suffix.startsWith(\"/\") &&\n matchedPath.suffix.slice(1).length > 0 &&\n !matchedPath.suffix.slice(1).includes(\"/\")\n ? (decodeURIComponent(matchedPath.suffix.slice(1)) as UUID)\n : null;\n if (!experienceId) {\n error(res, \"Experience not found.\", 404);\n return true;\n }\n\n if (method === \"GET\") {\n const experience = await experienceService.getExperience(experienceId);\n if (!experience) {\n error(res, \"Experience not found.\", 404);\n return true;\n }\n\n json(res, { data: toExperienceResponse(experience) }, 200);\n return true;\n }\n\n if (method === \"PUT\" || method === \"PATCH\") {\n const body = await readJsonBody<ExperienceMutationBody>(req, res);\n if (!body) {\n return true;\n }\n\n const parsedBody = parseExperienceMutationBody(body, \"update\");\n if (parsedBody.error) {\n error(res, parsedBody.error, 400);\n return true;\n }\n\n const experience = await experienceService.updateExperience(\n experienceId,\n parsedBody.data ?? {},\n );\n if (!experience) {\n error(res, \"Experience not found.\", 404);\n return true;\n }\n\n json(res, { data: toExperienceResponse(experience) }, 200);\n return true;\n }\n\n if (method === \"DELETE\") {\n const deleted = await experienceService.deleteExperience(experienceId);\n if (!deleted) {\n error(res, \"Experience not found.\", 404);\n return true;\n }\n\n json(res, { ok: true, id: experienceId }, 200);\n return true;\n }\n\n error(res, \"Method not allowed.\", 405);\n return true;\n}\n\nexport const EXPERIENCE_ROUTE_PATHS: Array<{ type: string; path: string }> = [\n { type: \"GET\", path: \"/api/experiences\" },\n { type: \"POST\", path: \"/api/experiences\" },\n { type: \"GET\", path: \"/api/experiences/graph\" },\n { type: \"POST\", path: \"/api/experiences/maintenance\" },\n { type: \"GET\", path: \"/api/experiences/:experienceId\" },\n { type: \"PUT\", path: \"/api/experiences/:experienceId\" },\n { type: \"PATCH\", path: \"/api/experiences/:experienceId\" },\n { type: \"DELETE\", path: \"/api/experiences/:experienceId\" },\n { type: \"GET\", path: \"/api/character/experiences\" },\n { type: \"POST\", path: \"/api/character/experiences\" },\n { type: \"GET\", path: \"/api/character/experiences/graph\" },\n { type: \"POST\", path: \"/api/character/experiences/maintenance\" },\n { type: \"GET\", path: \"/api/character/experiences/:experienceId\" },\n { type: \"PUT\", path: \"/api/character/experiences/:experienceId\" },\n { type: \"PATCH\", path: \"/api/character/experiences/:experienceId\" },\n { type: \"DELETE\", path: \"/api/character/experiences/:experienceId\" },\n];\n"],"mappings":"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","names":["ExperienceType","OutcomeType"]}
@@ -0,0 +1,5 @@
1
+ export { EXPERIENCE_ROUTE_PATHS, type ExperienceRouteContext, handleExperienceRoutes, } from "./experience-routes.js";
2
+ export { handleTrainingRoutes, type TrainingRouteHelpers, } from "./training-routes.js";
3
+ export { handleVastTrainingRoutes } from "./training-vast-routes.js";
4
+ export { handleTrajectoryRoute } from "./trajectory-routes.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import {
2
+ EXPERIENCE_ROUTE_PATHS,
3
+ handleExperienceRoutes
4
+ } from "./experience-routes.js";
5
+ import {
6
+ handleTrainingRoutes
7
+ } from "./training-routes.js";
8
+ import { handleVastTrainingRoutes } from "./training-vast-routes.js";
9
+ import { handleTrajectoryRoute } from "./trajectory-routes.js";
10
+ export {
11
+ EXPERIENCE_ROUTE_PATHS,
12
+ handleExperienceRoutes,
13
+ handleTrainingRoutes,
14
+ handleTrajectoryRoute,
15
+ handleVastTrainingRoutes
16
+ };
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/routes/index.ts"],"sourcesContent":["export {\n EXPERIENCE_ROUTE_PATHS,\n type ExperienceRouteContext,\n handleExperienceRoutes,\n} from \"./experience-routes.js\";\nexport {\n handleTrainingRoutes,\n type TrainingRouteHelpers,\n} from \"./training-routes.js\";\nexport { handleVastTrainingRoutes } from \"./training-vast-routes.js\";\nexport { handleTrajectoryRoute } from \"./trajectory-routes.js\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EAEA;AAAA,OACK;AACP;AAAA,EACE;AAAA,OAEK;AACP,SAAS,gCAAgC;AACzC,SAAS,6BAA6B;","names":[]}
@@ -0,0 +1,10 @@
1
+ import type { AgentRuntime, RouteHelpers, RouteRequestContext } from "@elizaos/core";
2
+ import type { TrainingServiceLike } from "../services/training-service-like.js";
3
+ export type TrainingRouteHelpers = RouteHelpers;
4
+ export interface TrainingRouteContext extends RouteRequestContext {
5
+ runtime: AgentRuntime | null;
6
+ trainingService: TrainingServiceLike;
7
+ isLoopbackHost: (host: string) => boolean;
8
+ }
9
+ export declare function handleTrainingRoutes(ctx: TrainingRouteContext): Promise<boolean>;
10
+ //# sourceMappingURL=training-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"training-routes.d.ts","sourceRoot":"","sources":["../../src/routes/training-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACpB,MAAM,eAAe,CAAC;AA8CvB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAMhF,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEhD,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,mBAAmB,CAAC;IACrC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CAC3C;AA0LD,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,oBAAoB,GACxB,OAAO,CAAC,OAAO,CAAC,CA0oDlB"}