stageflow 0.40.0 → 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (519) hide show
  1. package/README.md +15 -4
  2. package/dist/agent/activity.d.ts +18 -0
  3. package/dist/agent/claudeAdapter.js +7 -0
  4. package/dist/agent/claudeTools.d.ts +27 -18
  5. package/dist/agent/claudeTools.js +54 -15
  6. package/dist/agent/compactionEvents.d.ts +34 -0
  7. package/dist/agent/compactionEvents.js +37 -0
  8. package/dist/agent/openRouterRouting.d.ts +7 -0
  9. package/dist/agent/openRouterRouting.js +23 -0
  10. package/dist/agent/piAdapter.d.ts +6 -0
  11. package/dist/agent/piAdapter.js +128 -27
  12. package/dist/agent/piSettings.d.ts +7 -0
  13. package/dist/agent/piSettings.js +9 -0
  14. package/dist/agent/sandboxPiTools.d.ts +3 -1
  15. package/dist/agent/sandboxPiTools.js +8 -2
  16. package/dist/agent/stageTurnDriver.d.ts +11 -2
  17. package/dist/agent/stageTurnDriver.js +45 -4
  18. package/dist/agent/toolOutputBudget.d.ts +15 -1
  19. package/dist/agent/toolOutputBudget.js +18 -0
  20. package/dist/agent/toolOutputBudgetExtension.d.ts +2 -0
  21. package/dist/agent/toolOutputBudgetExtension.js +40 -3
  22. package/dist/agents/authorChat.d.ts +5 -0
  23. package/dist/agents/authorChat.js +120 -12
  24. package/dist/agents/authorSessionStore.d.ts +38 -0
  25. package/dist/agents/authorSessionStore.js +167 -0
  26. package/dist/agents/chatTurn.d.ts +2 -0
  27. package/dist/agents/chatTurn.js +17 -1
  28. package/dist/agents/errors.d.ts +1 -1
  29. package/dist/agents/errors.js +1 -0
  30. package/dist/agents/evalGate.d.ts +61 -0
  31. package/dist/agents/evalGate.js +103 -0
  32. package/dist/agents/evalSession.d.ts +26 -0
  33. package/dist/agents/evalSession.js +29 -0
  34. package/dist/agents/hostContext.d.ts +4 -1
  35. package/dist/agents/hostContext.js +4 -1
  36. package/dist/agents/runtime/piRuntime.d.ts +6 -2
  37. package/dist/agents/runtime/piRuntime.js +50 -16
  38. package/dist/agents/runtime/types.d.ts +3 -1
  39. package/dist/agents/service.d.ts +27 -2
  40. package/dist/agents/service.js +91 -15
  41. package/dist/agents/sessions.d.ts +8 -0
  42. package/dist/agents/sessions.js +53 -11
  43. package/dist/agents/store.d.ts +14 -3
  44. package/dist/agents/store.js +45 -7
  45. package/dist/agents/toolRisk.d.ts +21 -0
  46. package/dist/agents/toolRisk.js +50 -0
  47. package/dist/cli/doctorCommand.js +26 -0
  48. package/dist/cli/evalCommand.d.ts +20 -0
  49. package/dist/cli/evalCommand.js +720 -0
  50. package/dist/cli/exportAllCommand.js +1 -1
  51. package/dist/cli/hostClient.d.ts +60 -0
  52. package/dist/cli/hostClient.js +71 -0
  53. package/dist/cli/validateOutput.d.ts +2 -2
  54. package/dist/cli/validateOutput.js +2 -2
  55. package/dist/cli.js +10 -0
  56. package/dist/compaction/directives.d.ts +18 -0
  57. package/dist/compaction/directives.js +119 -0
  58. package/dist/compaction/extension.d.ts +20 -0
  59. package/dist/compaction/extension.js +78 -0
  60. package/dist/compaction/mask.d.ts +18 -0
  61. package/dist/compaction/mask.js +155 -0
  62. package/dist/compaction/pin.d.ts +21 -0
  63. package/dist/compaction/pin.js +270 -0
  64. package/dist/compaction/scrub.d.ts +7 -0
  65. package/dist/compaction/scrub.js +26 -0
  66. package/dist/compaction/sessionWiring.d.ts +22 -0
  67. package/dist/compaction/sessionWiring.js +26 -0
  68. package/dist/compaction/summarize.d.ts +79 -0
  69. package/dist/compaction/summarize.js +171 -0
  70. package/dist/compaction/toolPolicy.d.ts +3 -0
  71. package/dist/compaction/toolPolicy.js +33 -0
  72. package/dist/compaction/types.d.ts +45 -0
  73. package/dist/compaction/types.js +7 -0
  74. package/dist/compaction/workingState.d.ts +56 -0
  75. package/dist/compaction/workingState.js +198 -0
  76. package/dist/config/atomicWrite.d.ts +15 -0
  77. package/dist/config/atomicWrite.js +43 -0
  78. package/dist/config/browseCatalog.d.ts +2 -0
  79. package/dist/config/browseCatalog.js +4 -2
  80. package/dist/config/createPipeline.js +2 -0
  81. package/dist/config/createTrigger.js +7 -1
  82. package/dist/config/csv.d.ts +9 -0
  83. package/dist/config/csv.js +81 -0
  84. package/dist/config/datasetAgentCheck.d.ts +18 -0
  85. package/dist/config/datasetAgentCheck.js +109 -0
  86. package/dist/config/datasetCandidates.d.ts +22 -0
  87. package/dist/config/datasetCandidates.js +86 -0
  88. package/dist/config/datasetFromSessions.d.ts +34 -0
  89. package/dist/config/datasetFromSessions.js +105 -0
  90. package/dist/config/datasetHash.d.ts +1 -0
  91. package/dist/config/datasetHash.js +4 -0
  92. package/dist/config/datasetImport.d.ts +21 -0
  93. package/dist/config/datasetImport.js +120 -0
  94. package/dist/config/datasetStageCheck.d.ts +9 -0
  95. package/dist/config/datasetStageCheck.js +17 -0
  96. package/dist/config/datasetTypes.d.ts +27 -0
  97. package/dist/config/datasetTypes.js +1 -0
  98. package/dist/config/ensureCatalogScanRoot.d.ts +4 -1
  99. package/dist/config/ensureCatalogScanRoot.js +8 -6
  100. package/dist/config/evalCatalog.d.ts +22 -0
  101. package/dist/config/evalCatalog.js +95 -0
  102. package/dist/config/evalWriteRoots.d.ts +17 -0
  103. package/dist/config/evalWriteRoots.js +109 -0
  104. package/dist/config/githubTriggerAction.d.ts +8 -0
  105. package/dist/config/githubTriggerAction.js +29 -0
  106. package/dist/config/hostConfig.js +3 -0
  107. package/dist/config/installEvalSample.d.ts +34 -0
  108. package/dist/config/installEvalSample.js +182 -0
  109. package/dist/config/loadDataset.d.ts +16 -0
  110. package/dist/config/loadDataset.js +318 -0
  111. package/dist/config/loadEval.d.ts +32 -0
  112. package/dist/config/loadEval.js +1103 -0
  113. package/dist/config/loadOutcome.d.ts +5 -0
  114. package/dist/config/loadStageflowManifest.js +64 -0
  115. package/dist/config/pipelineNeeds.d.ts +2 -0
  116. package/dist/config/pipelineNeeds.js +16 -3
  117. package/dist/config/pipelineRoute.js +5 -4
  118. package/dist/config/resolveAgentTarget.d.ts +32 -0
  119. package/dist/config/resolveAgentTarget.js +118 -0
  120. package/dist/config/resolveEvalTarget.d.ts +21 -0
  121. package/dist/config/resolveEvalTarget.js +89 -0
  122. package/dist/config/scanCatalogPaths.d.ts +1 -1
  123. package/dist/config/scanCatalogPaths.js +17 -5
  124. package/dist/config/validateCatalog.d.ts +2 -2
  125. package/dist/config/validateCatalog.js +21 -1
  126. package/dist/config/validateEval.d.ts +36 -0
  127. package/dist/config/validateEval.js +446 -0
  128. package/dist/config/writeDataset.d.ts +54 -0
  129. package/dist/config/writeDataset.js +186 -0
  130. package/dist/config/writeEval.d.ts +25 -0
  131. package/dist/config/writeEval.js +398 -0
  132. package/dist/diagnostics/checks.js +1 -1
  133. package/dist/envelope/assertEmittedArtifacts.d.ts +12 -0
  134. package/dist/envelope/assertEmittedArtifacts.js +43 -0
  135. package/dist/envelope/preEmitChecks.d.ts +3 -0
  136. package/dist/evals/agentDiff.d.ts +13 -0
  137. package/dist/evals/agentDiff.js +11 -0
  138. package/dist/evals/canonical.d.ts +3 -0
  139. package/dist/evals/canonical.js +24 -0
  140. package/dist/evals/caseTask.d.ts +3 -0
  141. package/dist/evals/caseTask.js +9 -0
  142. package/dist/evals/compare.d.ts +94 -0
  143. package/dist/evals/compare.js +201 -0
  144. package/dist/evals/constants.d.ts +62 -0
  145. package/dist/evals/constants.js +97 -0
  146. package/dist/evals/engine/FakeEngine.d.ts +33 -0
  147. package/dist/evals/engine/FakeEngine.js +177 -0
  148. package/dist/evals/engine/index.d.ts +9 -0
  149. package/dist/evals/engine/index.js +19 -0
  150. package/dist/evals/engine/promptfoo/PromptfooEngine.d.ts +52 -0
  151. package/dist/evals/engine/promptfoo/PromptfooEngine.js +312 -0
  152. package/dist/evals/engine/promptfoo/errors.d.ts +5 -0
  153. package/dist/evals/engine/promptfoo/errors.js +8 -0
  154. package/dist/evals/engine/promptfoo/generate.d.ts +30 -0
  155. package/dist/evals/engine/promptfoo/generate.js +345 -0
  156. package/dist/evals/engine/promptfoo/guard.d.ts +10 -0
  157. package/dist/evals/engine/promptfoo/guard.js +116 -0
  158. package/dist/evals/engine/promptfoo/install.d.ts +17 -0
  159. package/dist/evals/engine/promptfoo/install.js +73 -0
  160. package/dist/evals/engine/promptfoo/judgeProviders.d.ts +2 -0
  161. package/dist/evals/engine/promptfoo/judgeProviders.js +9 -0
  162. package/dist/evals/engine/promptfoo/judgeServices.d.ts +6 -0
  163. package/dist/evals/engine/promptfoo/judgeServices.js +41 -0
  164. package/dist/evals/engine/promptfoo/locate.d.ts +21 -0
  165. package/dist/evals/engine/promptfoo/locate.js +68 -0
  166. package/dist/evals/engine/promptfoo/nodeVersion.d.ts +7 -0
  167. package/dist/evals/engine/promptfoo/nodeVersion.js +14 -0
  168. package/dist/evals/engine/promptfoo/normalize.d.ts +66 -0
  169. package/dist/evals/engine/promptfoo/normalize.js +261 -0
  170. package/dist/evals/engine/promptfoo/pinned.d.ts +5 -0
  171. package/dist/evals/engine/promptfoo/pinned.js +5 -0
  172. package/dist/evals/engine/promptfoo/rubricPrompt.d.ts +14 -0
  173. package/dist/evals/engine/promptfoo/rubricPrompt.js +105 -0
  174. package/dist/evals/engine/promptfoo/runTokens.d.ts +18 -0
  175. package/dist/evals/engine/promptfoo/runTokens.js +31 -0
  176. package/dist/evals/engine/promptfoo/status.d.ts +13 -0
  177. package/dist/evals/engine/promptfoo/status.js +16 -0
  178. package/dist/evals/estimate.d.ts +56 -0
  179. package/dist/evals/estimate.js +66 -0
  180. package/dist/evals/graders/codeGrader.d.ts +6 -0
  181. package/dist/evals/graders/codeGrader.js +85 -0
  182. package/dist/evals/graders/conversationCheckGrader.d.ts +6 -0
  183. package/dist/evals/graders/conversationCheckGrader.js +62 -0
  184. package/dist/evals/graders/fieldGrader.d.ts +11 -0
  185. package/dist/evals/graders/fieldGrader.js +117 -0
  186. package/dist/evals/graders/goal.d.ts +3 -0
  187. package/dist/evals/graders/goal.js +14 -0
  188. package/dist/evals/graders/index.d.ts +18 -0
  189. package/dist/evals/graders/index.js +34 -0
  190. package/dist/evals/graders/notApplicable.d.ts +5 -0
  191. package/dist/evals/graders/notApplicable.js +9 -0
  192. package/dist/evals/graders/path.d.ts +26 -0
  193. package/dist/evals/graders/path.js +75 -0
  194. package/dist/evals/graders/referenceGrader.d.ts +5 -0
  195. package/dist/evals/graders/referenceGrader.js +59 -0
  196. package/dist/evals/graders/schemaGrader.d.ts +5 -0
  197. package/dist/evals/graders/schemaGrader.js +29 -0
  198. package/dist/evals/graders/subject.d.ts +6 -0
  199. package/dist/evals/graders/subject.js +33 -0
  200. package/dist/evals/graders/toolCallsGrader.d.ts +6 -0
  201. package/dist/evals/graders/toolCallsGrader.js +100 -0
  202. package/dist/evals/graders/transcript.d.ts +12 -0
  203. package/dist/evals/graders/transcript.js +57 -0
  204. package/dist/evals/graders/types.d.ts +20 -0
  205. package/dist/evals/graders/types.js +1 -0
  206. package/dist/evals/judgeProviders.d.ts +16 -0
  207. package/dist/evals/judgeProviders.js +27 -0
  208. package/dist/evals/lineDiff.d.ts +5 -0
  209. package/dist/evals/lineDiff.js +34 -0
  210. package/dist/evals/listStatus.d.ts +31 -0
  211. package/dist/evals/listStatus.js +48 -0
  212. package/dist/evals/manager.d.ts +187 -0
  213. package/dist/evals/manager.js +795 -0
  214. package/dist/evals/plan.d.ts +65 -0
  215. package/dist/evals/plan.js +621 -0
  216. package/dist/evals/planInternalAgent.d.ts +19 -0
  217. package/dist/evals/planInternalAgent.js +205 -0
  218. package/dist/evals/providerKeys.d.ts +1 -0
  219. package/dist/evals/providerKeys.js +21 -0
  220. package/dist/evals/read/agentTargets.d.ts +37 -0
  221. package/dist/evals/read/agentTargets.js +101 -0
  222. package/dist/evals/read/api.d.ts +208 -0
  223. package/dist/evals/read/api.js +363 -0
  224. package/dist/evals/read/compare.d.ts +4 -0
  225. package/dist/evals/read/compare.js +39 -0
  226. package/dist/evals/read/datasets.d.ts +105 -0
  227. package/dist/evals/read/datasets.js +318 -0
  228. package/dist/evals/read/list.d.ts +66 -0
  229. package/dist/evals/read/list.js +182 -0
  230. package/dist/evals/read/results.d.ts +46 -0
  231. package/dist/evals/read/results.js +107 -0
  232. package/dist/evals/read/runs.d.ts +154 -0
  233. package/dist/evals/read/runs.js +295 -0
  234. package/dist/evals/read/suggestions.d.ts +43 -0
  235. package/dist/evals/read/suggestions.js +73 -0
  236. package/dist/evals/runner/FakeAgentBackend.d.ts +40 -0
  237. package/dist/evals/runner/FakeAgentBackend.js +82 -0
  238. package/dist/evals/runner/agentCaseRunner.d.ts +24 -0
  239. package/dist/evals/runner/agentCaseRunner.js +388 -0
  240. package/dist/evals/runner/caseRunner.d.ts +8 -0
  241. package/dist/evals/runner/caseRunner.js +28 -0
  242. package/dist/evals/runner/conversationSubject.d.ts +18 -0
  243. package/dist/evals/runner/conversationSubject.js +123 -0
  244. package/dist/evals/runner/internalAgentCaseRunner.d.ts +6 -0
  245. package/dist/evals/runner/internalAgentCaseRunner.js +250 -0
  246. package/dist/evals/runner/simulatorModel.d.ts +51 -0
  247. package/dist/evals/runner/simulatorModel.js +58 -0
  248. package/dist/evals/runner/simulatorPrompt.d.ts +29 -0
  249. package/dist/evals/runner/simulatorPrompt.js +59 -0
  250. package/dist/evals/runner/stageCaseRunner.d.ts +30 -0
  251. package/dist/evals/runner/stageCaseRunner.js +279 -0
  252. package/dist/evals/runner/userDriver.d.ts +71 -0
  253. package/dist/evals/runner/userDriver.js +104 -0
  254. package/dist/evals/scoring.d.ts +34 -0
  255. package/dist/evals/scoring.js +67 -0
  256. package/dist/evals/snapshot.d.ts +191 -0
  257. package/dist/evals/snapshot.js +70 -0
  258. package/dist/evals/stageDiff.d.ts +8 -0
  259. package/dist/evals/stageDiff.js +48 -0
  260. package/dist/evals/stats.d.ts +95 -0
  261. package/dist/evals/stats.js +220 -0
  262. package/dist/evals/statsAdapter.d.ts +4 -0
  263. package/dist/evals/statsAdapter.js +30 -0
  264. package/dist/evals/statsTypes.d.ts +51 -0
  265. package/dist/evals/statsTypes.js +18 -0
  266. package/dist/evals/storeError.d.ts +5 -0
  267. package/dist/evals/storeError.js +8 -0
  268. package/dist/evals/storeTypes.d.ts +207 -0
  269. package/dist/evals/storeTypes.js +1 -0
  270. package/dist/evals/tTable.d.ts +3 -0
  271. package/dist/evals/tTable.js +15 -0
  272. package/dist/evals/triage/constants.d.ts +26 -0
  273. package/dist/evals/triage/constants.js +33 -0
  274. package/dist/evals/triage/credentials.d.ts +13 -0
  275. package/dist/evals/triage/credentials.js +20 -0
  276. package/dist/evals/triage/jevClassifier.d.ts +14 -0
  277. package/dist/evals/triage/jevClassifier.js +124 -0
  278. package/dist/evals/triage/judgeClassifier.d.ts +10 -0
  279. package/dist/evals/triage/judgeClassifier.js +76 -0
  280. package/dist/evals/triage/prompts.d.ts +16 -0
  281. package/dist/evals/triage/prompts.js +64 -0
  282. package/dist/evals/triage/service.d.ts +79 -0
  283. package/dist/evals/triage/service.js +217 -0
  284. package/dist/evals/triage/stateBuilder.d.ts +19 -0
  285. package/dist/evals/triage/stateBuilder.js +125 -0
  286. package/dist/evals/triage/types.d.ts +60 -0
  287. package/dist/evals/triage/types.js +8 -0
  288. package/dist/evals/types.d.ts +357 -0
  289. package/dist/evals/types.js +4 -0
  290. package/dist/guide/cardContract.d.ts +133 -0
  291. package/dist/guide/cardContract.js +156 -0
  292. package/dist/guide/chat.d.ts +45 -0
  293. package/dist/guide/chat.js +378 -0
  294. package/dist/guide/knowledge/index.d.ts +14 -0
  295. package/dist/guide/knowledge/index.js +109 -0
  296. package/dist/guide/knowledge/topics/agents.d.ts +2 -0
  297. package/dist/guide/knowledge/topics/agents.js +58 -0
  298. package/dist/guide/knowledge/topics/bestPractices.d.ts +2 -0
  299. package/dist/guide/knowledge/topics/bestPractices.js +67 -0
  300. package/dist/guide/knowledge/topics/connections.d.ts +2 -0
  301. package/dist/guide/knowledge/topics/connections.js +66 -0
  302. package/dist/guide/knowledge/topics/consoleMap.d.ts +2 -0
  303. package/dist/guide/knowledge/topics/consoleMap.js +55 -0
  304. package/dist/guide/knowledge/topics/evals.d.ts +2 -0
  305. package/dist/guide/knowledge/topics/evals.js +72 -0
  306. package/dist/guide/knowledge/topics/limitations.d.ts +2 -0
  307. package/dist/guide/knowledge/topics/limitations.js +84 -0
  308. package/dist/guide/knowledge/topics/mcpSkillsBrowser.d.ts +2 -0
  309. package/dist/guide/knowledge/topics/mcpSkillsBrowser.js +57 -0
  310. package/dist/guide/knowledge/topics/memories.d.ts +2 -0
  311. package/dist/guide/knowledge/topics/memories.js +63 -0
  312. package/dist/guide/knowledge/topics/modelsAndProviders.d.ts +2 -0
  313. package/dist/guide/knowledge/topics/modelsAndProviders.js +56 -0
  314. package/dist/guide/knowledge/topics/overview.d.ts +2 -0
  315. package/dist/guide/knowledge/topics/overview.js +56 -0
  316. package/dist/guide/knowledge/topics/pipelines.d.ts +2 -0
  317. package/dist/guide/knowledge/topics/pipelines.js +93 -0
  318. package/dist/guide/knowledge/topics/stages.d.ts +2 -0
  319. package/dist/guide/knowledge/topics/stages.js +54 -0
  320. package/dist/guide/knowledge/topics/tasks.d.ts +2 -0
  321. package/dist/guide/knowledge/topics/tasks.js +52 -0
  322. package/dist/guide/knowledge/topics/triggers.d.ts +2 -0
  323. package/dist/guide/knowledge/topics/triggers.js +68 -0
  324. package/dist/guide/knowledge/topics/troubleshooting.d.ts +2 -0
  325. package/dist/guide/knowledge/topics/troubleshooting.js +85 -0
  326. package/dist/guide/knowledgeTools.d.ts +2 -0
  327. package/dist/guide/knowledgeTools.js +56 -0
  328. package/dist/guide/showUi.d.ts +6 -0
  329. package/dist/guide/showUi.js +546 -0
  330. package/dist/guide/threadStore.d.ts +48 -0
  331. package/dist/guide/threadStore.js +189 -0
  332. package/dist/guide/writeRoot.d.ts +11 -0
  333. package/dist/guide/writeRoot.js +70 -0
  334. package/dist/hosted/translate.js +2 -0
  335. package/dist/mcp/agentTools.js +12 -0
  336. package/dist/mcp/catalogTools.js +18 -20
  337. package/dist/mcp/catalogWriteTools.d.ts +8 -0
  338. package/dist/mcp/catalogWriteTools.js +225 -0
  339. package/dist/mcp/connectionTools.d.ts +3 -0
  340. package/dist/mcp/connectionTools.js +85 -0
  341. package/dist/mcp/controlTools.js +34 -1
  342. package/dist/mcp/deps.d.ts +16 -0
  343. package/dist/mcp/evalTools.d.ts +3 -0
  344. package/dist/mcp/evalTools.js +943 -0
  345. package/dist/mcp/memoryHostTools.d.ts +3 -0
  346. package/dist/mcp/memoryHostTools.js +72 -0
  347. package/dist/mcp/pipelineAuthorTools.js +14 -1
  348. package/dist/mcp/server.js +6 -0
  349. package/dist/mcp/tools.js +8 -0
  350. package/dist/mcp/triggerTools.js +77 -31
  351. package/dist/models/response.d.ts +7 -2
  352. package/dist/models/response.js +6 -1
  353. package/dist/operatorAgent/agentAuthorContext.d.ts +1 -1
  354. package/dist/operatorAgent/agentAuthorContext.js +1 -1
  355. package/dist/operatorAgent/evalGate.d.ts +22 -0
  356. package/dist/operatorAgent/evalGate.js +77 -0
  357. package/dist/operatorAgent/fakeHost.js +10 -2
  358. package/dist/operatorAgent/host.js +18 -2
  359. package/dist/operatorAgent/index.d.ts +1 -0
  360. package/dist/operatorAgent/index.js +1 -0
  361. package/dist/operatorAgent/internalAgents.d.ts +11 -0
  362. package/dist/operatorAgent/internalAgents.js +13 -0
  363. package/dist/operatorAgent/piModel.d.ts +5 -1
  364. package/dist/operatorAgent/piModel.js +32 -14
  365. package/dist/operatorAgent/profiles/agentAuthor.d.ts +3 -1
  366. package/dist/operatorAgent/profiles/agentAuthor.js +201 -32
  367. package/dist/operatorAgent/profiles/agentAuthorPlaybook.d.ts +1 -1
  368. package/dist/operatorAgent/profiles/agentAuthorPlaybook.js +48 -15
  369. package/dist/operatorAgent/profiles/authorReadable.d.ts +2 -0
  370. package/dist/operatorAgent/profiles/authorReadable.js +26 -0
  371. package/dist/operatorAgent/profiles/guideConfirm.d.ts +21 -0
  372. package/dist/operatorAgent/profiles/guideConfirm.js +100 -0
  373. package/dist/operatorAgent/profiles/guideTools.d.ts +7 -0
  374. package/dist/operatorAgent/profiles/guideTools.js +123 -0
  375. package/dist/operatorAgent/profiles/stageflowGuide.d.ts +7 -0
  376. package/dist/operatorAgent/profiles/stageflowGuide.js +132 -0
  377. package/dist/operatorAgent/profiles/workshopAuthor.js +23 -0
  378. package/dist/operatorAgent/profiles/workshopAuthorPlaybook.d.ts +1 -1
  379. package/dist/operatorAgent/profiles/workshopAuthorPlaybook.js +9 -1
  380. package/dist/operatorAgent/profiles/workshopAuthorTools.d.ts +2 -0
  381. package/dist/operatorAgent/profiles/workshopAuthorTools.js +197 -9
  382. package/dist/operatorAgent/types.d.ts +23 -0
  383. package/dist/package-meta.d.ts +1 -1
  384. package/dist/package-meta.js +1 -1
  385. package/dist/runstore/port.d.ts +43 -0
  386. package/dist/runstore/retention.d.ts +2 -1
  387. package/dist/runstore/retention.js +3 -7
  388. package/dist/runstore/runStatusClock.d.ts +17 -0
  389. package/dist/runstore/runStatusClock.js +19 -0
  390. package/dist/runstore/sqlite/SqliteRunStore.d.ts +29 -0
  391. package/dist/runstore/sqlite/SqliteRunStore.js +144 -50
  392. package/dist/runstore/sqlite/evalStore.d.ts +20 -0
  393. package/dist/runstore/sqlite/evalStore.js +541 -0
  394. package/dist/runstore/sqlite/migrations/015-evals.d.ts +12 -0
  395. package/dist/runstore/sqlite/migrations/015-evals.js +157 -0
  396. package/dist/runstore/sqlite/migrations/016-eval-subject-ref.d.ts +12 -0
  397. package/dist/runstore/sqlite/migrations/016-eval-subject-ref.js +20 -0
  398. package/dist/runstore/sqlite/migrations/017-eval-result-suggestions.d.ts +11 -0
  399. package/dist/runstore/sqlite/migrations/017-eval-result-suggestions.js +36 -0
  400. package/dist/runstore/sqlite/migrations/index.js +6 -0
  401. package/dist/runstore/sqlite/suggestionStore.d.ts +14 -0
  402. package/dist/runstore/sqlite/suggestionStore.js +132 -0
  403. package/dist/runstore/workspaceLayout.js +6 -1
  404. package/dist/runtime/artifactDiskInspect.d.ts +14 -0
  405. package/dist/runtime/artifactDiskInspect.js +52 -0
  406. package/dist/runtime/artifactPath.d.ts +24 -0
  407. package/dist/runtime/artifactPath.js +84 -0
  408. package/dist/runtime/completionCheckRunner.js +15 -43
  409. package/dist/runtime/githubPollSource.d.ts +22 -4
  410. package/dist/runtime/githubPollSource.js +93 -8
  411. package/dist/runtime/pipelineRunner.d.ts +2 -1
  412. package/dist/runtime/pipelineRunner.js +2 -0
  413. package/dist/runtime/priorArtifactGrants.d.ts +8 -0
  414. package/dist/runtime/priorArtifactGrants.js +105 -0
  415. package/dist/runtime/runActionEligibility.d.ts +46 -0
  416. package/dist/runtime/runActionEligibility.js +123 -0
  417. package/dist/runtime/runManager.d.ts +6 -2
  418. package/dist/runtime/runManager.js +60 -16
  419. package/dist/runtime/runRetentionSweep.js +2 -2
  420. package/dist/runtime/runRetryCoordinator.d.ts +2 -14
  421. package/dist/runtime/runRetryCoordinator.js +3 -67
  422. package/dist/runtime/sandboxContainer.d.ts +7 -0
  423. package/dist/runtime/sandboxContainer.js +48 -6
  424. package/dist/runtime/sandboxDesk.d.ts +2 -1
  425. package/dist/runtime/sandboxDesk.js +11 -12
  426. package/dist/runtime/stageEnvironment.js +1 -0
  427. package/dist/runtime/stageRoots.d.ts +12 -0
  428. package/dist/runtime/stageSandbox.d.ts +2 -1
  429. package/dist/runtime/stageSandbox.js +18 -2
  430. package/dist/runtime/stageWorker.js +20 -0
  431. package/dist/server/agentAuthorRoutes.js +59 -1
  432. package/dist/server/bootstrap.d.ts +13 -0
  433. package/dist/server/bootstrap.js +69 -0
  434. package/dist/server/controlToken.js +3 -0
  435. package/dist/server/evalInternalRoutes.d.ts +14 -0
  436. package/dist/server/evalInternalRoutes.js +87 -0
  437. package/dist/server/evalRouteContext.d.ts +46 -0
  438. package/dist/server/evalRouteContext.js +43 -0
  439. package/dist/server/evalRoutes.d.ts +5 -0
  440. package/dist/server/evalRoutes.js +1456 -0
  441. package/dist/server/evalTriageRoutes.d.ts +2 -0
  442. package/dist/server/evalTriageRoutes.js +95 -0
  443. package/dist/server/guideRoutes.d.ts +5 -0
  444. package/dist/server/guideRoutes.js +166 -0
  445. package/dist/server/http.d.ts +15 -0
  446. package/dist/server/http.js +67 -3
  447. package/dist/server/internalAgentRoutes.d.ts +6 -0
  448. package/dist/server/internalAgentRoutes.js +12 -0
  449. package/dist/server/mcpHost.js +5 -0
  450. package/dist/toolkit/meta.d.ts +1 -1
  451. package/dist/toolkit/meta.js +53 -0
  452. package/dist/toolkit/profiles.d.ts +5 -0
  453. package/dist/toolkit/profiles.js +13 -1
  454. package/dist/tools/askOperator.js +2 -1
  455. package/dist/tools/emitStageEnvelope.d.ts +17 -16
  456. package/dist/tools/emitStageEnvelope.js +46 -32
  457. package/dist/tools/stageToolNames.d.ts +4 -0
  458. package/dist/tools/stageToolNames.js +4 -0
  459. package/dist/tools/workingState.d.ts +40 -0
  460. package/dist/tools/workingState.js +108 -0
  461. package/dist/tools/writeStageArtifact.d.ts +0 -9
  462. package/dist/tools/writeStageArtifact.js +2 -1
  463. package/dist/types/stageflowManifest.d.ts +6 -0
  464. package/dist/ui/assets/{MarkdownText-D7tYaIFO.js → MarkdownText-S5C_vemc.js} +2 -2
  465. package/dist/ui/assets/adapters-C0l4ruiR.js +17 -0
  466. package/dist/ui/assets/chat-CjnsmvqR.js +2 -0
  467. package/dist/ui/assets/chat-DFDd4UjS.css +2 -0
  468. package/dist/ui/assets/{main-BFo79krC.css → main-Del1GeLf.css} +1 -1
  469. package/dist/ui/assets/main-_yXVqcW9.js +277 -0
  470. package/dist/ui/chat.html +3 -4
  471. package/dist/ui/index.html +3 -4
  472. package/dist/workshop/chatTurn.js +1 -1
  473. package/dist/workshop/workshopPin.d.ts +3 -3
  474. package/dist/workshop/workshopPin.js +16 -15
  475. package/examples/README.md +2 -0
  476. package/examples/compaction-stress/README.md +30 -0
  477. package/examples/compaction-stress/check-run.mjs +53 -0
  478. package/examples/compaction-stress/collect-evidence.yaml +60 -0
  479. package/examples/compaction-stress/compaction-stress.pipeline.yaml +141 -0
  480. package/examples/compaction-stress/compaction-stress.task.yaml +15 -0
  481. package/examples/compaction-stress/generate-evidence.mjs +110 -0
  482. package/examples/compaction-stress/root-cause.yaml +26 -0
  483. package/examples/compaction-stress/stageflow.yaml +9 -0
  484. package/examples/compaction-stress/write-postmortem.yaml +40 -0
  485. package/examples/document-policy-review/README.md +35 -0
  486. package/examples/document-policy-review/agents/compliance.agent.yaml +42 -0
  487. package/examples/document-policy-review/documents/acme-vendor-sow.md +15 -0
  488. package/examples/document-policy-review/documents/support-runbook.md +13 -0
  489. package/examples/document-policy-review/policies/acceptable-use.md +13 -0
  490. package/examples/document-policy-review/policies/data-handling.md +17 -0
  491. package/examples/document-policy-review/policies/vendor-security.md +17 -0
  492. package/examples/evals/README.md +141 -0
  493. package/examples/evals/critique-sample.dataset.jsonl +8 -0
  494. package/examples/evals/critique-sample.eval.yaml +34 -0
  495. package/examples/evals/critique-sample.task.yaml +4 -0
  496. package/examples/evals/eval-sample.pipeline.yaml +35 -0
  497. package/examples/evals/guide-behavior.dataset.jsonl +15 -0
  498. package/examples/evals/guide-behavior.eval.yaml +35 -0
  499. package/examples/evals/guide-depth.dataset.jsonl +35 -0
  500. package/examples/evals/guide-depth.eval.yaml +169 -0
  501. package/examples/evals/support-sample.agent.yaml +20 -0
  502. package/examples/evals/support-sample.dataset.jsonl +6 -0
  503. package/examples/evals/support-sample.eval.yaml +38 -0
  504. package/examples/memory/evals/guide-behavior.dataset.jsonl +15 -0
  505. package/examples/memory/evals/guide-behavior.eval.yaml +35 -0
  506. package/examples/memory/evals/guide-depth.dataset.jsonl +35 -0
  507. package/examples/memory/evals/guide-depth.eval.yaml +169 -0
  508. package/examples/stageflow.yaml +6 -0
  509. package/package.json +1 -1
  510. package/skills/stageflow/SKILL.md +5 -2
  511. package/skills/stageflow/references/control-surface.md +4 -2
  512. package/skills/stageflow/references/evals.md +68 -0
  513. package/skills/stageflow-author/SKILL.md +4 -0
  514. package/skills/stageflow-run/SKILL.md +4 -0
  515. package/dist/ui/assets/AssistantRuntimeProvider-CsiPFhCT.js +0 -9
  516. package/dist/ui/assets/ReadonlyStore-BfXqHykm.js +0 -6
  517. package/dist/ui/assets/chat-BbLukq9W.js +0 -5
  518. package/dist/ui/assets/chat-zIZU_bP1.css +0 -2
  519. package/dist/ui/assets/main-CijYMeM0.js +0 -259
