@warlock.js/ai 4.4.0 → 4.5.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/CHANGELOG.md +52 -55
- package/cjs/index.cjs +221 -14147
- package/cjs/src-C02yzsLs.cjs +22991 -0
- package/cjs/src-C02yzsLs.cjs.map +1 -0
- package/cjs/src-DFibP2FQ.cjs +30 -0
- package/esm/agent/agent-config.type.d.mts +90 -1
- package/esm/agent/agent-config.type.d.mts.map +1 -1
- package/esm/agent/agent-input-builder.mjs +27 -6
- package/esm/agent/agent-input-builder.mjs.map +1 -1
- package/esm/agent/agent.d.mts +40 -1
- package/esm/agent/agent.d.mts.map +1 -1
- package/esm/agent/agent.mjs +203 -30
- package/esm/agent/agent.mjs.map +1 -1
- package/esm/agent/index.d.mts +2 -1
- package/esm/agent/index.mjs +1 -0
- package/esm/agent/judge-config.type.d.mts +33 -0
- package/esm/agent/judge-config.type.d.mts.map +1 -0
- package/esm/agent/judge-config.type.mjs +13 -0
- package/esm/agent/judge-config.type.mjs.map +1 -0
- package/esm/ai-openai/src/embedder.mjs +4 -0
- package/esm/ai-openai/src/index.mjs +4 -0
- package/esm/ai-openai/src/model.mjs +5 -0
- package/esm/ai-openai/src/sdk.mjs +6 -0
- package/esm/ai-openai/src/utils/index.mjs +4 -0
- package/esm/ai-openai/src/utils/to-openai-tools.mjs +3 -0
- package/esm/ai-openai/src/utils/wrap-openai-error.mjs +4 -0
- package/esm/ai.d.mts +119 -53
- package/esm/ai.d.mts.map +1 -1
- package/esm/ai.mjs +43 -8
- package/esm/ai.mjs.map +1 -1
- package/esm/batch/batch.d.mts.map +1 -1
- package/esm/batch/batch.mjs +21 -1
- package/esm/batch/batch.mjs.map +1 -1
- package/esm/batch/batch.type.d.mts +11 -4
- package/esm/batch/batch.type.d.mts.map +1 -1
- package/esm/config.d.mts +39 -3
- package/esm/config.d.mts.map +1 -1
- package/esm/config.mjs +26 -2
- package/esm/config.mjs.map +1 -1
- package/esm/contracts/agent/agent-options.type.d.mts +11 -3
- package/esm/contracts/agent/agent-options.type.d.mts.map +1 -1
- package/esm/contracts/agent/eval.type.d.mts +43 -2
- package/esm/contracts/agent/eval.type.d.mts.map +1 -1
- package/esm/contracts/attachment-policy.type.d.mts +51 -0
- package/esm/contracts/attachment-policy.type.d.mts.map +1 -0
- package/esm/contracts/attachment.type.d.mts +16 -7
- package/esm/contracts/attachment.type.d.mts.map +1 -1
- package/esm/contracts/content-part.type.d.mts +14 -5
- package/esm/contracts/content-part.type.d.mts.map +1 -1
- package/esm/contracts/events/supervisor-events.type.d.mts.map +1 -1
- package/esm/contracts/index.d.mts +6 -4
- package/esm/contracts/model.contract.d.mts +11 -8
- package/esm/contracts/model.contract.d.mts.map +1 -1
- package/esm/contracts/orchestrator/index.d.mts +1 -0
- package/esm/contracts/orchestrator/orchestrator-config.type.d.mts +31 -2
- package/esm/contracts/orchestrator/orchestrator-config.type.d.mts.map +1 -1
- package/esm/contracts/orchestrator/session-lock.contract.d.mts +47 -0
- package/esm/contracts/orchestrator/session-lock.contract.d.mts.map +1 -0
- package/esm/contracts/planner/index.d.mts +1 -1
- package/esm/contracts/planner/planner-config.type.d.mts +31 -0
- package/esm/contracts/planner/planner-config.type.d.mts.map +1 -1
- package/esm/contracts/planner/planner-execute-options.type.d.mts +48 -1
- package/esm/contracts/planner/planner-execute-options.type.d.mts.map +1 -1
- package/esm/contracts/planner/planner-result.type.d.mts +8 -0
- package/esm/contracts/planner/planner-result.type.d.mts.map +1 -1
- package/esm/contracts/planner/planner.contract.d.mts +1 -1
- package/esm/contracts/result/agent-result.type.d.mts +6 -4
- package/esm/contracts/result/agent-result.type.d.mts.map +1 -1
- package/esm/contracts/result/base-report.type.d.mts +21 -3
- package/esm/contracts/result/base-report.type.d.mts.map +1 -1
- package/esm/contracts/result/base-report.type.mjs.map +1 -1
- package/esm/contracts/result/execution-report.type.d.mts +53 -1
- package/esm/contracts/result/execution-report.type.d.mts.map +1 -1
- package/esm/contracts/result/supervisor-result.type.d.mts +14 -2
- package/esm/contracts/result/supervisor-result.type.d.mts.map +1 -1
- package/esm/contracts/result/workflow-result.type.d.mts +2 -1
- package/esm/contracts/result/workflow-result.type.d.mts.map +1 -1
- package/esm/contracts/supervisor/supervisor-config.type.d.mts +29 -0
- package/esm/contracts/supervisor/supervisor-config.type.d.mts.map +1 -1
- package/esm/contracts/system-prompt.contract.d.mts +103 -1
- package/esm/contracts/system-prompt.contract.d.mts.map +1 -1
- package/esm/contracts/team/index.d.mts +1 -0
- package/esm/contracts/team/team-config.type.d.mts +127 -0
- package/esm/contracts/team/team-config.type.d.mts.map +1 -0
- package/esm/contracts/tool.contract.d.mts +4 -2
- package/esm/contracts/tool.contract.d.mts.map +1 -1
- package/esm/contracts/workflow/step.contract.d.mts +30 -5
- package/esm/contracts/workflow/step.contract.d.mts.map +1 -1
- package/esm/contracts/workflow/workflow.contract.d.mts +16 -0
- package/esm/contracts/workflow/workflow.contract.d.mts.map +1 -1
- package/esm/errors/error-code.type.d.mts +1 -1
- package/esm/errors/index.d.mts +1 -0
- package/esm/errors/index.mjs +1 -0
- package/esm/errors/outbound-policy-error.d.mts +27 -0
- package/esm/errors/outbound-policy-error.d.mts.map +1 -0
- package/esm/errors/outbound-policy-error.mjs +32 -0
- package/esm/errors/outbound-policy-error.mjs.map +1 -0
- package/esm/eval/dataset.d.mts +28 -0
- package/esm/eval/dataset.d.mts.map +1 -0
- package/esm/eval/dataset.mjs +112 -0
- package/esm/eval/dataset.mjs.map +1 -0
- package/esm/eval/dataset.type.d.mts +53 -0
- package/esm/eval/dataset.type.d.mts.map +1 -0
- package/esm/eval/eval-runner.d.mts.map +1 -1
- package/esm/eval/eval-runner.mjs +16 -2
- package/esm/eval/eval-runner.mjs.map +1 -1
- package/esm/eval/index.d.mts +20 -1
- package/esm/eval/index.d.mts.map +1 -1
- package/esm/eval/index.mjs +20 -2
- package/esm/eval/index.mjs.map +1 -1
- package/esm/eval/regression.d.mts +30 -0
- package/esm/eval/regression.d.mts.map +1 -0
- package/esm/eval/regression.mjs +51 -0
- package/esm/eval/regression.mjs.map +1 -0
- package/esm/eval/report-json.d.mts +30 -0
- package/esm/eval/report-json.d.mts.map +1 -0
- package/esm/eval/report-json.mjs +33 -0
- package/esm/eval/report-json.mjs.map +1 -0
- package/esm/eval/report-junit.d.mts +22 -0
- package/esm/eval/report-junit.d.mts.map +1 -0
- package/esm/eval/report-junit.mjs +60 -0
- package/esm/eval/report-junit.mjs.map +1 -0
- package/esm/guard/contracts/guard-options.type.d.mts +165 -0
- package/esm/guard/contracts/guard-options.type.d.mts.map +1 -0
- package/esm/guard/contracts/guardrail.contract.d.mts +78 -0
- package/esm/guard/contracts/guardrail.contract.d.mts.map +1 -0
- package/esm/guard/contracts/index.d.mts +4 -0
- package/esm/guard/contracts/openai-client.contract.d.mts +51 -0
- package/esm/guard/contracts/openai-client.contract.d.mts.map +1 -0
- package/esm/guard/contracts/verdict.type.d.mts +76 -0
- package/esm/guard/contracts/verdict.type.d.mts.map +1 -0
- package/esm/guard/detectors/index.d.mts +4 -0
- package/esm/guard/detectors/index.mjs +6 -0
- package/esm/guard/detectors/injection.d.mts +34 -0
- package/esm/guard/detectors/injection.d.mts.map +1 -0
- package/esm/guard/detectors/injection.mjs +254 -0
- package/esm/guard/detectors/injection.mjs.map +1 -0
- package/esm/guard/detectors/moderation.d.mts +32 -0
- package/esm/guard/detectors/moderation.d.mts.map +1 -0
- package/esm/guard/detectors/moderation.mjs +134 -0
- package/esm/guard/detectors/moderation.mjs.map +1 -0
- package/esm/guard/detectors/pii.d.mts +41 -0
- package/esm/guard/detectors/pii.d.mts.map +1 -0
- package/esm/guard/detectors/pii.mjs +199 -0
- package/esm/guard/detectors/pii.mjs.map +1 -0
- package/esm/guard/detectors/topic.d.mts +29 -0
- package/esm/guard/detectors/topic.d.mts.map +1 -0
- package/esm/guard/detectors/topic.mjs +99 -0
- package/esm/guard/detectors/topic.mjs.map +1 -0
- package/esm/guard/errors.d.mts +12 -0
- package/esm/guard/errors.d.mts.map +1 -0
- package/esm/guard/errors.mjs +18 -0
- package/esm/guard/errors.mjs.map +1 -0
- package/esm/guard/guard.d.mts +67 -0
- package/esm/guard/guard.d.mts.map +1 -0
- package/esm/guard/guard.mjs +209 -0
- package/esm/guard/guard.mjs.map +1 -0
- package/esm/guard/guardrail.d.mts +39 -0
- package/esm/guard/guardrail.d.mts.map +1 -0
- package/esm/guard/guardrail.mjs +22 -0
- package/esm/guard/guardrail.mjs.map +1 -0
- package/esm/human/contracts/approval.type.d.mts +154 -0
- package/esm/human/contracts/approval.type.d.mts.map +1 -0
- package/esm/human/contracts/human-approval.type.d.mts +38 -0
- package/esm/human/contracts/human-approval.type.d.mts.map +1 -0
- package/esm/human/contracts/index.d.mts +4 -0
- package/esm/human/contracts/interrupt-store.contract.d.mts +112 -0
- package/esm/human/contracts/interrupt-store.contract.d.mts.map +1 -0
- package/esm/human/contracts/resume.type.d.mts +77 -0
- package/esm/human/contracts/resume.type.d.mts.map +1 -0
- package/esm/human/errors.d.mts +84 -0
- package/esm/human/errors.d.mts.map +1 -0
- package/esm/human/errors.mjs +60 -0
- package/esm/human/errors.mjs.map +1 -0
- package/esm/human/human-approval.d.mts +57 -0
- package/esm/human/human-approval.d.mts.map +1 -0
- package/esm/human/human-approval.mjs +170 -0
- package/esm/human/human-approval.mjs.map +1 -0
- package/esm/human/policy.d.mts +55 -0
- package/esm/human/policy.d.mts.map +1 -0
- package/esm/human/policy.mjs +67 -0
- package/esm/human/policy.mjs.map +1 -0
- package/esm/human/register.mjs +37 -0
- package/esm/human/register.mjs.map +1 -0
- package/esm/human/resume-seed.mjs +53 -0
- package/esm/human/resume-seed.mjs.map +1 -0
- package/esm/human/resume.d.mts +54 -0
- package/esm/human/resume.d.mts.map +1 -0
- package/esm/human/resume.mjs +121 -0
- package/esm/human/resume.mjs.map +1 -0
- package/esm/human/stores/index.mjs +5 -0
- package/esm/human/stores/memory.d.mts +30 -0
- package/esm/human/stores/memory.d.mts.map +1 -0
- package/esm/human/stores/memory.mjs +91 -0
- package/esm/human/stores/memory.mjs.map +1 -0
- package/esm/human/stores/pg.d.mts +59 -0
- package/esm/human/stores/pg.d.mts.map +1 -0
- package/esm/human/stores/pg.mjs +220 -0
- package/esm/human/stores/pg.mjs.map +1 -0
- package/esm/human/stores/redis.d.mts +56 -0
- package/esm/human/stores/redis.d.mts.map +1 -0
- package/esm/human/stores/redis.mjs +201 -0
- package/esm/human/stores/redis.mjs.map +1 -0
- package/esm/index.d.mts +113 -22
- package/esm/index.mjs +82 -11
- package/esm/middleware/builtins/budget.mjs +6 -2
- package/esm/middleware/builtins/budget.mjs.map +1 -1
- package/esm/middleware/utils/extract-user-text.d.mts +8 -1
- package/esm/middleware/utils/extract-user-text.d.mts.map +1 -1
- package/esm/middleware/utils/extract-user-text.mjs +8 -1
- package/esm/middleware/utils/extract-user-text.mjs.map +1 -1
- package/esm/object-stream/index.d.mts +2 -0
- package/esm/object-stream/index.mjs +4 -0
- package/esm/object-stream/parse-partial-json.d.mts +22 -0
- package/esm/object-stream/parse-partial-json.d.mts.map +1 -0
- package/esm/object-stream/parse-partial-json.mjs +78 -0
- package/esm/object-stream/parse-partial-json.mjs.map +1 -0
- package/esm/object-stream/stream-object.d.mts +68 -0
- package/esm/object-stream/stream-object.d.mts.map +1 -0
- package/esm/object-stream/stream-object.mjs +104 -0
- package/esm/object-stream/stream-object.mjs.map +1 -0
- package/esm/observe/index.mjs +4 -0
- package/esm/observe/observer-registry.d.mts +30 -0
- package/esm/observe/observer-registry.d.mts.map +1 -0
- package/esm/observe/observer-registry.mjs +51 -0
- package/esm/observe/observer-registry.mjs.map +1 -0
- package/esm/observe/observer.contract.d.mts +40 -0
- package/esm/observe/observer.contract.d.mts.map +1 -0
- package/esm/observe/resolve-observers.d.mts +40 -0
- package/esm/observe/resolve-observers.d.mts.map +1 -0
- package/esm/observe/resolve-observers.mjs +73 -0
- package/esm/observe/resolve-observers.mjs.map +1 -0
- package/esm/orchestrator/execution.d.mts.map +1 -1
- package/esm/orchestrator/execution.mjs +5 -2
- package/esm/orchestrator/execution.mjs.map +1 -1
- package/esm/orchestrator/index.d.mts +1 -0
- package/esm/orchestrator/index.mjs +1 -0
- package/esm/orchestrator/orchestrator.d.mts.map +1 -1
- package/esm/orchestrator/orchestrator.mjs +39 -6
- package/esm/orchestrator/orchestrator.mjs.map +1 -1
- package/esm/orchestrator/session-lock.d.mts +25 -0
- package/esm/orchestrator/session-lock.d.mts.map +1 -0
- package/esm/orchestrator/session-lock.mjs +83 -0
- package/esm/orchestrator/session-lock.mjs.map +1 -0
- package/esm/planner/dag-scheduler.mjs +97 -0
- package/esm/planner/dag-scheduler.mjs.map +1 -0
- package/esm/planner/plan-prompt.d.mts +1 -1
- package/esm/planner/plan-prompt.d.mts.map +1 -1
- package/esm/planner/plan-prompt.mjs +2 -1
- package/esm/planner/plan-prompt.mjs.map +1 -1
- package/esm/planner/planner-run.d.mts.map +1 -1
- package/esm/planner/planner-run.mjs +300 -29
- package/esm/planner/planner-run.mjs.map +1 -1
- package/esm/planner/planner.mjs +1 -1
- package/esm/planner/planner.mjs.map +1 -1
- package/esm/prompt/errors.d.mts +57 -0
- package/esm/prompt/errors.d.mts.map +1 -0
- package/esm/prompt/errors.mjs +73 -0
- package/esm/prompt/errors.mjs.map +1 -0
- package/esm/prompt/index.d.mts +3 -0
- package/esm/prompt/index.mjs +4 -0
- package/esm/prompt/prompt-langfuse-sync.mjs +104 -0
- package/esm/prompt/prompt-langfuse-sync.mjs.map +1 -0
- package/esm/prompt/prompt-langfuse-sync.type.d.mts +32 -0
- package/esm/prompt/prompt-langfuse-sync.type.d.mts.map +1 -0
- package/esm/prompt/prompt-validate.mjs +170 -0
- package/esm/prompt/prompt-validate.mjs.map +1 -0
- package/esm/prompt/prompt.d.mts +54 -0
- package/esm/prompt/prompt.d.mts.map +1 -0
- package/esm/prompt/prompt.mjs +218 -0
- package/esm/prompt/prompt.mjs.map +1 -0
- package/esm/prompt/prompt.type.d.mts +174 -0
- package/esm/prompt/prompt.type.d.mts.map +1 -0
- package/esm/prompts/index.d.mts +3 -0
- package/esm/prompts/index.mjs +3 -0
- package/esm/prompts/prompts-manager.contract.d.mts +154 -0
- package/esm/prompts/prompts-manager.contract.d.mts.map +1 -0
- package/esm/prompts/prompts-manager.d.mts +38 -0
- package/esm/prompts/prompts-manager.d.mts.map +1 -0
- package/esm/prompts/prompts-manager.mjs +410 -0
- package/esm/prompts/prompts-manager.mjs.map +1 -0
- package/esm/prompts/prompts-manager.type.d.mts +172 -0
- package/esm/prompts/prompts-manager.type.d.mts.map +1 -0
- package/esm/prompts/prompts-validate.mjs +200 -0
- package/esm/prompts/prompts-validate.mjs.map +1 -0
- package/esm/rag/as-tool.mjs +48 -0
- package/esm/rag/as-tool.mjs.map +1 -0
- package/esm/rag/chunk/chunk.d.mts +24 -0
- package/esm/rag/chunk/chunk.d.mts.map +1 -0
- package/esm/rag/chunk/chunk.mjs +44 -0
- package/esm/rag/chunk/chunk.mjs.map +1 -0
- package/esm/rag/chunk/fixed.mjs +32 -0
- package/esm/rag/chunk/fixed.mjs.map +1 -0
- package/esm/rag/chunk/markdown.mjs +75 -0
- package/esm/rag/chunk/markdown.mjs.map +1 -0
- package/esm/rag/chunk/recursive.mjs +132 -0
- package/esm/rag/chunk/recursive.mjs.map +1 -0
- package/esm/rag/chunk/sentence.mjs +73 -0
- package/esm/rag/chunk/sentence.mjs.map +1 -0
- package/esm/rag/contracts/chunk-options.type.d.mts +35 -0
- package/esm/rag/contracts/chunk-options.type.d.mts.map +1 -0
- package/esm/rag/contracts/citation.type.d.mts +35 -0
- package/esm/rag/contracts/citation.type.d.mts.map +1 -0
- package/esm/rag/contracts/index.d.mts +4 -0
- package/esm/rag/contracts/rag-config.type.d.mts +68 -0
- package/esm/rag/contracts/rag-config.type.d.mts.map +1 -0
- package/esm/rag/contracts/rag-document.type.d.mts +21 -0
- package/esm/rag/contracts/rag-document.type.d.mts.map +1 -0
- package/esm/rag/hybrid/bm25.d.mts +23 -0
- package/esm/rag/hybrid/bm25.d.mts.map +1 -0
- package/esm/rag/hybrid/bm25.mjs +51 -0
- package/esm/rag/hybrid/bm25.mjs.map +1 -0
- package/esm/rag/hybrid/hybrid-rank.d.mts +33 -0
- package/esm/rag/hybrid/hybrid-rank.d.mts.map +1 -0
- package/esm/rag/hybrid/hybrid-rank.mjs +29 -0
- package/esm/rag/hybrid/hybrid-rank.mjs.map +1 -0
- package/esm/rag/hybrid/rrf.d.mts +25 -0
- package/esm/rag/hybrid/rrf.d.mts.map +1 -0
- package/esm/rag/hybrid/rrf.mjs +30 -0
- package/esm/rag/hybrid/rrf.mjs.map +1 -0
- package/esm/rag/index.d.mts +15 -0
- package/esm/rag/index.mjs +11 -0
- package/esm/rag/rag.d.mts +38 -0
- package/esm/rag/rag.d.mts.map +1 -0
- package/esm/rag/rag.mjs +126 -0
- package/esm/rag/rag.mjs.map +1 -0
- package/esm/rag/rerank/keyword-reranker.d.mts +32 -0
- package/esm/rag/rerank/keyword-reranker.d.mts.map +1 -0
- package/esm/rag/rerank/keyword-reranker.mjs +58 -0
- package/esm/rag/rerank/keyword-reranker.mjs.map +1 -0
- package/esm/rag/rerank/llm-reranker.d.mts +36 -0
- package/esm/rag/rerank/llm-reranker.d.mts.map +1 -0
- package/esm/rag/rerank/llm-reranker.mjs +85 -0
- package/esm/rag/rerank/llm-reranker.mjs.map +1 -0
- package/esm/rag/rerank/reranker.contract.d.mts +28 -0
- package/esm/rag/rerank/reranker.contract.d.mts.map +1 -0
- package/esm/rag/retrieve.mjs +68 -0
- package/esm/rag/retrieve.mjs.map +1 -0
- package/esm/rag/store/cache-vector-store.d.mts +27 -0
- package/esm/rag/store/cache-vector-store.d.mts.map +1 -0
- package/esm/rag/store/cache-vector-store.mjs +48 -0
- package/esm/rag/store/cache-vector-store.mjs.map +1 -0
- package/esm/rag/store/vector-store.contract.d.mts +38 -0
- package/esm/rag/store/vector-store.contract.d.mts.map +1 -0
- package/esm/rag/transforms/multi-query.d.mts +27 -0
- package/esm/rag/transforms/multi-query.d.mts.map +1 -0
- package/esm/rag/transforms/multi-query.mjs +41 -0
- package/esm/rag/transforms/multi-query.mjs.map +1 -0
- package/esm/security/index.mjs +5 -0
- package/esm/security/outbound-policy.d.mts +46 -0
- package/esm/security/outbound-policy.d.mts.map +1 -0
- package/esm/security/outbound-policy.mjs +187 -0
- package/esm/security/outbound-policy.mjs.map +1 -0
- package/esm/security/outbound-policy.type.d.mts +74 -0
- package/esm/security/outbound-policy.type.d.mts.map +1 -0
- package/esm/security/private-ip.d.mts +15 -0
- package/esm/security/private-ip.d.mts.map +1 -0
- package/esm/security/private-ip.mjs +48 -0
- package/esm/security/private-ip.mjs.map +1 -0
- package/esm/security/redact.d.mts +59 -0
- package/esm/security/redact.d.mts.map +1 -0
- package/esm/security/redact.mjs +122 -0
- package/esm/security/redact.mjs.map +1 -0
- package/esm/serve/serve.d.mts +50 -0
- package/esm/serve/serve.d.mts.map +1 -0
- package/esm/serve/serve.mjs +90 -0
- package/esm/serve/serve.mjs.map +1 -0
- package/esm/serve/sse.d.mts +20 -0
- package/esm/serve/sse.d.mts.map +1 -0
- package/esm/serve/sse.mjs +25 -0
- package/esm/serve/sse.mjs.map +1 -0
- package/esm/serve/stream-to-sse.d.mts +29 -0
- package/esm/serve/stream-to-sse.d.mts.map +1 -0
- package/esm/serve/stream-to-sse.mjs +37 -0
- package/esm/serve/stream-to-sse.mjs.map +1 -0
- package/esm/skills/catalog.d.mts +49 -0
- package/esm/skills/catalog.d.mts.map +1 -0
- package/esm/skills/catalog.mjs +140 -0
- package/esm/skills/catalog.mjs.map +1 -0
- package/esm/skills/contracts/skill-record.type.d.mts +37 -0
- package/esm/skills/contracts/skill-record.type.d.mts.map +1 -0
- package/esm/skills/contracts/skills-config.type.d.mts +108 -0
- package/esm/skills/contracts/skills-config.type.d.mts.map +1 -0
- package/esm/skills/contracts/skills-store.contract.d.mts +28 -0
- package/esm/skills/contracts/skills-store.contract.d.mts.map +1 -0
- package/esm/skills/contracts/skills.contract.d.mts +43 -0
- package/esm/skills/contracts/skills.contract.d.mts.map +1 -0
- package/esm/skills/index.d.mts +16 -0
- package/esm/skills/index.mjs +14 -0
- package/esm/skills/load-skill-tool.d.mts +38 -0
- package/esm/skills/load-skill-tool.d.mts.map +1 -0
- package/esm/skills/load-skill-tool.mjs +65 -0
- package/esm/skills/load-skill-tool.mjs.map +1 -0
- package/esm/skills/review-gate.d.mts +33 -0
- package/esm/skills/review-gate.d.mts.map +1 -0
- package/esm/skills/review-gate.mjs +60 -0
- package/esm/skills/review-gate.mjs.map +1 -0
- package/esm/skills/save-skill-tool.d.mts +39 -0
- package/esm/skills/save-skill-tool.d.mts.map +1 -0
- package/esm/skills/save-skill-tool.mjs +65 -0
- package/esm/skills/save-skill-tool.mjs.map +1 -0
- package/esm/skills/skills.d.mts +33 -0
- package/esm/skills/skills.d.mts.map +1 -0
- package/esm/skills/skills.mjs +109 -0
- package/esm/skills/skills.mjs.map +1 -0
- package/esm/skills/sources/directory-source.d.mts +19 -0
- package/esm/skills/sources/directory-source.d.mts.map +1 -0
- package/esm/skills/sources/directory-source.mjs +108 -0
- package/esm/skills/sources/directory-source.mjs.map +1 -0
- package/esm/skills/sources/index.d.mts +18 -0
- package/esm/skills/sources/index.d.mts.map +1 -0
- package/esm/skills/sources/index.mjs +27 -0
- package/esm/skills/sources/index.mjs.map +1 -0
- package/esm/skills/sources/parse-frontmatter.d.mts +27 -0
- package/esm/skills/sources/parse-frontmatter.d.mts.map +1 -0
- package/esm/skills/sources/parse-frontmatter.mjs +46 -0
- package/esm/skills/sources/parse-frontmatter.mjs.map +1 -0
- package/esm/skills/sources/store-source.d.mts +14 -0
- package/esm/skills/sources/store-source.d.mts.map +1 -0
- package/esm/skills/sources/store-source.mjs +15 -0
- package/esm/skills/sources/store-source.mjs.map +1 -0
- package/esm/skills/sources/url-source.d.mts +29 -0
- package/esm/skills/sources/url-source.d.mts.map +1 -0
- package/esm/skills/sources/url-source.mjs +117 -0
- package/esm/skills/sources/url-source.mjs.map +1 -0
- package/esm/skills/store/mock-skills-store.d.mts +57 -0
- package/esm/skills/store/mock-skills-store.d.mts.map +1 -0
- package/esm/skills/store/mock-skills-store.mjs +100 -0
- package/esm/skills/store/mock-skills-store.mjs.map +1 -0
- package/esm/skills/store/procedural-skill-store.d.mts +30 -0
- package/esm/skills/store/procedural-skill-store.d.mts.map +1 -0
- package/esm/skills/store/procedural-skill-store.mjs +125 -0
- package/esm/skills/store/procedural-skill-store.mjs.map +1 -0
- package/esm/supervisor/as-tool.mjs +2 -2
- package/esm/supervisor/as-tool.mjs.map +1 -1
- package/esm/supervisor/execution.d.mts.map +1 -1
- package/esm/supervisor/execution.mjs +31 -28
- package/esm/supervisor/execution.mjs.map +1 -1
- package/esm/supervisor/supervisor.d.mts.map +1 -1
- package/esm/supervisor/supervisor.mjs +8 -3
- package/esm/supervisor/supervisor.mjs.map +1 -1
- package/esm/system-prompt/index.d.mts +4 -0
- package/esm/system-prompt/system-prompt.d.mts +68 -4
- package/esm/system-prompt/system-prompt.d.mts.map +1 -1
- package/esm/system-prompt/system-prompt.mjs +89 -5
- package/esm/system-prompt/system-prompt.mjs.map +1 -1
- package/esm/team/gates.mjs +48 -0
- package/esm/team/gates.mjs.map +1 -0
- package/esm/team/index.d.mts +1 -0
- package/esm/team/index.mjs +3 -0
- package/esm/team/team.d.mts +42 -0
- package/esm/team/team.d.mts.map +1 -0
- package/esm/team/team.mjs +94 -0
- package/esm/team/team.mjs.map +1 -0
- package/esm/tool/executable-as-tool.d.mts.map +1 -1
- package/esm/tool/executable-as-tool.mjs +2 -2
- package/esm/tool/executable-as-tool.mjs.map +1 -1
- package/esm/tool/tool.d.mts.map +1 -1
- package/esm/tool/tool.mjs +2 -2
- package/esm/tool/tool.mjs.map +1 -1
- package/esm/utils/compute-cost.d.mts +17 -1
- package/esm/utils/compute-cost.d.mts.map +1 -1
- package/esm/utils/compute-cost.mjs +26 -1
- package/esm/utils/compute-cost.mjs.map +1 -1
- package/esm/utils/extract-json-lenient.d.mts +42 -0
- package/esm/utils/extract-json-lenient.d.mts.map +1 -0
- package/esm/utils/extract-json-lenient.mjs +97 -0
- package/esm/utils/extract-json-lenient.mjs.map +1 -0
- package/esm/utils/index.d.mts +4 -2
- package/esm/utils/index.mjs +3 -1
- package/esm/utils/json-schema.d.mts +1 -1
- package/esm/utils/prepare-attachment-part.d.mts +10 -1
- package/esm/utils/prepare-attachment-part.d.mts.map +1 -1
- package/esm/utils/prepare-attachment-part.mjs +103 -11
- package/esm/utils/prepare-attachment-part.mjs.map +1 -1
- package/esm/utils/resolve-attachment.d.mts +4 -3
- package/esm/utils/resolve-attachment.d.mts.map +1 -1
- package/esm/utils/resolve-attachment.mjs +4 -3
- package/esm/utils/resolve-attachment.mjs.map +1 -1
- package/esm/utils/run-context.d.mts +94 -0
- package/esm/utils/run-context.d.mts.map +1 -0
- package/esm/utils/run-context.mjs +98 -0
- package/esm/utils/run-context.mjs.map +1 -0
- package/esm/vcr/cassette-io.mjs +57 -0
- package/esm/vcr/cassette-io.mjs.map +1 -0
- package/esm/vcr/errors.d.mts +42 -0
- package/esm/vcr/errors.d.mts.map +1 -0
- package/esm/vcr/errors.mjs +37 -0
- package/esm/vcr/errors.mjs.map +1 -0
- package/esm/vcr/hash-request.d.mts +28 -0
- package/esm/vcr/hash-request.d.mts.map +1 -0
- package/esm/vcr/hash-request.mjs +118 -0
- package/esm/vcr/hash-request.mjs.map +1 -0
- package/esm/vcr/index.d.mts +4 -0
- package/esm/vcr/index.mjs +5 -0
- package/esm/vcr/vcr.d.mts +32 -0
- package/esm/vcr/vcr.d.mts.map +1 -0
- package/esm/vcr/vcr.mjs +248 -0
- package/esm/vcr/vcr.mjs.map +1 -0
- package/esm/vcr/vcr.type.d.mts +118 -0
- package/esm/vcr/vcr.type.d.mts.map +1 -0
- package/esm/workflow/as-tool.mjs +2 -2
- package/esm/workflow/as-tool.mjs.map +1 -1
- package/esm/workflow/engine.mjs +1 -0
- package/esm/workflow/engine.mjs.map +1 -1
- package/esm/workflow/step-runner.mjs +19 -20
- package/esm/workflow/step-runner.mjs.map +1 -1
- package/esm/workflow/workflow.d.mts.map +1 -1
- package/esm/workflow/workflow.mjs +8 -3
- package/esm/workflow/workflow.mjs.map +1 -1
- package/llms-full.txt +1683 -68
- package/llms.txt +16 -4
- package/package.json +7 -3
- package/skills/README.md +40 -4
- package/skills/ai-dx-helpers/SKILL.md +2 -2
- package/skills/approve-tool-calls/SKILL.md +134 -0
- package/skills/attach-ai-middleware/SKILL.md +1 -1
- package/skills/detect-and-redact-pii/SKILL.md +104 -0
- package/skills/durable-resume/SKILL.md +128 -0
- package/skills/escalate-block-to-human/SKILL.md +85 -0
- package/skills/eval-datasets-and-ci/SKILL.md +117 -0
- package/skills/guard-input-output/SKILL.md +117 -0
- package/skills/manage-prompts/SKILL.md +186 -0
- package/skills/observe-ai-flows/SKILL.md +94 -0
- package/skills/record-replay-llm/SKILL.md +92 -0
- package/skills/run-ai-agent/SKILL.md +26 -1
- package/skills/run-ai-rag/SKILL.md +139 -0
- package/skills/run-ai-team/SKILL.md +107 -0
- package/skills/run-orchestrator/SKILL.md +2 -0
- package/skills/run-planner/SKILL.md +73 -8
- package/skills/run-supervisor/SKILL.md +20 -1
- package/skills/use-runtime-skills/SKILL.md +106 -0
- package/skills/write-system-prompt/SKILL.md +30 -1
- package/cjs/index.cjs.map +0 -1
- package/esm/contracts/result/index.d.mts +0 -15
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { AgentContract } from "../agent/agent.contract.mjs";
|
|
2
|
+
import { FlowObserveOption } from "../../observe/resolve-observers.mjs";
|
|
3
|
+
import { SnapshotStore } from "../orchestrator/snapshot-store.contract.mjs";
|
|
4
|
+
import { WorkflowInstance } from "../workflow/workflow.contract.mjs";
|
|
5
|
+
import { SystemPromptContract } from "../system-prompt.contract.mjs";
|
|
6
|
+
import { RouterEntry } from "../supervisor/router-entry.type.mjs";
|
|
7
|
+
import { SupervisorConfig, SupervisorEventHandlers } from "../supervisor/supervisor-config.type.mjs";
|
|
8
|
+
import { EvaluateContext, EvaluateResult } from "../supervisor/evaluate-context.type.mjs";
|
|
9
|
+
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
10
|
+
|
|
11
|
+
//#region ../@warlock.js/ai/src/contracts/team/team-config.type.d.ts
|
|
12
|
+
/**
|
|
13
|
+
* A role member — an agent or a workflow. The same shorthand the
|
|
14
|
+
* supervisor accepts on each `intents` value, narrowed to the two
|
|
15
|
+
* dispatchable unit shapes `team()` forwards verbatim. (Callback /
|
|
16
|
+
* full-entry intent shapes still work when forwarded — this alias is
|
|
17
|
+
* the documented, autocomplete-friendly subset for the common case.)
|
|
18
|
+
*/
|
|
19
|
+
type TeamMemberValue = AgentContract<unknown> | WorkflowInstance<unknown, unknown>;
|
|
20
|
+
/**
|
|
21
|
+
* The built-in quality-gate strategies. Each desugars to a concrete
|
|
22
|
+
* {@link SupervisorConfig.evaluate} callback — no new loop or
|
|
23
|
+
* termination code; both lean entirely on the already-shipped
|
|
24
|
+
* {@link EvaluateResult} semantics (`satisfied` terminates,
|
|
25
|
+
* `reassignTo` re-dispatches the fixer, `feedback` threads forward).
|
|
26
|
+
*
|
|
27
|
+
* - `"quality"` — review-then-fix loop. After members settle, read the
|
|
28
|
+
* reviewer's verdict slice (`state.approved` by default); if not
|
|
29
|
+
* approved, `reassignTo` the fixer with the reviewer feedback
|
|
30
|
+
* (`state.notes`) threaded forward. Terminates on approval.
|
|
31
|
+
* - `"verify"` — test-then-fix loop. Same shape but keyed on the
|
|
32
|
+
* tester's pass/fail slice (`state.passed` by default) instead of a
|
|
33
|
+
* subjective reviewer score.
|
|
34
|
+
*/
|
|
35
|
+
type TeamGate = "quality" | "verify";
|
|
36
|
+
/**
|
|
37
|
+
* Fully-custom gate — an escape hatch identical to
|
|
38
|
+
* {@link SupervisorConfig.evaluate}. Supplying a function instead of a
|
|
39
|
+
* {@link TeamGate} string opts out of the sugar entirely while keeping
|
|
40
|
+
* the rest of `team()`'s wiring. Forwarded straight through as
|
|
41
|
+
* `evaluate` with zero wrapping.
|
|
42
|
+
*/
|
|
43
|
+
type TeamGateFn<TState> = (ctx: EvaluateContext<TState>) => EvaluateResult | Promise<EvaluateResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Config for `ai.team(config)` — thin, transparent sugar over
|
|
46
|
+
* {@link SupervisorConfig}. `team()` builds a `SupervisorConfig` from
|
|
47
|
+
* these fields and calls `supervisor(...)`, returning the **unchanged**
|
|
48
|
+
* `SupervisorContract<TOutput>`. It owns no loop: the manager becomes
|
|
49
|
+
* `route`/`router`, the members become `intents`, and the gate becomes
|
|
50
|
+
* `evaluate`. Everything else passes through 1:1.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* const codeTeam = ai.team({
|
|
54
|
+
* name: "code-team",
|
|
55
|
+
* goal: "Ship a tested module that passes review.",
|
|
56
|
+
* manager: techLeadRouter,
|
|
57
|
+
* members: { builder, reviewer, fixer },
|
|
58
|
+
* gate: "quality",
|
|
59
|
+
* output: v.object({ code: v.string() }),
|
|
60
|
+
* maxIterations: 6,
|
|
61
|
+
* });
|
|
62
|
+
*/
|
|
63
|
+
type TeamConfig<TOutput = unknown, TState = TOutput, TMembers extends Record<string, TeamMemberValue> = Record<string, TeamMemberValue>> = {
|
|
64
|
+
/** Stable identifier — forwarded verbatim to `SupervisorConfig.name`. */name: string; /** Optional dev-curated version string — forwarded to `SupervisorConfig.version`. */
|
|
65
|
+
version?: string;
|
|
66
|
+
/**
|
|
67
|
+
* The manager. Drives dispatch each iteration. Two forms:
|
|
68
|
+
* - an `AgentContract` / `RouterEntry` → becomes `SupervisorConfig.router`
|
|
69
|
+
* (LLM-driven manager).
|
|
70
|
+
* - `{ route }` → becomes `SupervisorConfig.route` (deterministic manager).
|
|
71
|
+
* Exactly one is forwarded; mutually exclusive (mirrors the
|
|
72
|
+
* supervisor's own `router` XOR `route` rule).
|
|
73
|
+
*/
|
|
74
|
+
manager: AgentContract<unknown> | RouterEntry<TState> | {
|
|
75
|
+
route: NonNullable<SupervisorConfig<TOutput, TState>["route"]>;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Role members keyed by role name (e.g. `builder`, `reviewer`,
|
|
79
|
+
* `tester`, `fixer`). Forwarded verbatim as `SupervisorConfig.intents`.
|
|
80
|
+
* The keys are the role names the manager routes to AND the keys
|
|
81
|
+
* `ctx.intents.<role>` exposes (escape hatch preserved).
|
|
82
|
+
*/
|
|
83
|
+
members: TMembers;
|
|
84
|
+
/**
|
|
85
|
+
* The quality gate. A {@link TeamGate} string selects a pre-built
|
|
86
|
+
* `evaluate` strategy; a function is forwarded straight to
|
|
87
|
+
* `SupervisorConfig.evaluate` (full escape hatch). Required — a team
|
|
88
|
+
* without a gate is just a supervisor.
|
|
89
|
+
*/
|
|
90
|
+
gate: TeamGate | TeamGateFn<TState>;
|
|
91
|
+
/**
|
|
92
|
+
* Role-name mapping for the built-in string gates. Only consulted
|
|
93
|
+
* when `gate` is a {@link TeamGate} string. Defaults:
|
|
94
|
+
* `{ reviewer: "reviewer", fixer: "fixer", tester: "tester" }`.
|
|
95
|
+
* Override when your `members` keys differ from the canonical role
|
|
96
|
+
* names.
|
|
97
|
+
*/
|
|
98
|
+
roles?: {
|
|
99
|
+
reviewer?: keyof TMembers & string;
|
|
100
|
+
fixer?: keyof TMembers & string;
|
|
101
|
+
tester?: keyof TMembers & string;
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* State key the gate reads to decide satisfaction. Defaults to
|
|
105
|
+
* `"approved"` for `gate: "quality"` and `"passed"` for
|
|
106
|
+
* `gate: "verify"`. The named member's `output` schema must write a
|
|
107
|
+
* boolean into this key.
|
|
108
|
+
*/
|
|
109
|
+
gateKey?: string; /** Natural-language objective — forwarded verbatim to `SupervisorConfig.goal`. */
|
|
110
|
+
goal?: string | SystemPromptContract; /** Final-state schema — forwarded verbatim to `SupervisorConfig.output`. */
|
|
111
|
+
output?: StandardSchemaV1<TOutput>; /** Initial state seed — forwarded verbatim to `SupervisorConfig.state`. */
|
|
112
|
+
state?: TState; /** Hard iteration cap — forwarded verbatim; defaults to the supervisor's `10`. */
|
|
113
|
+
maxIterations?: number; /** Durable snapshot store — forwarded verbatim to `SupervisorConfig.snapshotStore`. */
|
|
114
|
+
snapshotStore?: SnapshotStore; /** Definition-level event handlers — forwarded verbatim to `SupervisorConfig.on`. */
|
|
115
|
+
on?: SupervisorEventHandlers;
|
|
116
|
+
/**
|
|
117
|
+
* Observability for this team — forwarded verbatim to
|
|
118
|
+
* `SupervisorConfig.observe`, so the underlying supervisor routes its
|
|
119
|
+
* completed report through the same generic `Observer` seam every
|
|
120
|
+
* other flow uses. Additive and gated; see `SupervisorConfig.observe`
|
|
121
|
+
* for the value semantics (`true` / `false` / a flow-local `Observer`).
|
|
122
|
+
*/
|
|
123
|
+
observe?: FlowObserveOption;
|
|
124
|
+
};
|
|
125
|
+
//#endregion
|
|
126
|
+
export { TeamConfig, TeamGate, TeamGateFn, TeamMemberValue };
|
|
127
|
+
//# sourceMappingURL=team-config.type.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-config.type.d.mts","names":[],"sources":["../../../../../../../../@warlock.js/ai/src/contracts/team/team-config.type.ts"],"mappings":";;;;;;;;;;;;;AAiBA;;;;AAEoB;KAFR,eAAA,GACR,aAAA,YACA,gBAAgB;;;;AAiBA;AASpB;;;;;;;;;;;KATY,QAAA;;;;;;;AAWgC;KAFhC,UAAA,YACV,GAAA,EAAK,eAAA,CAAgB,MAAA,MAClB,cAAA,GAAiB,OAAA,CAAQ,cAAA;;;;;;;;;;;;;;;;;;;;KAqBlB,UAAA,6BAED,OAAA,mBACQ,MAAA,SAAe,eAAA,IAAmB,MAAA,SAAe,eAAA;EA+CjD,yEA5CjB,IAAA,UA6D0B;EA1D1B,OAAA;EA6DQ;;;;;;;;EAnDR,OAAA,EACI,aAAA,YACA,WAAA,CAAY,MAAA;IACV,KAAA,EAAO,WAAA,CAAY,gBAAA,CAAiB,OAAA,EAAS,MAAA;EAAA;EAnBnB;;;;;;EA2BhC,OAAA,EAAS,QAAA;EATL;;;;;;EAiBJ,IAAA,EAAM,QAAA,GAAW,UAAA,CAAW,MAAA;EAR5B;;;;;;;EAiBA,KAAA;IACE,QAAA,SAAiB,QAAA;IACjB,KAAA,SAAc,QAAA;IACd,MAAA,SAAe,QAAA;EAAA;EAAA;;;;;;EASjB,OAAA,WAWA;EANA,IAAA,YAAgB,oBAAA,EAShB;EANA,MAAA,GAAS,gBAAA,CAAiB,OAAA,GASV;EANhB,KAAA,GAAQ,MAAA,EASH;EANL,aAAA,WAeU;EAZV,aAAA,GAAgB,aAAA,EAYW;EAT3B,EAAA,GAAK,uBAAA;;;;;;;;EASL,OAAA,GAAU,iBAAA;AAAA"}
|
|
@@ -121,8 +121,10 @@ interface ToolConfig<TInput = unknown, TOutput = unknown> {
|
|
|
121
121
|
*
|
|
122
122
|
* Two forms:
|
|
123
123
|
* - **string** — static, used as-is.
|
|
124
|
-
* - **function** — receives the
|
|
125
|
-
*
|
|
124
|
+
* - **function** — receives the model's **raw, pre-validation**
|
|
125
|
+
* input (resolved at the dispatch boundary, before `execute`'s
|
|
126
|
+
* schema validation runs) and returns a string, so callers can
|
|
127
|
+
* include input data
|
|
126
128
|
* (`(input) => \`Searching for "${input.query}"\``).
|
|
127
129
|
*
|
|
128
130
|
* Resolved at the framework boundary; consumers receive a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.contract.d.mts","names":[],"sources":["../../../../../../../@warlock.js/ai/src/contracts/tool.contract.ts"],"mappings":";;;;;AAQA;;;;KAAY,QAAA,GAAW,MAAM;AAoC7B;;;;AAAoB;AAmCpB;;;;;;;;;;;;;;;AASsB;AAiBtB;;;;;;;;;;;;;AA7DA,KAAY,QAAA;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"tool.contract.d.mts","names":[],"sources":["../../../../../../../@warlock.js/ai/src/contracts/tool.contract.ts"],"mappings":";;;;;AAQA;;;;KAAY,QAAA,GAAW,MAAM;AAoC7B;;;;AAAoB;AAmCpB;;;;;;;;;;;;;;;AASsB;AAiBtB;;;;;;;;;;;;;AA7DA,KAAY,QAAA;;;;;;;;;;;;;;;;;;;;;;;;AAqHgD;;;;;;;;;;KAlFhD,WAAA,cAAyB,MAAA;;;;;;;EAOnC,SAAA,EAAW,UAAA;EAEX,MAAA,GAAS,WAAA;AAAA;;;;;;;;;;;;;;;UAiBM,UAAA;;EAEf,IAAA;;EAEA,WAAA;;;;;;;;EAQA,OAAA;;;;;;;;;;;;;;;;;;EAkBA,MAAA,cAAoB,KAAA,EAAO,MAAA;;EAE3B,IAAA,GAAO,QAAA;;;;;;;EAOP,IAAA,GAAO,QAAA;;;;;;EAMP,KAAA,GAAQ,gBAAA,CAAiB,MAAA;;;;;;;;;;;EAWzB,OAAA,CAAQ,KAAA,EAAO,MAAA,EAAQ,GAAA,GAAM,WAAA,GAAc,OAAA,CAAQ,OAAA;AAAA"}
|
|
@@ -169,13 +169,38 @@ type StepDefinition<TInput = unknown, TState = Record<string, unknown>, TContext
|
|
|
169
169
|
*/
|
|
170
170
|
retry?: RetryConfig | false;
|
|
171
171
|
/**
|
|
172
|
-
* Parallel children — run concurrently,
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
*
|
|
172
|
+
* Parallel children — run concurrently, each starting from a snapshot
|
|
173
|
+
* of the parent `ctx.state`. After every child settles, their
|
|
174
|
+
* resulting states are merged back into the parent in **declaration
|
|
175
|
+
* order** (the order children appear in this array), so a key written
|
|
176
|
+
* by more than one child deterministically resolves to the
|
|
177
|
+
* **last-declared** child's value — regardless of which child finished
|
|
178
|
+
* first. Supply {@link mergeState} to customize conflict resolution
|
|
179
|
+
* (e.g. sum counters, concat arrays). Mutually exclusive with `run`
|
|
180
|
+
* and `agent`. The parent's snapshot is atomic: written only after
|
|
181
|
+
* every child settles. Children are addressable at both
|
|
182
|
+
* `ctx.steps.<child>` and `ctx.steps.<parent>.steps.<child>`.
|
|
177
183
|
*/
|
|
178
184
|
parallel?: StepDefinition<TInput, TState, TContext>[];
|
|
185
|
+
/**
|
|
186
|
+
* Conflict resolver for {@link parallel} children that write the same
|
|
187
|
+
* `ctx.state` keys. Called once per child, in **declaration order**,
|
|
188
|
+
* with the accumulator (the parent state being built up), that child's
|
|
189
|
+
* resolved state, and the child's name. Mutate `acc` in place.
|
|
190
|
+
*
|
|
191
|
+
* Omit it to keep the deterministic default (last-declared child wins
|
|
192
|
+
* per key — a plain `Object.assign` in declaration order). Supply it
|
|
193
|
+
* for advanced merges:
|
|
194
|
+
*
|
|
195
|
+
* ```ts
|
|
196
|
+
* mergeState: (acc, childState) => {
|
|
197
|
+
* acc.total = (acc.total ?? 0) + (childState.total ?? 0); // sum
|
|
198
|
+
* }
|
|
199
|
+
* ```
|
|
200
|
+
*
|
|
201
|
+
* Only consulted for parallel steps; ignored otherwise.
|
|
202
|
+
*/
|
|
203
|
+
mergeState?: (acc: TState, childState: TState, childName: string) => void;
|
|
179
204
|
/**
|
|
180
205
|
* Per-step event handlers — fires alongside the workflow-level
|
|
181
206
|
* `workflow.step.*` events. Scope is step-local (no `workflow.`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step.contract.d.mts","names":[],"sources":["../../../../../../../../@warlock.js/ai/src/contracts/workflow/step.contract.ts"],"mappings":";;;;;;;;;;;;AAaA;;KAAY,eAAA;EAAe,yEAEzB,QAAA;IAAY,IAAA;EAAA,GAGV;EADF,QAAA;IACE,IAAA;IACA,OAAA;IACA,aAAA;IACA,SAAA;EAAA,GAGsC;EAAxC,MAAA;IAAU,IAAA;IAAc,KAAA;IAAgB,QAAA;EAAA,GAEY;EAApD,SAAA;IAAa,IAAA;IAAc,MAAA;IAAiB,QAAA;EAAA;AAAA;;;;;;KAQlC,cAAA,GAAiB,mBAAmB;EAqBvC,8DAnBP,MAAM;AAAA;;;;;;;;;;KAYI,cAAA,+CAGD,MAAA;EAGT,OAAA,GACE,GAAA,EAAK,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,QAAA,MAClC,OAAA,GAAU,OAAA,CAAQ,OAAA;EACvB,MAAA,GAAS,gBAAA,CAAiB,OAAA;AAAA;;;;;;;;;;;AAAO;AAoBnC;;;;;;KAAY,cAAA,4BAED,MAAA;EAkBI;;;;;;EATb,IAAA;EAwB4B;;;;;;;EAf5B,IAAA,IAAQ,GAAA,EAAK,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,QAAA,gBAAwB,OAAA;EAgCvD;;;;;;EAxBd,MAAA,IAAU,GAAA,EAAK,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,QAAA,aAAqB,OAAA;EA+B3D;;;;;EAxBT,GAAA,IAAO,GAAA,EAAK,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,QAAA;EA4CX;;;;;;;EAnCjC,KAAA,GAAQ,aAAA;EAoDuB;;;;;;EA5C/B,KAAA,IAAS,GAAA,EAAK,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,QAAA,MAAc,cAAA,GAAiB,OAAA,CAAQ,cAAA;EAsDpD;;;;;EA/CjC,MAAA,GAAS,cAAA,UAAwB,MAAA,EAAQ,MAAA,EAAQ,QAAA;
|
|
1
|
+
{"version":3,"file":"step.contract.d.mts","names":[],"sources":["../../../../../../../../@warlock.js/ai/src/contracts/workflow/step.contract.ts"],"mappings":";;;;;;;;;;;;AAaA;;KAAY,eAAA;EAAe,yEAEzB,QAAA;IAAY,IAAA;EAAA,GAGV;EADF,QAAA;IACE,IAAA;IACA,OAAA;IACA,aAAA;IACA,SAAA;EAAA,GAGsC;EAAxC,MAAA;IAAU,IAAA;IAAc,KAAA;IAAgB,QAAA;EAAA,GAEY;EAApD,SAAA;IAAa,IAAA;IAAc,MAAA;IAAiB,QAAA;EAAA;AAAA;;;;;;KAQlC,cAAA,GAAiB,mBAAmB;EAqBvC,8DAnBP,MAAM;AAAA;;;;;;;;;;KAYI,cAAA,+CAGD,MAAA;EAGT,OAAA,GACE,GAAA,EAAK,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,QAAA,MAClC,OAAA,GAAU,OAAA,CAAQ,OAAA;EACvB,MAAA,GAAS,gBAAA,CAAiB,OAAA;AAAA;;;;;;;;;;;AAAO;AAoBnC;;;;;;KAAY,cAAA,4BAED,MAAA;EAkBI;;;;;;EATb,IAAA;EAwB4B;;;;;;;EAf5B,IAAA,IAAQ,GAAA,EAAK,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,QAAA,gBAAwB,OAAA;EAgCvD;;;;;;EAxBd,MAAA,IAAU,GAAA,EAAK,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,QAAA,aAAqB,OAAA;EA+B3D;;;;;EAxBT,GAAA,IAAO,GAAA,EAAK,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,QAAA;EA4CX;;;;;;;EAnCjC,KAAA,GAAQ,aAAA;EAoDuB;;;;;;EA5C/B,KAAA,IAAS,GAAA,EAAK,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,QAAA,MAAc,cAAA,GAAiB,OAAA,CAAQ,cAAA;EAsDpD;;;;;EA/CjC,MAAA,GAAS,cAAA,UAAwB,MAAA,EAAQ,MAAA,EAAQ,QAAA;EAsEvB;;;;;;EA9D1B,KAAA,IAAS,GAAA,EAAK,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,QAAA,aAAqB,OAAA;EA2FzB;;;;;;;;;;EA/E1C,QAAA,IAAY,GAAA,EAAK,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,QAAA,MAAc,cAAA,GAAiB,OAAA,CAAQ,cAAA;EA3D3E;;;;;;;;;;;;;;EA2Eb,SAAA,IACE,GAAA,EAAK,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,QAAA,GACrC,KAAA,EAAO,OAAA,KACJ,cAAA,GAAiB,OAAA,CAAQ,cAAA;EA/DF;;;;;;EAuE5B,QAAA,IAAY,GAAA,EAAK,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,QAAA,aAAqB,OAAA;EAtDxD;;;;;;EA8Dd,KAAA,GAAQ,WAAA;EA9D6E;;;;;;;;;;;;;EA6ErF,QAAA,GAAW,cAAA,CAAe,MAAA,EAAQ,MAAA,EAAQ,QAAA;EAlDzB;;;;;;;;;;;;;;;;;;EAsEjB,UAAA,IAAc,GAAA,EAAK,MAAA,EAAQ,UAAA,EAAY,MAAA,EAAQ,SAAA;EA3C/C;;;;;;EAmDA,EAAA,GAAK,OAAA,eACS,eAAA,IAAmB,OAAA,EAAS,eAAA,CAAgB,CAAA;AAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ExecutableContract } from "../executable.contract.mjs";
|
|
2
2
|
import { WorkflowResult } from "../result/workflow-result.type.mjs";
|
|
3
3
|
import { ToolContract } from "../../tool/tool.mjs";
|
|
4
|
+
import { FlowObserveOption } from "../../observe/resolve-observers.mjs";
|
|
4
5
|
import { SnapshotStore } from "../orchestrator/snapshot-store.contract.mjs";
|
|
5
6
|
import { NextStepResult } from "./next-step-result.type.mjs";
|
|
6
7
|
import { RetryConfig } from "./retry-config.type.mjs";
|
|
@@ -99,6 +100,21 @@ type WorkflowDefinition<TInput = unknown, TOutput = unknown, TState = Record<str
|
|
|
99
100
|
nextStep?: (stepName: string, ctx: WorkflowContext<TInput, TState, TContext>) => NextStepResult | Promise<NextStepResult>;
|
|
100
101
|
output?: StepOutputSpec<TOutput, TInput, TState, TContext>;
|
|
101
102
|
on?: WorkflowEventHandlers;
|
|
103
|
+
/**
|
|
104
|
+
* Observability for this workflow. Additive and gated — when omitted,
|
|
105
|
+
* the workflow follows the global observe-all flag (off unless an
|
|
106
|
+
* observability tool turned it on), so behavior is unchanged by
|
|
107
|
+
* default.
|
|
108
|
+
*
|
|
109
|
+
* - `true` → route this run's completed report to the globally
|
|
110
|
+
* registered observers, even when observe-all is off.
|
|
111
|
+
* - `false` → opt this workflow out entirely, even when observe-all is on.
|
|
112
|
+
* - an `Observer` object → a flow-local collector receiving only this
|
|
113
|
+
* workflow's report. Typed as the structural `Observer` so core stays
|
|
114
|
+
* panoptic-agnostic; a panoptic flow-local collector can be passed
|
|
115
|
+
* directly. Observer errors are swallowed — they never break the run.
|
|
116
|
+
*/
|
|
117
|
+
observe?: FlowObserveOption;
|
|
102
118
|
};
|
|
103
119
|
/**
|
|
104
120
|
* Runtime handle returned by `ai.workflow(def)`. Implements the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.contract.d.mts","names":[],"sources":["../../../../../../../../@warlock.js/ai/src/contracts/workflow/workflow.contract.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"workflow.contract.d.mts","names":[],"sources":["../../../../../../../../@warlock.js/ai/src/contracts/workflow/workflow.contract.ts"],"mappings":";;;;;;;;;;;;;;KAaY,oBAAA,iBAAqC,gBAAA,KAC/C,OAAA,EAAS,gBAAA,CAAiB,CAAA;AAAA,KAGhB,qBAAA,GAAwB,OAAA,eACtB,gBAAA,GAAmB,oBAAA,CAAqB,CAAA;;;;;KAO1C,kBAAA;EAXiB,sEAa3B,KAAA,WAd+C;EAgB/C,MAAA,GAAS,WAAA,EAfiB;EAiB1B,EAAA,GAAK,qBAAA;EAjBuB;AAAA;AAG9B;;;;;EAsBE,OAAA,GAAU,QAAA;EAtBwB;;;;;;;EA8BlC,SAAA;AAAA;AA7BqD;AAOvD;;;;AAPuD,KAqC3C,sBAAA,yCAGR,kBAAA,CAAmB,QAAA;EACrB,KAAA,EAAO,MAAA;AAAA;AAAA,KAGG,qBAAA,uBACV,kBAAkB,CAAC,QAAA;EAtCU;;EAyC3B,KAAA;AAAA;AAAA,KAGQ,kBAAA,+CAGD,MAAA;EAGT,IAAA;EApCA;;;;AAQS;EAkCT,WAAA;EA1BgC;;;;;;;;;;EAqChC,WAAA,GAAc,gBAAA,CAAiB,MAAA;EAC/B,OAAA;EACA,KAAA,EAAO,cAAA,CAAe,MAAA,EAAQ,MAAA,EAAQ,QAAA;EAnCzB;AAAA;AAGf;;;;;;;;;EA4CE,aAAA,GAAgB,aAAA,CAAc,gBAAA;EArCpB;;;;;;;;;EA+CV,YAAA,GAAe,WAAA;EACf,QAAA;EACA,aAAA;EACA,QAAA,IACE,QAAA,UACA,GAAA,EAAK,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,QAAA,MAClC,cAAA,GAAiB,OAAA,CAAQ,cAAA;EAC9B,MAAA,GAAS,cAAA,CAAe,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,QAAA;EACjD,EAAA,GAAK,qBAAA;EAHkC;;;;;;;;;;;;;;EAkBvC,OAAA,GAAU,iBAAA;AAAA;;;;;;;UASK,gBAAA,+CAGN,MAAA,+CAED,kBAAA,CACR,MAAA,EACA,kBAAA,CAAmB,QAAA,GACnB,cAAA,CAAe,OAAA;EAAA,SAEN,IAAA;EAAA,SACA,WAAA;EAjET;;;;;;EAAA,SAwES,WAAA,GAAc,gBAAA,CAAiB,MAAA;EAAA,SAC/B,SAAA;EAAA,SACA,OAAA;EApDM;;;;;;;;;;;;;;EAoEf,OAAA,CACE,KAAA,EAAO,MAAA,EACP,OAAA,GAAU,kBAAA,CAAmB,QAAA,IAC5B,OAAA,CAAQ,cAAA,CAAe,OAAA;EAC1B,OAAA,CACE,OAAA,EAAS,sBAAA,CAAuB,MAAA,EAAQ,QAAA,IACvC,OAAA,CAAQ,cAAA,CAAe,OAAA;EAE1B,MAAA,CACE,KAAA,UACA,OAAA,GAAU,qBAAA,CAAsB,QAAA,IAC/B,OAAA,CAAQ,cAAA,CAAe,OAAA;EAE1B,EAAA,iBAAmB,gBAAA,EAAkB,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,oBAAA,CAAqB,CAAA;EAC7E,GAAA,iBAAoB,gBAAA,EAAkB,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,oBAAA,CAAqB,CAAA;EA1E9E;;;;;AAe2B;AAS7B;;;;;;;;;;EAoEE,MAAA,cAAoB,MAAA,EAAQ,OAAA;IAC1B,WAAA;IACA,WAAA,EAAa,gBAAA,CAAiB,UAAA;EAAA,IAC5B,YAAA,CAAa,UAAA,EAAY,OAAA;AAAA"}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* return agent.execute(input);
|
|
14
14
|
* }
|
|
15
15
|
*/
|
|
16
|
-
type AIErrorCode = "AGENT_EXEC_FAILED" | "AGENT_CANCELLED" | "AGENT_MAX_TRIPS" | "SCHEMA_VALIDATION_FAILED" | "TOOL_EXEC_FAILED" | "PROVIDER_ERROR" | "PROVIDER_RATE_LIMIT" | "PROVIDER_QUOTA_EXCEEDED" | "PROVIDER_TIMEOUT" | "CONTEXT_LENGTH_EXCEEDED" | "CONTENT_FILTER" | "PROVIDER_INVALID_REQUEST" | "PROVIDER_AUTH" | "BUDGET_EXCEEDED" | "GUARDRAIL_VIOLATION" | "WORKFLOW_ERROR" | "STEP_FAILED" | "WORKFLOW_DRIFT" | "WORKFLOW_CANCELLED" | "WORKFLOW_MAX_STEPS" | "WORKFLOW_INVALID_GOTO" | "SUPERVISOR_FAILED" | "SUPERVISOR_MAX_ITERATIONS" | "SUPERVISOR_INVALID_ROUTE" | "SUPERVISOR_CANCELLED" | "SUPERVISOR_DRIFT" | "SUPERVISOR_INTENT_DESCRIPTION_REQUIRED" | "SUPERVISOR_INTENT_MIXED_DISPATCH" | "SUPERVISOR_INTENT_STREAM_AND_OUTPUT" | "SUPERVISOR_INTENT_STREAM_TO_REQUIRED" | "SUPERVISOR_INTENT_STREAM_ON_WORKFLOW" | "SUPERVISOR_DISPATCH_CYCLE" | "ORCHESTRATOR_FAILED" | "ORCHESTRATOR_DRIFT" | "ORCHESTRATOR_CONFIG" | "ORCHESTRATOR_CANCELLED" | "PLANNER_FAILED" | "PLANNER_PLAN_INVALID" | "PLANNER_CANCELLED";
|
|
16
|
+
type AIErrorCode = "AGENT_EXEC_FAILED" | "AGENT_CANCELLED" | "AGENT_MAX_TRIPS" | "SCHEMA_VALIDATION_FAILED" | "TOOL_EXEC_FAILED" | "PROVIDER_ERROR" | "PROVIDER_RATE_LIMIT" | "PROVIDER_QUOTA_EXCEEDED" | "PROVIDER_TIMEOUT" | "CONTEXT_LENGTH_EXCEEDED" | "CONTENT_FILTER" | "PROVIDER_INVALID_REQUEST" | "PROVIDER_AUTH" | "BUDGET_EXCEEDED" | "GUARDRAIL_VIOLATION" | "WORKFLOW_ERROR" | "STEP_FAILED" | "WORKFLOW_DRIFT" | "WORKFLOW_CANCELLED" | "WORKFLOW_MAX_STEPS" | "WORKFLOW_INVALID_GOTO" | "SUPERVISOR_FAILED" | "SUPERVISOR_MAX_ITERATIONS" | "SUPERVISOR_INVALID_ROUTE" | "SUPERVISOR_CANCELLED" | "SUPERVISOR_DRIFT" | "SUPERVISOR_INTENT_DESCRIPTION_REQUIRED" | "SUPERVISOR_INTENT_MIXED_DISPATCH" | "SUPERVISOR_INTENT_STREAM_AND_OUTPUT" | "SUPERVISOR_INTENT_STREAM_TO_REQUIRED" | "SUPERVISOR_INTENT_STREAM_ON_WORKFLOW" | "SUPERVISOR_DISPATCH_CYCLE" | "ORCHESTRATOR_FAILED" | "ORCHESTRATOR_DRIFT" | "ORCHESTRATOR_CONFIG" | "ORCHESTRATOR_CANCELLED" | "PLANNER_FAILED" | "PLANNER_PLAN_INVALID" | "PLANNER_CANCELLED" | "VCR_CASSETTE_MISS" | "OUTBOUND_POLICY_BLOCKED";
|
|
17
17
|
//#endregion
|
|
18
18
|
export { AIErrorCode };
|
|
19
19
|
//# sourceMappingURL=error-code.type.d.mts.map
|
package/esm/errors/index.d.mts
CHANGED
|
@@ -18,6 +18,7 @@ import { OrchestratorFailedError } from "./orchestrator-failed-error.mjs";
|
|
|
18
18
|
import { OrchestratorCancelledError, OrchestratorCancelledErrorOptions } from "./orchestrator-cancelled-error.mjs";
|
|
19
19
|
import { OrchestratorConfigError } from "./orchestrator-config-error.mjs";
|
|
20
20
|
import { OrchestratorDriftError, OrchestratorDriftErrorOptions } from "./orchestrator-drift-error.mjs";
|
|
21
|
+
import { OutboundPolicyError } from "./outbound-policy-error.mjs";
|
|
21
22
|
import { PlannerFailedError } from "./planner-failed-error.mjs";
|
|
22
23
|
import { PlannerCancelledError, PlannerCancelledErrorOptions } from "./planner-cancelled-error.mjs";
|
|
23
24
|
import { PlannerPlanInvalidError } from "./planner-plan-invalid-error.mjs";
|
package/esm/errors/index.mjs
CHANGED
|
@@ -16,6 +16,7 @@ import { OrchestratorFailedError } from "./orchestrator-failed-error.mjs";
|
|
|
16
16
|
import { OrchestratorCancelledError } from "./orchestrator-cancelled-error.mjs";
|
|
17
17
|
import { OrchestratorConfigError } from "./orchestrator-config-error.mjs";
|
|
18
18
|
import { OrchestratorDriftError } from "./orchestrator-drift-error.mjs";
|
|
19
|
+
import { OutboundPolicyError } from "./outbound-policy-error.mjs";
|
|
19
20
|
import { PlannerFailedError } from "./planner-failed-error.mjs";
|
|
20
21
|
import { PlannerCancelledError } from "./planner-cancelled-error.mjs";
|
|
21
22
|
import { PlannerPlanInvalidError } from "./planner-plan-invalid-error.mjs";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ErrorCategory } from "./error-category.type.mjs";
|
|
2
|
+
import { AIError, AIErrorOptions } from "./ai-error.mjs";
|
|
3
|
+
|
|
4
|
+
//#region ../@warlock.js/ai/src/errors/outbound-policy-error.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* A server-side outbound request (attachment fetch, URL skill manifest,
|
|
7
|
+
* RAG loader, …) was blocked by the shared `OutboundPolicy` before it
|
|
8
|
+
* left the process — a disallowed scheme, a host outside the allowlist, a
|
|
9
|
+
* private / loopback / link-local / cloud-metadata address resolved after
|
|
10
|
+
* DNS, an oversized body, or a timeout.
|
|
11
|
+
*
|
|
12
|
+
* This is the framework's SSRF / resource-exhaustion guard surfacing: the
|
|
13
|
+
* request was refused on purpose, not a provider failure. `context`
|
|
14
|
+
* carries the offending `url` / `host` / `reason` for logs.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* if (error instanceof OutboundPolicyError) {
|
|
18
|
+
* logger.warn("blocked outbound fetch", { context: error.context });
|
|
19
|
+
* }
|
|
20
|
+
*/
|
|
21
|
+
declare class OutboundPolicyError extends AIError {
|
|
22
|
+
static readonly defaultCategory: ErrorCategory;
|
|
23
|
+
constructor(message: string, options?: AIErrorOptions);
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { OutboundPolicyError };
|
|
27
|
+
//# sourceMappingURL=outbound-policy-error.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbound-policy-error.d.mts","names":[],"sources":["../../../../../../../@warlock.js/ai/src/errors/outbound-policy-error.ts"],"mappings":";;;;;;AAmBA;;;;;;;;;;;;;;cAAa,mBAAA,SAA4B,OAAA;EAAA,gBAChB,eAAA,EAAiB,aAAA;cAErB,OAAA,UAAiB,OAAA,GAAU,cAAA;AAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { AIError } from "./ai-error.mjs";
|
|
2
|
+
|
|
3
|
+
//#region ../@warlock.js/ai/src/errors/outbound-policy-error.ts
|
|
4
|
+
/**
|
|
5
|
+
* A server-side outbound request (attachment fetch, URL skill manifest,
|
|
6
|
+
* RAG loader, …) was blocked by the shared `OutboundPolicy` before it
|
|
7
|
+
* left the process — a disallowed scheme, a host outside the allowlist, a
|
|
8
|
+
* private / loopback / link-local / cloud-metadata address resolved after
|
|
9
|
+
* DNS, an oversized body, or a timeout.
|
|
10
|
+
*
|
|
11
|
+
* This is the framework's SSRF / resource-exhaustion guard surfacing: the
|
|
12
|
+
* request was refused on purpose, not a provider failure. `context`
|
|
13
|
+
* carries the offending `url` / `host` / `reason` for logs.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* if (error instanceof OutboundPolicyError) {
|
|
17
|
+
* logger.warn("blocked outbound fetch", { context: error.context });
|
|
18
|
+
* }
|
|
19
|
+
*/
|
|
20
|
+
var OutboundPolicyError = class extends AIError {
|
|
21
|
+
static {
|
|
22
|
+
this.defaultCategory = "validation";
|
|
23
|
+
}
|
|
24
|
+
constructor(message, options) {
|
|
25
|
+
super("OUTBOUND_POLICY_BLOCKED", message, options);
|
|
26
|
+
this.name = "OutboundPolicyError";
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
//#endregion
|
|
31
|
+
export { OutboundPolicyError };
|
|
32
|
+
//# sourceMappingURL=outbound-policy-error.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbound-policy-error.mjs","names":[],"sources":["../../../../../../../@warlock.js/ai/src/errors/outbound-policy-error.ts"],"sourcesContent":["import { AIError, type AIErrorOptions } from \"./ai-error\";\nimport type { ErrorCategory } from \"./error-category.type\";\n\n/**\n * A server-side outbound request (attachment fetch, URL skill manifest,\n * RAG loader, …) was blocked by the shared `OutboundPolicy` before it\n * left the process — a disallowed scheme, a host outside the allowlist, a\n * private / loopback / link-local / cloud-metadata address resolved after\n * DNS, an oversized body, or a timeout.\n *\n * This is the framework's SSRF / resource-exhaustion guard surfacing: the\n * request was refused on purpose, not a provider failure. `context`\n * carries the offending `url` / `host` / `reason` for logs.\n *\n * @example\n * if (error instanceof OutboundPolicyError) {\n * logger.warn(\"blocked outbound fetch\", { context: error.context });\n * }\n */\nexport class OutboundPolicyError extends AIError {\n public static readonly defaultCategory: ErrorCategory = \"validation\";\n\n public constructor(message: string, options?: AIErrorOptions) {\n super(\"OUTBOUND_POLICY_BLOCKED\", message, options);\n this.name = \"OutboundPolicyError\";\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAmBA,IAAa,sBAAb,cAAyC,QAAQ;;yBACS;;CAExD,AAAO,YAAY,SAAiB,SAA0B;EAC5D,MAAM,2BAA2B,SAAS,OAAO;EACjD,KAAK,OAAO;CACd;AACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { DatasetContract, DatasetOptions } from "./dataset.type.mjs";
|
|
2
|
+
|
|
3
|
+
//#region ../@warlock.js/ai/src/eval/dataset.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Create an immutable evaluation dataset that feeds `agent.eval({ cases })`
|
|
6
|
+
* directly.
|
|
7
|
+
*
|
|
8
|
+
* **Role.** A taggable, filterable, shardable wrapper around a list of
|
|
9
|
+
* {@link DatasetEntry} rows. `agent.eval` accepts a `DatasetContract` in
|
|
10
|
+
* place of a raw `EvalCase[]`, reading `.cases` off it.
|
|
11
|
+
*
|
|
12
|
+
* Sources (combinable — file entries append after inline `cases`):
|
|
13
|
+
* - `cases` → inline entries.
|
|
14
|
+
* - `fromFile` → a JSONL file read once, synchronously, at construction
|
|
15
|
+
* (one JSON object per line). A malformed line throws an
|
|
16
|
+
* `InvalidRequestError` naming the 1-based line number.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* const ds = dataset({ name: "support", fromFile: "./eval/support.jsonl" });
|
|
20
|
+
* const smoke = ds.filter((entry) => entry.tags?.includes("smoke"));
|
|
21
|
+
* const shard = ds.shard(0, 4); // first of four parallel CI shards
|
|
22
|
+
*
|
|
23
|
+
* const report = await agent.eval({ cases: ds, scorers: [contains()] });
|
|
24
|
+
*/
|
|
25
|
+
declare function dataset<TOutput = unknown>(options: DatasetOptions<TOutput>): DatasetContract<TOutput>;
|
|
26
|
+
//#endregion
|
|
27
|
+
export { dataset };
|
|
28
|
+
//# sourceMappingURL=dataset.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataset.d.mts","names":[],"sources":["../../../../../../../@warlock.js/ai/src/eval/dataset.ts"],"mappings":";;;;;AAkIA;;;;;;;;;;;;;;;;AAE0B;;;iBAFV,OAAA,oBACd,OAAA,EAAS,cAAA,CAAe,OAAA,IACvB,eAAA,CAAgB,OAAA"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { InvalidRequestError } from "../errors/invalid-request-error.mjs";
|
|
2
|
+
import "../errors/index.mjs";
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
4
|
+
|
|
5
|
+
//#region ../@warlock.js/ai/src/eval/dataset.ts
|
|
6
|
+
/**
|
|
7
|
+
* Parse a JSONL file's contents into {@link DatasetEntry} rows. Blank
|
|
8
|
+
* lines (and trailing whitespace-only lines) are skipped; every other
|
|
9
|
+
* line must be a JSON object. A malformed line throws an
|
|
10
|
+
* `InvalidRequestError` naming the 1-based line number — failing loud at
|
|
11
|
+
* construction, like `SystemPrompt.fromFile`.
|
|
12
|
+
*/
|
|
13
|
+
function parseJsonl(path, contents) {
|
|
14
|
+
const entries = [];
|
|
15
|
+
const lines = contents.split(/\r?\n/);
|
|
16
|
+
for (let index = 0; index < lines.length; index++) {
|
|
17
|
+
const line = lines[index].trim();
|
|
18
|
+
if (line === "") continue;
|
|
19
|
+
let parsed;
|
|
20
|
+
try {
|
|
21
|
+
parsed = JSON.parse(line);
|
|
22
|
+
} catch (error) {
|
|
23
|
+
throw new InvalidRequestError(`Failed to parse dataset file "${path}" — line ${index + 1} is not valid JSON: ${error instanceof Error ? error.message : String(error)}`, {
|
|
24
|
+
context: {
|
|
25
|
+
path,
|
|
26
|
+
line: index + 1
|
|
27
|
+
},
|
|
28
|
+
cause: error
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) throw new InvalidRequestError(`Failed to parse dataset file "${path}" — line ${index + 1} is not a JSON object`, { context: {
|
|
32
|
+
path,
|
|
33
|
+
line: index + 1
|
|
34
|
+
} });
|
|
35
|
+
entries.push(parsed);
|
|
36
|
+
}
|
|
37
|
+
return entries;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Read a JSONL dataset file once, synchronously, at construction.
|
|
41
|
+
* Mirrors `SystemPrompt.fromFile`: a read failure (missing path,
|
|
42
|
+
* permission denied) throws an `InvalidRequestError` surfacing the
|
|
43
|
+
* underlying cause.
|
|
44
|
+
*/
|
|
45
|
+
function readDatasetFile(path) {
|
|
46
|
+
let contents;
|
|
47
|
+
try {
|
|
48
|
+
contents = readFileSync(path, "utf8");
|
|
49
|
+
} catch (error) {
|
|
50
|
+
throw new InvalidRequestError(`Failed to read dataset file "${path}" — ${error instanceof Error ? error.message : String(error)}`, {
|
|
51
|
+
context: { path },
|
|
52
|
+
cause: error
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return parseJsonl(path, contents);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Build an immutable {@link DatasetContract} over the given entries.
|
|
59
|
+
* Shared by the {@link dataset} factory and by `filter` / `shard`, which
|
|
60
|
+
* each return a fresh dataset built from a derived case list.
|
|
61
|
+
*/
|
|
62
|
+
function makeDataset(name, cases) {
|
|
63
|
+
return {
|
|
64
|
+
name,
|
|
65
|
+
cases,
|
|
66
|
+
filter(predicate) {
|
|
67
|
+
return makeDataset(name, cases.filter(predicate));
|
|
68
|
+
},
|
|
69
|
+
shard(index, total) {
|
|
70
|
+
if (!Number.isInteger(total) || total <= 0) throw new InvalidRequestError(`dataset.shard: "total" must be a positive integer, received ${total}`, { context: {
|
|
71
|
+
name,
|
|
72
|
+
total
|
|
73
|
+
} });
|
|
74
|
+
if (!Number.isInteger(index) || index < 0 || index >= total) throw new InvalidRequestError(`dataset.shard: "index" must be an integer in [0, ${total}), received ${index}`, { context: {
|
|
75
|
+
name,
|
|
76
|
+
index,
|
|
77
|
+
total
|
|
78
|
+
} });
|
|
79
|
+
return makeDataset(name, cases.filter((_, position) => position % total === index));
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Create an immutable evaluation dataset that feeds `agent.eval({ cases })`
|
|
85
|
+
* directly.
|
|
86
|
+
*
|
|
87
|
+
* **Role.** A taggable, filterable, shardable wrapper around a list of
|
|
88
|
+
* {@link DatasetEntry} rows. `agent.eval` accepts a `DatasetContract` in
|
|
89
|
+
* place of a raw `EvalCase[]`, reading `.cases` off it.
|
|
90
|
+
*
|
|
91
|
+
* Sources (combinable — file entries append after inline `cases`):
|
|
92
|
+
* - `cases` → inline entries.
|
|
93
|
+
* - `fromFile` → a JSONL file read once, synchronously, at construction
|
|
94
|
+
* (one JSON object per line). A malformed line throws an
|
|
95
|
+
* `InvalidRequestError` naming the 1-based line number.
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* const ds = dataset({ name: "support", fromFile: "./eval/support.jsonl" });
|
|
99
|
+
* const smoke = ds.filter((entry) => entry.tags?.includes("smoke"));
|
|
100
|
+
* const shard = ds.shard(0, 4); // first of four parallel CI shards
|
|
101
|
+
*
|
|
102
|
+
* const report = await agent.eval({ cases: ds, scorers: [contains()] });
|
|
103
|
+
*/
|
|
104
|
+
function dataset(options) {
|
|
105
|
+
const cases = [...options.cases ?? []];
|
|
106
|
+
if (options.fromFile !== void 0) cases.push(...readDatasetFile(options.fromFile));
|
|
107
|
+
return makeDataset(options.name, cases);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
//#endregion
|
|
111
|
+
export { dataset };
|
|
112
|
+
//# sourceMappingURL=dataset.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataset.mjs","names":[],"sources":["../../../../../../../@warlock.js/ai/src/eval/dataset.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type { DatasetContract, DatasetEntry, DatasetOptions } from \"./dataset.type\";\nimport { InvalidRequestError } from \"../errors\";\n\n/**\n * Parse a JSONL file's contents into {@link DatasetEntry} rows. Blank\n * lines (and trailing whitespace-only lines) are skipped; every other\n * line must be a JSON object. A malformed line throws an\n * `InvalidRequestError` naming the 1-based line number — failing loud at\n * construction, like `SystemPrompt.fromFile`.\n */\nfunction parseJsonl<TOutput>(path: string, contents: string): DatasetEntry<TOutput>[] {\n const entries: DatasetEntry<TOutput>[] = [];\n const lines = contents.split(/\\r?\\n/);\n\n for (let index = 0; index < lines.length; index++) {\n const line = lines[index].trim();\n\n if (line === \"\") {\n continue;\n }\n\n let parsed: unknown;\n\n try {\n parsed = JSON.parse(line);\n } catch (error) {\n throw new InvalidRequestError(\n `Failed to parse dataset file \"${path}\" — line ${index + 1} is not valid JSON: ${\n error instanceof Error ? error.message : String(error)\n }`,\n { context: { path, line: index + 1 }, cause: error },\n );\n }\n\n if (parsed === null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new InvalidRequestError(\n `Failed to parse dataset file \"${path}\" — line ${index + 1} is not a JSON object`,\n { context: { path, line: index + 1 } },\n );\n }\n\n entries.push(parsed as DatasetEntry<TOutput>);\n }\n\n return entries;\n}\n\n/**\n * Read a JSONL dataset file once, synchronously, at construction.\n * Mirrors `SystemPrompt.fromFile`: a read failure (missing path,\n * permission denied) throws an `InvalidRequestError` surfacing the\n * underlying cause.\n */\nfunction readDatasetFile<TOutput>(path: string): DatasetEntry<TOutput>[] {\n let contents: string;\n\n try {\n contents = readFileSync(path, \"utf8\");\n } catch (error) {\n throw new InvalidRequestError(\n `Failed to read dataset file \"${path}\" — ${\n error instanceof Error ? error.message : String(error)\n }`,\n { context: { path }, cause: error },\n );\n }\n\n return parseJsonl<TOutput>(path, contents);\n}\n\n/**\n * Build an immutable {@link DatasetContract} over the given entries.\n * Shared by the {@link dataset} factory and by `filter` / `shard`, which\n * each return a fresh dataset built from a derived case list.\n */\nfunction makeDataset<TOutput>(\n name: string,\n cases: DatasetEntry<TOutput>[],\n): DatasetContract<TOutput> {\n return {\n name,\n cases,\n filter(predicate) {\n return makeDataset(name, cases.filter(predicate));\n },\n shard(index, total) {\n if (!Number.isInteger(total) || total <= 0) {\n throw new InvalidRequestError(\n `dataset.shard: \"total\" must be a positive integer, received ${total}`,\n { context: { name, total } },\n );\n }\n\n if (!Number.isInteger(index) || index < 0 || index >= total) {\n throw new InvalidRequestError(\n `dataset.shard: \"index\" must be an integer in [0, ${total}), received ${index}`,\n { context: { name, index, total } },\n );\n }\n\n return makeDataset(\n name,\n cases.filter((_, position) => position % total === index),\n );\n },\n };\n}\n\n/**\n * Create an immutable evaluation dataset that feeds `agent.eval({ cases })`\n * directly.\n *\n * **Role.** A taggable, filterable, shardable wrapper around a list of\n * {@link DatasetEntry} rows. `agent.eval` accepts a `DatasetContract` in\n * place of a raw `EvalCase[]`, reading `.cases` off it.\n *\n * Sources (combinable — file entries append after inline `cases`):\n * - `cases` → inline entries.\n * - `fromFile` → a JSONL file read once, synchronously, at construction\n * (one JSON object per line). A malformed line throws an\n * `InvalidRequestError` naming the 1-based line number.\n *\n * @example\n * const ds = dataset({ name: \"support\", fromFile: \"./eval/support.jsonl\" });\n * const smoke = ds.filter((entry) => entry.tags?.includes(\"smoke\"));\n * const shard = ds.shard(0, 4); // first of four parallel CI shards\n *\n * const report = await agent.eval({ cases: ds, scorers: [contains()] });\n */\nexport function dataset<TOutput = unknown>(\n options: DatasetOptions<TOutput>,\n): DatasetContract<TOutput> {\n const cases: DatasetEntry<TOutput>[] = [...(options.cases ?? [])];\n\n if (options.fromFile !== undefined) {\n cases.push(...readDatasetFile<TOutput>(options.fromFile));\n }\n\n return makeDataset(options.name, cases);\n}\n"],"mappings":";;;;;;;;;;;;AAWA,SAAS,WAAoB,MAAc,UAA2C;CACpF,MAAM,UAAmC,CAAC;CAC1C,MAAM,QAAQ,SAAS,MAAM,OAAO;CAEpC,KAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;EACjD,MAAM,OAAO,MAAM,MAAM,CAAC,KAAK;EAE/B,IAAI,SAAS,IACX;EAGF,IAAI;EAEJ,IAAI;GACF,SAAS,KAAK,MAAM,IAAI;EAC1B,SAAS,OAAO;GACd,MAAM,IAAI,oBACR,iCAAiC,KAAK,WAAW,QAAQ,EAAE,sBACzD,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KAEvD;IAAE,SAAS;KAAE;KAAM,MAAM,QAAQ;IAAE;IAAG,OAAO;GAAM,CACrD;EACF;EAEA,IAAI,WAAW,QAAQ,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,GACvE,MAAM,IAAI,oBACR,iCAAiC,KAAK,WAAW,QAAQ,EAAE,wBAC3D,EAAE,SAAS;GAAE;GAAM,MAAM,QAAQ;EAAE,EAAE,CACvC;EAGF,QAAQ,KAAK,MAA+B;CAC9C;CAEA,OAAO;AACT;;;;;;;AAQA,SAAS,gBAAyB,MAAuC;CACvE,IAAI;CAEJ,IAAI;EACF,WAAW,aAAa,MAAM,MAAM;CACtC,SAAS,OAAO;EACd,MAAM,IAAI,oBACR,gCAAgC,KAAK,MACnC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KAEvD;GAAE,SAAS,EAAE,KAAK;GAAG,OAAO;EAAM,CACpC;CACF;CAEA,OAAO,WAAoB,MAAM,QAAQ;AAC3C;;;;;;AAOA,SAAS,YACP,MACA,OAC0B;CAC1B,OAAO;EACL;EACA;EACA,OAAO,WAAW;GAChB,OAAO,YAAY,MAAM,MAAM,OAAO,SAAS,CAAC;EAClD;EACA,MAAM,OAAO,OAAO;GAClB,IAAI,CAAC,OAAO,UAAU,KAAK,KAAK,SAAS,GACvC,MAAM,IAAI,oBACR,+DAA+D,SAC/D,EAAE,SAAS;IAAE;IAAM;GAAM,EAAE,CAC7B;GAGF,IAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK,SAAS,OACpD,MAAM,IAAI,oBACR,oDAAoD,MAAM,cAAc,SACxE,EAAE,SAAS;IAAE;IAAM;IAAO;GAAM,EAAE,CACpC;GAGF,OAAO,YACL,MACA,MAAM,QAAQ,GAAG,aAAa,WAAW,UAAU,KAAK,CAC1D;EACF;CACF;AACF;;;;;;;;;;;;;;;;;;;;;;AAuBA,SAAgB,QACd,SAC0B;CAC1B,MAAM,QAAiC,CAAC,GAAI,QAAQ,SAAS,CAAC,CAAE;CAEhE,IAAI,QAAQ,aAAa,QACvB,MAAM,KAAK,GAAG,gBAAyB,QAAQ,QAAQ,CAAC;CAG1D,OAAO,YAAY,QAAQ,MAAM,KAAK;AACxC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { EvalCase } from "../contracts/agent/eval.type.mjs";
|
|
2
|
+
|
|
3
|
+
//#region ../@warlock.js/ai/src/eval/dataset.type.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* A single dataset row. A superset of {@link EvalCase} — every dataset
|
|
6
|
+
* entry is a valid eval case, plus optional `tags` for filtering and
|
|
7
|
+
* sharding a large suite.
|
|
8
|
+
*/
|
|
9
|
+
type DatasetEntry<TOutput = unknown> = EvalCase<TOutput> & {
|
|
10
|
+
/** Optional tags for filtering / sharding a large dataset. */tags?: string[];
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* An immutable, filterable, shardable collection of {@link DatasetEntry}
|
|
14
|
+
* rows that feeds `agent.eval({ cases })` directly. Built via the
|
|
15
|
+
* {@link dataset} factory — never `new`.
|
|
16
|
+
*/
|
|
17
|
+
type DatasetContract<TOutput = unknown> = {
|
|
18
|
+
/** Stable identifier for the dataset — surfaced for logging / artifacts. */readonly name: string; /** All entries (after any filter / shard applied at construction). */
|
|
19
|
+
readonly cases: DatasetEntry<TOutput>[];
|
|
20
|
+
/**
|
|
21
|
+
* Narrow by an arbitrary predicate (typically a tag check) — returns a
|
|
22
|
+
* new dataset sharing nothing mutable with this one.
|
|
23
|
+
*/
|
|
24
|
+
filter(predicate: (entry: DatasetEntry<TOutput>) => boolean): DatasetContract<TOutput>;
|
|
25
|
+
/**
|
|
26
|
+
* Deterministic shard `index`-of-`total` for parallel CI jobs. Every
|
|
27
|
+
* entry lands in exactly one shard (round-robin by position), so the
|
|
28
|
+
* union of all `total` shards reproduces the full case list with no
|
|
29
|
+
* gaps or overlaps.
|
|
30
|
+
*/
|
|
31
|
+
shard(index: number, total: number): DatasetContract<TOutput>;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Options for the {@link dataset} factory. Supply `cases` inline, or
|
|
35
|
+
* `fromFile` to load a JSONL file (one JSON-encoded {@link DatasetEntry}
|
|
36
|
+
* per line) synchronously at construction — mirroring
|
|
37
|
+
* `SystemPrompt.fromFile`'s one-shot sync read. Both may be combined;
|
|
38
|
+
* file entries are appended after inline `cases`.
|
|
39
|
+
*/
|
|
40
|
+
type DatasetOptions<TOutput = unknown> = {
|
|
41
|
+
/** Stable identifier for the dataset. */name: string; /** Inline entries. */
|
|
42
|
+
cases?: DatasetEntry<TOutput>[];
|
|
43
|
+
/**
|
|
44
|
+
* Path to a JSONL file read once, synchronously, at construction. Each
|
|
45
|
+
* non-blank line must be a JSON object matching {@link DatasetEntry}; a
|
|
46
|
+
* malformed line throws an `InvalidRequestError` naming the 1-based line
|
|
47
|
+
* number.
|
|
48
|
+
*/
|
|
49
|
+
fromFile?: string;
|
|
50
|
+
};
|
|
51
|
+
//#endregion
|
|
52
|
+
export { DatasetContract, DatasetEntry, DatasetOptions };
|
|
53
|
+
//# sourceMappingURL=dataset.type.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataset.type.d.mts","names":[],"sources":["../../../../../../../@warlock.js/ai/src/eval/dataset.type.ts"],"mappings":";;;;;AAOA;;;KAAY,YAAA,sBAAkC,QAAQ,CAAC,OAAA;EAA9B,8DAEvB,IAAA;AAAA;;;AAAI;AAQN;;KAAY,eAAA;EAImB,qFAFpB,IAAA,UAQyB;EAAA,SANzB,KAAA,EAAO,YAAA,CAAa,OAAA;EAOV;;;;EAFnB,MAAA,CACE,SAAA,GAAY,KAAA,EAAO,YAAA,CAAa,OAAA,gBAC/B,eAAA,CAAgB,OAAA;EAOiC;;;;;;EAApD,KAAA,CAAM,KAAA,UAAe,KAAA,WAAgB,eAAA,CAAgB,OAAA;AAAA;;;;;;;;KAU3C,cAAA;EAV2B,yCAYrC,IAAA,UAZ4D;EAc5D,KAAA,GAAQ,YAAY,CAAC,OAAA;EAJX;;;;;;EAWV,QAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eval-runner.d.mts","names":[],"sources":["../../../../../../../@warlock.js/ai/src/eval/eval-runner.ts"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"eval-runner.d.mts","names":[],"sources":["../../../../../../../@warlock.js/ai/src/eval/eval-runner.ts"],"mappings":";;;;;;AAqJA;;;;;;;iBAAsB,OAAA,UACpB,KAAA,EAAO,aAAA,CAAc,OAAA,GACrB,OAAA,EAAS,WAAA,CAAY,OAAA,IACpB,OAAA,CAAQ,UAAA,CAAW,OAAA"}
|
package/esm/eval/eval-runner.mjs
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
import { AgentExecutionError } from "../errors/agent-execution-error.mjs";
|
|
2
2
|
import "../errors/index.mjs";
|
|
3
3
|
import { judge } from "./judge-scorer.mjs";
|
|
4
|
+
import { diff } from "./regression.mjs";
|
|
4
5
|
import { log } from "@warlock.js/logger";
|
|
5
6
|
|
|
6
7
|
//#region ../@warlock.js/ai/src/eval/eval-runner.ts
|
|
8
|
+
/**
|
|
9
|
+
* Narrow `EvalOptions.cases` to the underlying `EvalCase[]`. A
|
|
10
|
+
* `DatasetContract` is identified structurally by its `cases` property
|
|
11
|
+
* (an array carried alongside `name` / `filter` / `shard`); a raw
|
|
12
|
+
* `EvalCase[]` is used as-is.
|
|
13
|
+
*/
|
|
14
|
+
function resolveCases(cases) {
|
|
15
|
+
if (Array.isArray(cases)) return cases;
|
|
16
|
+
return cases.cases;
|
|
17
|
+
}
|
|
7
18
|
const LOG_MODULE = "ai.eval";
|
|
8
19
|
const DEFAULT_PASS_THRESHOLD = .5;
|
|
9
20
|
/**
|
|
@@ -86,8 +97,9 @@ async function runCase(agent, evalCase, options, passThreshold) {
|
|
|
86
97
|
async function runEval(agent, options) {
|
|
87
98
|
const passThreshold = options.passThreshold ?? DEFAULT_PASS_THRESHOLD;
|
|
88
99
|
const start = performance.now();
|
|
100
|
+
const suiteCases = resolveCases(options.cases);
|
|
89
101
|
const cases = [];
|
|
90
|
-
for (const evalCase of
|
|
102
|
+
for (const evalCase of suiteCases) {
|
|
91
103
|
const caseResult = await runCase(agent, evalCase, options, passThreshold);
|
|
92
104
|
cases.push(caseResult);
|
|
93
105
|
if (!caseResult.passed && options.onFailure) try {
|
|
@@ -103,7 +115,7 @@ async function runEval(agent, options) {
|
|
|
103
115
|
const passedCount = cases.filter((entry) => entry.passed).length;
|
|
104
116
|
const total = cases.length;
|
|
105
117
|
const meanScore = total > 0 ? cases.reduce((sum, entry) => sum + entry.score, 0) / total : 0;
|
|
106
|
-
|
|
118
|
+
const report = {
|
|
107
119
|
agentName: agent.name,
|
|
108
120
|
total,
|
|
109
121
|
passedCount,
|
|
@@ -114,6 +126,8 @@ async function runEval(agent, options) {
|
|
|
114
126
|
cases,
|
|
115
127
|
duration: performance.now() - start
|
|
116
128
|
};
|
|
129
|
+
if (options.baseline) report.regression = diff(report, options.baseline, options.tolerance);
|
|
130
|
+
return report;
|
|
117
131
|
}
|
|
118
132
|
|
|
119
133
|
//#endregion
|