@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,427 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import {
4
+ buildElizaNativeTrajectoryRows,
5
+ ELIZA_NATIVE_MODEL_BOUNDARIES,
6
+ ELIZA_NATIVE_TRAJECTORY_FORMAT
7
+ } from "@elizaos/core";
8
+ import {
9
+ extractElizaNativeRowsFromExportText,
10
+ listTrajectoryCallEntries,
11
+ parseTrajectoryExportText
12
+ } from "./trajectory-consumer.js";
13
+ const ALL_TRAJECTORY_TRAINING_TASKS = [
14
+ "should_respond",
15
+ "context_routing",
16
+ "action_planner",
17
+ "response",
18
+ "media_description",
19
+ "view_context",
20
+ // LifeOps per-capability tasks (#8795).
21
+ "calendar_extract",
22
+ "schedule_plan",
23
+ "reminder_dispatch",
24
+ "inbox_triage",
25
+ "meeting_prep",
26
+ "morning_brief",
27
+ "health_checkin",
28
+ "screentime_recap"
29
+ ];
30
+ const LIFEOPS_TRAINING_TASKS = [
31
+ "calendar_extract",
32
+ "schedule_plan",
33
+ "reminder_dispatch",
34
+ "inbox_triage",
35
+ "meeting_prep",
36
+ "morning_brief",
37
+ "health_checkin",
38
+ "screentime_recap"
39
+ ];
40
+ function buildTaskRecord(make) {
41
+ const out = {};
42
+ for (const task of ALL_TRAJECTORY_TRAINING_TASKS) {
43
+ out[task] = make(task);
44
+ }
45
+ return out;
46
+ }
47
+ const TASK_FILE_NAMES = {
48
+ should_respond: "should_respond_trajectories.jsonl",
49
+ context_routing: "context_routing_trajectories.jsonl",
50
+ action_planner: "action_planner_trajectories.jsonl",
51
+ response: "response_trajectories.jsonl",
52
+ media_description: "media_description_trajectories.jsonl",
53
+ view_context: "view_context_trajectories.jsonl",
54
+ calendar_extract: "calendar_extract_trajectories.jsonl",
55
+ schedule_plan: "schedule_plan_trajectories.jsonl",
56
+ reminder_dispatch: "reminder_dispatch_trajectories.jsonl",
57
+ inbox_triage: "inbox_triage_trajectories.jsonl",
58
+ meeting_prep: "meeting_prep_trajectories.jsonl",
59
+ morning_brief: "morning_brief_trajectories.jsonl",
60
+ health_checkin: "health_checkin_trajectories.jsonl",
61
+ screentime_recap: "screentime_recap_trajectories.jsonl"
62
+ };
63
+ const NATIVE_MODEL_BOUNDARIES = new Set(ELIZA_NATIVE_MODEL_BOUNDARIES);
64
+ function createEmptyExampleMap() {
65
+ return buildTaskRecord(() => []);
66
+ }
67
+ function createEmptyCountMap() {
68
+ return buildTaskRecord(() => 0);
69
+ }
70
+ function createEmptyTrajectoryIdMap() {
71
+ return buildTaskRecord(() => /* @__PURE__ */ new Set());
72
+ }
73
+ function normalizeToken(value) {
74
+ if (typeof value !== "string") {
75
+ return "";
76
+ }
77
+ return value.trim().replace(/([a-z0-9])([A-Z])/g, "$1_$2").toLowerCase().replace(/[^a-z0-9:_-]+/g, "_").replace(/^_+|_+$/g, "").replace(/_+/g, "_");
78
+ }
79
+ const TRAINING_TASK_SET = new Set(ALL_TRAJECTORY_TRAINING_TASKS);
80
+ function normalizeTrainingTask(value) {
81
+ const normalized = normalizeToken(value);
82
+ if (normalized === "reply") {
83
+ return "response";
84
+ }
85
+ if (TRAINING_TASK_SET.has(normalized)) {
86
+ return normalized;
87
+ }
88
+ return null;
89
+ }
90
+ function collectCallHints(call) {
91
+ const metadata = call.metadata ?? {};
92
+ const tags = Array.isArray(call.tags) ? call.tags : [];
93
+ const values = [
94
+ call.purpose,
95
+ call.stepType,
96
+ call.actionType,
97
+ call.model,
98
+ metadata.modelType,
99
+ metadata.purpose,
100
+ metadata.model_type,
101
+ metadata.stepType,
102
+ ...tags
103
+ ];
104
+ return values.map(normalizeToken).filter(
105
+ (value, index, items) => value.length > 0 && items.indexOf(value) === index
106
+ );
107
+ }
108
+ function hasContextRoutingFields(text) {
109
+ return /(^|\n)primaryContext:/m.test(text) || /(^|\n)secondaryContexts:/m.test(text) || /<primaryContext>/i.test(text) || /<secondaryContexts>/i.test(text);
110
+ }
111
+ function hasMessageHandlerJsonFields(text) {
112
+ const parsed = parseJsonObject(text);
113
+ if (!parsed) return false;
114
+ const candidate = getMessageHandlerCandidate(parsed);
115
+ return Boolean(candidate);
116
+ }
117
+ function hasViewContextFields(text) {
118
+ const parsed = parseJsonObject(text);
119
+ if (!parsed) return false;
120
+ return typeof parsed.viewId === "string" && parsed.viewId.trim().length > 0;
121
+ }
122
+ function looksLikePlannerCall(call) {
123
+ const response = call.response ?? "";
124
+ const prompt = `${call.systemPrompt ?? ""}
125
+ ${call.userPrompt ?? ""}`;
126
+ return /(^|\n)actions:/m.test(response) || /thought/i.test(response) && /text/i.test(response) || /available actions/i.test(prompt) || /actionNames/i.test(prompt);
127
+ }
128
+ function parseJsonObject(text) {
129
+ const trimmed = text.trim().replace(/^```(?:json)?\s*/i, "").replace(/\s*```$/i, "");
130
+ if (!trimmed.startsWith("{")) {
131
+ return null;
132
+ }
133
+ try {
134
+ const parsed = JSON.parse(trimmed);
135
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : null;
136
+ } catch {
137
+ return null;
138
+ }
139
+ }
140
+ function getMessageHandlerCandidate(parsed) {
141
+ const nested = parsed.messageHandler;
142
+ if (nested && typeof nested === "object" && !Array.isArray(nested)) {
143
+ return nested;
144
+ }
145
+ if (typeof parsed.action === "string" && Array.isArray(parsed.contexts) && typeof parsed.thought === "string") {
146
+ return parsed;
147
+ }
148
+ return null;
149
+ }
150
+ function normalizeMessageHandlerJson(response) {
151
+ const parsed = parseJsonObject(response);
152
+ if (!parsed) return null;
153
+ const candidate = getMessageHandlerCandidate(parsed);
154
+ if (!candidate) return null;
155
+ const action = candidate.action;
156
+ if (action !== "RESPOND" && action !== "IGNORE" && action !== "STOP") {
157
+ return null;
158
+ }
159
+ const contexts = Array.isArray(candidate.contexts) ? candidate.contexts.filter(
160
+ (context) => typeof context === "string"
161
+ ) : [];
162
+ const normalized = {
163
+ messageHandler: {
164
+ action,
165
+ contexts,
166
+ thought: typeof candidate.thought === "string" ? candidate.thought : "",
167
+ reply: typeof candidate.reply === "string" ? candidate.reply : ""
168
+ }
169
+ };
170
+ return JSON.stringify(normalized);
171
+ }
172
+ function inferTasksForCall(call) {
173
+ const hints = collectCallHints(call);
174
+ const response = call.response ?? "";
175
+ const tasks = /* @__PURE__ */ new Set();
176
+ if (hints.includes("should_respond") || hints.includes("response_handler") || hints.includes("shouldrespond") || hasMessageHandlerJsonFields(response)) {
177
+ tasks.add("should_respond");
178
+ }
179
+ if (hasContextRoutingFields(response)) {
180
+ tasks.add("context_routing");
181
+ tasks.add("should_respond");
182
+ }
183
+ if (hints.includes("action_planner") || hints.includes("planner") || hints.includes("action") || hints.includes("runtime_use_model") || looksLikePlannerCall(call)) {
184
+ tasks.add("action_planner");
185
+ }
186
+ if (hints.includes("media_description") || hints.includes("image_description") || hints.includes("describe_image") || hints.includes("describe_audio") || hints.includes("describe_video")) {
187
+ tasks.add("media_description");
188
+ }
189
+ if (hints.includes("view_context") || hints.includes("view_selection") || hasViewContextFields(response)) {
190
+ tasks.add("view_context");
191
+ }
192
+ if (hints.includes("response") || hints.includes("reply") || hints.includes("message_response")) {
193
+ tasks.add("response");
194
+ }
195
+ for (const lifeOpsTask of LIFEOPS_TRAINING_TASKS) {
196
+ if (hints.includes(lifeOpsTask)) {
197
+ tasks.add(lifeOpsTask);
198
+ }
199
+ }
200
+ if (tasks.size === 0 && typeof call.response === "string" && call.response.trim()) {
201
+ tasks.add("response");
202
+ }
203
+ return [...tasks];
204
+ }
205
+ function buildExampleForTask(trajectory, call, task) {
206
+ const response = call.response?.trim();
207
+ const trajectoryId = String(trajectory.trajectoryId);
208
+ const callId = typeof call.callId === "string" && call.callId.trim().length > 0 ? call.callId : `${trajectoryId}-call`;
209
+ if (!response) {
210
+ return null;
211
+ }
212
+ if (task === "should_respond" || task === "context_routing") {
213
+ if (!normalizeMessageHandlerJson(response)) {
214
+ return null;
215
+ }
216
+ }
217
+ if (task === "view_context" && !hasViewContextFields(response)) {
218
+ return null;
219
+ }
220
+ const row = buildElizaNativeTrajectoryRows([trajectory]).find(
221
+ (candidate) => candidate.callId === callId
222
+ );
223
+ if (!row) return null;
224
+ return {
225
+ ...row,
226
+ format: ELIZA_NATIVE_TRAJECTORY_FORMAT,
227
+ metadata: {
228
+ ...row.metadata,
229
+ task_type: task,
230
+ source_dataset: `eliza_native/${task}`,
231
+ trajectory_id: trajectoryId,
232
+ call_id: callId,
233
+ agent_id: String(trajectory.agentId),
234
+ trajectory_source: typeof trajectory.metadata?.source === "string" ? trajectory.metadata.source : row.metadata.trajectory_source
235
+ }
236
+ };
237
+ }
238
+ function hasNativeRequestPayload(row) {
239
+ const request = row.request;
240
+ if (!request || typeof request !== "object") {
241
+ return false;
242
+ }
243
+ if (typeof request.prompt === "string" && request.prompt.length > 0) {
244
+ return true;
245
+ }
246
+ if (Array.isArray(request.messages) && request.messages.length > 0) {
247
+ return true;
248
+ }
249
+ return false;
250
+ }
251
+ function hasNativeResponsePayload(row) {
252
+ const response = row.response;
253
+ if (!response || typeof response !== "object") {
254
+ return false;
255
+ }
256
+ if (typeof response.text === "string" && response.text.length > 0) {
257
+ return true;
258
+ }
259
+ return Array.isArray(response.toolCalls) && response.toolCalls.length > 0;
260
+ }
261
+ function isNativeRowUsableForTask(row, task) {
262
+ if (!NATIVE_MODEL_BOUNDARIES.has(row.boundary)) {
263
+ return false;
264
+ }
265
+ if (!hasNativeRequestPayload(row) || !hasNativeResponsePayload(row)) {
266
+ return false;
267
+ }
268
+ if (task === "should_respond" || task === "context_routing") {
269
+ return normalizeMessageHandlerJson(row.response.text) !== null;
270
+ }
271
+ if (task === "view_context") {
272
+ return hasViewContextFields(row.response.text);
273
+ }
274
+ return true;
275
+ }
276
+ function collectTrajectoryExamplesByTask(trajectoriesInput, tasks) {
277
+ const nativeRows = typeof trajectoriesInput === "string" ? extractElizaNativeRowsFromExportText(trajectoriesInput) : [];
278
+ const nonNativeRowCount = typeof trajectoriesInput === "string" && nativeRows.length === 0 ? parseTrajectoryExportText(trajectoriesInput).length : 0;
279
+ const trajectories = typeof trajectoriesInput === "string" ? [] : trajectoriesInput;
280
+ const requestedTasks = new Set(
281
+ tasks ?? ALL_TRAJECTORY_TRAINING_TASKS
282
+ );
283
+ const examples = createEmptyExampleMap();
284
+ const sourceCallCounts = createEmptyCountMap();
285
+ const sourceTrajectoryIds = createEmptyTrajectoryIdMap();
286
+ let llmCallCount = 0;
287
+ let skippedNonNativeRows = 0;
288
+ const warnings = [];
289
+ const warnSkip = (message, count = 1) => {
290
+ skippedNonNativeRows += count;
291
+ warnings.push(message);
292
+ console.warn(message);
293
+ };
294
+ if (nativeRows.length > 0) {
295
+ for (const row of nativeRows) {
296
+ llmCallCount += 1;
297
+ const task = normalizeTrainingTask(row.metadata.task_type) ?? normalizeTrainingTask(row.purpose) ?? normalizeTrainingTask(row.stepType) ?? normalizeTrainingTask(row.actionType);
298
+ if (!task || !requestedTasks.has(task)) {
299
+ continue;
300
+ }
301
+ if (!isNativeRowUsableForTask(row, task)) {
302
+ warnSkip(
303
+ `[trajectory-task-datasets] skipped native ${task} row from trajectory ${row.trajectoryId} call ${row.callId}; expected exact request payload and model response`
304
+ );
305
+ continue;
306
+ }
307
+ examples[task].push(row);
308
+ sourceCallCounts[task] += 1;
309
+ if (typeof row.trajectoryId === "string") {
310
+ sourceTrajectoryIds[task].add(row.trajectoryId);
311
+ }
312
+ }
313
+ return {
314
+ examples,
315
+ sourceCallCounts,
316
+ sourceTrajectoryIds,
317
+ llmCallCount,
318
+ skippedNonNativeRows,
319
+ warnings
320
+ };
321
+ }
322
+ if (nonNativeRowCount > 0) {
323
+ warnSkip(
324
+ `[trajectory-task-datasets] skipped ${nonNativeRowCount} non-native trajectory row(s); expected eliza_native_v1`,
325
+ nonNativeRowCount
326
+ );
327
+ }
328
+ for (const trajectory of trajectories) {
329
+ const trajectoryId = trajectory.trajectoryId;
330
+ for (const entry of listTrajectoryCallEntries(trajectory)) {
331
+ llmCallCount += 1;
332
+ const call = entry.call;
333
+ const inferredTasks = inferTasksForCall(call);
334
+ for (const task of inferredTasks) {
335
+ if (!requestedTasks.has(task)) {
336
+ continue;
337
+ }
338
+ const example = buildExampleForTask(trajectory, call, task);
339
+ if (!example) {
340
+ if (task === "should_respond" || task === "context_routing") {
341
+ warnSkip(
342
+ `[trajectory-task-datasets] skipped non-native ${task} row from trajectory ${trajectoryId} call ${call.callId ?? "unknown"}; expected native messageHandler JSON`
343
+ );
344
+ }
345
+ continue;
346
+ }
347
+ examples[task].push(example);
348
+ sourceCallCounts[task] += 1;
349
+ sourceTrajectoryIds[task].add(trajectoryId);
350
+ }
351
+ }
352
+ }
353
+ return {
354
+ examples,
355
+ sourceCallCounts,
356
+ sourceTrajectoryIds,
357
+ llmCallCount,
358
+ skippedNonNativeRows,
359
+ warnings
360
+ };
361
+ }
362
+ function extractTrajectoryExamplesByTask(trajectories, tasks) {
363
+ return collectTrajectoryExamplesByTask(trajectories, tasks).examples;
364
+ }
365
+ async function exportTrajectoryTaskDatasets(trajectories, outputDir, tasks) {
366
+ await mkdir(outputDir, { recursive: true });
367
+ const extraction = collectTrajectoryExamplesByTask(trajectories, tasks);
368
+ const normalizedTrajectories = typeof trajectories === "string" ? [] : trajectories;
369
+ const nativeRows = typeof trajectories === "string" ? extractElizaNativeRowsFromExportText(trajectories) : [];
370
+ const { examples } = extraction;
371
+ const counts = buildTaskRecord((task) => examples[task].length);
372
+ const paths = {
373
+ shouldRespondPath: join(outputDir, TASK_FILE_NAMES.should_respond),
374
+ contextRoutingPath: join(outputDir, TASK_FILE_NAMES.context_routing),
375
+ actionPlannerPath: join(outputDir, TASK_FILE_NAMES.action_planner),
376
+ responsePath: join(outputDir, TASK_FILE_NAMES.response),
377
+ mediaDescriptionPath: join(outputDir, TASK_FILE_NAMES.media_description),
378
+ viewContextPath: join(outputDir, TASK_FILE_NAMES.view_context),
379
+ calendarExtractPath: join(outputDir, TASK_FILE_NAMES.calendar_extract),
380
+ schedulePlanPath: join(outputDir, TASK_FILE_NAMES.schedule_plan),
381
+ reminderDispatchPath: join(outputDir, TASK_FILE_NAMES.reminder_dispatch),
382
+ inboxTriagePath: join(outputDir, TASK_FILE_NAMES.inbox_triage),
383
+ meetingPrepPath: join(outputDir, TASK_FILE_NAMES.meeting_prep),
384
+ morningBriefPath: join(outputDir, TASK_FILE_NAMES.morning_brief),
385
+ healthCheckinPath: join(outputDir, TASK_FILE_NAMES.health_checkin),
386
+ screentimeRecapPath: join(outputDir, TASK_FILE_NAMES.screentime_recap),
387
+ summaryPath: join(outputDir, "trajectory_dataset_summary.json")
388
+ };
389
+ const summary = {
390
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
391
+ trajectoryCount: normalizedTrajectories.length > 0 ? normalizedTrajectories.length : new Set(nativeRows.map((row) => row.trajectoryId)).size,
392
+ llmCallCount: extraction.llmCallCount,
393
+ skippedNonNativeRows: extraction.skippedNonNativeRows,
394
+ warnings: extraction.warnings,
395
+ counts,
396
+ tasks: ALL_TRAJECTORY_TRAINING_TASKS.filter(
397
+ (task) => tasks?.includes(task) ?? true
398
+ ),
399
+ taskMetrics: buildTaskRecord((task) => ({
400
+ exampleCount: counts[task],
401
+ sourceCallCount: extraction.sourceCallCounts[task],
402
+ sourceTrajectoryCount: extraction.sourceTrajectoryIds[task].size
403
+ }))
404
+ };
405
+ for (const task of ALL_TRAJECTORY_TRAINING_TASKS) {
406
+ const rows = examples[task];
407
+ await writeFile(
408
+ join(outputDir, TASK_FILE_NAMES[task]),
409
+ `${rows.map((example) => JSON.stringify(example)).join("\n")}${rows.length > 0 ? "\n" : ""}`
410
+ );
411
+ }
412
+ await writeFile(paths.summaryPath, JSON.stringify(summary, null, 2));
413
+ return {
414
+ counts,
415
+ paths,
416
+ examples,
417
+ summary
418
+ };
419
+ }
420
+ export {
421
+ ALL_TRAJECTORY_TRAINING_TASKS,
422
+ LIFEOPS_TRAINING_TASKS,
423
+ buildTaskRecord,
424
+ exportTrajectoryTaskDatasets,
425
+ extractTrajectoryExamplesByTask
426
+ };
427
+ //# sourceMappingURL=trajectory-task-datasets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/trajectory-task-datasets.ts"],"sourcesContent":["import { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { Trajectory, TrajectoryLlmCall } from \"@elizaos/agent\";\nimport {\n buildElizaNativeTrajectoryRows,\n ELIZA_NATIVE_MODEL_BOUNDARIES,\n ELIZA_NATIVE_TRAJECTORY_FORMAT,\n type ElizaNativeTrajectoryRow,\n} from \"@elizaos/core\";\nimport {\n extractElizaNativeRowsFromExportText,\n listTrajectoryCallEntries,\n parseTrajectoryExportText,\n} from \"./trajectory-consumer.js\";\n\nexport type ElizaNativeTrainingExample = ElizaNativeTrajectoryRow;\n\n/**\n * Canonical, ordered list of trajectory training tasks. The union type and\n * every per-task map/record in this module derive from this single list so\n * adding a task (e.g. a LifeOps capability) is a one-line change that the\n * compiler then forces to be handled everywhere a full record is required.\n *\n * The first six are the generic-runtime decision tasks; the rest are the\n * LifeOps per-capability tasks introduced for the GEPA/trajectory optimization\n * loop (issue #8795). They mirror `LIFEOPS_OPTIMIZED_PROMPT_TASKS` in\n * `@elizaos/core` (kept in sync — core is the source of truth for the artifact\n * store, this list is the source of truth for the trajectory dataset buckets).\n */\nexport const ALL_TRAJECTORY_TRAINING_TASKS = [\n \"should_respond\",\n \"context_routing\",\n \"action_planner\",\n \"response\",\n \"media_description\",\n \"view_context\",\n // LifeOps per-capability tasks (#8795).\n \"calendar_extract\",\n \"schedule_plan\",\n \"reminder_dispatch\",\n \"inbox_triage\",\n \"meeting_prep\",\n \"morning_brief\",\n \"health_checkin\",\n \"screentime_recap\",\n] as const;\n\nexport type TrajectoryTrainingTask =\n (typeof ALL_TRAJECTORY_TRAINING_TASKS)[number];\n\n/** The LifeOps per-capability subset of {@link ALL_TRAJECTORY_TRAINING_TASKS}. */\nexport const LIFEOPS_TRAINING_TASKS: readonly TrajectoryTrainingTask[] = [\n \"calendar_extract\",\n \"schedule_plan\",\n \"reminder_dispatch\",\n \"inbox_triage\",\n \"meeting_prep\",\n \"morning_brief\",\n \"health_checkin\",\n \"screentime_recap\",\n];\n\n/** Build a full per-task record by deriving an entry for every training task. */\nexport function buildTaskRecord<T>(\n make: (task: TrajectoryTrainingTask) => T,\n): Record<TrajectoryTrainingTask, T> {\n const out = {} as Record<TrajectoryTrainingTask, T>;\n for (const task of ALL_TRAJECTORY_TRAINING_TASKS) {\n out[task] = make(task);\n }\n return out;\n}\n\nexport interface TrajectoryTaskDatasetPaths {\n shouldRespondPath: string;\n contextRoutingPath: string;\n actionPlannerPath: string;\n responsePath: string;\n mediaDescriptionPath: string;\n viewContextPath: string;\n calendarExtractPath: string;\n schedulePlanPath: string;\n reminderDispatchPath: string;\n inboxTriagePath: string;\n meetingPrepPath: string;\n morningBriefPath: string;\n healthCheckinPath: string;\n screentimeRecapPath: string;\n summaryPath: string;\n}\n\nexport interface TrajectoryTaskDatasetExport {\n counts: Record<TrajectoryTrainingTask, number>;\n paths: TrajectoryTaskDatasetPaths;\n examples: Record<TrajectoryTrainingTask, ElizaNativeTrainingExample[]>;\n summary: TrajectoryTaskDatasetSummary;\n}\n\nexport interface TrajectoryTaskDatasetTaskSummary {\n exampleCount: number;\n sourceCallCount: number;\n sourceTrajectoryCount: number;\n}\n\nexport interface TrajectoryTaskDatasetSummary {\n generatedAt: string;\n trajectoryCount: number;\n llmCallCount: number;\n skippedNonNativeRows: number;\n warnings: string[];\n counts: Record<TrajectoryTrainingTask, number>;\n tasks: TrajectoryTrainingTask[];\n taskMetrics: Record<TrajectoryTrainingTask, TrajectoryTaskDatasetTaskSummary>;\n}\n\ntype TrajectoryCallLike = TrajectoryLlmCall & {\n metadata?: Record<string, unknown>;\n};\n\nconst TASK_FILE_NAMES: Record<TrajectoryTrainingTask, string> = {\n should_respond: \"should_respond_trajectories.jsonl\",\n context_routing: \"context_routing_trajectories.jsonl\",\n action_planner: \"action_planner_trajectories.jsonl\",\n response: \"response_trajectories.jsonl\",\n media_description: \"media_description_trajectories.jsonl\",\n view_context: \"view_context_trajectories.jsonl\",\n calendar_extract: \"calendar_extract_trajectories.jsonl\",\n schedule_plan: \"schedule_plan_trajectories.jsonl\",\n reminder_dispatch: \"reminder_dispatch_trajectories.jsonl\",\n inbox_triage: \"inbox_triage_trajectories.jsonl\",\n meeting_prep: \"meeting_prep_trajectories.jsonl\",\n morning_brief: \"morning_brief_trajectories.jsonl\",\n health_checkin: \"health_checkin_trajectories.jsonl\",\n screentime_recap: \"screentime_recap_trajectories.jsonl\",\n};\n\nconst NATIVE_MODEL_BOUNDARIES = new Set<string>(ELIZA_NATIVE_MODEL_BOUNDARIES);\n\ntype TaskExampleMap = Record<\n TrajectoryTrainingTask,\n ElizaNativeTrainingExample[]\n>;\ntype TaskCountMap = Record<TrajectoryTrainingTask, number>;\ntype TaskTrajectoryIdMap = Record<TrajectoryTrainingTask, Set<string>>;\n\ninterface TrajectoryTaskExtractionResult {\n examples: TaskExampleMap;\n sourceCallCounts: TaskCountMap;\n sourceTrajectoryIds: TaskTrajectoryIdMap;\n llmCallCount: number;\n skippedNonNativeRows: number;\n warnings: string[];\n}\n\nfunction createEmptyExampleMap(): TaskExampleMap {\n return buildTaskRecord<ElizaNativeTrainingExample[]>(() => []);\n}\n\nfunction createEmptyCountMap(): TaskCountMap {\n return buildTaskRecord<number>(() => 0);\n}\n\nfunction createEmptyTrajectoryIdMap(): TaskTrajectoryIdMap {\n return buildTaskRecord<Set<string>>(() => new Set<string>());\n}\n\nfunction normalizeToken(value: unknown): string {\n if (typeof value !== \"string\") {\n return \"\";\n }\n\n return value\n .trim()\n .replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n .toLowerCase()\n .replace(/[^a-z0-9:_-]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\")\n .replace(/_+/g, \"_\");\n}\n\nconst TRAINING_TASK_SET = new Set<string>(ALL_TRAJECTORY_TRAINING_TASKS);\n\nfunction normalizeTrainingTask(value: unknown): TrajectoryTrainingTask | null {\n const normalized = normalizeToken(value);\n if (normalized === \"reply\") {\n return \"response\";\n }\n // Honors an explicit `task_type` of any known training task — including the\n // LifeOps per-capability tasks, which is how LifeOps planner/extractor\n // trajectories bucket into their own datasets (#8795).\n if (TRAINING_TASK_SET.has(normalized)) {\n return normalized as TrajectoryTrainingTask;\n }\n return null;\n}\n\nfunction collectCallHints(call: TrajectoryCallLike): string[] {\n const metadata = call.metadata ?? {};\n const tags = Array.isArray(call.tags) ? call.tags : [];\n const values = [\n call.purpose,\n call.stepType,\n call.actionType,\n call.model,\n metadata.modelType,\n metadata.purpose,\n metadata.model_type,\n metadata.stepType,\n ...tags,\n ];\n\n return values\n .map(normalizeToken)\n .filter(\n (value, index, items) =>\n value.length > 0 && items.indexOf(value) === index,\n );\n}\n\nfunction hasContextRoutingFields(text: string): boolean {\n return (\n /(^|\\n)primaryContext:/m.test(text) ||\n /(^|\\n)secondaryContexts:/m.test(text) ||\n /<primaryContext>/i.test(text) ||\n /<secondaryContexts>/i.test(text)\n );\n}\n\nfunction hasMessageHandlerJsonFields(text: string): boolean {\n const parsed = parseJsonObject(text);\n if (!parsed) return false;\n const candidate = getMessageHandlerCandidate(parsed);\n return Boolean(candidate);\n}\n\n/**\n * Contextual view-selection call (the `view_context` evaluator). Its response is\n * a `{viewId, reason?}` JSON object — `viewId` is a registered view id or the\n * decline sentinel (\"none\"). We classify on the structural `viewId` string field\n * rather than a value allowlist so the bucket survives the matcher/registry\n * growing new views, mirroring how `hasContextRoutingFields` keys on shape.\n */\nfunction hasViewContextFields(text: string): boolean {\n const parsed = parseJsonObject(text);\n if (!parsed) return false;\n return typeof parsed.viewId === \"string\" && parsed.viewId.trim().length > 0;\n}\n\nfunction looksLikePlannerCall(call: TrajectoryCallLike): boolean {\n const response = call.response ?? \"\";\n const prompt = `${call.systemPrompt ?? \"\"}\\n${call.userPrompt ?? \"\"}`;\n\n return (\n /(^|\\n)actions:/m.test(response) ||\n (/thought/i.test(response) && /text/i.test(response)) ||\n /available actions/i.test(prompt) ||\n /actionNames/i.test(prompt)\n );\n}\n\nfunction parseJsonObject(text: string): Record<string, unknown> | null {\n const trimmed = text\n .trim()\n .replace(/^```(?:json)?\\s*/i, \"\")\n .replace(/\\s*```$/i, \"\");\n if (!trimmed.startsWith(\"{\")) {\n return null;\n }\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n return parsed && typeof parsed === \"object\" && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : null;\n } catch {\n return null;\n }\n}\n\nfunction getMessageHandlerCandidate(\n parsed: Record<string, unknown>,\n): Record<string, unknown> | null {\n const nested = parsed.messageHandler;\n if (nested && typeof nested === \"object\" && !Array.isArray(nested)) {\n return nested as Record<string, unknown>;\n }\n if (\n typeof parsed.action === \"string\" &&\n Array.isArray(parsed.contexts) &&\n typeof parsed.thought === \"string\"\n ) {\n return parsed;\n }\n return null;\n}\n\nfunction normalizeMessageHandlerJson(response: string): string | null {\n const parsed = parseJsonObject(response);\n if (!parsed) return null;\n const candidate = getMessageHandlerCandidate(parsed);\n if (!candidate) return null;\n\n const action = candidate.action;\n if (action !== \"RESPOND\" && action !== \"IGNORE\" && action !== \"STOP\") {\n return null;\n }\n\n const contexts = Array.isArray(candidate.contexts)\n ? candidate.contexts.filter(\n (context): context is string => typeof context === \"string\",\n )\n : [];\n const normalized = {\n messageHandler: {\n action,\n contexts,\n thought: typeof candidate.thought === \"string\" ? candidate.thought : \"\",\n reply: typeof candidate.reply === \"string\" ? candidate.reply : \"\",\n },\n };\n return JSON.stringify(normalized);\n}\n\nfunction inferTasksForCall(call: TrajectoryCallLike): TrajectoryTrainingTask[] {\n const hints = collectCallHints(call);\n const response = call.response ?? \"\";\n const tasks = new Set<TrajectoryTrainingTask>();\n\n if (\n hints.includes(\"should_respond\") ||\n hints.includes(\"response_handler\") ||\n hints.includes(\"shouldrespond\") ||\n hasMessageHandlerJsonFields(response)\n ) {\n tasks.add(\"should_respond\");\n }\n\n if (hasContextRoutingFields(response)) {\n tasks.add(\"context_routing\");\n tasks.add(\"should_respond\");\n }\n\n if (\n hints.includes(\"action_planner\") ||\n hints.includes(\"planner\") ||\n hints.includes(\"action\") ||\n hints.includes(\"runtime_use_model\") ||\n looksLikePlannerCall(call)\n ) {\n tasks.add(\"action_planner\");\n }\n\n if (\n hints.includes(\"media_description\") ||\n hints.includes(\"image_description\") ||\n hints.includes(\"describe_image\") ||\n hints.includes(\"describe_audio\") ||\n hints.includes(\"describe_video\")\n ) {\n tasks.add(\"media_description\");\n }\n\n if (\n hints.includes(\"view_context\") ||\n hints.includes(\"view_selection\") ||\n hasViewContextFields(response)\n ) {\n tasks.add(\"view_context\");\n }\n\n if (\n hints.includes(\"response\") ||\n hints.includes(\"reply\") ||\n hints.includes(\"message_response\")\n ) {\n tasks.add(\"response\");\n }\n\n // LifeOps per-capability tasks (#8795): a planner/extractor call that tags\n // itself with a LifeOps task (via purpose / stepType / actionType / a tag, or\n // an explicit `task_type`) buckets into that LifeOps dataset. This is the\n // raw-trajectory counterpart of the explicit `task_type` honored on the\n // native-row path; the two together let real LifeOps trajectories optimize.\n for (const lifeOpsTask of LIFEOPS_TRAINING_TASKS) {\n if (hints.includes(lifeOpsTask)) {\n tasks.add(lifeOpsTask);\n }\n }\n\n if (\n tasks.size === 0 &&\n typeof call.response === \"string\" &&\n call.response.trim()\n ) {\n tasks.add(\"response\");\n }\n\n return [...tasks];\n}\n\nfunction buildExampleForTask(\n trajectory: Trajectory,\n call: TrajectoryCallLike,\n task: TrajectoryTrainingTask,\n): ElizaNativeTrainingExample | null {\n const response = call.response?.trim();\n const trajectoryId = String(trajectory.trajectoryId);\n const callId =\n typeof call.callId === \"string\" && call.callId.trim().length > 0\n ? call.callId\n : `${trajectoryId}-call`;\n\n if (!response) {\n return null;\n }\n\n if (task === \"should_respond\" || task === \"context_routing\") {\n if (!normalizeMessageHandlerJson(response)) {\n return null;\n }\n }\n\n if (task === \"view_context\" && !hasViewContextFields(response)) {\n return null;\n }\n\n const row = buildElizaNativeTrajectoryRows([trajectory]).find(\n (candidate) => candidate.callId === callId,\n );\n if (!row) return null;\n\n return {\n ...row,\n format: ELIZA_NATIVE_TRAJECTORY_FORMAT,\n metadata: {\n ...row.metadata,\n task_type: task,\n source_dataset: `eliza_native/${task}`,\n trajectory_id: trajectoryId,\n call_id: callId,\n agent_id: String(trajectory.agentId),\n trajectory_source:\n typeof trajectory.metadata?.source === \"string\"\n ? trajectory.metadata.source\n : row.metadata.trajectory_source,\n },\n };\n}\n\nfunction hasNativeRequestPayload(row: ElizaNativeTrajectoryRow): boolean {\n const request = row.request;\n if (!request || typeof request !== \"object\") {\n return false;\n }\n if (typeof request.prompt === \"string\" && request.prompt.length > 0) {\n return true;\n }\n if (Array.isArray(request.messages) && request.messages.length > 0) {\n return true;\n }\n return false;\n}\n\nfunction hasNativeResponsePayload(row: ElizaNativeTrajectoryRow): boolean {\n const response = row.response;\n if (!response || typeof response !== \"object\") {\n return false;\n }\n if (typeof response.text === \"string\" && response.text.length > 0) {\n return true;\n }\n return Array.isArray(response.toolCalls) && response.toolCalls.length > 0;\n}\n\nfunction isNativeRowUsableForTask(\n row: ElizaNativeTrajectoryRow,\n task: TrajectoryTrainingTask,\n): boolean {\n if (!NATIVE_MODEL_BOUNDARIES.has(row.boundary)) {\n return false;\n }\n if (!hasNativeRequestPayload(row) || !hasNativeResponsePayload(row)) {\n return false;\n }\n if (task === \"should_respond\" || task === \"context_routing\") {\n return normalizeMessageHandlerJson(row.response.text) !== null;\n }\n if (task === \"view_context\") {\n return hasViewContextFields(row.response.text);\n }\n return true;\n}\n\nfunction collectTrajectoryExamplesByTask(\n trajectoriesInput: Trajectory[] | string,\n tasks?: readonly TrajectoryTrainingTask[],\n): TrajectoryTaskExtractionResult {\n const nativeRows =\n typeof trajectoriesInput === \"string\"\n ? extractElizaNativeRowsFromExportText(trajectoriesInput)\n : [];\n const nonNativeRowCount =\n typeof trajectoriesInput === \"string\" && nativeRows.length === 0\n ? parseTrajectoryExportText(trajectoriesInput).length\n : 0;\n const trajectories =\n typeof trajectoriesInput === \"string\" ? [] : trajectoriesInput;\n const requestedTasks = new Set<TrajectoryTrainingTask>(\n tasks ?? ALL_TRAJECTORY_TRAINING_TASKS,\n );\n const examples = createEmptyExampleMap();\n const sourceCallCounts = createEmptyCountMap();\n const sourceTrajectoryIds = createEmptyTrajectoryIdMap();\n let llmCallCount = 0;\n let skippedNonNativeRows = 0;\n const warnings: string[] = [];\n const warnSkip = (message: string, count = 1): void => {\n skippedNonNativeRows += count;\n warnings.push(message);\n console.warn(message);\n };\n\n if (nativeRows.length > 0) {\n for (const row of nativeRows) {\n llmCallCount += 1;\n const task =\n normalizeTrainingTask(row.metadata.task_type) ??\n normalizeTrainingTask(row.purpose) ??\n normalizeTrainingTask(row.stepType) ??\n normalizeTrainingTask(row.actionType);\n if (!task || !requestedTasks.has(task)) {\n continue;\n }\n if (!isNativeRowUsableForTask(row, task)) {\n warnSkip(\n `[trajectory-task-datasets] skipped native ${task} row from trajectory ${row.trajectoryId} call ${row.callId}; expected exact request payload and model response`,\n );\n continue;\n }\n examples[task].push(row);\n sourceCallCounts[task] += 1;\n if (typeof row.trajectoryId === \"string\") {\n sourceTrajectoryIds[task].add(row.trajectoryId);\n }\n }\n return {\n examples,\n sourceCallCounts,\n sourceTrajectoryIds,\n llmCallCount,\n skippedNonNativeRows,\n warnings,\n };\n }\n\n if (nonNativeRowCount > 0) {\n warnSkip(\n `[trajectory-task-datasets] skipped ${nonNativeRowCount} non-native trajectory row(s); expected eliza_native_v1`,\n nonNativeRowCount,\n );\n }\n\n for (const trajectory of trajectories) {\n const trajectoryId = trajectory.trajectoryId;\n for (const entry of listTrajectoryCallEntries(trajectory)) {\n llmCallCount += 1;\n const call = entry.call as TrajectoryCallLike;\n const inferredTasks = inferTasksForCall(call);\n for (const task of inferredTasks) {\n if (!requestedTasks.has(task)) {\n continue;\n }\n\n const example = buildExampleForTask(trajectory, call, task);\n if (!example) {\n if (task === \"should_respond\" || task === \"context_routing\") {\n warnSkip(\n `[trajectory-task-datasets] skipped non-native ${task} row from trajectory ${trajectoryId} call ${call.callId ?? \"unknown\"}; expected native messageHandler JSON`,\n );\n }\n continue;\n }\n\n examples[task].push(example);\n sourceCallCounts[task] += 1;\n sourceTrajectoryIds[task].add(trajectoryId);\n }\n }\n }\n\n return {\n examples,\n sourceCallCounts,\n sourceTrajectoryIds,\n llmCallCount,\n skippedNonNativeRows,\n warnings,\n };\n}\n\nexport function extractTrajectoryExamplesByTask(\n trajectories: Trajectory[] | string,\n tasks?: readonly TrajectoryTrainingTask[],\n): Record<TrajectoryTrainingTask, ElizaNativeTrainingExample[]> {\n return collectTrajectoryExamplesByTask(trajectories, tasks).examples;\n}\n\nexport async function exportTrajectoryTaskDatasets(\n trajectories: Trajectory[] | string,\n outputDir: string,\n tasks?: readonly TrajectoryTrainingTask[],\n): Promise<TrajectoryTaskDatasetExport> {\n await mkdir(outputDir, { recursive: true });\n\n const extraction = collectTrajectoryExamplesByTask(trajectories, tasks);\n const normalizedTrajectories =\n typeof trajectories === \"string\" ? [] : trajectories;\n const nativeRows =\n typeof trajectories === \"string\"\n ? extractElizaNativeRowsFromExportText(trajectories)\n : [];\n const { examples } = extraction;\n const counts = buildTaskRecord<number>((task) => examples[task].length);\n\n const paths: TrajectoryTaskDatasetPaths = {\n shouldRespondPath: join(outputDir, TASK_FILE_NAMES.should_respond),\n contextRoutingPath: join(outputDir, TASK_FILE_NAMES.context_routing),\n actionPlannerPath: join(outputDir, TASK_FILE_NAMES.action_planner),\n responsePath: join(outputDir, TASK_FILE_NAMES.response),\n mediaDescriptionPath: join(outputDir, TASK_FILE_NAMES.media_description),\n viewContextPath: join(outputDir, TASK_FILE_NAMES.view_context),\n calendarExtractPath: join(outputDir, TASK_FILE_NAMES.calendar_extract),\n schedulePlanPath: join(outputDir, TASK_FILE_NAMES.schedule_plan),\n reminderDispatchPath: join(outputDir, TASK_FILE_NAMES.reminder_dispatch),\n inboxTriagePath: join(outputDir, TASK_FILE_NAMES.inbox_triage),\n meetingPrepPath: join(outputDir, TASK_FILE_NAMES.meeting_prep),\n morningBriefPath: join(outputDir, TASK_FILE_NAMES.morning_brief),\n healthCheckinPath: join(outputDir, TASK_FILE_NAMES.health_checkin),\n screentimeRecapPath: join(outputDir, TASK_FILE_NAMES.screentime_recap),\n summaryPath: join(outputDir, \"trajectory_dataset_summary.json\"),\n };\n const summary: TrajectoryTaskDatasetSummary = {\n generatedAt: new Date().toISOString(),\n trajectoryCount:\n normalizedTrajectories.length > 0\n ? normalizedTrajectories.length\n : new Set(nativeRows.map((row) => row.trajectoryId)).size,\n llmCallCount: extraction.llmCallCount,\n skippedNonNativeRows: extraction.skippedNonNativeRows,\n warnings: extraction.warnings,\n counts,\n tasks: ALL_TRAJECTORY_TRAINING_TASKS.filter(\n (task) => tasks?.includes(task) ?? true,\n ),\n taskMetrics: buildTaskRecord((task) => ({\n exampleCount: counts[task],\n sourceCallCount: extraction.sourceCallCounts[task],\n sourceTrajectoryCount: extraction.sourceTrajectoryIds[task].size,\n })),\n };\n\n // Write one JSONL per task (empty file when a task had no examples), so the\n // on-disk dataset layout always has a slot for every task — including the\n // LifeOps capabilities. Mirrors the prior per-task writeFile behavior.\n for (const task of ALL_TRAJECTORY_TRAINING_TASKS) {\n const rows = examples[task];\n await writeFile(\n join(outputDir, TASK_FILE_NAMES[task]),\n `${rows.map((example) => JSON.stringify(example)).join(\"\\n\")}${rows.length > 0 ? \"\\n\" : \"\"}`,\n );\n }\n\n await writeFile(paths.summaryPath, JSON.stringify(summary, null, 2));\n\n return {\n counts,\n paths,\n examples,\n summary,\n };\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Poll a runtime's service registry until a named service becomes available,
3
+ * or the timeout expires. Used by boot-time registrants that must wait until
4
+ * a service (e.g. cron/Task scheduling) has registered.
5
+ *
6
+ * Callers stay loosely typed against `runtime.getService(name)` so app-training
7
+ * does not need plugin-specific typings.
8
+ */
9
+ interface RuntimeLike {
10
+ getService: (name: string) => unknown;
11
+ }
12
+ export interface WaitForServiceOptions {
13
+ /** Total time to wait before giving up (default: 10_000). */
14
+ timeoutMs?: number;
15
+ /** Polling interval (default: 250). */
16
+ pollIntervalMs?: number;
17
+ }
18
+ /**
19
+ * Resolves to the service instance once present, or `null` if the timeout
20
+ * expires. Never throws — callers that need hard guarantees should handle
21
+ * `null` explicitly.
22
+ */
23
+ export declare function waitForService<TService>(runtime: RuntimeLike, serviceName: string, options?: WaitForServiceOptions): Promise<TService | null>;
24
+ export {};
25
+ //# sourceMappingURL=wait-for-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait-for-service.d.ts","sourceRoot":"","sources":["../../src/core/wait-for-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,UAAU,WAAW;IACnB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAC3C,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAe1B"}
@@ -0,0 +1,19 @@
1
+ async function waitForService(runtime, serviceName, options) {
2
+ const timeoutMs = options?.timeoutMs ?? 1e4;
3
+ const pollIntervalMs = options?.pollIntervalMs ?? 250;
4
+ const deadline = Date.now() + timeoutMs;
5
+ while (true) {
6
+ const service = runtime.getService(serviceName);
7
+ if (service) {
8
+ return service;
9
+ }
10
+ if (Date.now() >= deadline) {
11
+ return null;
12
+ }
13
+ await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
14
+ }
15
+ }
16
+ export {
17
+ waitForService
18
+ };
19
+ //# sourceMappingURL=wait-for-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/wait-for-service.ts"],"sourcesContent":["/**\n * Poll a runtime's service registry until a named service becomes available,\n * or the timeout expires. Used by boot-time registrants that must wait until\n * a service (e.g. cron/Task scheduling) has registered.\n *\n * Callers stay loosely typed against `runtime.getService(name)` so app-training\n * does not need plugin-specific typings.\n */\n\ninterface RuntimeLike {\n getService: (name: string) => unknown;\n}\n\nexport interface WaitForServiceOptions {\n /** Total time to wait before giving up (default: 10_000). */\n timeoutMs?: number;\n /** Polling interval (default: 250). */\n pollIntervalMs?: number;\n}\n\n/**\n * Resolves to the service instance once present, or `null` if the timeout\n * expires. Never throws — callers that need hard guarantees should handle\n * `null` explicitly.\n */\nexport async function waitForService<TService>(\n runtime: RuntimeLike,\n serviceName: string,\n options?: WaitForServiceOptions,\n): Promise<TService | null> {\n const timeoutMs = options?.timeoutMs ?? 10_000;\n const pollIntervalMs = options?.pollIntervalMs ?? 250;\n const deadline = Date.now() + timeoutMs;\n\n while (true) {\n const service = runtime.getService(serviceName);\n if (service) {\n return service as TService;\n }\n if (Date.now() >= deadline) {\n return null;\n }\n await new Promise<void>((resolve) => setTimeout(resolve, pollIntervalMs));\n }\n}\n"],"mappings":"AAyBA,eAAsB,eACpB,SACA,aACA,SAC0B;AAC1B,QAAM,YAAY,SAAS,aAAa;AACxC,QAAM,iBAAiB,SAAS,kBAAkB;AAClD,QAAM,WAAW,KAAK,IAAI,IAAI;AAE9B,SAAO,MAAM;AACX,UAAM,UAAU,QAAQ,WAAW,WAAW;AAC9C,QAAI,SAAS;AACX,aAAO;AAAA,IACT;AACA,QAAI,KAAK,IAAI,KAAK,UAAU;AAC1B,aAAO;AAAA,IACT;AACA,UAAM,IAAI,QAAc,CAAC,YAAY,WAAW,SAAS,cAAc,CAAC;AAAA,EAC1E;AACF;","names":[]}
@@ -0,0 +1,4 @@
1
+ export declare function discoverWorkspaceRoot(startDir?: string): string | undefined;
2
+ export declare function resolveWorkspaceRoot(input?: string): string;
3
+ export declare function defaultBunCommand(): string;
4
+ //# sourceMappingURL=workspace-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-runtime.d.ts","sourceRoot":"","sources":["../../src/core/workspace-runtime.ts"],"names":[],"mappings":"AAGA,wBAAgB,qBAAqB,CAAC,QAAQ,SAAgB,GAAG,MAAM,GAAG,SAAS,CAalF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAI1C"}
@@ -0,0 +1,25 @@
1
+ import { existsSync } from "node:fs";
2
+ import { dirname, join, resolve } from "node:path";
3
+ function discoverWorkspaceRoot(startDir = process.cwd()) {
4
+ let current = resolve(startDir);
5
+ while (true) {
6
+ if (existsSync(join(current, "packages", "feed", "apps", "cli")) && existsSync(join(current, "packages", "app-core"))) {
7
+ return current;
8
+ }
9
+ const parent = dirname(current);
10
+ if (parent === current) return void 0;
11
+ current = parent;
12
+ }
13
+ }
14
+ function resolveWorkspaceRoot(input) {
15
+ return resolve(input ?? discoverWorkspaceRoot() ?? process.cwd());
16
+ }
17
+ function defaultBunCommand() {
18
+ return process.versions.bun ? process.execPath : "bun";
19
+ }
20
+ export {
21
+ defaultBunCommand,
22
+ discoverWorkspaceRoot,
23
+ resolveWorkspaceRoot
24
+ };
25
+ //# sourceMappingURL=workspace-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/workspace-runtime.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\nexport function discoverWorkspaceRoot(startDir = process.cwd()): string | undefined {\n let current = resolve(startDir);\n while (true) {\n if (\n existsSync(join(current, \"packages\", \"feed\", \"apps\", \"cli\")) &&\n existsSync(join(current, \"packages\", \"app-core\"))\n ) {\n return current;\n }\n const parent = dirname(current);\n if (parent === current) return undefined;\n current = parent;\n }\n}\n\nexport function resolveWorkspaceRoot(input?: string): string {\n return resolve(input ?? discoverWorkspaceRoot() ?? process.cwd());\n}\n\nexport function defaultBunCommand(): string {\n return (process.versions as Record<string, string | undefined>).bun\n ? process.execPath\n : \"bun\";\n}\n"],"mappings":"AAAA,SAAS,kBAAkB;AAC3B,SAAS,SAAS,MAAM,eAAe;AAEhC,SAAS,sBAAsB,WAAW,QAAQ,IAAI,GAAuB;AAClF,MAAI,UAAU,QAAQ,QAAQ;AAC9B,SAAO,MAAM;AACX,QACE,WAAW,KAAK,SAAS,YAAY,QAAQ,QAAQ,KAAK,CAAC,KAC3D,WAAW,KAAK,SAAS,YAAY,UAAU,CAAC,GAChD;AACA,aAAO;AAAA,IACT;AACA,UAAM,SAAS,QAAQ,OAAO;AAC9B,QAAI,WAAW,QAAS,QAAO;AAC/B,cAAU;AAAA,EACZ;AACF;AAEO,SAAS,qBAAqB,OAAwB;AAC3D,SAAO,QAAQ,SAAS,sBAAsB,KAAK,QAAQ,IAAI,CAAC;AAClE;AAEO,SAAS,oBAA4B;AAC1C,SAAQ,QAAQ,SAAgD,MAC5D,QAAQ,WACR;AACN;","names":[]}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Translate a DSPy optimizer result into the eliza_native_v1
3
+ * `OptimizedPromptArtifact` shape consumed by
4
+ * `packages/core/src/services/optimized-prompt.ts`.
5
+ *
6
+ * The on-disk parser is strict (rejects unknown optimizer names), so we tag
7
+ * each artifact with its DSPy optimizer name. We extend the OptimizerName
8
+ * union there in a separate edit (see `optimized-prompt.ts`).
9
+ */
10
+ import type { DspyOptimizerResult } from "./optimizers/types.js";
11
+ /** Subset of `TrajectoryTrainingTask` plus the new action-descriptions task. */
12
+ export type DspyArtifactTask = "should_respond" | "context_routing" | "action_planner" | "response" | "media_description" | "view_context" | "calendar_extract" | "schedule_plan" | "reminder_dispatch" | "inbox_triage" | "meeting_prep" | "morning_brief" | "health_checkin" | "screentime_recap" | "action_descriptions" | "autonomy";
13
+ export interface DspyArtifact {
14
+ task: DspyArtifactTask;
15
+ optimizer: "dspy-bootstrap-fewshot" | "dspy-copro" | "dspy-mipro";
16
+ baseline: string;
17
+ prompt: string;
18
+ score: number;
19
+ baselineScore: number;
20
+ datasetId: string;
21
+ datasetSize: number;
22
+ generatedAt: string;
23
+ fewShotExamples?: Array<{
24
+ id?: string;
25
+ input: {
26
+ system?: string;
27
+ user: string;
28
+ };
29
+ expectedOutput: string;
30
+ reward?: number;
31
+ metadata?: Record<string, unknown>;
32
+ }>;
33
+ lineage: Array<{
34
+ round: number;
35
+ variant: number;
36
+ score: number;
37
+ notes?: string;
38
+ }>;
39
+ signatureSpec: {
40
+ name: string;
41
+ instructions: string;
42
+ inputs: ReadonlyArray<unknown>;
43
+ outputs: ReadonlyArray<unknown>;
44
+ };
45
+ }
46
+ export interface BuildArtifactOptions {
47
+ task: DspyArtifactTask;
48
+ baseline: string;
49
+ datasetId: string;
50
+ datasetSize: number;
51
+ result: DspyOptimizerResult;
52
+ }
53
+ export declare function buildDspyArtifact(opts: BuildArtifactOptions): DspyArtifact;
54
+ //# sourceMappingURL=artifact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact.d.ts","sourceRoot":"","sources":["../../src/dspy/artifact.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGjE,gFAAgF;AAChF,MAAM,MAAM,gBAAgB,GACxB,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,GAChB,UAAU,GACV,mBAAmB,GACnB,cAAc,GACd,kBAAkB,GAClB,eAAe,GACf,mBAAmB,GACnB,cAAc,GACd,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,kBAAkB,GAClB,qBAAqB,GACrB,UAAU,CAAC;AAEf,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,wBAAwB,GAAG,YAAY,GAAG,YAAY,CAAC;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QACzC,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,aAAa,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/B,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;KACjC,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,GAAG,YAAY,CAkC1E"}