@@ -0,0 +1,109 @@
1
+ import { realpathSync } from "node:fs";
2
+ import { stat } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { CatalogPathError, isInsideProjectRoot } from "./catalogRelativePath.js";
5
+ import { normalizeCatalogDir } from "./ensureCatalogScanRoot.js";
6
+ import { listDatasetFiles, listEvalFiles } from "./evalCatalog.js";
7
+ import { datasetFormatFromPath } from "./loadDataset.js";
8
+ import { loadStageflowManifestOutcome, manifestPathForProject, parseStageflowManifestOutcome, } from "./loadStageflowManifest.js";
9
+ const DEFAULT_DIR = {
10
+ evals: "evals",
11
+ datasets: "datasets",
12
+ pipelines: "pipelines",
13
+ };
14
+ export async function manifestForWrite(projectRoot) {
15
+ const outcome = await loadStageflowManifestOutcome(projectRoot);
16
+ if (outcome.ok)
17
+ return outcome.value;
18
+ const fallback = parseStageflowManifestOutcome("version: 1\ncatalog:\n pipelines: [pipelines]\n tasks: [tasks]\n", manifestPathForProject(projectRoot), projectRoot);
19
+ if (!fallback.ok)
20
+ throw new Error("default manifest failed to parse");
21
+ return fallback.value;
22
+ }
23
+ export function explicitRoots(manifest, kind) {
24
+ const entries = manifest.manifest.catalog[kind];
25
+ return entries === undefined ? undefined : entries.map(normalizeCatalogDir);
26
+ }
27
+ async function isFile(abs) {
28
+ try {
29
+ return (await stat(abs)).isFile();
30
+ }
31
+ catch {
32
+ return false;
33
+ }
34
+ }
35
+ function containedInProject(projectRoot, absPath) {
36
+ let realRoot = path.resolve(projectRoot);
37
+ try {
38
+ realRoot = realpathSync(realRoot);
39
+ }
40
+ catch {
41
+ // project root missing: fall back to the resolved path
42
+ }
43
+ const rel = path.relative(path.resolve(projectRoot), absPath);
44
+ if (rel.startsWith("..") || path.isAbsolute(rel))
45
+ return false;
46
+ return isInsideProjectRoot(projectRoot, path.resolve(realRoot, rel));
47
+ }
48
+ export async function resolveWriteDir(projectRoot, manifest, kind, directory) {
49
+ let relDir;
50
+ if (directory !== undefined) {
51
+ if (path.isAbsolute(directory)) {
52
+ throw new CatalogPathError("Absolute directory is not allowed; use a path relative to the project root", "absolute_path_not_allowed", [projectRoot]);
53
+ }
54
+ relDir = normalizeCatalogDir(directory) || ".";
55
+ }
56
+ else {
57
+ relDir = DEFAULT_DIR[kind];
58
+ for (const entry of explicitRoots(manifest, kind) ?? []) {
59
+ if (!(await isFile(path.join(projectRoot, entry)))) {
60
+ relDir = entry;
61
+ break;
62
+ }
63
+ }
64
+ }
65
+ const absDir = path.resolve(projectRoot, relDir);
66
+ if (!containedInProject(projectRoot, absDir)) {
67
+ throw new CatalogPathError(`directory escapes project root ${projectRoot}`, "path_outside_project_root", [projectRoot]);
68
+ }
69
+ return { absDir, relDir, explicitDirectory: directory !== undefined };
70
+ }
71
+ export function assertInsideProject(projectRoot, absPath, what) {
72
+ if (!containedInProject(projectRoot, absPath)) {
73
+ throw new CatalogPathError(`${what} escapes project root ${projectRoot}`, "path_outside_project_root", [
74
+ projectRoot,
75
+ ]);
76
+ }
77
+ }
78
+ export function evalStem(fileName) {
79
+ return fileName.replace(/\.eval\.ya?ml$/, "");
80
+ }
81
+ export function datasetStem(fileName) {
82
+ return fileName.replace(/\.dataset\.(jsonl|json|csv)$/, "");
83
+ }
84
+ export async function findEvalFile(projectRoot, id, manifest) {
85
+ const m = manifest ?? (await manifestForWrite(projectRoot));
86
+ const refs = await listEvalFiles(m);
87
+ return refs.find((ref) => evalStem(path.basename(ref.absPath)) === id);
88
+ }
89
+ export function datasetIdsFor(refs) {
90
+ const byStem = new Map();
91
+ for (const ref of refs) {
92
+ const stem = datasetStem(path.basename(ref.absPath));
93
+ byStem.set(stem, [...(byStem.get(stem) ?? []), ref]);
94
+ }
95
+ const ids = new Map();
96
+ for (const [stem, group] of byStem) {
97
+ for (const ref of group) {
98
+ const format = datasetFormatFromPath(ref.absPath);
99
+ ids.set(ref.absPath, group.length > 1 && format !== "jsonl" ? `${stem}.${format ?? "unknown"}` : stem);
100
+ }
101
+ }
102
+ return ids;
103
+ }
104
+ export async function findDatasetFile(projectRoot, id, manifest) {
105
+ const m = manifest ?? (await manifestForWrite(projectRoot));
106
+ const refs = await listDatasetFiles(m);
107
+ const ids = datasetIdsFor(refs);
108
+ return refs.find((ref) => ids.get(ref.absPath) === id);
109
+ }
@@ -0,0 +1,8 @@
1
+ export declare const GITHUB_TRIGGER_ACTIONS: readonly ["opened", "synchronize", "updated", "merged", "closed"];
2
+ export type GithubTriggerAction = (typeof GITHUB_TRIGGER_ACTIONS)[number];
3
+ export declare function isGithubTriggerAction(value: unknown): value is GithubTriggerAction;
4
+ /**
5
+ * For `event.source` values starting with `github.`, `match.action` must be set
6
+ * to one of the five PR poll actions. Returns an error message or undefined.
7
+ */
8
+ export declare function githubMatchActionError(source: string, match: Record<string, unknown> | undefined): string | undefined;
@@ -0,0 +1,29 @@
1
+ export const GITHUB_TRIGGER_ACTIONS = [
2
+ "opened",
3
+ "synchronize",
4
+ "updated",
5
+ "merged",
6
+ "closed",
7
+ ];
8
+ const ACTION_SET = new Set(GITHUB_TRIGGER_ACTIONS);
9
+ export function isGithubTriggerAction(value) {
10
+ return typeof value === "string" && ACTION_SET.has(value);
11
+ }
12
+ /**
13
+ * For `event.source` values starting with `github.`, `match.action` must be set
14
+ * to one of the five PR poll actions. Returns an error message or undefined.
15
+ */
16
+ export function githubMatchActionError(source, match) {
17
+ if (!source.startsWith("github."))
18
+ return undefined;
19
+ const action = match?.action;
20
+ if (action === undefined) {
21
+ return ("event.match.action is required for github.* sources " +
22
+ `(one of: ${GITHUB_TRIGGER_ACTIONS.join(", ")})`);
23
+ }
24
+ if (!isGithubTriggerAction(action)) {
25
+ return (`event.match.action must be one of: ${GITHUB_TRIGGER_ACTIONS.join(", ")} ` +
26
+ `(got ${JSON.stringify(action)})`);
27
+ }
28
+ return undefined;
29
+ }
@@ -27,6 +27,8 @@ export const KNOWN_STAGEFLOW_ENV_KEYS = new Set([
27
27
  "STAGEFLOW_READ_TOKEN",
28
28
  "STAGEFLOW_READ_TOKEN_FILE",
29
29
  "STAGEFLOW_ALLOW_UNKNOWN_CONFIG",
30
+ "STAGEFLOW_EVALS_KEEP_WORKDIR",
31
+ "STAGEFLOW_SHOW_INTERNAL_AGENTS",
30
32
  "STAGEFLOW_MAX_CONCURRENT_RUNS",
31
33
  "STAGEFLOW_MAX_CONCURRENT_RUNS_PER_PROJECT",
32
34
  "STAGEFLOW_MAX_QUEUED",
@@ -58,6 +60,7 @@ export const KNOWN_STAGEFLOW_ENV_KEYS = new Set([
58
60
  "STAGEFLOW_STAGE_EXECUTION",
59
61
  "STAGEFLOW_STAGE_CONTAINER_IMAGE",
60
62
  "STAGEFLOW_STAGE_CONTAINER_DOCKER_BIN",
63
+ "STAGEFLOW_STAGE_READONLY_DIR",
61
64
  "STAGEFLOW_STAGE_ENV_ALLOW",
62
65
  "STAGEFLOW_STAGE_ENV_PASSTHROUGH",
63
66
  "STAGEFLOW_GC_INTERVAL_MS",
@@ -0,0 +1,34 @@
1
+ import type { AgentDetail } from "../agents/service.js";
2
+ export declare const EVAL_SAMPLE_FILES: {
3
+ readonly pipeline: "eval-sample.pipeline.yaml";
4
+ readonly eval: "critique-sample.eval.yaml";
5
+ readonly dataset: "critique-sample.dataset.jsonl";
6
+ };
7
+ export declare const EVAL_SAMPLE_ID = "critique-sample";
8
+ export declare const AGENT_EVAL_SAMPLE_FILES: {
9
+ readonly agent: "support-sample.agent.yaml";
10
+ readonly eval: "support-sample.eval.yaml";
11
+ readonly dataset: "support-sample.dataset.jsonl";
12
+ };
13
+ export declare const AGENT_EVAL_SAMPLE_ID = "support-sample";
14
+ export declare const AGENT_EVAL_SAMPLE_AGENT_ID = "support_sample";
15
+ export type EvalSampleKind = "stage" | "agent";
16
+ /** The slice of `AgentService` the agent sample install needs. */
17
+ export type EvalSampleAgents = {
18
+ get(projectRoot: string, agentId: string): Promise<AgentDetail>;
19
+ create(projectRoot: string, rawInput: unknown, actor: {
20
+ source: "api";
21
+ }): Promise<AgentDetail>;
22
+ setEnabled(projectRoot: string, agentId: string, enabled: boolean, actor: {
23
+ source: "api";
24
+ }): Promise<AgentDetail>;
25
+ };
26
+ export declare function resolveEvalSampleDir(fromUrl?: string, marker?: string): string | undefined;
27
+ export declare function installEvalSample(input: {
28
+ projectRoot: string;
29
+ sourceDir?: string;
30
+ kind?: EvalSampleKind;
31
+ agents?: EvalSampleAgents;
32
+ }): Promise<{
33
+ evalId: string;
34
+ }>;
@@ -0,0 +1,182 @@
1
+ import { existsSync } from "node:fs";
2
+ import { access, readFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { isMap, parse as parseYaml, parseDocument } from "yaml";
6
+ import { isAgentError } from "../agents/errors.js";
7
+ import { EvalsWriteError, writeFileAtomic } from "./atomicWrite.js";
8
+ import { ensureCatalogScanRoot } from "./ensureCatalogScanRoot.js";
9
+ import { explicitRoots, findEvalFile, manifestForWrite, resolveWriteDir, } from "./evalWriteRoots.js";
10
+ import { peekDefaultModel } from "../models/catalog.js";
11
+ import { loadStageflowManifestOutcome } from "./loadStageflowManifest.js";
12
+ import { resolveSeededExamplesPath } from "./seededCatalog.js";
13
+ export const EVAL_SAMPLE_FILES = {
14
+ pipeline: "eval-sample.pipeline.yaml",
15
+ eval: "critique-sample.eval.yaml",
16
+ dataset: "critique-sample.dataset.jsonl",
17
+ };
18
+ export const EVAL_SAMPLE_ID = "critique-sample";
19
+ export const AGENT_EVAL_SAMPLE_FILES = {
20
+ agent: "support-sample.agent.yaml",
21
+ eval: "support-sample.eval.yaml",
22
+ dataset: "support-sample.dataset.jsonl",
23
+ };
24
+ export const AGENT_EVAL_SAMPLE_ID = "support-sample";
25
+ export const AGENT_EVAL_SAMPLE_AGENT_ID = "support_sample";
26
+ async function exists(abs) {
27
+ try {
28
+ await access(abs);
29
+ return true;
30
+ }
31
+ catch {
32
+ return false;
33
+ }
34
+ }
35
+ function relativeRef(fromDir, toFile) {
36
+ const rel = path.relative(fromDir, toFile).split(path.sep).join("/");
37
+ return rel.startsWith(".") ? rel : `./${rel}`;
38
+ }
39
+ function rewriteEvalPaths(text, pipelineRef, datasetRef) {
40
+ const doc = parseDocument(text);
41
+ if (!isMap(doc.contents))
42
+ throw new EvalsWriteError("SAMPLE_SOURCE_MISSING", "Sample eval file is not a mapping");
43
+ if (pipelineRef !== undefined)
44
+ doc.setIn(["target", "pipeline"], pipelineRef);
45
+ doc.set("dataset", datasetRef);
46
+ const out = doc.toString({ lineWidth: 0 });
47
+ return out.endsWith("\n") ? out : `${out}\n`;
48
+ }
49
+ export function resolveEvalSampleDir(fromUrl = import.meta.url, marker = EVAL_SAMPLE_FILES.eval) {
50
+ const examples = resolveSeededExamplesPath(fromUrl);
51
+ const here = path.dirname(fileURLToPath(fromUrl));
52
+ const candidates = [
53
+ ...(examples === undefined ? [] : [path.join(examples, "evals")]),
54
+ path.resolve(here, "../../examples/evals"),
55
+ path.resolve(here, "../../../examples/evals"),
56
+ path.resolve(process.cwd(), "examples/evals"),
57
+ ];
58
+ return candidates.find((dir) => existsSync(path.join(dir, marker)));
59
+ }
60
+ export async function installEvalSample(input) {
61
+ if (input.kind === "agent")
62
+ return installAgentEvalSample(input);
63
+ const { projectRoot } = input;
64
+ const sourceDir = input.sourceDir ?? resolveEvalSampleDir();
65
+ if (sourceDir === undefined) {
66
+ throw new EvalsWriteError("SAMPLE_SOURCE_MISSING", "The packaged sample files were not found");
67
+ }
68
+ const sources = {
69
+ pipeline: path.join(sourceDir, EVAL_SAMPLE_FILES.pipeline),
70
+ eval: path.join(sourceDir, EVAL_SAMPLE_FILES.eval),
71
+ dataset: path.join(sourceDir, EVAL_SAMPLE_FILES.dataset),
72
+ };
73
+ const texts = { pipeline: "", eval: "", dataset: "" };
74
+ for (const key of Object.keys(sources)) {
75
+ try {
76
+ texts[key] = await readFile(sources[key], "utf8");
77
+ }
78
+ catch {
79
+ throw new EvalsWriteError("SAMPLE_SOURCE_MISSING", `Sample file ${EVAL_SAMPLE_FILES[key]} not found in ${sourceDir}`);
80
+ }
81
+ }
82
+ const manifest = await manifestForWrite(projectRoot);
83
+ const dirs = {
84
+ pipeline: await resolveWriteDir(projectRoot, manifest, "pipelines"),
85
+ eval: await resolveWriteDir(projectRoot, manifest, "evals"),
86
+ dataset: await resolveWriteDir(projectRoot, manifest, "datasets"),
87
+ };
88
+ const targets = {
89
+ pipeline: path.join(dirs.pipeline.absDir, EVAL_SAMPLE_FILES.pipeline),
90
+ eval: path.join(dirs.eval.absDir, EVAL_SAMPLE_FILES.eval),
91
+ dataset: path.join(dirs.dataset.absDir, EVAL_SAMPLE_FILES.dataset),
92
+ };
93
+ const taken = (await findEvalFile(projectRoot, EVAL_SAMPLE_ID, manifest)) !== undefined ||
94
+ (await exists(targets.pipeline)) ||
95
+ (await exists(targets.eval)) ||
96
+ (await exists(targets.dataset));
97
+ if (taken)
98
+ throw new EvalsWriteError("SAMPLE_EXISTS", "The sample eval is already installed");
99
+ const evalText = rewriteEvalPaths(texts.eval, relativeRef(dirs.eval.absDir, targets.pipeline), relativeRef(dirs.eval.absDir, targets.dataset));
100
+ const projectManifest = await loadStageflowManifestOutcome(projectRoot);
101
+ const hasDefaultModel = projectManifest.ok && projectManifest.value.manifest.model !== undefined;
102
+ const pipelineText = hasDefaultModel
103
+ ? texts.pipeline
104
+ : texts.pipeline.replace(/^id: .*\n/m, (line) => `${line}model: ${peekDefaultModel()}\n`);
105
+ await writeFileAtomic(targets.pipeline, pipelineText);
106
+ await writeFileAtomic(targets.dataset, texts.dataset);
107
+ await writeFileAtomic(targets.eval, evalText);
108
+ const scanKeys = {
109
+ pipeline: { kind: "pipelines", key: "pipelines" },
110
+ eval: { kind: "evals", key: "evals" },
111
+ dataset: { kind: "datasets", key: "datasets" },
112
+ };
113
+ for (const name of Object.keys(dirs)) {
114
+ const { kind, key } = scanKeys[name];
115
+ if (explicitRoots(manifest, kind) !== undefined) {
116
+ await ensureCatalogScanRoot(projectRoot, dirs[name].relDir, [key]);
117
+ }
118
+ }
119
+ return { evalId: EVAL_SAMPLE_ID };
120
+ }
121
+ async function agentExists(agents, projectRoot) {
122
+ try {
123
+ await agents.get(projectRoot, AGENT_EVAL_SAMPLE_AGENT_ID);
124
+ return true;
125
+ }
126
+ catch (err) {
127
+ if (isAgentError(err) && err.code === "agent.not_found")
128
+ return false;
129
+ throw err;
130
+ }
131
+ }
132
+ async function installAgentEvalSample(input) {
133
+ const { projectRoot, agents } = input;
134
+ const sourceDir = input.sourceDir ?? resolveEvalSampleDir(undefined, AGENT_EVAL_SAMPLE_FILES.eval);
135
+ if (sourceDir === undefined) {
136
+ throw new EvalsWriteError("SAMPLE_SOURCE_MISSING", "The packaged sample files were not found");
137
+ }
138
+ if (agents === undefined) {
139
+ throw new EvalsWriteError("SAMPLE_AGENTS_UNAVAILABLE", "Agents are not available on this Host");
140
+ }
141
+ const texts = { agent: "", eval: "", dataset: "" };
142
+ for (const key of Object.keys(AGENT_EVAL_SAMPLE_FILES)) {
143
+ try {
144
+ texts[key] = await readFile(path.join(sourceDir, AGENT_EVAL_SAMPLE_FILES[key]), "utf8");
145
+ }
146
+ catch {
147
+ throw new EvalsWriteError("SAMPLE_SOURCE_MISSING", `Sample file ${AGENT_EVAL_SAMPLE_FILES[key]} not found in ${sourceDir}`);
148
+ }
149
+ }
150
+ const projectManifest = await loadStageflowManifestOutcome(projectRoot);
151
+ if (!projectManifest.ok || projectManifest.value.manifest.model === undefined) {
152
+ throw new EvalsWriteError("SAMPLE_NO_DEFAULT_MODEL", "The agent sample needs a default model. Set model in stageflow.yaml, then install the sample again.");
153
+ }
154
+ const manifest = await manifestForWrite(projectRoot);
155
+ const dirs = {
156
+ eval: await resolveWriteDir(projectRoot, manifest, "evals"),
157
+ dataset: await resolveWriteDir(projectRoot, manifest, "datasets"),
158
+ };
159
+ const targets = {
160
+ eval: path.join(dirs.eval.absDir, AGENT_EVAL_SAMPLE_FILES.eval),
161
+ dataset: path.join(dirs.dataset.absDir, AGENT_EVAL_SAMPLE_FILES.dataset),
162
+ };
163
+ const taken = (await findEvalFile(projectRoot, AGENT_EVAL_SAMPLE_ID, manifest)) !== undefined ||
164
+ (await exists(targets.eval)) ||
165
+ (await exists(targets.dataset)) ||
166
+ (await agentExists(agents, projectRoot));
167
+ if (taken)
168
+ throw new EvalsWriteError("SAMPLE_EXISTS", "The sample eval is already installed");
169
+ const agentDefinition = parseYaml(texts.agent);
170
+ const evalText = rewriteEvalPaths(texts.eval, undefined, relativeRef(dirs.eval.absDir, targets.dataset));
171
+ await agents.create(projectRoot, { ...agentDefinition, web_chat: { enabled: false } }, { source: "api" });
172
+ await agents.setEnabled(projectRoot, AGENT_EVAL_SAMPLE_AGENT_ID, true, { source: "api" });
173
+ await writeFileAtomic(targets.dataset, texts.dataset);
174
+ await writeFileAtomic(targets.eval, evalText);
175
+ const scanKeys = { eval: "evals", dataset: "datasets" };
176
+ for (const name of Object.keys(dirs)) {
177
+ if (explicitRoots(manifest, scanKeys[name]) !== undefined) {
178
+ await ensureCatalogScanRoot(projectRoot, dirs[name].relDir, [scanKeys[name]]);
179
+ }
180
+ }
181
+ return { evalId: AGENT_EVAL_SAMPLE_ID };
182
+ }
@@ -0,0 +1,16 @@
1
+ import type { DatasetFormat, DatasetLimits, DatasetLoadResult, ParseDatasetResult } from "./datasetTypes.js";
2
+ export declare const DATASET_LIMITS: DatasetLimits;
3
+ export declare const DATASET_MIN_CASES = 5;
4
+ export type ParseDatasetOptions = {
5
+ limits?: Partial<DatasetLimits>;
6
+ path?: string;
7
+ };
8
+ export declare function datasetFormatFromPath(filePath: string): DatasetFormat | undefined;
9
+ export declare function parseDatasetText(text: string, format: DatasetFormat, options?: ParseDatasetOptions & {
10
+ csvDelimiter?: string;
11
+ }): ParseDatasetResult;
12
+ export declare function parseDatasetCases(rawCases: readonly unknown[], options?: ParseDatasetOptions): ParseDatasetResult;
13
+ export declare function loadDatasetFile(absPath: string, options?: ParseDatasetOptions & {
14
+ root?: string;
15
+ csvDelimiter?: string;
16
+ }): Promise<DatasetLoadResult>;