@opensearch-project/agent-health 0.3.0 → 0.5.2
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 +77 -6
- package/cli/dist/index.js +10072 -4502
- package/deployment/cloudformation/agent-health-observability.yaml +762 -0
- package/dist/assets/index-CCQRDlO0.js +243 -0
- package/dist/assets/index-CNHQVbcj.css +1 -0
- package/dist/index.html +2 -2
- package/docs/ARCHITECTURE.md +450 -0
- package/docs/BACKEND_JOB_QUEUE.md +405 -0
- package/docs/CLAUDE_CODE_TELEMETRY.md +283 -0
- package/docs/CLI.md +431 -0
- package/docs/CODING_AGENT_ANALYTICS.md +298 -0
- package/docs/CONFIGURATION.md +388 -0
- package/docs/CONNECTORS.md +536 -0
- package/docs/INSTRUMENT_WITH_OTEL.md +390 -0
- package/docs/ML-COMMONS-SETUP.md +289 -0
- package/docs/NPX_PACKAGING.md +195 -0
- package/docs/PERFORMANCE-MONITORING.md +200 -0
- package/docs/PERFORMANCE.md +390 -0
- package/docs/PI_PROFILING.md +169 -0
- package/docs/PLAN-non-agui-agent-support.md +525 -0
- package/docs/SDK.md +577 -0
- package/docs/SKILLS.md +264 -0
- package/docs/blogs/2026-02-28-opensearch-agent-health.md +200 -0
- package/docs/blogs/getting-started-blog.md +608 -0
- package/docs/diagrams/Agent-health.excalidraw +5656 -0
- package/docs/diagrams/architecture.png +0 -0
- package/docs/plans/field-redesign.md +468 -0
- package/docs/rfcs/001-coding-agent-analytics.md +374 -0
- package/docs/rfcs/002-enterprise-leaderboard.md +267 -0
- package/docs/rfcs/003-remote-aggregation.md +146 -0
- package/docs/rfcs/004-test-sdk-v2.md +599 -0
- package/docs/skills/AGENT_HEALTH.md +598 -0
- package/docs/skills/AGENT_PROFILE.md +191 -0
- package/docs/skills/add-connector/SKILL.md +68 -0
- package/docs/skills/agent-health-profile/SKILL.md +40 -0
- package/docs/skills/config-auth/SKILL.md +194 -0
- package/docs/skills/config-auth/evals/evals.json +35 -0
- package/docs/skills/create-pr/SKILL.md +73 -0
- package/docs/skills/instrument-otel/SKILL.md +84 -0
- package/docs/skills/write-test/SKILL.md +124 -0
- package/docs/ui prd.md +376 -0
- package/examples/README.md +53 -0
- package/examples/config/agent-health.config.example.ts +155 -0
- package/examples/connectors/echo-connector.ts +131 -0
- package/examples/eval-files/demo.eval.js +128 -0
- package/examples/eval-files/sdk-hooks-demo.eval.js +99 -0
- package/examples/pi-profiling/README.md +77 -0
- package/examples/pi-profiling/agent-health-profile.ts +417 -0
- package/lib/dist/lib/agentUtils.d.ts +29 -0
- package/lib/dist/lib/agentUtils.d.ts.map +1 -0
- package/lib/dist/lib/agentUtils.js +43 -0
- package/lib/dist/lib/agentUtils.js.map +1 -0
- package/lib/dist/lib/benchmarkExport.d.ts +14 -0
- package/lib/dist/lib/benchmarkExport.d.ts.map +1 -0
- package/lib/dist/lib/benchmarkExport.js +41 -0
- package/lib/dist/lib/benchmarkExport.js.map +1 -0
- package/lib/dist/lib/benchmarkVersionUtils.d.ts +37 -0
- package/lib/dist/lib/benchmarkVersionUtils.d.ts.map +1 -0
- package/lib/dist/lib/benchmarkVersionUtils.js +68 -0
- package/lib/dist/lib/benchmarkVersionUtils.js.map +1 -0
- package/lib/dist/lib/config/defineConfig.d.ts +27 -0
- package/lib/dist/lib/config/defineConfig.d.ts.map +1 -0
- package/lib/dist/lib/config/defineConfig.js +28 -0
- package/lib/dist/lib/config/defineConfig.js.map +1 -0
- package/lib/dist/lib/config/index.d.ts +9 -0
- package/lib/dist/lib/config/index.d.ts.map +1 -0
- package/lib/dist/lib/config/index.js +8 -0
- package/lib/dist/lib/config/index.js.map +1 -0
- package/lib/dist/lib/config/loader.d.ts +39 -0
- package/lib/dist/lib/config/loader.d.ts.map +1 -0
- package/lib/dist/lib/config/loader.js +258 -0
- package/lib/dist/lib/config/loader.js.map +1 -0
- package/lib/dist/lib/config/statePaths.d.ts +61 -0
- package/lib/dist/lib/config/statePaths.d.ts.map +1 -0
- package/lib/dist/lib/config/statePaths.js +188 -0
- package/lib/dist/lib/config/statePaths.js.map +1 -0
- package/lib/dist/lib/config/types.d.ts +231 -0
- package/lib/dist/lib/config/types.d.ts.map +1 -0
- package/lib/dist/lib/config/types.js +6 -0
- package/lib/dist/lib/config/types.js.map +1 -0
- package/lib/dist/lib/config.d.ts +39 -0
- package/lib/dist/lib/config.d.ts.map +1 -0
- package/lib/dist/lib/config.js +118 -0
- package/lib/dist/lib/config.js.map +1 -0
- package/lib/dist/lib/constants.d.ts +70 -0
- package/lib/dist/lib/constants.d.ts.map +1 -0
- package/lib/dist/lib/constants.js +365 -0
- package/lib/dist/lib/constants.js.map +1 -0
- package/lib/dist/lib/contextUtilization.d.ts +23 -0
- package/lib/dist/lib/contextUtilization.d.ts.map +1 -0
- package/lib/dist/lib/contextUtilization.js +72 -0
- package/lib/dist/lib/contextUtilization.js.map +1 -0
- package/lib/dist/lib/dashboardMetrics.d.ts +87 -0
- package/lib/dist/lib/dashboardMetrics.d.ts.map +1 -0
- package/lib/dist/lib/dashboardMetrics.js +242 -0
- package/lib/dist/lib/dashboardMetrics.js.map +1 -0
- package/lib/dist/lib/dataSourceConfig.d.ts +108 -0
- package/lib/dist/lib/dataSourceConfig.d.ts.map +1 -0
- package/lib/dist/lib/dataSourceConfig.js +166 -0
- package/lib/dist/lib/dataSourceConfig.js.map +1 -0
- package/lib/dist/lib/debug.d.ts +26 -0
- package/lib/dist/lib/debug.d.ts.map +1 -0
- package/lib/dist/lib/debug.js +132 -0
- package/lib/dist/lib/debug.js.map +1 -0
- package/lib/dist/lib/diagnostics.d.ts +28 -0
- package/lib/dist/lib/diagnostics.d.ts.map +1 -0
- package/lib/dist/lib/diagnostics.js +65 -0
- package/lib/dist/lib/diagnostics.js.map +1 -0
- package/lib/dist/lib/envCompat.d.ts +27 -0
- package/lib/dist/lib/envCompat.d.ts.map +1 -0
- package/lib/dist/lib/envCompat.js +73 -0
- package/lib/dist/lib/envCompat.js.map +1 -0
- package/lib/dist/lib/findPackageRoot.d.ts +7 -0
- package/lib/dist/lib/findPackageRoot.d.ts.map +1 -0
- package/lib/dist/lib/findPackageRoot.js +57 -0
- package/lib/dist/lib/findPackageRoot.js.map +1 -0
- package/lib/dist/lib/hooks.d.ts +36 -0
- package/lib/dist/lib/hooks.d.ts.map +1 -0
- package/lib/dist/lib/hooks.js +112 -0
- package/lib/dist/lib/hooks.js.map +1 -0
- package/lib/dist/lib/index.d.ts +47 -0
- package/lib/dist/lib/index.d.ts.map +1 -0
- package/lib/dist/lib/index.js +62 -0
- package/lib/dist/lib/index.js.map +1 -0
- package/lib/dist/lib/labels.d.ts +90 -0
- package/lib/dist/lib/labels.d.ts.map +1 -0
- package/lib/dist/lib/labels.js +158 -0
- package/lib/dist/lib/labels.js.map +1 -0
- package/lib/dist/lib/markdown.d.ts +16 -0
- package/lib/dist/lib/markdown.d.ts.map +1 -0
- package/lib/dist/lib/markdown.js +42 -0
- package/lib/dist/lib/markdown.js.map +1 -0
- package/lib/dist/lib/matchers/expect.d.ts +3 -0
- package/lib/dist/lib/matchers/expect.d.ts.map +1 -0
- package/lib/dist/lib/matchers/expect.js +225 -0
- package/lib/dist/lib/matchers/expect.js.map +1 -0
- package/lib/dist/lib/matchers/index.d.ts +8 -0
- package/lib/dist/lib/matchers/index.d.ts.map +1 -0
- package/lib/dist/lib/matchers/index.js +9 -0
- package/lib/dist/lib/matchers/index.js.map +1 -0
- package/lib/dist/lib/matchers/judgeAccessor.d.ts +113 -0
- package/lib/dist/lib/matchers/judgeAccessor.d.ts.map +1 -0
- package/lib/dist/lib/matchers/judgeAccessor.js +183 -0
- package/lib/dist/lib/matchers/judgeAccessor.js.map +1 -0
- package/lib/dist/lib/matchers/session.d.ts +39 -0
- package/lib/dist/lib/matchers/session.d.ts.map +1 -0
- package/lib/dist/lib/matchers/session.js +116 -0
- package/lib/dist/lib/matchers/session.js.map +1 -0
- package/lib/dist/lib/matchers/traces.d.ts +55 -0
- package/lib/dist/lib/matchers/traces.d.ts.map +1 -0
- package/lib/dist/lib/matchers/traces.js +116 -0
- package/lib/dist/lib/matchers/traces.js.map +1 -0
- package/lib/dist/lib/matchers/types.d.ts +75 -0
- package/lib/dist/lib/matchers/types.d.ts.map +1 -0
- package/lib/dist/lib/matchers/types.js +6 -0
- package/lib/dist/lib/matchers/types.js.map +1 -0
- package/lib/dist/lib/packagePaths.d.ts +29 -0
- package/lib/dist/lib/packagePaths.d.ts.map +1 -0
- package/lib/dist/lib/packagePaths.js +63 -0
- package/lib/dist/lib/packagePaths.js.map +1 -0
- package/lib/dist/lib/performance.d.ts +51 -0
- package/lib/dist/lib/performance.d.ts.map +1 -0
- package/lib/dist/lib/performance.js +159 -0
- package/lib/dist/lib/performance.js.map +1 -0
- package/lib/dist/lib/portConfig.d.ts +29 -0
- package/lib/dist/lib/portConfig.d.ts.map +1 -0
- package/lib/dist/lib/portConfig.js +64 -0
- package/lib/dist/lib/portConfig.js.map +1 -0
- package/lib/dist/lib/preferences.d.ts +63 -0
- package/lib/dist/lib/preferences.d.ts.map +1 -0
- package/lib/dist/lib/preferences.js +117 -0
- package/lib/dist/lib/preferences.js.map +1 -0
- package/lib/dist/lib/resolveAgentModel.d.ts +22 -0
- package/lib/dist/lib/resolveAgentModel.d.ts.map +1 -0
- package/lib/dist/lib/resolveAgentModel.js +37 -0
- package/lib/dist/lib/resolveAgentModel.js.map +1 -0
- package/lib/dist/lib/runStats.d.ts +92 -0
- package/lib/dist/lib/runStats.d.ts.map +1 -0
- package/lib/dist/lib/runStats.js +160 -0
- package/lib/dist/lib/runStats.js.map +1 -0
- package/lib/dist/lib/telemetry/constants.d.ts +60 -0
- package/lib/dist/lib/telemetry/constants.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/constants.js +87 -0
- package/lib/dist/lib/telemetry/constants.js.map +1 -0
- package/lib/dist/lib/telemetry/evalSpans.d.ts +61 -0
- package/lib/dist/lib/telemetry/evalSpans.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/evalSpans.js +254 -0
- package/lib/dist/lib/telemetry/evalSpans.js.map +1 -0
- package/lib/dist/lib/telemetry/index.d.ts +11 -0
- package/lib/dist/lib/telemetry/index.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/index.js +15 -0
- package/lib/dist/lib/telemetry/index.js.map +1 -0
- package/lib/dist/lib/telemetry/opensearchExporter.d.ts +43 -0
- package/lib/dist/lib/telemetry/opensearchExporter.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/opensearchExporter.js +217 -0
- package/lib/dist/lib/telemetry/opensearchExporter.js.map +1 -0
- package/lib/dist/lib/telemetry/provider.d.ts +55 -0
- package/lib/dist/lib/telemetry/provider.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/provider.js +140 -0
- package/lib/dist/lib/telemetry/provider.js.map +1 -0
- package/lib/dist/lib/testCaseLabels.d.ts +34 -0
- package/lib/dist/lib/testCaseLabels.d.ts.map +1 -0
- package/lib/dist/lib/testCaseLabels.js +88 -0
- package/lib/dist/lib/testCaseLabels.js.map +1 -0
- package/lib/dist/lib/testCaseValidation.d.ts +140 -0
- package/lib/dist/lib/testCaseValidation.d.ts.map +1 -0
- package/lib/dist/lib/testCaseValidation.js +162 -0
- package/lib/dist/lib/testCaseValidation.js.map +1 -0
- package/lib/dist/lib/testCases/agentFixture.d.ts +80 -0
- package/lib/dist/lib/testCases/agentFixture.d.ts.map +1 -0
- package/lib/dist/lib/testCases/agentFixture.js +43 -0
- package/lib/dist/lib/testCases/agentFixture.js.map +1 -0
- package/lib/dist/lib/testCases/authoringSurface.d.ts +10 -0
- package/lib/dist/lib/testCases/authoringSurface.d.ts.map +1 -0
- package/lib/dist/lib/testCases/authoringSurface.js +54 -0
- package/lib/dist/lib/testCases/authoringSurface.js.map +1 -0
- package/lib/dist/lib/testCases/codemod.d.ts +13 -0
- package/lib/dist/lib/testCases/codemod.d.ts.map +1 -0
- package/lib/dist/lib/testCases/codemod.js +169 -0
- package/lib/dist/lib/testCases/codemod.js.map +1 -0
- package/lib/dist/lib/testCases/define.d.ts +114 -0
- package/lib/dist/lib/testCases/define.d.ts.map +1 -0
- package/lib/dist/lib/testCases/define.js +253 -0
- package/lib/dist/lib/testCases/define.js.map +1 -0
- package/lib/dist/lib/testCases/evaluators.d.ts +80 -0
- package/lib/dist/lib/testCases/evaluators.d.ts.map +1 -0
- package/lib/dist/lib/testCases/evaluators.js +105 -0
- package/lib/dist/lib/testCases/evaluators.js.map +1 -0
- package/lib/dist/lib/testCases/index.d.ts +14 -0
- package/lib/dist/lib/testCases/index.d.ts.map +1 -0
- package/lib/dist/lib/testCases/index.js +12 -0
- package/lib/dist/lib/testCases/index.js.map +1 -0
- package/lib/dist/lib/testCases/judge.d.ts +165 -0
- package/lib/dist/lib/testCases/judge.d.ts.map +1 -0
- package/lib/dist/lib/testCases/judge.js +359 -0
- package/lib/dist/lib/testCases/judge.js.map +1 -0
- package/lib/dist/lib/testCases/loader.d.ts +26 -0
- package/lib/dist/lib/testCases/loader.d.ts.map +1 -0
- package/lib/dist/lib/testCases/loader.js +149 -0
- package/lib/dist/lib/testCases/loader.js.map +1 -0
- package/lib/dist/lib/testCases/types.d.ts +242 -0
- package/lib/dist/lib/testCases/types.d.ts.map +1 -0
- package/lib/dist/lib/testCases/types.js +6 -0
- package/lib/dist/lib/testCases/types.js.map +1 -0
- package/lib/dist/lib/theme.d.ts +6 -0
- package/lib/dist/lib/theme.d.ts.map +1 -0
- package/lib/dist/lib/theme.js +36 -0
- package/lib/dist/lib/theme.js.map +1 -0
- package/lib/dist/lib/uiTelemetry.d.ts +7 -0
- package/lib/dist/lib/uiTelemetry.d.ts.map +1 -0
- package/lib/dist/lib/uiTelemetry.js +25 -0
- package/lib/dist/lib/uiTelemetry.js.map +1 -0
- package/lib/dist/lib/utils.d.ts +96 -0
- package/lib/dist/lib/utils.d.ts.map +1 -0
- package/lib/dist/lib/utils.js +232 -0
- package/lib/dist/lib/utils.js.map +1 -0
- package/lib/dist/lib/workflow/consolidate.d.ts +12 -0
- package/lib/dist/lib/workflow/consolidate.d.ts.map +1 -0
- package/lib/dist/lib/workflow/consolidate.js +33 -0
- package/lib/dist/lib/workflow/consolidate.js.map +1 -0
- package/lib/dist/lib/workflow/index.d.ts +13 -0
- package/lib/dist/lib/workflow/index.d.ts.map +1 -0
- package/lib/dist/lib/workflow/index.js +12 -0
- package/lib/dist/lib/workflow/index.js.map +1 -0
- package/lib/dist/lib/workflow/ledger.d.ts +30 -0
- package/lib/dist/lib/workflow/ledger.d.ts.map +1 -0
- package/lib/dist/lib/workflow/ledger.js +41 -0
- package/lib/dist/lib/workflow/ledger.js.map +1 -0
- package/lib/dist/lib/workflow/pool.d.ts +13 -0
- package/lib/dist/lib/workflow/pool.d.ts.map +1 -0
- package/lib/dist/lib/workflow/pool.js +44 -0
- package/lib/dist/lib/workflow/pool.js.map +1 -0
- package/lib/dist/lib/workflow/source.d.ts +22 -0
- package/lib/dist/lib/workflow/source.d.ts.map +1 -0
- package/lib/dist/lib/workflow/source.js +29 -0
- package/lib/dist/lib/workflow/source.js.map +1 -0
- package/lib/dist/lib/workflow/stepB.d.ts +71 -0
- package/lib/dist/lib/workflow/stepB.d.ts.map +1 -0
- package/lib/dist/lib/workflow/stepB.js +99 -0
- package/lib/dist/lib/workflow/stepB.js.map +1 -0
- package/lib/dist/lib/workflow/types.d.ts +86 -0
- package/lib/dist/lib/workflow/types.d.ts.map +1 -0
- package/lib/dist/lib/workflow/types.js +6 -0
- package/lib/dist/lib/workflow/types.js.map +1 -0
- package/lib/dist/lib/workflow/workflow.d.ts +119 -0
- package/lib/dist/lib/workflow/workflow.d.ts.map +1 -0
- package/lib/dist/lib/workflow/workflow.js +195 -0
- package/lib/dist/lib/workflow/workflow.js.map +1 -0
- package/lib/dist/services/agent/aguiConverter.d.ts +50 -0
- package/lib/dist/services/agent/aguiConverter.d.ts.map +1 -0
- package/lib/dist/services/agent/aguiConverter.js +449 -0
- package/lib/dist/services/agent/aguiConverter.js.map +1 -0
- package/lib/dist/services/agent/index.d.ts +10 -0
- package/lib/dist/services/agent/index.d.ts.map +1 -0
- package/lib/dist/services/agent/index.js +12 -0
- package/lib/dist/services/agent/index.js.map +1 -0
- package/lib/dist/services/agent/payloadBuilder.d.ts +33 -0
- package/lib/dist/services/agent/payloadBuilder.d.ts.map +1 -0
- package/lib/dist/services/agent/payloadBuilder.js +75 -0
- package/lib/dist/services/agent/payloadBuilder.js.map +1 -0
- package/lib/dist/services/agent/sseStream.d.ts +43 -0
- package/lib/dist/services/agent/sseStream.d.ts.map +1 -0
- package/lib/dist/services/agent/sseStream.js +223 -0
- package/lib/dist/services/agent/sseStream.js.map +1 -0
- package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts +44 -0
- package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js +95 -0
- package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js.map +1 -0
- package/lib/dist/services/connectors/base/BaseConnector.d.ts +81 -0
- package/lib/dist/services/connectors/base/BaseConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/base/BaseConnector.js +170 -0
- package/lib/dist/services/connectors/base/BaseConnector.js.map +1 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts +116 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js +403 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js.map +1 -0
- package/lib/dist/services/connectors/index.d.ts +13 -0
- package/lib/dist/services/connectors/index.d.ts.map +1 -0
- package/lib/dist/services/connectors/index.js +32 -0
- package/lib/dist/services/connectors/index.js.map +1 -0
- package/lib/dist/services/connectors/kiro/KiroConnector.d.ts +48 -0
- package/lib/dist/services/connectors/kiro/KiroConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/kiro/KiroConnector.js +158 -0
- package/lib/dist/services/connectors/kiro/KiroConnector.js.map +1 -0
- package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts +36 -0
- package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/langgraph/LangGraphConnector.js +175 -0
- package/lib/dist/services/connectors/langgraph/LangGraphConnector.js.map +1 -0
- package/lib/dist/services/connectors/mock/MockConnector.d.ts +37 -0
- package/lib/dist/services/connectors/mock/MockConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/mock/MockConnector.js +120 -0
- package/lib/dist/services/connectors/mock/MockConnector.js.map +1 -0
- package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts +42 -0
- package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js +133 -0
- package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js.map +1 -0
- package/lib/dist/services/connectors/pi/PiConnector.d.ts +87 -0
- package/lib/dist/services/connectors/pi/PiConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/pi/PiConnector.js +274 -0
- package/lib/dist/services/connectors/pi/PiConnector.js.map +1 -0
- package/lib/dist/services/connectors/registry.d.ts +57 -0
- package/lib/dist/services/connectors/registry.d.ts.map +1 -0
- package/lib/dist/services/connectors/registry.js +106 -0
- package/lib/dist/services/connectors/registry.js.map +1 -0
- package/lib/dist/services/connectors/rest/RESTConnector.d.ts +38 -0
- package/lib/dist/services/connectors/rest/RESTConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/rest/RESTConnector.js +117 -0
- package/lib/dist/services/connectors/rest/RESTConnector.js.map +1 -0
- package/lib/dist/services/connectors/server.d.ts +13 -0
- package/lib/dist/services/connectors/server.d.ts.map +1 -0
- package/lib/dist/services/connectors/server.js +34 -0
- package/lib/dist/services/connectors/server.js.map +1 -0
- package/lib/dist/services/connectors/strands/StrandsConnector.d.ts +48 -0
- package/lib/dist/services/connectors/strands/StrandsConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/strands/StrandsConnector.js +221 -0
- package/lib/dist/services/connectors/strands/StrandsConnector.js.map +1 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts +88 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.js +418 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.js.map +1 -0
- package/lib/dist/services/connectors/types.d.ts +213 -0
- package/lib/dist/services/connectors/types.d.ts.map +1 -0
- package/lib/dist/services/connectors/types.js +6 -0
- package/lib/dist/services/connectors/types.js.map +1 -0
- package/lib/dist/services/evaluation/bedrockJudge.d.ts +64 -0
- package/lib/dist/services/evaluation/bedrockJudge.d.ts.map +1 -0
- package/lib/dist/services/evaluation/bedrockJudge.js +167 -0
- package/lib/dist/services/evaluation/bedrockJudge.js.map +1 -0
- package/lib/dist/services/evaluation/evaluatorError.d.ts +56 -0
- package/lib/dist/services/evaluation/evaluatorError.d.ts.map +1 -0
- package/lib/dist/services/evaluation/evaluatorError.js +56 -0
- package/lib/dist/services/evaluation/evaluatorError.js.map +1 -0
- package/lib/dist/services/evaluation/index.d.ts +106 -0
- package/lib/dist/services/evaluation/index.d.ts.map +1 -0
- package/lib/dist/services/evaluation/index.js +684 -0
- package/lib/dist/services/evaluation/index.js.map +1 -0
- package/lib/dist/services/evaluation/mockTrajectory.d.ts +3 -0
- package/lib/dist/services/evaluation/mockTrajectory.d.ts.map +1 -0
- package/lib/dist/services/evaluation/mockTrajectory.js +72 -0
- package/lib/dist/services/evaluation/mockTrajectory.js.map +1 -0
- package/lib/dist/services/opensearch/client.d.ts +26 -0
- package/lib/dist/services/opensearch/client.d.ts.map +1 -0
- package/lib/dist/services/opensearch/client.js +131 -0
- package/lib/dist/services/opensearch/client.js.map +1 -0
- package/lib/dist/services/opensearch/index.d.ts +16 -0
- package/lib/dist/services/opensearch/index.d.ts.map +1 -0
- package/lib/dist/services/opensearch/index.js +25 -0
- package/lib/dist/services/opensearch/index.js.map +1 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts +123 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts.map +1 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.js +429 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.js.map +1 -0
- package/lib/dist/services/storage/asyncRunStorage.d.ts +127 -0
- package/lib/dist/services/storage/asyncRunStorage.d.ts.map +1 -0
- package/lib/dist/services/storage/asyncRunStorage.js +448 -0
- package/lib/dist/services/storage/asyncRunStorage.js.map +1 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.d.ts +156 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.d.ts.map +1 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.js +285 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.js.map +1 -0
- package/lib/dist/services/storage/index.d.ts +17 -0
- package/lib/dist/services/storage/index.d.ts.map +1 -0
- package/lib/dist/services/storage/index.js +20 -0
- package/lib/dist/services/storage/index.js.map +1 -0
- package/lib/dist/services/storage/migration.d.ts +54 -0
- package/lib/dist/services/storage/migration.d.ts.map +1 -0
- package/lib/dist/services/storage/migration.js +296 -0
- package/lib/dist/services/storage/migration.js.map +1 -0
- package/lib/dist/services/storage/opensearchClient.d.ts +924 -0
- package/lib/dist/services/storage/opensearchClient.d.ts.map +1 -0
- package/lib/dist/services/storage/opensearchClient.js +435 -0
- package/lib/dist/services/storage/opensearchClient.js.map +1 -0
- package/lib/dist/services/traces/browserRecovery.d.ts +26 -0
- package/lib/dist/services/traces/browserRecovery.d.ts.map +1 -0
- package/lib/dist/services/traces/browserRecovery.js +81 -0
- package/lib/dist/services/traces/browserRecovery.js.map +1 -0
- package/lib/dist/services/traces/categoryStyles.d.ts +21 -0
- package/lib/dist/services/traces/categoryStyles.d.ts.map +1 -0
- package/lib/dist/services/traces/categoryStyles.js +56 -0
- package/lib/dist/services/traces/categoryStyles.js.map +1 -0
- package/lib/dist/services/traces/executionOrderTransform.d.ts +35 -0
- package/lib/dist/services/traces/executionOrderTransform.d.ts.map +1 -0
- package/lib/dist/services/traces/executionOrderTransform.js +313 -0
- package/lib/dist/services/traces/executionOrderTransform.js.map +1 -0
- package/lib/dist/services/traces/fetchSpansForRun.d.ts +86 -0
- package/lib/dist/services/traces/fetchSpansForRun.d.ts.map +1 -0
- package/lib/dist/services/traces/fetchSpansForRun.js +69 -0
- package/lib/dist/services/traces/fetchSpansForRun.js.map +1 -0
- package/lib/dist/services/traces/flowTransform.d.ts +24 -0
- package/lib/dist/services/traces/flowTransform.d.ts.map +1 -0
- package/lib/dist/services/traces/flowTransform.js +228 -0
- package/lib/dist/services/traces/flowTransform.js.map +1 -0
- package/lib/dist/services/traces/index.d.ts +121 -0
- package/lib/dist/services/traces/index.d.ts.map +1 -0
- package/lib/dist/services/traces/index.js +255 -0
- package/lib/dist/services/traces/index.js.map +1 -0
- package/lib/dist/services/traces/intentTransform.d.ts +20 -0
- package/lib/dist/services/traces/intentTransform.d.ts.map +1 -0
- package/lib/dist/services/traces/intentTransform.js +131 -0
- package/lib/dist/services/traces/intentTransform.js.map +1 -0
- package/lib/dist/services/traces/judgeAgentsHints.d.ts +63 -0
- package/lib/dist/services/traces/judgeAgentsHints.d.ts.map +1 -0
- package/lib/dist/services/traces/judgeAgentsHints.js +89 -0
- package/lib/dist/services/traces/judgeAgentsHints.js.map +1 -0
- package/lib/dist/services/traces/messageExtraction.d.ts +15 -0
- package/lib/dist/services/traces/messageExtraction.d.ts.map +1 -0
- package/lib/dist/services/traces/messageExtraction.js +251 -0
- package/lib/dist/services/traces/messageExtraction.js.map +1 -0
- package/lib/dist/services/traces/spanCategorization.d.ts +63 -0
- package/lib/dist/services/traces/spanCategorization.d.ts.map +1 -0
- package/lib/dist/services/traces/spanCategorization.js +276 -0
- package/lib/dist/services/traces/spanCategorization.js.map +1 -0
- package/lib/dist/services/traces/spanPreprocessing.d.ts +37 -0
- package/lib/dist/services/traces/spanPreprocessing.d.ts.map +1 -0
- package/lib/dist/services/traces/spanPreprocessing.js +102 -0
- package/lib/dist/services/traces/spanPreprocessing.js.map +1 -0
- package/lib/dist/services/traces/spansToTrajectory.d.ts +36 -0
- package/lib/dist/services/traces/spansToTrajectory.d.ts.map +1 -0
- package/lib/dist/services/traces/spansToTrajectory.js +387 -0
- package/lib/dist/services/traces/spansToTrajectory.js.map +1 -0
- package/lib/dist/services/traces/toolSimilarity.d.ts +35 -0
- package/lib/dist/services/traces/toolSimilarity.d.ts.map +1 -0
- package/lib/dist/services/traces/toolSimilarity.js +203 -0
- package/lib/dist/services/traces/toolSimilarity.js.map +1 -0
- package/lib/dist/services/traces/traceComparison.d.ts +31 -0
- package/lib/dist/services/traces/traceComparison.d.ts.map +1 -0
- package/lib/dist/services/traces/traceComparison.js +318 -0
- package/lib/dist/services/traces/traceComparison.js.map +1 -0
- package/lib/dist/services/traces/traceGrouping.d.ts +19 -0
- package/lib/dist/services/traces/traceGrouping.d.ts.map +1 -0
- package/lib/dist/services/traces/traceGrouping.js +107 -0
- package/lib/dist/services/traces/traceGrouping.js.map +1 -0
- package/lib/dist/services/traces/tracePoller.d.ts +84 -0
- package/lib/dist/services/traces/tracePoller.d.ts.map +1 -0
- package/lib/dist/services/traces/tracePoller.js +309 -0
- package/lib/dist/services/traces/tracePoller.js.map +1 -0
- package/lib/dist/services/traces/traceStats.d.ts +45 -0
- package/lib/dist/services/traces/traceStats.d.ts.map +1 -0
- package/lib/dist/services/traces/traceStats.js +114 -0
- package/lib/dist/services/traces/traceStats.js.map +1 -0
- package/lib/dist/services/traces/traceSummary.d.ts +47 -0
- package/lib/dist/services/traces/traceSummary.d.ts.map +1 -0
- package/lib/dist/services/traces/traceSummary.js +68 -0
- package/lib/dist/services/traces/traceSummary.js.map +1 -0
- package/lib/dist/services/traces/utils.d.ts +33 -0
- package/lib/dist/services/traces/utils.d.ts.map +1 -0
- package/lib/dist/services/traces/utils.js +114 -0
- package/lib/dist/services/traces/utils.js.map +1 -0
- package/lib/dist/types/agui.d.ts +13 -0
- package/lib/dist/types/agui.d.ts.map +1 -0
- package/lib/dist/types/agui.js +16 -0
- package/lib/dist/types/agui.js.map +1 -0
- package/lib/dist/types/index.d.ts +1175 -0
- package/lib/dist/types/index.d.ts.map +1 -0
- package/lib/dist/types/index.js +12 -0
- package/lib/dist/types/index.js.map +1 -0
- package/lib/dist/types/skills.d.ts +146 -0
- package/lib/dist/types/skills.d.ts.map +1 -0
- package/lib/dist/types/skills.js +6 -0
- package/lib/dist/types/skills.js.map +1 -0
- package/observio-sample-agent/pi-package/README.md +112 -0
- package/observio-sample-agent/pi-package/extensions/agent-health.ts +373 -0
- package/observio-sample-agent/pi-package/package.json +17 -0
- package/observio-sample-agent/pi-package/prompts/agent-health.md +37 -0
- package/observio-sample-agent/pi-package/skills/create-pr/SKILL.md +88 -0
- package/observio-sample-agent/pi-package/skills/fix-bug/SKILL.md +71 -0
- package/observio-sample-agent/pi-package/skills/implement-feature/SKILL.md +156 -0
- package/observio-sample-agent/pi-package/skills/instrument-otel/SKILL.md +208 -0
- package/observio-sample-agent/pi-package/skills/setup-collector/SKILL.md +146 -0
- package/observio-sample-agent/pi-package/skills/write-test/SKILL.md +115 -0
- package/package.json +64 -13
- package/server/dist/app.js +32651 -17637
- package/server/dist/index.js +29875 -14638
- package/tsconfig.lib.json +71 -0
- package/dist/assets/index-EvPLSTAS.js +0 -267
- package/dist/assets/index-RXasQKUs.css +0 -1
- package/lib/dist/config/index.js +0 -404
- package/lib/dist/index.js +0 -1665
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmarkVersionUtils.js","sourceRoot":"","sources":["../../benchmarkVersionUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* defineConfig Helper
|
|
3
|
+
* Provides type safety for agent-health.config.ts files
|
|
4
|
+
*/
|
|
5
|
+
import type { UserConfig } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Define configuration with full type safety
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // agent-health.config.ts
|
|
12
|
+
* import { defineConfig } from '@opensearch-project/agent-health';
|
|
13
|
+
*
|
|
14
|
+
* export default defineConfig({
|
|
15
|
+
* agents: [
|
|
16
|
+
* {
|
|
17
|
+
* key: 'my-agent',
|
|
18
|
+
* name: 'My Agent',
|
|
19
|
+
* endpoint: 'https://api.example.com/chat',
|
|
20
|
+
* connectorType: 'rest',
|
|
21
|
+
* },
|
|
22
|
+
* ],
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function defineConfig(config: UserConfig): UserConfig;
|
|
27
|
+
//# sourceMappingURL=defineConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineConfig.d.ts","sourceRoot":"","sources":["../../../config/defineConfig.ts"],"names":[],"mappings":"AAKA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAE3D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Define configuration with full type safety
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // agent-health.config.ts
|
|
11
|
+
* import { defineConfig } from '@opensearch-project/agent-health';
|
|
12
|
+
*
|
|
13
|
+
* export default defineConfig({
|
|
14
|
+
* agents: [
|
|
15
|
+
* {
|
|
16
|
+
* key: 'my-agent',
|
|
17
|
+
* name: 'My Agent',
|
|
18
|
+
* endpoint: 'https://api.example.com/chat',
|
|
19
|
+
* connectorType: 'rest',
|
|
20
|
+
* },
|
|
21
|
+
* ],
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export function defineConfig(config) {
|
|
26
|
+
return config;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=defineConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineConfig.js","sourceRoot":"","sources":["../../../config/defineConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,YAAY,CAAC,MAAkB;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Module
|
|
3
|
+
* Public exports for configuration system
|
|
4
|
+
*/
|
|
5
|
+
export type { UserConfig, UserAgentConfig, UserModelConfig, ResolvedConfig, ConfigFileInfo, ReporterConfig, JudgeConfig, ServerConfig, ResolvedServerConfig, } from './types.js';
|
|
6
|
+
export type { AgentHooks, BeforeRequestContext } from '../../types/index.js';
|
|
7
|
+
export { defineConfig } from './defineConfig.js';
|
|
8
|
+
export { loadConfig, loadConfigSync, findConfigFile, getConfigFileInfo, clearConfigCache, DEFAULT_SERVER_CONFIG, } from './loader.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../config/index.ts"],"names":[],"mappings":"AAKA;;;GAGG;AAGH,YAAY,EACV,UAAU,EACV,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,cAAc,EACd,WAAW,EACX,YAAY,EACZ,oBAAoB,GACrB,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAGhE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
// Function exports
|
|
6
|
+
export { defineConfig } from './defineConfig.js';
|
|
7
|
+
export { loadConfig, loadConfigSync, findConfigFile, getConfigFileInfo, clearConfigCache, DEFAULT_SERVER_CONFIG, } from './loader.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuBH,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ResolvedConfig, ResolvedServerConfig, ConfigFileInfo } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Default server configuration
|
|
4
|
+
* Follows Playwright's webServer pattern
|
|
5
|
+
*/
|
|
6
|
+
export declare const DEFAULT_SERVER_CONFIG: ResolvedServerConfig;
|
|
7
|
+
/**
|
|
8
|
+
* Runtime state file (config v2: `.agent-health/state.json`, user or project
|
|
9
|
+
* scope). Loaded by the *server services* (configService, customAgentStore,
|
|
10
|
+
* dataSourceConfig), not by this loader. We only probe for it so the startup
|
|
11
|
+
* log can tell the user whether on-disk runtime state is in effect (ui-first
|
|
12
|
+
* mode) instead of saying "No config file found".
|
|
13
|
+
*/
|
|
14
|
+
export declare function hasServerJsonConfig(cwd?: string): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Find config file in the given directory
|
|
17
|
+
*/
|
|
18
|
+
export declare function findConfigFile(cwd?: string): ConfigFileInfo | null;
|
|
19
|
+
/**
|
|
20
|
+
* Load and resolve configuration
|
|
21
|
+
*
|
|
22
|
+
* @param cwd - Working directory to search for config file
|
|
23
|
+
* @param force - Force reload even if cached
|
|
24
|
+
*/
|
|
25
|
+
export declare function loadConfig(cwd?: string, force?: boolean): Promise<ResolvedConfig>;
|
|
26
|
+
/**
|
|
27
|
+
* Load config synchronously (for use in module initialization)
|
|
28
|
+
* Returns defaults if no config file or if loading fails
|
|
29
|
+
*/
|
|
30
|
+
export declare function loadConfigSync(cwd?: string): ResolvedConfig;
|
|
31
|
+
/**
|
|
32
|
+
* Clear config cache (useful for testing)
|
|
33
|
+
*/
|
|
34
|
+
export declare function clearConfigCache(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Get config file info without loading
|
|
37
|
+
*/
|
|
38
|
+
export declare function getConfigFileInfo(cwd?: string): ConfigFileInfo | null;
|
|
39
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../config/loader.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAIV,cAAc,EACd,oBAAoB,EACpB,cAAc,EAIf,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,oBAInC,CAAC;AAWF;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAExE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,cAAc,GAAG,IAAI,CASjF;AAmJD;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,GAAG,GAAE,MAAsB,EAC3B,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,cAAc,CAAC,CAqCzB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,cAAc,CAmB1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,cAAc,GAAG,IAAI,CAEpF"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Config Loader
|
|
7
|
+
* Loads and resolves agent-health.config.ts files
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
|
+
import { resolve } from 'path';
|
|
11
|
+
import { projectStatePath, userStatePath } from './statePaths.js';
|
|
12
|
+
import { logStartupDiagnostic } from '../../lib/diagnostics.js';
|
|
13
|
+
import { pathToFileURL } from 'url';
|
|
14
|
+
import { DEFAULT_CONFIG } from '../../lib/constants.js';
|
|
15
|
+
import { resolveBackendPort } from '../../lib/portConfig.js';
|
|
16
|
+
/**
|
|
17
|
+
* Default server configuration
|
|
18
|
+
* Follows Playwright's webServer pattern
|
|
19
|
+
*/
|
|
20
|
+
export const DEFAULT_SERVER_CONFIG = {
|
|
21
|
+
port: resolveBackendPort(),
|
|
22
|
+
reuseExistingServer: !process.env.CI,
|
|
23
|
+
startTimeout: 30000,
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Config file names to search for (in priority order)
|
|
27
|
+
*/
|
|
28
|
+
const CONFIG_FILE_NAMES = [
|
|
29
|
+
'agent-health.config.ts',
|
|
30
|
+
'agent-health.config.js',
|
|
31
|
+
'agent-health.config.mjs',
|
|
32
|
+
];
|
|
33
|
+
/**
|
|
34
|
+
* Runtime state file (config v2: `.agent-health/state.json`, user or project
|
|
35
|
+
* scope). Loaded by the *server services* (configService, customAgentStore,
|
|
36
|
+
* dataSourceConfig), not by this loader. We only probe for it so the startup
|
|
37
|
+
* log can tell the user whether on-disk runtime state is in effect (ui-first
|
|
38
|
+
* mode) instead of saying "No config file found".
|
|
39
|
+
*/
|
|
40
|
+
export function hasServerJsonConfig(cwd = process.cwd()) {
|
|
41
|
+
return existsSync(projectStatePath(cwd)) || existsSync(userStatePath());
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Find config file in the given directory
|
|
45
|
+
*/
|
|
46
|
+
export function findConfigFile(cwd = process.cwd()) {
|
|
47
|
+
for (const fileName of CONFIG_FILE_NAMES) {
|
|
48
|
+
const filePath = resolve(cwd, fileName);
|
|
49
|
+
if (existsSync(filePath)) {
|
|
50
|
+
const format = fileName.endsWith('.ts') ? 'typescript' : 'javascript';
|
|
51
|
+
return { path: filePath, format, exists: true };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Convert UserAgentConfig to AgentConfig
|
|
58
|
+
*/
|
|
59
|
+
function toAgentConfig(userAgent) {
|
|
60
|
+
return {
|
|
61
|
+
key: userAgent.key,
|
|
62
|
+
name: userAgent.name,
|
|
63
|
+
endpoint: userAgent.endpoint,
|
|
64
|
+
description: userAgent.description,
|
|
65
|
+
enabled: userAgent.enabled ?? true,
|
|
66
|
+
headers: userAgent.headers ?? {},
|
|
67
|
+
useTraces: userAgent.useTraces ?? false,
|
|
68
|
+
connectorType: userAgent.connectorType,
|
|
69
|
+
connectorConfig: userAgent.connectorConfig,
|
|
70
|
+
hooks: userAgent.hooks,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Convert UserModelConfig to ModelConfig entry
|
|
75
|
+
*/
|
|
76
|
+
function toModelConfig(userModel) {
|
|
77
|
+
return [
|
|
78
|
+
userModel.key,
|
|
79
|
+
{
|
|
80
|
+
model_id: userModel.model_id,
|
|
81
|
+
display_name: userModel.display_name,
|
|
82
|
+
provider: userModel.provider ?? 'bedrock',
|
|
83
|
+
context_window: userModel.context_window ?? 200000,
|
|
84
|
+
max_output_tokens: userModel.max_output_tokens ?? 4096,
|
|
85
|
+
},
|
|
86
|
+
];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Merge user config with defaults
|
|
90
|
+
*/
|
|
91
|
+
function mergeConfigs(userConfig, defaultConfig) {
|
|
92
|
+
const shouldExtend = userConfig.extends !== false;
|
|
93
|
+
// Merge agents
|
|
94
|
+
let agents;
|
|
95
|
+
if (shouldExtend) {
|
|
96
|
+
// Start with defaults, override/add user agents
|
|
97
|
+
const agentMap = new Map();
|
|
98
|
+
for (const agent of defaultConfig.agents) {
|
|
99
|
+
agentMap.set(agent.key, agent);
|
|
100
|
+
}
|
|
101
|
+
for (const userAgent of userConfig.agents ?? []) {
|
|
102
|
+
agentMap.set(userAgent.key, toAgentConfig(userAgent));
|
|
103
|
+
}
|
|
104
|
+
agents = Array.from(agentMap.values());
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// Only use user agents
|
|
108
|
+
agents = (userConfig.agents ?? []).map(toAgentConfig);
|
|
109
|
+
}
|
|
110
|
+
// Merge models
|
|
111
|
+
let models;
|
|
112
|
+
if (shouldExtend) {
|
|
113
|
+
models = { ...defaultConfig.models };
|
|
114
|
+
for (const userModel of userConfig.models ?? []) {
|
|
115
|
+
const [key, config] = toModelConfig(userModel);
|
|
116
|
+
models[key] = config;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
models = {};
|
|
121
|
+
for (const userModel of userConfig.models ?? []) {
|
|
122
|
+
const [key, config] = toModelConfig(userModel);
|
|
123
|
+
models[key] = config;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Connectors (always additive)
|
|
127
|
+
const connectors = userConfig.connectors ?? [];
|
|
128
|
+
// Test cases
|
|
129
|
+
const testCases = userConfig.testCases
|
|
130
|
+
? Array.isArray(userConfig.testCases)
|
|
131
|
+
? userConfig.testCases
|
|
132
|
+
: [userConfig.testCases]
|
|
133
|
+
: [];
|
|
134
|
+
// Reporters
|
|
135
|
+
const reporters = userConfig.reporters ?? [['console']];
|
|
136
|
+
// Judge config
|
|
137
|
+
const judge = userConfig.judge ?? {
|
|
138
|
+
provider: 'bedrock',
|
|
139
|
+
model: 'claude-sonnet-4',
|
|
140
|
+
};
|
|
141
|
+
// Server config (merge user overrides with defaults)
|
|
142
|
+
const server = {
|
|
143
|
+
...DEFAULT_SERVER_CONFIG,
|
|
144
|
+
...userConfig.server,
|
|
145
|
+
};
|
|
146
|
+
// Telemetry config (user config overrides env vars, resolved at init time)
|
|
147
|
+
const telemetry = userConfig.telemetry ?? {};
|
|
148
|
+
return {
|
|
149
|
+
server,
|
|
150
|
+
agents,
|
|
151
|
+
models,
|
|
152
|
+
connectors,
|
|
153
|
+
testCases,
|
|
154
|
+
reporters,
|
|
155
|
+
judge,
|
|
156
|
+
telemetry,
|
|
157
|
+
// Cluster config authored in TS. Passed through verbatim; the server
|
|
158
|
+
// resolves it against JSON/env at startup (see resolveStorageConfig).
|
|
159
|
+
storage: userConfig.storage,
|
|
160
|
+
observability: userConfig.observability,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Load user config file
|
|
165
|
+
*/
|
|
166
|
+
async function loadUserConfig(configPath) {
|
|
167
|
+
try {
|
|
168
|
+
// Use dynamic import with file URL for cross-platform compatibility
|
|
169
|
+
const fileUrl = pathToFileURL(configPath).href;
|
|
170
|
+
// For TypeScript files, we need tsx or ts-node to be available
|
|
171
|
+
// The CLI build process compiles TS, so this works in production
|
|
172
|
+
const module = await import(fileUrl);
|
|
173
|
+
return module.default ?? module;
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
177
|
+
throw new Error(`Failed to load config file ${configPath}: ${message}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Cached resolved config
|
|
182
|
+
*/
|
|
183
|
+
let cachedConfig = null;
|
|
184
|
+
let cachedConfigPath = null;
|
|
185
|
+
/**
|
|
186
|
+
* Load and resolve configuration
|
|
187
|
+
*
|
|
188
|
+
* @param cwd - Working directory to search for config file
|
|
189
|
+
* @param force - Force reload even if cached
|
|
190
|
+
*/
|
|
191
|
+
export async function loadConfig(cwd = process.cwd(), force = false) {
|
|
192
|
+
const configFile = findConfigFile(cwd);
|
|
193
|
+
// Return cached config if available and unchanged
|
|
194
|
+
if (!force && cachedConfig && cachedConfigPath === configFile?.path) {
|
|
195
|
+
return cachedConfig;
|
|
196
|
+
}
|
|
197
|
+
let userConfig = {};
|
|
198
|
+
if (configFile) {
|
|
199
|
+
logStartupDiagnostic(`[Config] Loading ${configFile.path}`);
|
|
200
|
+
userConfig = await loadUserConfig(configFile.path);
|
|
201
|
+
}
|
|
202
|
+
else if (hasServerJsonConfig(cwd)) {
|
|
203
|
+
// Code config absent, but server-side JSON config present — it's loaded
|
|
204
|
+
// by separate server services (storage / observability / custom agents).
|
|
205
|
+
// Be explicit so the user doesn't think *no* config is in effect.
|
|
206
|
+
logStartupDiagnostic(`[Config] No code config (agent-health.config.{ts,js,mjs}); ` +
|
|
207
|
+
`runtime state (.agent-health/state.json) detected and loaded by server ` +
|
|
208
|
+
`services (ui-first mode). Using built-in defaults for agents/models.`);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
// Truly no config file — env vars and built-in defaults only.
|
|
212
|
+
logStartupDiagnostic('[Config] No config file found, using defaults + environment variables');
|
|
213
|
+
}
|
|
214
|
+
// Merge with defaults
|
|
215
|
+
const resolved = mergeConfigs(userConfig, DEFAULT_CONFIG);
|
|
216
|
+
// Cache the result
|
|
217
|
+
cachedConfig = resolved;
|
|
218
|
+
cachedConfigPath = configFile?.path ?? null;
|
|
219
|
+
logStartupDiagnostic(`[Config] Loaded ${resolved.agents.length} agents, ${Object.keys(resolved.models).length} models`);
|
|
220
|
+
return resolved;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Load config synchronously (for use in module initialization)
|
|
224
|
+
* Returns defaults if no config file or if loading fails
|
|
225
|
+
*/
|
|
226
|
+
export function loadConfigSync(cwd = process.cwd()) {
|
|
227
|
+
// Return cached if available
|
|
228
|
+
if (cachedConfig) {
|
|
229
|
+
return cachedConfig;
|
|
230
|
+
}
|
|
231
|
+
// Return defaults - async loading will update later
|
|
232
|
+
return {
|
|
233
|
+
server: DEFAULT_SERVER_CONFIG,
|
|
234
|
+
agents: DEFAULT_CONFIG.agents,
|
|
235
|
+
models: DEFAULT_CONFIG.models,
|
|
236
|
+
connectors: [],
|
|
237
|
+
testCases: [],
|
|
238
|
+
reporters: [['console']],
|
|
239
|
+
judge: { provider: 'bedrock', model: 'claude-sonnet-4' },
|
|
240
|
+
telemetry: {},
|
|
241
|
+
storage: undefined,
|
|
242
|
+
observability: undefined,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Clear config cache (useful for testing)
|
|
247
|
+
*/
|
|
248
|
+
export function clearConfigCache() {
|
|
249
|
+
cachedConfig = null;
|
|
250
|
+
cachedConfigPath = null;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Get config file info without loading
|
|
254
|
+
*/
|
|
255
|
+
export function getConfigFileInfo(cwd = process.cwd()) {
|
|
256
|
+
return findConfigFile(cwd);
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export declare const STATE_DIRNAME = ".agent-health";
|
|
2
|
+
export declare const STATE_FILENAME = "state.json";
|
|
3
|
+
/**
|
|
4
|
+
* Generated data lives UNDER the app-managed state dir: `.agent-health/data/`
|
|
5
|
+
* (runs, benchmarks, test-cases, analytics, profiles, skill-evals,
|
|
6
|
+
* uploaded-skills). Combined with state.json so there is ONE app-managed,
|
|
7
|
+
* gitignored directory — not a second top-level `agent-health-data/`.
|
|
8
|
+
*/
|
|
9
|
+
export declare const DATA_DIRNAME = "data";
|
|
10
|
+
/** Authored config filenames, in priority order (shared with lib/config/loader). */
|
|
11
|
+
export declare const AUTHORED_CONFIG_NAMES: string[];
|
|
12
|
+
/** Legacy single-file runtime config (pre config-v2); migrated to STATE_FILENAME. */
|
|
13
|
+
export declare const LEGACY_JSON_FILENAME = "agent-health.config.json";
|
|
14
|
+
export type StateScope = 'project' | 'user';
|
|
15
|
+
export declare function projectStateDir(cwd?: string): string;
|
|
16
|
+
export declare function userStateDir(): string;
|
|
17
|
+
export declare function projectStatePath(cwd?: string): string;
|
|
18
|
+
export declare function userStatePath(): string;
|
|
19
|
+
/** Generated-data dir, nested under the project state dir: `<cwd>/.agent-health/data`. */
|
|
20
|
+
export declare function projectDataDir(cwd?: string): string;
|
|
21
|
+
export declare function statePathForScope(scope: StateScope, cwd?: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Locate an authored config file (project scope first, then user scope).
|
|
24
|
+
* Returns its absolute path, or null if none exists.
|
|
25
|
+
*/
|
|
26
|
+
export declare function findAuthoredConfig(cwd?: string): string | null;
|
|
27
|
+
export declare function hasAuthoredConfig(cwd?: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Code-first mode = an authored config file is present. In this mode the
|
|
30
|
+
* runtime state file is ignored entirely (strict rule, #271).
|
|
31
|
+
*/
|
|
32
|
+
export declare function isCodeFirstMode(cwd?: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Read a single state file. Returns `{}` when missing/corrupt (safe to create);
|
|
35
|
+
* never throws.
|
|
36
|
+
*/
|
|
37
|
+
export declare function readStateFile(path: string): Record<string, unknown>;
|
|
38
|
+
/**
|
|
39
|
+
* Layered runtime state: project overrides user, shallow per top-level key.
|
|
40
|
+
* Returns `{}` in code-first mode (state ignored).
|
|
41
|
+
*/
|
|
42
|
+
export declare function readLayeredState(cwd?: string): Record<string, unknown>;
|
|
43
|
+
/**
|
|
44
|
+
* Which scope supplies a given top-level key, or null if absent / code-first.
|
|
45
|
+
* Used for UI source attribution.
|
|
46
|
+
*/
|
|
47
|
+
export declare function stateKeyScope(key: string, cwd?: string): StateScope | null;
|
|
48
|
+
/**
|
|
49
|
+
* Read the raw state object for a single scope (no layering). Used by owners
|
|
50
|
+
* that need to merge against the exact file they will write back.
|
|
51
|
+
*/
|
|
52
|
+
export declare function readStateScope(scope: StateScope, cwd?: string): Record<string, unknown>;
|
|
53
|
+
/**
|
|
54
|
+
* Merge `patch` into a scope's state file, preserving sibling keys. A key whose
|
|
55
|
+
* value is `undefined` is deleted. Creates the `.agent-health/` dir as needed.
|
|
56
|
+
*
|
|
57
|
+
* Throws in code-first mode — runtime state must not be written when an
|
|
58
|
+
* authored config file is present.
|
|
59
|
+
*/
|
|
60
|
+
export declare function writeStateScope(patch: Record<string, unknown>, scope?: StateScope, cwd?: string): void;
|
|
61
|
+
//# sourceMappingURL=statePaths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statePaths.d.ts","sourceRoot":"","sources":["../../../config/statePaths.ts"],"names":[],"mappings":"AA6BA,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAC7C,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,YAAY,SAAS,CAAC;AAEnC,oFAAoF;AACpF,eAAO,MAAM,qBAAqB,UAIjC,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,6BAA6B,CAAC;AAE/D,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAI5C,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAEnE;AACD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AACD,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAEpE;AACD,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AACD,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAElE;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAExF;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAU7E;AAED,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAEtE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAEpE;AAID;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAanE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKrF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,UAAU,GAAG,IAAI,CAKzF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEtG;AAkBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,GAAE,UAAsB,EAC7B,GAAG,GAAE,MAAsB,GAC1B,IAAI,CAmBN"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Config state paths + mode resolution (config v2, #271).
|
|
7
|
+
*
|
|
8
|
+
* Two modes, decided by the presence of an authored config file:
|
|
9
|
+
*
|
|
10
|
+
* - **code-first**: an `agent-health.config.{ts,js,mjs}` exists (project OR
|
|
11
|
+
* user scope). The authored file (+ `.env`) is the single source of truth;
|
|
12
|
+
* the runtime state file is **ignored entirely**, and the Settings UI write
|
|
13
|
+
* paths are disabled.
|
|
14
|
+
* - **ui-first**: no authored config file anywhere. Runtime state lives in
|
|
15
|
+
* `.agent-health/state.json`, written by the Settings UI / CLI.
|
|
16
|
+
*
|
|
17
|
+
* `.agent-health/` is scoped at both **user** (`~/.agent-health/`) and
|
|
18
|
+
* **project** (`<cwd>/.agent-health/`) level, project overriding user.
|
|
19
|
+
*
|
|
20
|
+
* This module is the single owner of those paths + the mode rule. All runtime
|
|
21
|
+
* state owners (configService, customAgentStore, debug, remoteServers) read and
|
|
22
|
+
* write through it so there is no split-brain across files.
|
|
23
|
+
*/
|
|
24
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
25
|
+
import { homedir } from 'os';
|
|
26
|
+
import { resolve, join } from 'path';
|
|
27
|
+
export const STATE_DIRNAME = '.agent-health';
|
|
28
|
+
export const STATE_FILENAME = 'state.json';
|
|
29
|
+
/**
|
|
30
|
+
* Generated data lives UNDER the app-managed state dir: `.agent-health/data/`
|
|
31
|
+
* (runs, benchmarks, test-cases, analytics, profiles, skill-evals,
|
|
32
|
+
* uploaded-skills). Combined with state.json so there is ONE app-managed,
|
|
33
|
+
* gitignored directory — not a second top-level `agent-health-data/`.
|
|
34
|
+
*/
|
|
35
|
+
export const DATA_DIRNAME = 'data';
|
|
36
|
+
/** Authored config filenames, in priority order (shared with lib/config/loader). */
|
|
37
|
+
export const AUTHORED_CONFIG_NAMES = [
|
|
38
|
+
'agent-health.config.ts',
|
|
39
|
+
'agent-health.config.js',
|
|
40
|
+
'agent-health.config.mjs',
|
|
41
|
+
];
|
|
42
|
+
/** Legacy single-file runtime config (pre config-v2); migrated to STATE_FILENAME. */
|
|
43
|
+
export const LEGACY_JSON_FILENAME = 'agent-health.config.json';
|
|
44
|
+
// ── Path helpers ────────────────────────────────────────────────────────────
|
|
45
|
+
export function projectStateDir(cwd = process.cwd()) {
|
|
46
|
+
return join(cwd, STATE_DIRNAME);
|
|
47
|
+
}
|
|
48
|
+
export function userStateDir() {
|
|
49
|
+
return join(homedir(), STATE_DIRNAME);
|
|
50
|
+
}
|
|
51
|
+
export function projectStatePath(cwd = process.cwd()) {
|
|
52
|
+
return join(projectStateDir(cwd), STATE_FILENAME);
|
|
53
|
+
}
|
|
54
|
+
export function userStatePath() {
|
|
55
|
+
return join(userStateDir(), STATE_FILENAME);
|
|
56
|
+
}
|
|
57
|
+
/** Generated-data dir, nested under the project state dir: `<cwd>/.agent-health/data`. */
|
|
58
|
+
export function projectDataDir(cwd = process.cwd()) {
|
|
59
|
+
return join(projectStateDir(cwd), DATA_DIRNAME);
|
|
60
|
+
}
|
|
61
|
+
export function statePathForScope(scope, cwd = process.cwd()) {
|
|
62
|
+
return scope === 'user' ? userStatePath() : projectStatePath(cwd);
|
|
63
|
+
}
|
|
64
|
+
// ── Mode detection ───────────────────────────────────────────────────────────
|
|
65
|
+
/**
|
|
66
|
+
* Locate an authored config file (project scope first, then user scope).
|
|
67
|
+
* Returns its absolute path, or null if none exists.
|
|
68
|
+
*/
|
|
69
|
+
export function findAuthoredConfig(cwd = process.cwd()) {
|
|
70
|
+
for (const name of AUTHORED_CONFIG_NAMES) {
|
|
71
|
+
const p = resolve(cwd, name);
|
|
72
|
+
if (existsSync(p))
|
|
73
|
+
return p;
|
|
74
|
+
}
|
|
75
|
+
for (const name of AUTHORED_CONFIG_NAMES) {
|
|
76
|
+
const p = join(userStateDir(), name);
|
|
77
|
+
if (existsSync(p))
|
|
78
|
+
return p;
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
export function hasAuthoredConfig(cwd = process.cwd()) {
|
|
83
|
+
return findAuthoredConfig(cwd) !== null;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Code-first mode = an authored config file is present. In this mode the
|
|
87
|
+
* runtime state file is ignored entirely (strict rule, #271).
|
|
88
|
+
*/
|
|
89
|
+
export function isCodeFirstMode(cwd = process.cwd()) {
|
|
90
|
+
return hasAuthoredConfig(cwd);
|
|
91
|
+
}
|
|
92
|
+
// ── State read/write ─────────────────────────────────────────────────────────
|
|
93
|
+
/**
|
|
94
|
+
* Read a single state file. Returns `{}` when missing/corrupt (safe to create);
|
|
95
|
+
* never throws.
|
|
96
|
+
*/
|
|
97
|
+
export function readStateFile(path) {
|
|
98
|
+
try {
|
|
99
|
+
if (!existsSync(path))
|
|
100
|
+
return {};
|
|
101
|
+
const parsed = JSON.parse(readFileSync(path, 'utf-8'));
|
|
102
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
103
|
+
console.warn(`[statePaths] ${path} is not a JSON object — ignoring`);
|
|
104
|
+
return {};
|
|
105
|
+
}
|
|
106
|
+
return parsed;
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
console.warn(`[statePaths] Failed to read ${path}:`, err.message);
|
|
110
|
+
return {};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Layered runtime state: project overrides user, shallow per top-level key.
|
|
115
|
+
* Returns `{}` in code-first mode (state ignored).
|
|
116
|
+
*/
|
|
117
|
+
export function readLayeredState(cwd = process.cwd()) {
|
|
118
|
+
if (isCodeFirstMode(cwd))
|
|
119
|
+
return {};
|
|
120
|
+
const user = readStateFile(userStatePath());
|
|
121
|
+
const project = readStateFile(projectStatePath(cwd));
|
|
122
|
+
return { ...user, ...project };
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Which scope supplies a given top-level key, or null if absent / code-first.
|
|
126
|
+
* Used for UI source attribution.
|
|
127
|
+
*/
|
|
128
|
+
export function stateKeyScope(key, cwd = process.cwd()) {
|
|
129
|
+
if (isCodeFirstMode(cwd))
|
|
130
|
+
return null;
|
|
131
|
+
if (key in readStateFile(projectStatePath(cwd)))
|
|
132
|
+
return 'project';
|
|
133
|
+
if (key in readStateFile(userStatePath()))
|
|
134
|
+
return 'user';
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Read the raw state object for a single scope (no layering). Used by owners
|
|
139
|
+
* that need to merge against the exact file they will write back.
|
|
140
|
+
*/
|
|
141
|
+
export function readStateScope(scope, cwd = process.cwd()) {
|
|
142
|
+
return readStateFile(statePathForScope(scope, cwd));
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Strict read for the write path: returns `{}` when the file is missing (safe
|
|
146
|
+
* to create), `null` when it exists but is unreadable/corrupt (unsafe to
|
|
147
|
+
* overwrite — would clobber).
|
|
148
|
+
*/
|
|
149
|
+
function readStateFileOrNull(path) {
|
|
150
|
+
if (!existsSync(path))
|
|
151
|
+
return {};
|
|
152
|
+
try {
|
|
153
|
+
const parsed = JSON.parse(readFileSync(path, 'utf-8'));
|
|
154
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
155
|
+
return null;
|
|
156
|
+
return parsed;
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Merge `patch` into a scope's state file, preserving sibling keys. A key whose
|
|
164
|
+
* value is `undefined` is deleted. Creates the `.agent-health/` dir as needed.
|
|
165
|
+
*
|
|
166
|
+
* Throws in code-first mode — runtime state must not be written when an
|
|
167
|
+
* authored config file is present.
|
|
168
|
+
*/
|
|
169
|
+
export function writeStateScope(patch, scope = 'project', cwd = process.cwd()) {
|
|
170
|
+
if (isCodeFirstMode(cwd)) {
|
|
171
|
+
throw new Error('Cannot write runtime state: data sources are managed by agent-health.config.ts (code-first mode). ' +
|
|
172
|
+
'Edit the config file and restart.');
|
|
173
|
+
}
|
|
174
|
+
const path = statePathForScope(scope, cwd);
|
|
175
|
+
const dir = scope === 'user' ? userStateDir() : projectStateDir(cwd);
|
|
176
|
+
const existing = readStateFileOrNull(path);
|
|
177
|
+
if (existing === null) {
|
|
178
|
+
throw new Error(`Cannot write runtime state: ${path} is unreadable or corrupt`);
|
|
179
|
+
}
|
|
180
|
+
const merged = { ...existing, ...patch };
|
|
181
|
+
for (const [k, v] of Object.entries(patch)) {
|
|
182
|
+
if (v === undefined)
|
|
183
|
+
delete merged[k];
|
|
184
|
+
}
|
|
185
|
+
mkdirSync(dir, { recursive: true });
|
|
186
|
+
writeFileSync(path, JSON.stringify(merged, null, 2) + '\n', 'utf-8');
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=statePaths.js.map
|