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.
- package/README.md +15 -4
- package/dist/agent/activity.d.ts +18 -0
- package/dist/agent/claudeAdapter.js +7 -0
- package/dist/agent/claudeTools.d.ts +27 -18
- package/dist/agent/claudeTools.js +54 -15
- package/dist/agent/compactionEvents.d.ts +34 -0
- package/dist/agent/compactionEvents.js +37 -0
- package/dist/agent/openRouterRouting.d.ts +7 -0
- package/dist/agent/openRouterRouting.js +23 -0
- package/dist/agent/piAdapter.d.ts +6 -0
- package/dist/agent/piAdapter.js +128 -27
- package/dist/agent/piSettings.d.ts +7 -0
- package/dist/agent/piSettings.js +9 -0
- package/dist/agent/sandboxPiTools.d.ts +3 -1
- package/dist/agent/sandboxPiTools.js +8 -2
- package/dist/agent/stageTurnDriver.d.ts +11 -2
- package/dist/agent/stageTurnDriver.js +45 -4
- package/dist/agent/toolOutputBudget.d.ts +15 -1
- package/dist/agent/toolOutputBudget.js +18 -0
- package/dist/agent/toolOutputBudgetExtension.d.ts +2 -0
- package/dist/agent/toolOutputBudgetExtension.js +40 -3
- package/dist/agents/authorChat.d.ts +5 -0
- package/dist/agents/authorChat.js +120 -12
- package/dist/agents/authorSessionStore.d.ts +38 -0
- package/dist/agents/authorSessionStore.js +167 -0
- package/dist/agents/chatTurn.d.ts +2 -0
- package/dist/agents/chatTurn.js +17 -1
- package/dist/agents/errors.d.ts +1 -1
- package/dist/agents/errors.js +1 -0
- package/dist/agents/evalGate.d.ts +61 -0
- package/dist/agents/evalGate.js +103 -0
- package/dist/agents/evalSession.d.ts +26 -0
- package/dist/agents/evalSession.js +29 -0
- package/dist/agents/hostContext.d.ts +4 -1
- package/dist/agents/hostContext.js +4 -1
- package/dist/agents/runtime/piRuntime.d.ts +6 -2
- package/dist/agents/runtime/piRuntime.js +50 -16
- package/dist/agents/runtime/types.d.ts +3 -1
- package/dist/agents/service.d.ts +27 -2
- package/dist/agents/service.js +91 -15
- package/dist/agents/sessions.d.ts +8 -0
- package/dist/agents/sessions.js +53 -11
- package/dist/agents/store.d.ts +14 -3
- package/dist/agents/store.js +45 -7
- package/dist/agents/toolRisk.d.ts +21 -0
- package/dist/agents/toolRisk.js +50 -0
- package/dist/cli/doctorCommand.js +26 -0
- package/dist/cli/evalCommand.d.ts +20 -0
- package/dist/cli/evalCommand.js +720 -0
- package/dist/cli/exportAllCommand.js +1 -1
- package/dist/cli/hostClient.d.ts +60 -0
- package/dist/cli/hostClient.js +71 -0
- package/dist/cli/validateOutput.d.ts +2 -2
- package/dist/cli/validateOutput.js +2 -2
- package/dist/cli.js +10 -0
- package/dist/compaction/directives.d.ts +18 -0
- package/dist/compaction/directives.js +119 -0
- package/dist/compaction/extension.d.ts +20 -0
- package/dist/compaction/extension.js +78 -0
- package/dist/compaction/mask.d.ts +18 -0
- package/dist/compaction/mask.js +155 -0
- package/dist/compaction/pin.d.ts +21 -0
- package/dist/compaction/pin.js +270 -0
- package/dist/compaction/scrub.d.ts +7 -0
- package/dist/compaction/scrub.js +26 -0
- package/dist/compaction/sessionWiring.d.ts +22 -0
- package/dist/compaction/sessionWiring.js +26 -0
- package/dist/compaction/summarize.d.ts +79 -0
- package/dist/compaction/summarize.js +171 -0
- package/dist/compaction/toolPolicy.d.ts +3 -0
- package/dist/compaction/toolPolicy.js +33 -0
- package/dist/compaction/types.d.ts +45 -0
- package/dist/compaction/types.js +7 -0
- package/dist/compaction/workingState.d.ts +56 -0
- package/dist/compaction/workingState.js +198 -0
- package/dist/config/atomicWrite.d.ts +15 -0
- package/dist/config/atomicWrite.js +43 -0
- package/dist/config/browseCatalog.d.ts +2 -0
- package/dist/config/browseCatalog.js +4 -2
- package/dist/config/createPipeline.js +2 -0
- package/dist/config/createTrigger.js +7 -1
- package/dist/config/csv.d.ts +9 -0
- package/dist/config/csv.js +81 -0
- package/dist/config/datasetAgentCheck.d.ts +18 -0
- package/dist/config/datasetAgentCheck.js +109 -0
- package/dist/config/datasetCandidates.d.ts +22 -0
- package/dist/config/datasetCandidates.js +86 -0
- package/dist/config/datasetFromSessions.d.ts +34 -0
- package/dist/config/datasetFromSessions.js +105 -0
- package/dist/config/datasetHash.d.ts +1 -0
- package/dist/config/datasetHash.js +4 -0
- package/dist/config/datasetImport.d.ts +21 -0
- package/dist/config/datasetImport.js +120 -0
- package/dist/config/datasetStageCheck.d.ts +9 -0
- package/dist/config/datasetStageCheck.js +17 -0
- package/dist/config/datasetTypes.d.ts +27 -0
- package/dist/config/datasetTypes.js +1 -0
- package/dist/config/ensureCatalogScanRoot.d.ts +4 -1
- package/dist/config/ensureCatalogScanRoot.js +8 -6
- package/dist/config/evalCatalog.d.ts +22 -0
- package/dist/config/evalCatalog.js +95 -0
- package/dist/config/evalWriteRoots.d.ts +17 -0
- package/dist/config/evalWriteRoots.js +109 -0
- package/dist/config/githubTriggerAction.d.ts +8 -0
- package/dist/config/githubTriggerAction.js +29 -0
- package/dist/config/hostConfig.js +3 -0
- package/dist/config/installEvalSample.d.ts +34 -0
- package/dist/config/installEvalSample.js +182 -0
- package/dist/config/loadDataset.d.ts +16 -0
- package/dist/config/loadDataset.js +318 -0
- package/dist/config/loadEval.d.ts +32 -0
- package/dist/config/loadEval.js +1103 -0
- package/dist/config/loadOutcome.d.ts +5 -0
- package/dist/config/loadStageflowManifest.js +64 -0
- package/dist/config/pipelineNeeds.d.ts +2 -0
- package/dist/config/pipelineNeeds.js +16 -3
- package/dist/config/pipelineRoute.js +5 -4
- package/dist/config/resolveAgentTarget.d.ts +32 -0
- package/dist/config/resolveAgentTarget.js +118 -0
- package/dist/config/resolveEvalTarget.d.ts +21 -0
- package/dist/config/resolveEvalTarget.js +89 -0
- package/dist/config/scanCatalogPaths.d.ts +1 -1
- package/dist/config/scanCatalogPaths.js +17 -5
- package/dist/config/validateCatalog.d.ts +2 -2
- package/dist/config/validateCatalog.js +21 -1
- package/dist/config/validateEval.d.ts +36 -0
- package/dist/config/validateEval.js +446 -0
- package/dist/config/writeDataset.d.ts +54 -0
- package/dist/config/writeDataset.js +186 -0
- package/dist/config/writeEval.d.ts +25 -0
- package/dist/config/writeEval.js +398 -0
- package/dist/diagnostics/checks.js +1 -1
- package/dist/envelope/assertEmittedArtifacts.d.ts +12 -0
- package/dist/envelope/assertEmittedArtifacts.js +43 -0
- package/dist/envelope/preEmitChecks.d.ts +3 -0
- package/dist/evals/agentDiff.d.ts +13 -0
- package/dist/evals/agentDiff.js +11 -0
- package/dist/evals/canonical.d.ts +3 -0
- package/dist/evals/canonical.js +24 -0
- package/dist/evals/caseTask.d.ts +3 -0
- package/dist/evals/caseTask.js +9 -0
- package/dist/evals/compare.d.ts +94 -0
- package/dist/evals/compare.js +201 -0
- package/dist/evals/constants.d.ts +62 -0
- package/dist/evals/constants.js +97 -0
- package/dist/evals/engine/FakeEngine.d.ts +33 -0
- package/dist/evals/engine/FakeEngine.js +177 -0
- package/dist/evals/engine/index.d.ts +9 -0
- package/dist/evals/engine/index.js +19 -0
- package/dist/evals/engine/promptfoo/PromptfooEngine.d.ts +52 -0
- package/dist/evals/engine/promptfoo/PromptfooEngine.js +312 -0
- package/dist/evals/engine/promptfoo/errors.d.ts +5 -0
- package/dist/evals/engine/promptfoo/errors.js +8 -0
- package/dist/evals/engine/promptfoo/generate.d.ts +30 -0
- package/dist/evals/engine/promptfoo/generate.js +345 -0
- package/dist/evals/engine/promptfoo/guard.d.ts +10 -0
- package/dist/evals/engine/promptfoo/guard.js +116 -0
- package/dist/evals/engine/promptfoo/install.d.ts +17 -0
- package/dist/evals/engine/promptfoo/install.js +73 -0
- package/dist/evals/engine/promptfoo/judgeProviders.d.ts +2 -0
- package/dist/evals/engine/promptfoo/judgeProviders.js +9 -0
- package/dist/evals/engine/promptfoo/judgeServices.d.ts +6 -0
- package/dist/evals/engine/promptfoo/judgeServices.js +41 -0
- package/dist/evals/engine/promptfoo/locate.d.ts +21 -0
- package/dist/evals/engine/promptfoo/locate.js +68 -0
- package/dist/evals/engine/promptfoo/nodeVersion.d.ts +7 -0
- package/dist/evals/engine/promptfoo/nodeVersion.js +14 -0
- package/dist/evals/engine/promptfoo/normalize.d.ts +66 -0
- package/dist/evals/engine/promptfoo/normalize.js +261 -0
- package/dist/evals/engine/promptfoo/pinned.d.ts +5 -0
- package/dist/evals/engine/promptfoo/pinned.js +5 -0
- package/dist/evals/engine/promptfoo/rubricPrompt.d.ts +14 -0
- package/dist/evals/engine/promptfoo/rubricPrompt.js +105 -0
- package/dist/evals/engine/promptfoo/runTokens.d.ts +18 -0
- package/dist/evals/engine/promptfoo/runTokens.js +31 -0
- package/dist/evals/engine/promptfoo/status.d.ts +13 -0
- package/dist/evals/engine/promptfoo/status.js +16 -0
- package/dist/evals/estimate.d.ts +56 -0
- package/dist/evals/estimate.js +66 -0
- package/dist/evals/graders/codeGrader.d.ts +6 -0
- package/dist/evals/graders/codeGrader.js +85 -0
- package/dist/evals/graders/conversationCheckGrader.d.ts +6 -0
- package/dist/evals/graders/conversationCheckGrader.js +62 -0
- package/dist/evals/graders/fieldGrader.d.ts +11 -0
- package/dist/evals/graders/fieldGrader.js +117 -0
- package/dist/evals/graders/goal.d.ts +3 -0
- package/dist/evals/graders/goal.js +14 -0
- package/dist/evals/graders/index.d.ts +18 -0
- package/dist/evals/graders/index.js +34 -0
- package/dist/evals/graders/notApplicable.d.ts +5 -0
- package/dist/evals/graders/notApplicable.js +9 -0
- package/dist/evals/graders/path.d.ts +26 -0
- package/dist/evals/graders/path.js +75 -0
- package/dist/evals/graders/referenceGrader.d.ts +5 -0
- package/dist/evals/graders/referenceGrader.js +59 -0
- package/dist/evals/graders/schemaGrader.d.ts +5 -0
- package/dist/evals/graders/schemaGrader.js +29 -0
- package/dist/evals/graders/subject.d.ts +6 -0
- package/dist/evals/graders/subject.js +33 -0
- package/dist/evals/graders/toolCallsGrader.d.ts +6 -0
- package/dist/evals/graders/toolCallsGrader.js +100 -0
- package/dist/evals/graders/transcript.d.ts +12 -0
- package/dist/evals/graders/transcript.js +57 -0
- package/dist/evals/graders/types.d.ts +20 -0
- package/dist/evals/graders/types.js +1 -0
- package/dist/evals/judgeProviders.d.ts +16 -0
- package/dist/evals/judgeProviders.js +27 -0
- package/dist/evals/lineDiff.d.ts +5 -0
- package/dist/evals/lineDiff.js +34 -0
- package/dist/evals/listStatus.d.ts +31 -0
- package/dist/evals/listStatus.js +48 -0
- package/dist/evals/manager.d.ts +187 -0
- package/dist/evals/manager.js +795 -0
- package/dist/evals/plan.d.ts +65 -0
- package/dist/evals/plan.js +621 -0
- package/dist/evals/planInternalAgent.d.ts +19 -0
- package/dist/evals/planInternalAgent.js +205 -0
- package/dist/evals/providerKeys.d.ts +1 -0
- package/dist/evals/providerKeys.js +21 -0
- package/dist/evals/read/agentTargets.d.ts +37 -0
- package/dist/evals/read/agentTargets.js +101 -0
- package/dist/evals/read/api.d.ts +208 -0
- package/dist/evals/read/api.js +363 -0
- package/dist/evals/read/compare.d.ts +4 -0
- package/dist/evals/read/compare.js +39 -0
- package/dist/evals/read/datasets.d.ts +105 -0
- package/dist/evals/read/datasets.js +318 -0
- package/dist/evals/read/list.d.ts +66 -0
- package/dist/evals/read/list.js +182 -0
- package/dist/evals/read/results.d.ts +46 -0
- package/dist/evals/read/results.js +107 -0
- package/dist/evals/read/runs.d.ts +154 -0
- package/dist/evals/read/runs.js +295 -0
- package/dist/evals/read/suggestions.d.ts +43 -0
- package/dist/evals/read/suggestions.js +73 -0
- package/dist/evals/runner/FakeAgentBackend.d.ts +40 -0
- package/dist/evals/runner/FakeAgentBackend.js +82 -0
- package/dist/evals/runner/agentCaseRunner.d.ts +24 -0
- package/dist/evals/runner/agentCaseRunner.js +388 -0
- package/dist/evals/runner/caseRunner.d.ts +8 -0
- package/dist/evals/runner/caseRunner.js +28 -0
- package/dist/evals/runner/conversationSubject.d.ts +18 -0
- package/dist/evals/runner/conversationSubject.js +123 -0
- package/dist/evals/runner/internalAgentCaseRunner.d.ts +6 -0
- package/dist/evals/runner/internalAgentCaseRunner.js +250 -0
- package/dist/evals/runner/simulatorModel.d.ts +51 -0
- package/dist/evals/runner/simulatorModel.js +58 -0
- package/dist/evals/runner/simulatorPrompt.d.ts +29 -0
- package/dist/evals/runner/simulatorPrompt.js +59 -0
- package/dist/evals/runner/stageCaseRunner.d.ts +30 -0
- package/dist/evals/runner/stageCaseRunner.js +279 -0
- package/dist/evals/runner/userDriver.d.ts +71 -0
- package/dist/evals/runner/userDriver.js +104 -0
- package/dist/evals/scoring.d.ts +34 -0
- package/dist/evals/scoring.js +67 -0
- package/dist/evals/snapshot.d.ts +191 -0
- package/dist/evals/snapshot.js +70 -0
- package/dist/evals/stageDiff.d.ts +8 -0
- package/dist/evals/stageDiff.js +48 -0
- package/dist/evals/stats.d.ts +95 -0
- package/dist/evals/stats.js +220 -0
- package/dist/evals/statsAdapter.d.ts +4 -0
- package/dist/evals/statsAdapter.js +30 -0
- package/dist/evals/statsTypes.d.ts +51 -0
- package/dist/evals/statsTypes.js +18 -0
- package/dist/evals/storeError.d.ts +5 -0
- package/dist/evals/storeError.js +8 -0
- package/dist/evals/storeTypes.d.ts +207 -0
- package/dist/evals/storeTypes.js +1 -0
- package/dist/evals/tTable.d.ts +3 -0
- package/dist/evals/tTable.js +15 -0
- package/dist/evals/triage/constants.d.ts +26 -0
- package/dist/evals/triage/constants.js +33 -0
- package/dist/evals/triage/credentials.d.ts +13 -0
- package/dist/evals/triage/credentials.js +20 -0
- package/dist/evals/triage/jevClassifier.d.ts +14 -0
- package/dist/evals/triage/jevClassifier.js +124 -0
- package/dist/evals/triage/judgeClassifier.d.ts +10 -0
- package/dist/evals/triage/judgeClassifier.js +76 -0
- package/dist/evals/triage/prompts.d.ts +16 -0
- package/dist/evals/triage/prompts.js +64 -0
- package/dist/evals/triage/service.d.ts +79 -0
- package/dist/evals/triage/service.js +217 -0
- package/dist/evals/triage/stateBuilder.d.ts +19 -0
- package/dist/evals/triage/stateBuilder.js +125 -0
- package/dist/evals/triage/types.d.ts +60 -0
- package/dist/evals/triage/types.js +8 -0
- package/dist/evals/types.d.ts +357 -0
- package/dist/evals/types.js +4 -0
- package/dist/guide/cardContract.d.ts +133 -0
- package/dist/guide/cardContract.js +156 -0
- package/dist/guide/chat.d.ts +45 -0
- package/dist/guide/chat.js +378 -0
- package/dist/guide/knowledge/index.d.ts +14 -0
- package/dist/guide/knowledge/index.js +109 -0
- package/dist/guide/knowledge/topics/agents.d.ts +2 -0
- package/dist/guide/knowledge/topics/agents.js +58 -0
- package/dist/guide/knowledge/topics/bestPractices.d.ts +2 -0
- package/dist/guide/knowledge/topics/bestPractices.js +67 -0
- package/dist/guide/knowledge/topics/connections.d.ts +2 -0
- package/dist/guide/knowledge/topics/connections.js +66 -0
- package/dist/guide/knowledge/topics/consoleMap.d.ts +2 -0
- package/dist/guide/knowledge/topics/consoleMap.js +55 -0
- package/dist/guide/knowledge/topics/evals.d.ts +2 -0
- package/dist/guide/knowledge/topics/evals.js +72 -0
- package/dist/guide/knowledge/topics/limitations.d.ts +2 -0
- package/dist/guide/knowledge/topics/limitations.js +84 -0
- package/dist/guide/knowledge/topics/mcpSkillsBrowser.d.ts +2 -0
- package/dist/guide/knowledge/topics/mcpSkillsBrowser.js +57 -0
- package/dist/guide/knowledge/topics/memories.d.ts +2 -0
- package/dist/guide/knowledge/topics/memories.js +63 -0
- package/dist/guide/knowledge/topics/modelsAndProviders.d.ts +2 -0
- package/dist/guide/knowledge/topics/modelsAndProviders.js +56 -0
- package/dist/guide/knowledge/topics/overview.d.ts +2 -0
- package/dist/guide/knowledge/topics/overview.js +56 -0
- package/dist/guide/knowledge/topics/pipelines.d.ts +2 -0
- package/dist/guide/knowledge/topics/pipelines.js +93 -0
- package/dist/guide/knowledge/topics/stages.d.ts +2 -0
- package/dist/guide/knowledge/topics/stages.js +54 -0
- package/dist/guide/knowledge/topics/tasks.d.ts +2 -0
- package/dist/guide/knowledge/topics/tasks.js +52 -0
- package/dist/guide/knowledge/topics/triggers.d.ts +2 -0
- package/dist/guide/knowledge/topics/triggers.js +68 -0
- package/dist/guide/knowledge/topics/troubleshooting.d.ts +2 -0
- package/dist/guide/knowledge/topics/troubleshooting.js +85 -0
- package/dist/guide/knowledgeTools.d.ts +2 -0
- package/dist/guide/knowledgeTools.js +56 -0
- package/dist/guide/showUi.d.ts +6 -0
- package/dist/guide/showUi.js +546 -0
- package/dist/guide/threadStore.d.ts +48 -0
- package/dist/guide/threadStore.js +189 -0
- package/dist/guide/writeRoot.d.ts +11 -0
- package/dist/guide/writeRoot.js +70 -0
- package/dist/hosted/translate.js +2 -0
- package/dist/mcp/agentTools.js +12 -0
- package/dist/mcp/catalogTools.js +18 -20
- package/dist/mcp/catalogWriteTools.d.ts +8 -0
- package/dist/mcp/catalogWriteTools.js +225 -0
- package/dist/mcp/connectionTools.d.ts +3 -0
- package/dist/mcp/connectionTools.js +85 -0
- package/dist/mcp/controlTools.js +34 -1
- package/dist/mcp/deps.d.ts +16 -0
- package/dist/mcp/evalTools.d.ts +3 -0
- package/dist/mcp/evalTools.js +943 -0
- package/dist/mcp/memoryHostTools.d.ts +3 -0
- package/dist/mcp/memoryHostTools.js +72 -0
- package/dist/mcp/pipelineAuthorTools.js +14 -1
- package/dist/mcp/server.js +6 -0
- package/dist/mcp/tools.js +8 -0
- package/dist/mcp/triggerTools.js +77 -31
- package/dist/models/response.d.ts +7 -2
- package/dist/models/response.js +6 -1
- package/dist/operatorAgent/agentAuthorContext.d.ts +1 -1
- package/dist/operatorAgent/agentAuthorContext.js +1 -1
- package/dist/operatorAgent/evalGate.d.ts +22 -0
- package/dist/operatorAgent/evalGate.js +77 -0
- package/dist/operatorAgent/fakeHost.js +10 -2
- package/dist/operatorAgent/host.js +18 -2
- package/dist/operatorAgent/index.d.ts +1 -0
- package/dist/operatorAgent/index.js +1 -0
- package/dist/operatorAgent/internalAgents.d.ts +11 -0
- package/dist/operatorAgent/internalAgents.js +13 -0
- package/dist/operatorAgent/piModel.d.ts +5 -1
- package/dist/operatorAgent/piModel.js +32 -14
- package/dist/operatorAgent/profiles/agentAuthor.d.ts +3 -1
- package/dist/operatorAgent/profiles/agentAuthor.js +201 -32
- package/dist/operatorAgent/profiles/agentAuthorPlaybook.d.ts +1 -1
- package/dist/operatorAgent/profiles/agentAuthorPlaybook.js +48 -15
- package/dist/operatorAgent/profiles/authorReadable.d.ts +2 -0
- package/dist/operatorAgent/profiles/authorReadable.js +26 -0
- package/dist/operatorAgent/profiles/guideConfirm.d.ts +21 -0
- package/dist/operatorAgent/profiles/guideConfirm.js +100 -0
- package/dist/operatorAgent/profiles/guideTools.d.ts +7 -0
- package/dist/operatorAgent/profiles/guideTools.js +123 -0
- package/dist/operatorAgent/profiles/stageflowGuide.d.ts +7 -0
- package/dist/operatorAgent/profiles/stageflowGuide.js +132 -0
- package/dist/operatorAgent/profiles/workshopAuthor.js +23 -0
- package/dist/operatorAgent/profiles/workshopAuthorPlaybook.d.ts +1 -1
- package/dist/operatorAgent/profiles/workshopAuthorPlaybook.js +9 -1
- package/dist/operatorAgent/profiles/workshopAuthorTools.d.ts +2 -0
- package/dist/operatorAgent/profiles/workshopAuthorTools.js +197 -9
- package/dist/operatorAgent/types.d.ts +23 -0
- package/dist/package-meta.d.ts +1 -1
- package/dist/package-meta.js +1 -1
- package/dist/runstore/port.d.ts +43 -0
- package/dist/runstore/retention.d.ts +2 -1
- package/dist/runstore/retention.js +3 -7
- package/dist/runstore/runStatusClock.d.ts +17 -0
- package/dist/runstore/runStatusClock.js +19 -0
- package/dist/runstore/sqlite/SqliteRunStore.d.ts +29 -0
- package/dist/runstore/sqlite/SqliteRunStore.js +144 -50
- package/dist/runstore/sqlite/evalStore.d.ts +20 -0
- package/dist/runstore/sqlite/evalStore.js +541 -0
- package/dist/runstore/sqlite/migrations/015-evals.d.ts +12 -0
- package/dist/runstore/sqlite/migrations/015-evals.js +157 -0
- package/dist/runstore/sqlite/migrations/016-eval-subject-ref.d.ts +12 -0
- package/dist/runstore/sqlite/migrations/016-eval-subject-ref.js +20 -0
- package/dist/runstore/sqlite/migrations/017-eval-result-suggestions.d.ts +11 -0
- package/dist/runstore/sqlite/migrations/017-eval-result-suggestions.js +36 -0
- package/dist/runstore/sqlite/migrations/index.js +6 -0
- package/dist/runstore/sqlite/suggestionStore.d.ts +14 -0
- package/dist/runstore/sqlite/suggestionStore.js +132 -0
- package/dist/runstore/workspaceLayout.js +6 -1
- package/dist/runtime/artifactDiskInspect.d.ts +14 -0
- package/dist/runtime/artifactDiskInspect.js +52 -0
- package/dist/runtime/artifactPath.d.ts +24 -0
- package/dist/runtime/artifactPath.js +84 -0
- package/dist/runtime/completionCheckRunner.js +15 -43
- package/dist/runtime/githubPollSource.d.ts +22 -4
- package/dist/runtime/githubPollSource.js +93 -8
- package/dist/runtime/pipelineRunner.d.ts +2 -1
- package/dist/runtime/pipelineRunner.js +2 -0
- package/dist/runtime/priorArtifactGrants.d.ts +8 -0
- package/dist/runtime/priorArtifactGrants.js +105 -0
- package/dist/runtime/runActionEligibility.d.ts +46 -0
- package/dist/runtime/runActionEligibility.js +123 -0
- package/dist/runtime/runManager.d.ts +6 -2
- package/dist/runtime/runManager.js +60 -16
- package/dist/runtime/runRetentionSweep.js +2 -2
- package/dist/runtime/runRetryCoordinator.d.ts +2 -14
- package/dist/runtime/runRetryCoordinator.js +3 -67
- package/dist/runtime/sandboxContainer.d.ts +7 -0
- package/dist/runtime/sandboxContainer.js +48 -6
- package/dist/runtime/sandboxDesk.d.ts +2 -1
- package/dist/runtime/sandboxDesk.js +11 -12
- package/dist/runtime/stageEnvironment.js +1 -0
- package/dist/runtime/stageRoots.d.ts +12 -0
- package/dist/runtime/stageSandbox.d.ts +2 -1
- package/dist/runtime/stageSandbox.js +18 -2
- package/dist/runtime/stageWorker.js +20 -0
- package/dist/server/agentAuthorRoutes.js +59 -1
- package/dist/server/bootstrap.d.ts +13 -0
- package/dist/server/bootstrap.js +69 -0
- package/dist/server/controlToken.js +3 -0
- package/dist/server/evalInternalRoutes.d.ts +14 -0
- package/dist/server/evalInternalRoutes.js +87 -0
- package/dist/server/evalRouteContext.d.ts +46 -0
- package/dist/server/evalRouteContext.js +43 -0
- package/dist/server/evalRoutes.d.ts +5 -0
- package/dist/server/evalRoutes.js +1456 -0
- package/dist/server/evalTriageRoutes.d.ts +2 -0
- package/dist/server/evalTriageRoutes.js +95 -0
- package/dist/server/guideRoutes.d.ts +5 -0
- package/dist/server/guideRoutes.js +166 -0
- package/dist/server/http.d.ts +15 -0
- package/dist/server/http.js +67 -3
- package/dist/server/internalAgentRoutes.d.ts +6 -0
- package/dist/server/internalAgentRoutes.js +12 -0
- package/dist/server/mcpHost.js +5 -0
- package/dist/toolkit/meta.d.ts +1 -1
- package/dist/toolkit/meta.js +53 -0
- package/dist/toolkit/profiles.d.ts +5 -0
- package/dist/toolkit/profiles.js +13 -1
- package/dist/tools/askOperator.js +2 -1
- package/dist/tools/emitStageEnvelope.d.ts +17 -16
- package/dist/tools/emitStageEnvelope.js +46 -32
- package/dist/tools/stageToolNames.d.ts +4 -0
- package/dist/tools/stageToolNames.js +4 -0
- package/dist/tools/workingState.d.ts +40 -0
- package/dist/tools/workingState.js +108 -0
- package/dist/tools/writeStageArtifact.d.ts +0 -9
- package/dist/tools/writeStageArtifact.js +2 -1
- package/dist/types/stageflowManifest.d.ts +6 -0
- package/dist/ui/assets/{MarkdownText-D7tYaIFO.js → MarkdownText-S5C_vemc.js} +2 -2
- package/dist/ui/assets/adapters-C0l4ruiR.js +17 -0
- package/dist/ui/assets/chat-CjnsmvqR.js +2 -0
- package/dist/ui/assets/chat-DFDd4UjS.css +2 -0
- package/dist/ui/assets/{main-BFo79krC.css → main-Del1GeLf.css} +1 -1
- package/dist/ui/assets/main-_yXVqcW9.js +277 -0
- package/dist/ui/chat.html +3 -4
- package/dist/ui/index.html +3 -4
- package/dist/workshop/chatTurn.js +1 -1
- package/dist/workshop/workshopPin.d.ts +3 -3
- package/dist/workshop/workshopPin.js +16 -15
- package/examples/README.md +2 -0
- package/examples/compaction-stress/README.md +30 -0
- package/examples/compaction-stress/check-run.mjs +53 -0
- package/examples/compaction-stress/collect-evidence.yaml +60 -0
- package/examples/compaction-stress/compaction-stress.pipeline.yaml +141 -0
- package/examples/compaction-stress/compaction-stress.task.yaml +15 -0
- package/examples/compaction-stress/generate-evidence.mjs +110 -0
- package/examples/compaction-stress/root-cause.yaml +26 -0
- package/examples/compaction-stress/stageflow.yaml +9 -0
- package/examples/compaction-stress/write-postmortem.yaml +40 -0
- package/examples/document-policy-review/README.md +35 -0
- package/examples/document-policy-review/agents/compliance.agent.yaml +42 -0
- package/examples/document-policy-review/documents/acme-vendor-sow.md +15 -0
- package/examples/document-policy-review/documents/support-runbook.md +13 -0
- package/examples/document-policy-review/policies/acceptable-use.md +13 -0
- package/examples/document-policy-review/policies/data-handling.md +17 -0
- package/examples/document-policy-review/policies/vendor-security.md +17 -0
- package/examples/evals/README.md +141 -0
- package/examples/evals/critique-sample.dataset.jsonl +8 -0
- package/examples/evals/critique-sample.eval.yaml +34 -0
- package/examples/evals/critique-sample.task.yaml +4 -0
- package/examples/evals/eval-sample.pipeline.yaml +35 -0
- package/examples/evals/guide-behavior.dataset.jsonl +15 -0
- package/examples/evals/guide-behavior.eval.yaml +35 -0
- package/examples/evals/guide-depth.dataset.jsonl +35 -0
- package/examples/evals/guide-depth.eval.yaml +169 -0
- package/examples/evals/support-sample.agent.yaml +20 -0
- package/examples/evals/support-sample.dataset.jsonl +6 -0
- package/examples/evals/support-sample.eval.yaml +38 -0
- package/examples/memory/evals/guide-behavior.dataset.jsonl +15 -0
- package/examples/memory/evals/guide-behavior.eval.yaml +35 -0
- package/examples/memory/evals/guide-depth.dataset.jsonl +35 -0
- package/examples/memory/evals/guide-depth.eval.yaml +169 -0
- package/examples/stageflow.yaml +6 -0
- package/package.json +1 -1
- package/skills/stageflow/SKILL.md +5 -2
- package/skills/stageflow/references/control-surface.md +4 -2
- package/skills/stageflow/references/evals.md +68 -0
- package/skills/stageflow-author/SKILL.md +4 -0
- package/skills/stageflow-run/SKILL.md +4 -0
- package/dist/ui/assets/AssistantRuntimeProvider-CsiPFhCT.js +0 -9
- package/dist/ui/assets/ReadonlyStore-BfXqHykm.js +0 -6
- package/dist/ui/assets/chat-BbLukq9W.js +0 -5
- package/dist/ui/assets/chat-zIZU_bP1.css +0 -2
- package/dist/ui/assets/main-CijYMeM0.js +0 -259
package/README.md
CHANGED
|
@@ -10,6 +10,15 @@ Open-source runtime for **configurable multi-stage agent workflows** with typed
|
|
|
10
10
|
[](https://github.com/tejasghutukade/stageflow/issues)
|
|
11
11
|
[](https://github.com/tejasghutukade/stageflow/actions/workflows/ci.yml)
|
|
12
12
|
|
|
13
|
+
<p align="center">
|
|
14
|
+
<a href="https://github.com/tejasghutukade/stageflow/releases/download/media/stageflow-demo.mp4"><img src="https://github.com/tejasghutukade/stageflow/releases/download/media/stageflow-demo.gif" alt="Stageflow demo: a pipeline runs, pauses at a human gate, resumes, and finishes in the operator console" width="800"></a>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
<p align="center">
|
|
18
|
+
<a href="https://github.com/tejasghutukade/stageflow/releases/download/media/stageflow-demo.mp4">Watch the 76s demo (MP4)</a> ·
|
|
19
|
+
<a href="https://github.com/tejasghutukade/stageflow/releases/download/media/stageflow-demo-long.mp4">Full walkthrough (3 min)</a>
|
|
20
|
+
</p>
|
|
21
|
+
|
|
13
22
|
Author pipeline-owned YAML in your project. Stageflow schedules each stage in a fresh agent session, moves context through explicit envelopes and artifacts, and persists run state under `.stageflow/`. [Pi](https://github.com/badlogic/pi-mono) is the current agent execution backend. Bins: **`sf`** and **`stageflow`**.
|
|
14
23
|
|
|
15
24
|
## Why Stageflow?
|
|
@@ -35,6 +44,7 @@ The same pipeline runs three ways without rewriting anything:
|
|
|
35
44
|
- **Verified stage execution** — after-phase `verify` checks with durable evidence, plus `on_verify_fail` repair or manual operator recovery ([guide](docs/verified-stage-execution.md))
|
|
36
45
|
- **HITL gates** — operator questions in the console; CI exits `2` when a run is waiting
|
|
37
46
|
- **Agents** — project-owned, revisioned agents (`agents/*.agent.yaml`) with granted tools, ask-first approvals, traces, channels, schedules and a public web chat page ([guide](docs/agents.md))
|
|
47
|
+
- **Evals** — check a stage or an agent against a dataset: graders, repeats, honest statistics, compare two runs, and sort failures into what to fix ([guide](docs/evals.md))
|
|
38
48
|
- **Operator console** — an Inbox for gates and agent approvals, pipeline runs, agents and their sessions, connections, MCP servers and settings at `http://127.0.0.1:3847` ([guide](docs/operator-console.md))
|
|
39
49
|
- **MCP endpoint** — Streamable HTTP at `/mcp` when `sf ui` or `sf mcp` is running
|
|
40
50
|
- **MCP servers for agents and stages** — add servers, secrets and OAuth sign-in from Settings → Project MCP, or in the project `.mcp.json` ([guide](docs/mcp-servers.md))
|
|
@@ -57,14 +67,14 @@ See [Architecture](docs/architecture.md) for component boundaries, execution flo
|
|
|
57
67
|
|
|
58
68
|
### Docker (recommended)
|
|
59
69
|
|
|
60
|
-
Run Stageflow from the published image. It is [`ghcr.io/tejasghutukade/stageflow`](https://github.com/tejasghutukade/stageflow/pkgs/container/stageflow). `0.
|
|
70
|
+
Run Stageflow from the published image. It is [`ghcr.io/tejasghutukade/stageflow`](https://github.com/tejasghutukade/stageflow/pkgs/container/stageflow). `0.42` is the current minor tag (`0.42.0` is that exact release).
|
|
61
71
|
|
|
62
72
|
```bash
|
|
63
73
|
docker run --rm --name stageflow \
|
|
64
74
|
-e STAGEFLOW_ALLOW_UNAUTHENTICATED_BIND=1 \
|
|
65
75
|
-p 127.0.0.1:3847:3847 \
|
|
66
76
|
-v stageflow-data:/data \
|
|
67
|
-
ghcr.io/tejasghutukade/stageflow:0.
|
|
77
|
+
ghcr.io/tejasghutukade/stageflow:0.42 \
|
|
68
78
|
sf ui
|
|
69
79
|
```
|
|
70
80
|
|
|
@@ -81,7 +91,7 @@ docker run --rm --name stageflow \
|
|
|
81
91
|
-p 127.0.0.1:3847:3847 \
|
|
82
92
|
-v stageflow-data:/data \
|
|
83
93
|
-v "$PWD":/project \
|
|
84
|
-
ghcr.io/tejasghutukade/stageflow:0.
|
|
94
|
+
ghcr.io/tejasghutukade/stageflow:0.42 \
|
|
85
95
|
sf ui
|
|
86
96
|
```
|
|
87
97
|
|
|
@@ -288,7 +298,7 @@ Full docs: **[tejasghutukade.github.io/stageflow](https://tejasghutukade.github.
|
|
|
288
298
|
| [docs/hosted.md](docs/hosted.md) | Embed Stageflow from another application and receive ordered run events |
|
|
289
299
|
| [docs/quickstart.md](docs/quickstart.md) | Expanded quick start |
|
|
290
300
|
| [docs/yaml-catalog.md](docs/yaml-catalog.md) | Pipelines, stages, tasks schema |
|
|
291
|
-
| [docs/cli-reference.md](docs/cli-reference.md) | `sf init`, `sf run`, `sf run-stage`, `sf graph`, `sf validate`, `sf ui`, `sf mcp`, `sf envelope`, `sf export-run`, `sf artifact`, `sf skills`, `sf providers` |
|
|
301
|
+
| [docs/cli-reference.md](docs/cli-reference.md) | `sf init`, `sf run`, `sf run-stage`, `sf graph`, `sf validate`, `sf ui`, `sf mcp`, `sf envelope`, `sf export-run`, `sf artifact`, `sf skills`, `sf providers`, `sf eval` |
|
|
292
302
|
| [docs/envelopes.md](docs/envelopes.md) | Handoff envelope contract |
|
|
293
303
|
| [docs/verified-stage-execution.md](docs/verified-stage-execution.md) | After-phase `verify`, evidence, and `on_verify_fail` repair / manual recovery |
|
|
294
304
|
| [docs/hitl.md](docs/hitl.md) | Gate kinds, `--skip-gates`, exit code `2` |
|
|
@@ -298,6 +308,7 @@ Full docs: **[tejasghutukade.github.io/stageflow](https://tejasghutukade.github.
|
|
|
298
308
|
| [docs/providers.md](docs/providers.md) | Pi providers, `sf providers` |
|
|
299
309
|
| [docs/docker.md](docs/docker.md) | Docker Compose local try, image pull/run, backup, self-hosting |
|
|
300
310
|
| [docs/operator-console.md](docs/operator-console.md) | Console navigation, command palette, shortcuts and routes; one page per area ([Inbox](docs/console-inbox.md), [Runs](docs/console-runs.md), [Agents](docs/console-agents.md), [Connections](docs/console-connections.md), [Settings](docs/console-settings.md)) |
|
|
311
|
+
| [docs/evals.md](docs/evals.md) | Evals for stages and agents: datasets, graders, runs, compare, failure sorting, the engine |
|
|
301
312
|
| [docs/agents.md](docs/agents.md) | Agents: definition, runtime, approvals, channels, schedules, web chat |
|
|
302
313
|
| [docs/mcp-servers.md](docs/mcp-servers.md) | Add MCP servers, secrets and OAuth; use them from agents and stages |
|
|
303
314
|
| [docs/channels.md](docs/channels.md) | Connections and communication channels |
|
package/dist/agent/activity.d.ts
CHANGED
|
@@ -43,6 +43,24 @@ export type StageActivityEvent = {
|
|
|
43
43
|
event: "message";
|
|
44
44
|
role: string;
|
|
45
45
|
text?: string;
|
|
46
|
+
} | {
|
|
47
|
+
event: "context_usage";
|
|
48
|
+
/** Estimated tokens in the model's context after the latest response. */
|
|
49
|
+
tokens: number;
|
|
50
|
+
contextWindow: number;
|
|
51
|
+
/** Whole-number share of the window, 0-100. */
|
|
52
|
+
percent: number;
|
|
53
|
+
} | {
|
|
54
|
+
event: "context_compacted";
|
|
55
|
+
reason: "manual" | "threshold" | "overflow";
|
|
56
|
+
tokensBefore: number;
|
|
57
|
+
/** Best estimate after compaction; null if unknown. */
|
|
58
|
+
tokensAfter: number | null;
|
|
59
|
+
summaryChars: number;
|
|
60
|
+
costUsd: number;
|
|
61
|
+
willRetry: boolean;
|
|
62
|
+
aborted: boolean;
|
|
63
|
+
error?: string;
|
|
46
64
|
} | {
|
|
47
65
|
event: "operator_prompt";
|
|
48
66
|
prompt: AskOperatorPrompt;
|
|
@@ -225,7 +225,13 @@ async function runTurn(input, model, markerPath, promptText, resumeSessionId, us
|
|
|
225
225
|
preEmitCheckOptions: {
|
|
226
226
|
checks: input.stage.pre_emit_checks,
|
|
227
227
|
readQaTrail: input.readQaTrail,
|
|
228
|
+
artifactPresence: {
|
|
229
|
+
runWorkspaceDir: input.roots.runWorkspaceDir,
|
|
230
|
+
stageId: runtimeStageId(input),
|
|
231
|
+
attempt: input.roots.attempt ?? 1,
|
|
232
|
+
},
|
|
228
233
|
},
|
|
234
|
+
feedbackLoopEmitContext: input.feedbackLoopEmitContext,
|
|
229
235
|
writeStageArtifact: {
|
|
230
236
|
runWorkspaceDir: input.roots.runWorkspaceDir,
|
|
231
237
|
stageId: runtimeStageId(input),
|
|
@@ -255,6 +261,7 @@ async function runTurn(input, model, markerPath, promptText, resumeSessionId, us
|
|
|
255
261
|
model,
|
|
256
262
|
systemPrompt: { type: "custom", prompt: input.stage.system_prompt },
|
|
257
263
|
settingSources: [],
|
|
264
|
+
settings: { autoCompactEnabled: true },
|
|
258
265
|
tools: CLAUDE_BUILTIN_TOOLS,
|
|
259
266
|
mcpServers: { [STAGEFLOW_MCP_SERVER_NAME]: mcpServer, ...passedServers },
|
|
260
267
|
permissionMode: "bypassPermissions",
|
|
@@ -30,6 +30,7 @@ import { type EmitCapture } from "../tools/emitStageEnvelope.js";
|
|
|
30
30
|
import { type WriteStageArtifactOptions } from "../tools/writeStageArtifact.js";
|
|
31
31
|
import { type AskOperatorKind, type AskOperatorPrompt } from "../tools/askOperator.js";
|
|
32
32
|
import type { CloneEmitContext, ForkEmitContext } from "../types/forkChoice.js";
|
|
33
|
+
import type { FeedbackLoopConfig } from "../types/pipeline.js";
|
|
33
34
|
import type { PreEmitCheckOptions } from "../envelope/preEmitChecks.js";
|
|
34
35
|
import { execInSandboxContainer as defaultExecInSandboxContainer } from "../runtime/sandboxContainer.js";
|
|
35
36
|
export declare const STAGEFLOW_MCP_SERVER_NAME = "stageflow";
|
|
@@ -43,35 +44,42 @@ export declare const SANDBOX_EDIT_TOOL_NAME = "mcp__stageflow__sandbox_edit";
|
|
|
43
44
|
export type AskOperatorCapture = {
|
|
44
45
|
prompt?: AskOperatorPrompt;
|
|
45
46
|
};
|
|
46
|
-
/**
|
|
47
|
-
* Exported so a parity test can assert this stays field-for-field aligned
|
|
48
|
-
* with `tools/emitStageEnvelope.ts`'s typebox schema — the two are hand
|
|
49
|
-
* written against the same envelope shape with no shared source, so
|
|
50
|
-
* nothing else catches one drifting from the other.
|
|
51
|
-
*
|
|
52
|
-
* Field presence mirrors the typebox schema's own conditionality:
|
|
53
|
-
* `fork_choice` is required (not just present) when the stage has a fork
|
|
54
|
-
* to route.
|
|
55
|
-
*/
|
|
56
47
|
export declare function buildEmitStageEnvelopeShape(options: {
|
|
57
48
|
forkEmitContext?: ForkEmitContext;
|
|
58
49
|
cloneEmitContext?: CloneEmitContext;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
success: "success";
|
|
63
|
-
}>;
|
|
50
|
+
payloadSchema?: unknown;
|
|
51
|
+
feedbackLoopEmitContext?: FeedbackLoopConfig;
|
|
52
|
+
}): z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
64
53
|
summary: z.ZodString;
|
|
65
54
|
artifacts: z.ZodArray<z.ZodString>;
|
|
66
|
-
|
|
55
|
+
checklist_attestations: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
56
|
+
check_id: z.ZodString;
|
|
57
|
+
items: z.ZodArray<z.ZodString>;
|
|
58
|
+
}, z.core.$strict>>>;
|
|
59
|
+
stage_id: z.ZodOptional<z.ZodString>;
|
|
60
|
+
notes: z.ZodOptional<z.ZodString>;
|
|
61
|
+
status: z.ZodLiteral<"success">;
|
|
62
|
+
payload: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
67
63
|
fork_choice: z.ZodArray<z.ZodString> | z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
64
|
+
feedback_loop?: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
65
|
+
action: z.ZodLiteral<"continue">;
|
|
66
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
67
|
+
action: z.ZodLiteral<"send_back">;
|
|
68
|
+
target: z.ZodLiteral<string>;
|
|
69
|
+
}, z.core.$strict>], "action"> | undefined;
|
|
70
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
71
|
+
summary: z.ZodString;
|
|
72
|
+
artifacts: z.ZodArray<z.ZodString>;
|
|
68
73
|
checklist_attestations: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
69
74
|
check_id: z.ZodString;
|
|
70
75
|
items: z.ZodArray<z.ZodString>;
|
|
71
|
-
}, z.core.$
|
|
76
|
+
}, z.core.$strict>>>;
|
|
72
77
|
stage_id: z.ZodOptional<z.ZodString>;
|
|
73
78
|
notes: z.ZodOptional<z.ZodString>;
|
|
74
|
-
|
|
79
|
+
fork_choice: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
80
|
+
status: z.ZodLiteral<"failure">;
|
|
81
|
+
payload: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
82
|
+
}, z.core.$strict>], "status">;
|
|
75
83
|
/** Exported for the same parity-test reason as `emitStageEnvelopeShape` above. */
|
|
76
84
|
export declare const writeStageArtifactShape: {
|
|
77
85
|
path: z.ZodString;
|
|
@@ -89,6 +97,7 @@ export declare function buildStageflowMcpServer(options: {
|
|
|
89
97
|
forkEmitContext?: ForkEmitContext;
|
|
90
98
|
cloneEmitContext?: CloneEmitContext;
|
|
91
99
|
preEmitCheckOptions?: PreEmitCheckOptions;
|
|
100
|
+
feedbackLoopEmitContext?: FeedbackLoopConfig;
|
|
92
101
|
writeStageArtifact: WriteStageArtifactOptions;
|
|
93
102
|
askOperator?: {
|
|
94
103
|
capture: AskOperatorCapture;
|
|
@@ -49,24 +49,61 @@ export const SANDBOX_EDIT_TOOL_NAME = `mcp__${STAGEFLOW_MCP_SERVER_NAME}__sandbo
|
|
|
49
49
|
* `fork_choice` is required (not just present) when the stage has a fork
|
|
50
50
|
* to route.
|
|
51
51
|
*/
|
|
52
|
+
function feedbackLoopShape(context) {
|
|
53
|
+
return z.discriminatedUnion("action", [
|
|
54
|
+
z.strictObject({ action: z.literal("continue") }),
|
|
55
|
+
z.strictObject({
|
|
56
|
+
action: z.literal("send_back"),
|
|
57
|
+
target: z.literal(context.target),
|
|
58
|
+
}),
|
|
59
|
+
]);
|
|
60
|
+
}
|
|
61
|
+
function payloadShape(payloadSchema, required) {
|
|
62
|
+
const base = payloadSchema === undefined
|
|
63
|
+
? z.record(z.string(), z.unknown())
|
|
64
|
+
: z.fromJSONSchema(payloadSchema);
|
|
65
|
+
return required ? base : base.optional();
|
|
66
|
+
}
|
|
52
67
|
export function buildEmitStageEnvelopeShape(options) {
|
|
53
|
-
|
|
54
|
-
|
|
68
|
+
const forkRequired = options.forkEmitContext !== undefined && options.feedbackLoopEmitContext === undefined;
|
|
69
|
+
const attestations = z
|
|
70
|
+
.array(z.strictObject({
|
|
71
|
+
check_id: z.string().min(1),
|
|
72
|
+
items: z.array(z.string()),
|
|
73
|
+
}))
|
|
74
|
+
.optional();
|
|
75
|
+
const shared = {
|
|
55
76
|
summary: z.string().min(1),
|
|
56
77
|
artifacts: z.array(z.string()),
|
|
57
|
-
|
|
58
|
-
fork_choice: options.forkEmitContext !== undefined
|
|
59
|
-
? z.array(z.string())
|
|
60
|
-
: z.array(z.string()).optional(),
|
|
61
|
-
checklist_attestations: z
|
|
62
|
-
.array(z.object({
|
|
63
|
-
check_id: z.string().min(1),
|
|
64
|
-
items: z.array(z.string()),
|
|
65
|
-
}))
|
|
66
|
-
.optional(),
|
|
78
|
+
checklist_attestations: attestations,
|
|
67
79
|
stage_id: z.string().optional(),
|
|
68
80
|
notes: z.string().optional(),
|
|
81
|
+
fork_choice: z.array(z.string()).optional(),
|
|
69
82
|
};
|
|
83
|
+
return z.discriminatedUnion("status", [
|
|
84
|
+
z.strictObject({
|
|
85
|
+
status: z.literal("success"),
|
|
86
|
+
...shared,
|
|
87
|
+
payload: payloadShape(options.payloadSchema, options.payloadSchema !== undefined),
|
|
88
|
+
fork_choice: forkRequired ? z.array(z.string()) : z.array(z.string()).optional(),
|
|
89
|
+
...(options.feedbackLoopEmitContext !== undefined
|
|
90
|
+
? { feedback_loop: feedbackLoopShape(options.feedbackLoopEmitContext) }
|
|
91
|
+
: {}),
|
|
92
|
+
}),
|
|
93
|
+
z.strictObject({
|
|
94
|
+
status: z.literal("failure"),
|
|
95
|
+
...shared,
|
|
96
|
+
payload: payloadShape(options.payloadSchema, false),
|
|
97
|
+
}),
|
|
98
|
+
]);
|
|
99
|
+
}
|
|
100
|
+
function asClaudeObjectSchema(schema) {
|
|
101
|
+
const json = z.toJSONSchema(schema);
|
|
102
|
+
delete json.$schema;
|
|
103
|
+
const target = schema;
|
|
104
|
+
target._zod.def.type = "object";
|
|
105
|
+
target._zod.toJSONSchema = () => json;
|
|
106
|
+
return schema;
|
|
70
107
|
}
|
|
71
108
|
/** Exported for the same parity-test reason as `emitStageEnvelopeShape` above. */
|
|
72
109
|
export const writeStageArtifactShape = {
|
|
@@ -207,12 +244,14 @@ function buildSandboxEditTool(options) {
|
|
|
207
244
|
});
|
|
208
245
|
}
|
|
209
246
|
export function buildStageflowMcpServer(options) {
|
|
210
|
-
const emitDef = createEmitStageEnvelopeTool(options.capture, options.payloadSchema, options.forkEmitContext, options.cloneEmitContext, options.preEmitCheckOptions);
|
|
247
|
+
const emitDef = createEmitStageEnvelopeTool(options.capture, options.payloadSchema, options.forkEmitContext, options.cloneEmitContext, options.preEmitCheckOptions, options.feedbackLoopEmitContext);
|
|
211
248
|
const artifactDef = createWriteStageArtifactTool(options.writeStageArtifact);
|
|
212
|
-
const emitTool = tool(emitDef.name, emitDef.description, buildEmitStageEnvelopeShape({
|
|
249
|
+
const emitTool = tool(emitDef.name, emitDef.description, asClaudeObjectSchema(buildEmitStageEnvelopeShape({
|
|
213
250
|
forkEmitContext: options.forkEmitContext,
|
|
214
251
|
cloneEmitContext: options.cloneEmitContext,
|
|
215
|
-
|
|
252
|
+
payloadSchema: options.payloadSchema,
|
|
253
|
+
feedbackLoopEmitContext: options.feedbackLoopEmitContext,
|
|
254
|
+
})), async (args) => toCallToolResult(await emitDef.execute("claude-tool-call", args)));
|
|
216
255
|
const artifactTool = tool(artifactDef.name, artifactDef.description, writeStageArtifactShape, async (args) => toCallToolResult(await artifactDef.execute("claude-tool-call", args)));
|
|
217
256
|
const tools = [emitTool, artifactTool];
|
|
218
257
|
if (options.askOperator) {
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { StageActivityEvent } from "./activity.js";
|
|
2
|
+
import { type StageUsage } from "../types/usage.js";
|
|
3
|
+
export type CompactionEndSessionEvent = {
|
|
4
|
+
type: "compaction_end";
|
|
5
|
+
reason: "manual" | "threshold" | "overflow";
|
|
6
|
+
result?: {
|
|
7
|
+
summary?: string;
|
|
8
|
+
tokensBefore?: number;
|
|
9
|
+
estimatedTokensAfter?: number;
|
|
10
|
+
usage?: CompactionUsage;
|
|
11
|
+
};
|
|
12
|
+
aborted?: boolean;
|
|
13
|
+
willRetry?: boolean;
|
|
14
|
+
errorMessage?: string;
|
|
15
|
+
};
|
|
16
|
+
export type CompactionUsage = {
|
|
17
|
+
input?: number;
|
|
18
|
+
output?: number;
|
|
19
|
+
cacheRead?: number;
|
|
20
|
+
cacheWrite?: number;
|
|
21
|
+
cost?: {
|
|
22
|
+
total?: number;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export type CompactionCost = {
|
|
26
|
+
inputTokens: number;
|
|
27
|
+
outputTokens: number;
|
|
28
|
+
costUsd: number;
|
|
29
|
+
};
|
|
30
|
+
export declare function compactionUsageCost(event: CompactionEndSessionEvent): CompactionCost;
|
|
31
|
+
export declare function compactionActivityEvent(event: CompactionEndSessionEvent, tokensAfter: number | null): Extract<StageActivityEvent, {
|
|
32
|
+
event: "context_compacted";
|
|
33
|
+
}>;
|
|
34
|
+
export declare function addCompactionUsage(usage: StageUsage, model: string | undefined, event: CompactionEndSessionEvent): void;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { redactSecrets } from "./streamLogRedact.js";
|
|
2
|
+
import { addModelUsage } from "../types/usage.js";
|
|
3
|
+
export function compactionUsageCost(event) {
|
|
4
|
+
const u = event.result?.usage;
|
|
5
|
+
return {
|
|
6
|
+
inputTokens: Number.isFinite(u?.input) ? u.input : 0,
|
|
7
|
+
outputTokens: Number.isFinite(u?.output) ? u.output : 0,
|
|
8
|
+
costUsd: Number.isFinite(u?.cost?.total) ? u.cost.total : 0,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export function compactionActivityEvent(event, tokensAfter) {
|
|
12
|
+
const result = event.result;
|
|
13
|
+
return {
|
|
14
|
+
event: "context_compacted",
|
|
15
|
+
reason: event.reason,
|
|
16
|
+
tokensBefore: result?.tokensBefore ?? 0,
|
|
17
|
+
tokensAfter: tokensAfter ?? result?.estimatedTokensAfter ?? null,
|
|
18
|
+
summaryChars: result?.summary?.length ?? 0,
|
|
19
|
+
costUsd: compactionUsageCost(event).costUsd,
|
|
20
|
+
willRetry: event.willRetry ?? false,
|
|
21
|
+
aborted: event.aborted ?? false,
|
|
22
|
+
...(event.errorMessage ? { error: redactSecrets(event.errorMessage) } : {}),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function addCompactionUsage(usage, model, event) {
|
|
26
|
+
const u = event.result?.usage;
|
|
27
|
+
if (!u)
|
|
28
|
+
return;
|
|
29
|
+
const finite = (n) => (typeof n === "number" && Number.isFinite(n) ? n : 0);
|
|
30
|
+
addModelUsage(usage, model ?? "unknown", {
|
|
31
|
+
inputTokens: finite(u.input),
|
|
32
|
+
outputTokens: finite(u.output),
|
|
33
|
+
cacheReadInputTokens: finite(u.cacheRead),
|
|
34
|
+
cacheCreationInputTokens: finite(u.cacheWrite),
|
|
35
|
+
costUsd: finite(u.cost?.total),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ExtensionFactory } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
/**
|
|
3
|
+
* OpenRouter load-balances a model across providers, and providers differ in tool-call support. On any
|
|
4
|
+
* request that carries tools, ask OpenRouter to skip providers that cannot honour them. Routing the Host
|
|
5
|
+
* set in models.json (`openRouterRouting`) wins over this default.
|
|
6
|
+
*/
|
|
7
|
+
export declare function createOpenRouterRoutingExtension(): ExtensionFactory;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
function isOpenRouter(model) {
|
|
2
|
+
return model?.provider === "openrouter" || (typeof model?.baseUrl === "string" && model.baseUrl.includes("openrouter.ai"));
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* OpenRouter load-balances a model across providers, and providers differ in tool-call support. On any
|
|
6
|
+
* request that carries tools, ask OpenRouter to skip providers that cannot honour them. Routing the Host
|
|
7
|
+
* set in models.json (`openRouterRouting`) wins over this default.
|
|
8
|
+
*/
|
|
9
|
+
export function createOpenRouterRoutingExtension() {
|
|
10
|
+
return (pi) => {
|
|
11
|
+
pi.on("before_provider_request", (event, ctx) => {
|
|
12
|
+
const payload = event.payload;
|
|
13
|
+
if (payload === null || typeof payload !== "object")
|
|
14
|
+
return undefined;
|
|
15
|
+
if (!Array.isArray(payload.tools) || payload.tools.length === 0)
|
|
16
|
+
return undefined;
|
|
17
|
+
if (!isOpenRouter(ctx.model))
|
|
18
|
+
return undefined;
|
|
19
|
+
const existing = payload.provider !== null && typeof payload.provider === "object" ? payload.provider : {};
|
|
20
|
+
return { ...payload, provider: { require_parameters: true, ...existing } };
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
}
|
|
@@ -75,6 +75,12 @@ export type RouteSessionEventToProgressOptions = {
|
|
|
75
75
|
*/
|
|
76
76
|
export declare function routeSessionEventToProgress(event: Record<string, unknown>, options: RouteSessionEventToProgressOptions): void;
|
|
77
77
|
export declare function composeStageUserPrompt(input: StageRunInput, emitToolName: string, emitHintOverride?: string, artifactToolName?: string): string;
|
|
78
|
+
/**
|
|
79
|
+
* Pi stages carry the whole assignment (task, prior envelopes, envelope
|
|
80
|
+
* contract, guidance) in the system prompt: compaction never summarizes it.
|
|
81
|
+
*/
|
|
82
|
+
export declare function composeStagePiSystemPrompt(input: StageRunInput, emitToolName: string, emitHintOverride?: string, artifactToolName?: string): string;
|
|
83
|
+
export declare function composeStagePiKickoffPrompt(input: StageRunInput): string;
|
|
78
84
|
export declare function composeFeedbackResumePrompt(input: StageRunInput): string;
|
|
79
85
|
export declare function mcpToolMetadataMissing(loader: DefaultResourceLoader): boolean;
|
|
80
86
|
export declare function collectMcpExtensionToolNames(loader: DefaultResourceLoader): {
|