@evalops/maestro 0.10.18 → 0.10.20
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 +56 -1
- package/dist/agent/action-approval.d.ts +12 -2
- package/dist/agent/action-approval.d.ts.map +1 -1
- package/dist/agent/action-approval.js +19 -32
- package/dist/agent/action-approval.js.map +1 -1
- package/dist/agent/agent.d.ts +1 -0
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +26 -0
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/compaction.d.ts +2 -0
- package/dist/agent/compaction.d.ts.map +1 -1
- package/dist/agent/compaction.js +4 -2
- package/dist/agent/compaction.js.map +1 -1
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/modes.d.ts +56 -4
- package/dist/agent/modes.d.ts.map +1 -1
- package/dist/agent/modes.js +163 -2
- package/dist/agent/modes.js.map +1 -1
- package/dist/agent/prompt-recovery.d.ts.map +1 -1
- package/dist/agent/prompt-recovery.js +1 -3
- package/dist/agent/prompt-recovery.js.map +1 -1
- package/dist/agent/providers/anthropic.d.ts.map +1 -1
- package/dist/agent/providers/anthropic.js +9 -1
- package/dist/agent/providers/anthropic.js.map +1 -1
- package/dist/agent/providers/codex-app-server.d.ts +12 -0
- package/dist/agent/providers/codex-app-server.d.ts.map +1 -0
- package/dist/agent/providers/codex-app-server.js +788 -0
- package/dist/agent/providers/codex-app-server.js.map +1 -0
- package/dist/agent/providers/google-gemini-cli.js +14 -3
- package/dist/agent/providers/google.js +22 -3
- package/dist/agent/providers/scripted.d.ts +11 -0
- package/dist/agent/providers/scripted.d.ts.map +1 -0
- package/dist/agent/providers/scripted.js +399 -0
- package/dist/agent/providers/scripted.js.map +1 -0
- package/dist/agent/providers/vertex.js +14 -3
- package/dist/agent/scenario-source.d.ts +19 -0
- package/dist/agent/scenario-source.d.ts.map +1 -0
- package/dist/agent/scenario-source.js +112 -0
- package/dist/agent/scenario-source.js.map +1 -0
- package/dist/agent/subagent-specs.d.ts +1 -1
- package/dist/agent/subagent-specs.js +1 -1
- package/dist/agent/subagent-specs.js.map +1 -1
- package/dist/agent/swarm/executor.d.ts +25 -0
- package/dist/agent/swarm/executor.d.ts.map +1 -1
- package/dist/agent/swarm/executor.js +795 -20
- package/dist/agent/swarm/executor.js.map +1 -1
- package/dist/agent/swarm/runtime-events.d.ts +11 -0
- package/dist/agent/swarm/runtime-events.d.ts.map +1 -0
- package/dist/agent/swarm/runtime-events.js +26 -0
- package/dist/agent/swarm/runtime-events.js.map +1 -0
- package/dist/agent/swarm/types.d.ts +78 -0
- package/dist/agent/swarm/types.d.ts.map +1 -1
- package/dist/agent/swarm/types.js.map +1 -1
- package/dist/agent/tracing.d.ts +1 -1
- package/dist/agent/tracing.d.ts.map +1 -1
- package/dist/agent/tracing.js +17 -9
- package/dist/agent/tracing.js.map +1 -1
- package/dist/agent/transport/create-provider-stream.d.ts.map +1 -1
- package/dist/agent/transport/create-provider-stream.js +14 -0
- package/dist/agent/transport/create-provider-stream.js.map +1 -1
- package/dist/agent/transport/stable-stringify.d.ts +2 -0
- package/dist/agent/transport/stable-stringify.d.ts.map +1 -0
- package/dist/agent/transport/stable-stringify.js +14 -0
- package/dist/agent/transport/stable-stringify.js.map +1 -0
- package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
- package/dist/agent/transport/tool-execution-bridge.js +2 -15
- package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
- package/dist/agent/transport/tool-safety-pipeline.d.ts +5 -1
- package/dist/agent/transport/tool-safety-pipeline.d.ts.map +1 -1
- package/dist/agent/transport/tool-safety-pipeline.js +184 -36
- package/dist/agent/transport/tool-safety-pipeline.js.map +1 -1
- package/dist/agent/transport.d.ts +8 -0
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/transport.js +1613 -68
- package/dist/agent/transport.js.map +1 -1
- package/dist/agent/types.d.ts +170 -2
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/api/enterprise-routes.d.ts.map +1 -1
- package/dist/api/enterprise-routes.js +34 -3
- package/dist/api/enterprise-routes.js.map +1 -1
- package/dist/app-server/in-process-client.d.ts +32 -0
- package/dist/app-server/in-process-client.d.ts.map +1 -0
- package/dist/app-server/in-process-client.js +73 -0
- package/dist/app-server/in-process-client.js.map +1 -0
- package/dist/app-server/session-api.d.ts +36 -0
- package/dist/app-server/session-api.d.ts.map +1 -0
- package/dist/app-server/session-api.js +713 -0
- package/dist/app-server/session-api.js.map +1 -0
- package/dist/approvals/platform-action-approval.d.ts +3 -1
- package/dist/approvals/platform-action-approval.d.ts.map +1 -1
- package/dist/approvals/platform-action-approval.js +16 -9
- package/dist/approvals/platform-action-approval.js.map +1 -1
- package/dist/approvals/service-client.d.ts.map +1 -1
- package/dist/approvals/service-client.js +7 -7
- package/dist/approvals/service-client.js.map +1 -1
- package/dist/audit/logger.d.ts +4 -4
- package/dist/bootstrap/agent-creation-setup.d.ts +4 -0
- package/dist/bootstrap/agent-creation-setup.d.ts.map +1 -1
- package/dist/bootstrap/agent-creation-setup.js +3 -1
- package/dist/bootstrap/agent-creation-setup.js.map +1 -1
- package/dist/bootstrap/auth-setup.js +1 -1
- package/dist/bootstrap/auth-setup.js.map +1 -1
- package/dist/bootstrap/event-subscriptions-setup.d.ts +6 -0
- package/dist/bootstrap/event-subscriptions-setup.d.ts.map +1 -1
- package/dist/bootstrap/event-subscriptions-setup.js +26 -2
- package/dist/bootstrap/event-subscriptions-setup.js.map +1 -1
- package/dist/bootstrap/model-resolution-setup.d.ts.map +1 -1
- package/dist/bootstrap/model-resolution-setup.js +4 -1
- package/dist/bootstrap/model-resolution-setup.js.map +1 -1
- package/dist/bootstrap/tools-setup.d.ts +2 -1
- package/dist/bootstrap/tools-setup.d.ts.map +1 -1
- package/dist/bootstrap/tools-setup.js +5 -1
- package/dist/bootstrap/tools-setup.js.map +1 -1
- package/dist/cli/args.d.ts +9 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +130 -5
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/a2a.d.ts +9 -0
- package/dist/cli/commands/a2a.d.ts.map +1 -0
- package/dist/cli/commands/a2a.js +1714 -0
- package/dist/cli/commands/a2a.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +16 -2
- package/dist/cli/commands/agents.d.ts.map +1 -1
- package/dist/cli/commands/agents.js +223 -35
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/codex.d.ts +1 -1
- package/dist/cli/commands/codex.d.ts.map +1 -1
- package/dist/cli/commands/codex.js +145 -39
- package/dist/cli/commands/codex.js.map +1 -1
- package/dist/cli/commands/context.d.ts +10 -0
- package/dist/cli/commands/context.d.ts.map +1 -0
- package/dist/cli/commands/context.js +176 -0
- package/dist/cli/commands/context.js.map +1 -0
- package/dist/cli/commands/hosted-runner.d.ts +1 -0
- package/dist/cli/commands/hosted-runner.d.ts.map +1 -1
- package/dist/cli/commands/hosted-runner.js +9 -1
- package/dist/cli/commands/hosted-runner.js.map +1 -1
- package/dist/cli/commands/modes.d.ts +8 -0
- package/dist/cli/commands/modes.d.ts.map +1 -0
- package/dist/cli/commands/modes.js +151 -0
- package/dist/cli/commands/modes.js.map +1 -0
- package/dist/cli/commands/operating-plane.d.ts +14 -0
- package/dist/cli/commands/operating-plane.d.ts.map +1 -0
- package/dist/cli/commands/operating-plane.js +160 -0
- package/dist/cli/commands/operating-plane.js.map +1 -0
- package/dist/cli/commands/run.d.ts +87 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +356 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/scenario.d.ts +7 -0
- package/dist/cli/commands/scenario.d.ts.map +1 -0
- package/dist/cli/commands/scenario.js +195 -0
- package/dist/cli/commands/scenario.js.map +1 -0
- package/dist/cli/commands/skill.d.ts +7 -0
- package/dist/cli/commands/skill.d.ts.map +1 -0
- package/dist/cli/commands/skill.js +286 -0
- package/dist/cli/commands/skill.js.map +1 -0
- package/dist/cli/headless-protocol.d.ts +55 -1
- package/dist/cli/headless-protocol.d.ts.map +1 -1
- package/dist/cli/headless-protocol.js +446 -7
- package/dist/cli/headless-protocol.js.map +1 -1
- package/dist/cli/headless-runtime-selection.d.ts +38 -0
- package/dist/cli/headless-runtime-selection.d.ts.map +1 -0
- package/dist/cli/headless-runtime-selection.js +48 -0
- package/dist/cli/headless-runtime-selection.js.map +1 -0
- package/dist/cli/headless.d.ts +5 -1
- package/dist/cli/headless.d.ts.map +1 -1
- package/dist/cli/headless.js +11 -1
- package/dist/cli/headless.js.map +1 -1
- package/dist/cli/help.d.ts +3 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +135 -30
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/system-prompt.d.ts +22 -4
- package/dist/cli/system-prompt.d.ts.map +1 -1
- package/dist/cli/system-prompt.js +224 -127
- package/dist/cli/system-prompt.js.map +1 -1
- package/dist/cli-tui/commands/a2a-handlers.d.ts +7 -0
- package/dist/cli-tui/commands/a2a-handlers.d.ts.map +1 -0
- package/dist/cli-tui/commands/a2a-handlers.js +160 -0
- package/dist/cli-tui/commands/a2a-handlers.js.map +1 -0
- package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
- package/dist/cli-tui/commands/command-catalog.js +15 -0
- package/dist/cli-tui/commands/command-catalog.js.map +1 -1
- package/dist/cli-tui/commands/command-registry-adapter.js +10 -1
- package/dist/cli-tui/commands/command-registry-adapter.js.map +1 -1
- package/dist/cli-tui/commands/handlers/mode-handler.d.ts.map +1 -1
- package/dist/cli-tui/commands/handlers/mode-handler.js +22 -10
- package/dist/cli-tui/commands/handlers/mode-handler.js.map +1 -1
- package/dist/cli-tui/commands/mcp-handlers.d.ts.map +1 -1
- package/dist/cli-tui/commands/mcp-handlers.js +6 -5
- package/dist/cli-tui/commands/mcp-handlers.js.map +1 -1
- package/dist/cli-tui/commands/types.d.ts +1 -0
- package/dist/cli-tui/commands/types.d.ts.map +1 -1
- package/dist/cli-tui/commands/types.js.map +1 -1
- package/dist/cli-tui/commands/utility-handlers.d.ts +4 -0
- package/dist/cli-tui/commands/utility-handlers.d.ts.map +1 -1
- package/dist/cli-tui/commands/utility-handlers.js +45 -6
- package/dist/cli-tui/commands/utility-handlers.js.map +1 -1
- package/dist/cli-tui/run/run-shell-command.d.ts.map +1 -1
- package/dist/cli-tui/run/run-shell-command.js +14 -5
- package/dist/cli-tui/run/run-shell-command.js.map +1 -1
- package/dist/cli-tui/run/streaming-shell-command.d.ts.map +1 -1
- package/dist/cli-tui/run/streaming-shell-command.js +14 -5
- package/dist/cli-tui/run/streaming-shell-command.js.map +1 -1
- package/dist/cli-tui/selectors/model-selector.d.ts +1 -0
- package/dist/cli-tui/selectors/model-selector.d.ts.map +1 -1
- package/dist/cli-tui/selectors/model-selector.js +6 -2
- package/dist/cli-tui/selectors/model-selector.js.map +1 -1
- package/dist/cli-tui/tui-renderer/command-registry-options.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer/command-registry-options.js +5 -0
- package/dist/cli-tui/tui-renderer/command-registry-options.js.map +1 -1
- package/dist/cli-tui/utils/commands/review-prompt.d.ts +1 -1
- package/dist/cli-tui/utils/commands/review-prompt.d.ts.map +1 -1
- package/dist/cli-tui/utils/commands/review-prompt.js +8 -3
- package/dist/cli-tui/utils/commands/review-prompt.js.map +1 -1
- package/dist/cli-tui/utils/runtime-badges.d.ts +1 -0
- package/dist/cli-tui/utils/runtime-badges.d.ts.map +1 -1
- package/dist/cli-tui/utils/runtime-badges.js +7 -0
- package/dist/cli-tui/utils/runtime-badges.js.map +1 -1
- package/dist/cli-tui/utils/text-formatting.d.ts +1 -0
- package/dist/cli-tui/utils/text-formatting.d.ts.map +1 -1
- package/dist/cli-tui/utils/text-formatting.js +5 -0
- package/dist/cli-tui/utils/text-formatting.js.map +1 -1
- package/dist/cli.js +49158 -26161
- package/dist/cli.js.map +1 -1
- package/dist/codex/app-server-client.d.ts +139 -0
- package/dist/codex/app-server-client.d.ts.map +1 -0
- package/dist/codex/app-server-client.js +352 -0
- package/dist/codex/app-server-client.js.map +1 -0
- package/dist/codex/compatibility.d.ts +48 -0
- package/dist/codex/compatibility.d.ts.map +1 -0
- package/dist/codex/compatibility.js +344 -0
- package/dist/codex/compatibility.js.map +1 -0
- package/dist/codex/subagent-dispatch-table.d.ts +66 -0
- package/dist/codex/subagent-dispatch-table.d.ts.map +1 -0
- package/dist/codex/subagent-dispatch-table.js +127 -0
- package/dist/codex/subagent-dispatch-table.js.map +1 -0
- package/dist/codex/subagent-workgraph.d.ts +56 -0
- package/dist/codex/subagent-workgraph.d.ts.map +1 -0
- package/dist/codex/subagent-workgraph.js +89 -0
- package/dist/codex/subagent-workgraph.js.map +1 -0
- package/dist/config/constants.d.ts +3 -1
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +9 -0
- package/dist/config/constants.js.map +1 -1
- package/dist/config/feature-flags.d.ts +10 -1
- package/dist/config/feature-flags.d.ts.map +1 -1
- package/dist/config/feature-flags.js +17 -6
- package/dist/config/feature-flags.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/toml-config.d.ts +32 -0
- package/dist/config/toml-config.d.ts.map +1 -1
- package/dist/config/toml-config.js +152 -43
- package/dist/config/toml-config.js.map +1 -1
- package/dist/connectors/service-client.d.ts.map +1 -1
- package/dist/connectors/service-client.js +4 -7
- package/dist/connectors/service-client.js.map +1 -1
- package/dist/context/manifest-types.d.ts +59 -0
- package/dist/context/manifest-types.d.ts.map +1 -0
- package/dist/context/manifest-types.js +2 -0
- package/dist/context/manifest-types.js.map +1 -0
- package/dist/context/manifest.d.ts +16 -0
- package/dist/context/manifest.d.ts.map +1 -0
- package/dist/context/manifest.js +503 -0
- package/dist/context/manifest.js.map +1 -0
- package/dist/db/schema.d.ts +10 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js.map +1 -1
- package/dist/evalops/env-aliases.d.ts +13 -0
- package/dist/evalops/env-aliases.d.ts.map +1 -0
- package/dist/evalops/env-aliases.js +60 -0
- package/dist/evalops/env-aliases.js.map +1 -0
- package/dist/evalops/managed-context.d.ts.map +1 -1
- package/dist/evalops/managed-context.js +28 -62
- package/dist/evalops/managed-context.js.map +1 -1
- package/dist/guardian/config.d.ts.map +1 -1
- package/dist/guardian/config.js +1 -0
- package/dist/guardian/config.js.map +1 -1
- package/dist/guardian/runner.d.ts +2 -0
- package/dist/guardian/runner.d.ts.map +1 -1
- package/dist/guardian/runner.js +105 -2
- package/dist/guardian/runner.js.map +1 -1
- package/dist/guardian/types.d.ts +1 -0
- package/dist/guardian/types.d.ts.map +1 -1
- package/dist/guardian/types.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +267 -55
- package/dist/main.js.map +1 -1
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/mcp/config.js +89 -7
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/manager.d.ts +5 -1
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +159 -4
- package/dist/mcp/manager.js.map +1 -1
- package/dist/mcp/platform-plugin.d.ts.map +1 -1
- package/dist/mcp/platform-plugin.js +9 -26
- package/dist/mcp/platform-plugin.js.map +1 -1
- package/dist/mcp/schema.d.ts +15 -0
- package/dist/mcp/schema.d.ts.map +1 -1
- package/dist/mcp/schema.js +24 -0
- package/dist/mcp/schema.js.map +1 -1
- package/dist/mcp/tool-bridge.d.ts +39 -10
- package/dist/mcp/tool-bridge.d.ts.map +1 -1
- package/dist/mcp/tool-bridge.js +101 -24
- package/dist/mcp/tool-bridge.js.map +1 -1
- package/dist/mcp/types.d.ts +27 -0
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/mcp/types.js.map +1 -1
- package/dist/mcp/workspace-trust.d.ts +10 -0
- package/dist/mcp/workspace-trust.d.ts.map +1 -0
- package/dist/mcp/workspace-trust.js +295 -0
- package/dist/mcp/workspace-trust.js.map +1 -0
- package/dist/memory/service-client.d.ts +1 -0
- package/dist/memory/service-client.d.ts.map +1 -1
- package/dist/memory/service-client.js +194 -9
- package/dist/memory/service-client.js.map +1 -1
- package/dist/models/builtin.d.ts.map +1 -1
- package/dist/models/builtin.js +66 -25
- package/dist/models/builtin.js.map +1 -1
- package/dist/models/config-loader.d.ts +10 -10
- package/dist/models/config-loader.d.ts.map +1 -1
- package/dist/models/config-loader.js +2 -0
- package/dist/models/config-loader.js.map +1 -1
- package/dist/models/registry.d.ts +1 -0
- package/dist/models/registry.d.ts.map +1 -1
- package/dist/models/registry.js +1 -0
- package/dist/models/registry.js.map +1 -1
- package/dist/oauth/device-identity.d.ts.map +1 -1
- package/dist/oauth/device-identity.js +1 -3
- package/dist/oauth/device-identity.js.map +1 -1
- package/dist/oauth/evalops.d.ts.map +1 -1
- package/dist/oauth/evalops.js +2 -5
- package/dist/oauth/evalops.js.map +1 -1
- package/dist/opentelemetry.d.ts.map +1 -1
- package/dist/opentelemetry.js +12 -12
- package/dist/opentelemetry.js.map +1 -1
- package/dist/package-version.d.ts +2 -0
- package/dist/package-version.d.ts.map +1 -0
- package/dist/package-version.js +11 -0
- package/dist/package-version.js.map +1 -0
- package/dist/packages/constants.d.ts +3 -0
- package/dist/packages/constants.d.ts.map +1 -0
- package/dist/packages/constants.js +3 -0
- package/dist/packages/constants.js.map +1 -0
- package/dist/packages/inspection.d.ts.map +1 -1
- package/dist/packages/inspection.js +2 -1
- package/dist/packages/inspection.js.map +1 -1
- package/dist/packages/search.d.ts.map +1 -1
- package/dist/packages/search.js +1 -1
- package/dist/packages/search.js.map +1 -1
- package/dist/platform/a2a-capability-market.d.ts +21 -0
- package/dist/platform/a2a-capability-market.d.ts.map +1 -0
- package/dist/platform/a2a-capability-market.js +176 -0
- package/dist/platform/a2a-capability-market.js.map +1 -0
- package/dist/platform/a2a-client.d.ts +119 -0
- package/dist/platform/a2a-client.d.ts.map +1 -1
- package/dist/platform/a2a-client.js +413 -24
- package/dist/platform/a2a-client.js.map +1 -1
- package/dist/platform/a2a-fleet.d.ts +41 -0
- package/dist/platform/a2a-fleet.d.ts.map +1 -0
- package/dist/platform/a2a-fleet.js +109 -0
- package/dist/platform/a2a-fleet.js.map +1 -0
- package/dist/platform/a2a-maestro-peer.d.ts +20 -0
- package/dist/platform/a2a-maestro-peer.d.ts.map +1 -0
- package/dist/platform/a2a-maestro-peer.js +176 -0
- package/dist/platform/a2a-maestro-peer.js.map +1 -0
- package/dist/platform/a2a-peer-pairing.d.ts +107 -0
- package/dist/platform/a2a-peer-pairing.d.ts.map +1 -0
- package/dist/platform/a2a-peer-pairing.js +489 -0
- package/dist/platform/a2a-peer-pairing.js.map +1 -0
- package/dist/platform/a2a-peer-registry.d.ts +68 -0
- package/dist/platform/a2a-peer-registry.d.ts.map +1 -0
- package/dist/platform/a2a-peer-registry.js +320 -0
- package/dist/platform/a2a-peer-registry.js.map +1 -0
- package/dist/platform/a2a-task-ledger.d.ts +86 -0
- package/dist/platform/a2a-task-ledger.d.ts.map +1 -0
- package/dist/platform/a2a-task-ledger.js +546 -0
- package/dist/platform/a2a-task-ledger.js.map +1 -0
- package/dist/platform/a2a-work-graph.d.ts +43 -0
- package/dist/platform/a2a-work-graph.d.ts.map +1 -0
- package/dist/platform/a2a-work-graph.js +267 -0
- package/dist/platform/a2a-work-graph.js.map +1 -0
- package/dist/platform/agent-registry-client.d.ts +327 -0
- package/dist/platform/agent-registry-client.d.ts.map +1 -0
- package/dist/platform/agent-registry-client.js +803 -0
- package/dist/platform/agent-registry-client.js.map +1 -0
- package/dist/platform/agent-runtime-client.d.ts +135 -1
- package/dist/platform/agent-runtime-client.d.ts.map +1 -1
- package/dist/platform/agent-runtime-client.js +467 -10
- package/dist/platform/agent-runtime-client.js.map +1 -1
- package/dist/platform/cerebro-facts-client.d.ts.map +1 -1
- package/dist/platform/cerebro-facts-client.js +4 -7
- package/dist/platform/cerebro-facts-client.js.map +1 -1
- package/dist/platform/client.d.ts.map +1 -1
- package/dist/platform/client.js +3 -12
- package/dist/platform/client.js.map +1 -1
- package/dist/platform/core-services.d.ts +68 -0
- package/dist/platform/core-services.d.ts.map +1 -1
- package/dist/platform/core-services.js +68 -0
- package/dist/platform/core-services.js.map +1 -1
- package/dist/platform/fermata-eval-client.d.ts +195 -0
- package/dist/platform/fermata-eval-client.d.ts.map +1 -0
- package/dist/platform/fermata-eval-client.js +146 -0
- package/dist/platform/fermata-eval-client.js.map +1 -0
- package/dist/platform/fermata-scenario-suite.d.ts +99 -0
- package/dist/platform/fermata-scenario-suite.d.ts.map +1 -0
- package/dist/platform/fermata-scenario-suite.js +459 -0
- package/dist/platform/fermata-scenario-suite.js.map +1 -0
- package/dist/platform/maestro-timeline-client.d.ts.map +1 -1
- package/dist/platform/maestro-timeline-client.js +5 -11
- package/dist/platform/maestro-timeline-client.js.map +1 -1
- package/dist/platform/operating-plane-client.d.ts +156 -0
- package/dist/platform/operating-plane-client.d.ts.map +1 -0
- package/dist/platform/operating-plane-client.js +131 -0
- package/dist/platform/operating-plane-client.js.map +1 -0
- package/dist/platform/operating-plane-summary.d.ts +47 -0
- package/dist/platform/operating-plane-summary.d.ts.map +1 -0
- package/dist/platform/operating-plane-summary.js +209 -0
- package/dist/platform/operating-plane-summary.js.map +1 -0
- package/dist/platform/tool-execution-client.d.ts.map +1 -1
- package/dist/platform/tool-execution-client.js +4 -11
- package/dist/platform/tool-execution-client.js.map +1 -1
- package/dist/prompts/service-client.d.ts.map +1 -1
- package/dist/prompts/service-client.js +3 -5
- package/dist/prompts/service-client.js.map +1 -1
- package/dist/prompts/system-prompt.d.ts +3 -0
- package/dist/prompts/system-prompt.d.ts.map +1 -1
- package/dist/prompts/system-prompt.js +13 -3
- package/dist/prompts/system-prompt.js.map +1 -1
- package/dist/prompts/types.d.ts +2 -0
- package/dist/prompts/types.d.ts.map +1 -1
- package/dist/prompts/types.js.map +1 -1
- package/dist/providers/api-keys.d.ts +1 -1
- package/dist/providers/api-keys.d.ts.map +1 -1
- package/dist/providers/api-keys.js +2 -1
- package/dist/providers/api-keys.js.map +1 -1
- package/dist/providers/auth.d.ts.map +1 -1
- package/dist/providers/auth.js +48 -25
- package/dist/providers/auth.js.map +1 -1
- package/dist/remote-runner/attach-client.d.ts.map +1 -1
- package/dist/remote-runner/attach-client.js +1 -0
- package/dist/remote-runner/attach-client.js.map +1 -1
- package/dist/remote-runner/client.d.ts.map +1 -1
- package/dist/remote-runner/client.js +4 -7
- package/dist/remote-runner/client.js.map +1 -1
- package/dist/rpc/rpc-types.d.ts.map +1 -1
- package/dist/rpc/rpc-types.js +1 -0
- package/dist/rpc/rpc-types.js.map +1 -1
- package/dist/safety/action-firewall.d.ts.map +1 -1
- package/dist/safety/action-firewall.js +69 -6
- package/dist/safety/action-firewall.js.map +1 -1
- package/dist/safety/attack-patterns.d.ts.map +1 -1
- package/dist/safety/attack-patterns.js +31 -14
- package/dist/safety/attack-patterns.js.map +1 -1
- package/dist/safety/bash-parser.d.ts.map +1 -1
- package/dist/safety/bash-parser.js +4 -3
- package/dist/safety/bash-parser.js.map +1 -1
- package/dist/safety/execpolicy.d.ts +15 -3
- package/dist/safety/execpolicy.d.ts.map +1 -1
- package/dist/safety/execpolicy.js +248 -37
- package/dist/safety/execpolicy.js.map +1 -1
- package/dist/safety/governance-service-client.d.ts.map +1 -1
- package/dist/safety/governance-service-client.js +4 -7
- package/dist/safety/governance-service-client.js.map +1 -1
- package/dist/safety/guarded-files.d.ts +34 -0
- package/dist/safety/guarded-files.d.ts.map +1 -0
- package/dist/safety/guarded-files.js +372 -0
- package/dist/safety/guarded-files.js.map +1 -0
- package/dist/safety/loop-detector.d.ts.map +1 -1
- package/dist/safety/loop-detector.js +6 -1
- package/dist/safety/loop-detector.js.map +1 -1
- package/dist/safety/permission-profile.d.ts +47 -0
- package/dist/safety/permission-profile.d.ts.map +1 -0
- package/dist/safety/permission-profile.js +349 -0
- package/dist/safety/permission-profile.js.map +1 -0
- package/dist/safety/safety-middleware.d.ts +5 -1
- package/dist/safety/safety-middleware.d.ts.map +1 -1
- package/dist/safety/safety-middleware.js +3 -2
- package/dist/safety/safety-middleware.js.map +1 -1
- package/dist/safety/suspicious-patterns.d.ts.map +1 -1
- package/dist/safety/suspicious-patterns.js +12 -7
- package/dist/safety/suspicious-patterns.js.map +1 -1
- package/dist/safety/tool-categorization.js +1 -1
- package/dist/safety/tool-categorization.js.map +1 -1
- package/dist/safety/validators/path-policy-validator.d.ts.map +1 -1
- package/dist/safety/validators/path-policy-validator.js +7 -0
- package/dist/safety/validators/path-policy-validator.js.map +1 -1
- package/dist/sandbox/index.d.ts +6 -1
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +30 -4
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/native-sandbox.d.ts +3 -0
- package/dist/sandbox/native-sandbox.d.ts.map +1 -1
- package/dist/sandbox/native-sandbox.js +139 -18
- package/dist/sandbox/native-sandbox.js.map +1 -1
- package/dist/sentry.d.ts +17 -0
- package/dist/sentry.d.ts.map +1 -0
- package/dist/sentry.js +91 -0
- package/dist/sentry.js.map +1 -0
- package/dist/server/agent-runtime-ledger.d.ts +141 -0
- package/dist/server/agent-runtime-ledger.d.ts.map +1 -0
- package/dist/server/agent-runtime-ledger.js +334 -0
- package/dist/server/agent-runtime-ledger.js.map +1 -0
- package/dist/server/agent-trajectory-inspection.d.ts +104 -0
- package/dist/server/agent-trajectory-inspection.d.ts.map +1 -0
- package/dist/server/agent-trajectory-inspection.js +168 -0
- package/dist/server/agent-trajectory-inspection.js.map +1 -0
- package/dist/server/agent-trajectory-replay.d.ts +56 -0
- package/dist/server/agent-trajectory-replay.d.ts.map +1 -0
- package/dist/server/agent-trajectory-replay.js +214 -0
- package/dist/server/agent-trajectory-replay.js.map +1 -0
- package/dist/server/agent-trajectory-scenarios.d.ts +109 -0
- package/dist/server/agent-trajectory-scenarios.d.ts.map +1 -0
- package/dist/server/agent-trajectory-scenarios.js +822 -0
- package/dist/server/agent-trajectory-scenarios.js.map +1 -0
- package/dist/server/agent-trajectory-scorers.d.ts +61 -0
- package/dist/server/agent-trajectory-scorers.d.ts.map +1 -0
- package/dist/server/agent-trajectory-scorers.js +162 -0
- package/dist/server/agent-trajectory-scorers.js.map +1 -0
- package/dist/server/agent-trajectory-validation.d.ts +7 -0
- package/dist/server/agent-trajectory-validation.d.ts.map +1 -0
- package/dist/server/agent-trajectory-validation.js +101 -0
- package/dist/server/agent-trajectory-validation.js.map +1 -0
- package/dist/server/agent-trajectory.d.ts +50 -0
- package/dist/server/agent-trajectory.d.ts.map +1 -0
- package/dist/server/agent-trajectory.js +159 -0
- package/dist/server/agent-trajectory.js.map +1 -0
- package/dist/server/app-context.d.ts +18 -0
- package/dist/server/app-context.d.ts.map +1 -1
- package/dist/server/app-context.js.map +1 -1
- package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
- package/dist/server/handlers/headless-sessions.js +64 -27
- package/dist/server/handlers/headless-sessions.js.map +1 -1
- package/dist/server/handlers/health.d.ts +6 -0
- package/dist/server/handlers/health.d.ts.map +1 -1
- package/dist/server/handlers/health.js +6 -0
- package/dist/server/handlers/health.js.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.d.ts +69 -1
- package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.js +309 -18
- package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
- package/dist/server/handlers/hosted-runner-identity.d.ts +16 -0
- package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
- package/dist/server/handlers/hosted-runner-identity.js +43 -0
- package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
- package/dist/server/handlers/mode.d.ts.map +1 -1
- package/dist/server/handlers/mode.js +3 -1
- package/dist/server/handlers/mode.js.map +1 -1
- package/dist/server/handlers/pending-requests.d.ts.map +1 -1
- package/dist/server/handlers/pending-requests.js +336 -51
- package/dist/server/handlers/pending-requests.js.map +1 -1
- package/dist/server/handlers/platform-a2a-push.d.ts +6 -0
- package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -0
- package/dist/server/handlers/platform-a2a-push.js +136 -0
- package/dist/server/handlers/platform-a2a-push.js.map +1 -0
- package/dist/server/handlers/sessions.d.ts.map +1 -1
- package/dist/server/handlers/sessions.js +21 -1
- package/dist/server/handlers/sessions.js.map +1 -1
- package/dist/server/headless-runtime-service.d.ts +9 -2
- package/dist/server/headless-runtime-service.d.ts.map +1 -1
- package/dist/server/headless-runtime-service.js +39 -0
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/server/hosted-agent-runtime-progress.d.ts +144 -0
- package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -0
- package/dist/server/hosted-agent-runtime-progress.js +1650 -0
- package/dist/server/hosted-agent-runtime-progress.js.map +1 -0
- package/dist/server/hosted-runner-lease.d.ts +41 -0
- package/dist/server/hosted-runner-lease.d.ts.map +1 -0
- package/dist/server/hosted-runner-lease.js +140 -0
- package/dist/server/hosted-runner-lease.js.map +1 -0
- package/dist/server/hosted-session-manager.d.ts +16 -8
- package/dist/server/hosted-session-manager.d.ts.map +1 -1
- package/dist/server/hosted-session-manager.js +98 -76
- package/dist/server/hosted-session-manager.js.map +1 -1
- package/dist/server/junit-xml.d.ts +2 -0
- package/dist/server/junit-xml.d.ts.map +1 -0
- package/dist/server/junit-xml.js +9 -0
- package/dist/server/junit-xml.js.map +1 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +6 -0
- package/dist/server/routes.js.map +1 -1
- package/dist/server/scenario-recorder.d.ts +56 -0
- package/dist/server/scenario-recorder.d.ts.map +1 -0
- package/dist/server/scenario-recorder.js +109 -0
- package/dist/server/scenario-recorder.js.map +1 -0
- package/dist/server/scripted-scenario-runner.d.ts +46 -0
- package/dist/server/scripted-scenario-runner.d.ts.map +1 -0
- package/dist/server/scripted-scenario-runner.js +190 -0
- package/dist/server/scripted-scenario-runner.js.map +1 -0
- package/dist/server/server-middlewares.d.ts +6 -2
- package/dist/server/server-middlewares.d.ts.map +1 -1
- package/dist/server/server-middlewares.js +8 -2
- package/dist/server/server-middlewares.js.map +1 -1
- package/dist/server/server-request-manager.d.ts +9 -1
- package/dist/server/server-request-manager.d.ts.map +1 -1
- package/dist/server/server-request-manager.js +49 -4
- package/dist/server/server-request-manager.js.map +1 -1
- package/dist/services/intelligent-router/service.d.ts +2 -0
- package/dist/services/intelligent-router/service.d.ts.map +1 -1
- package/dist/services/intelligent-router/service.js +4 -0
- package/dist/services/intelligent-router/service.js.map +1 -1
- package/dist/services/service-authority.d.ts +25 -0
- package/dist/services/service-authority.d.ts.map +1 -0
- package/dist/services/service-authority.js +143 -0
- package/dist/services/service-authority.js.map +1 -0
- package/dist/services/workspace-config/service.d.ts +2 -0
- package/dist/services/workspace-config/service.d.ts.map +1 -1
- package/dist/services/workspace-config/service.js +4 -0
- package/dist/services/workspace-config/service.js.map +1 -1
- package/dist/session/manager.d.ts +8 -2
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +19 -4
- package/dist/session/manager.js.map +1 -1
- package/dist/session/session-branch.d.ts.map +1 -1
- package/dist/session/session-branch.js +5 -1
- package/dist/session/session-branch.js.map +1 -1
- package/dist/session/session-catalog.d.ts +7 -2
- package/dist/session/session-catalog.d.ts.map +1 -1
- package/dist/session/session-catalog.js +13 -2
- package/dist/session/session-catalog.js.map +1 -1
- package/dist/session/session-context.d.ts +6 -2
- package/dist/session/session-context.d.ts.map +1 -1
- package/dist/session/session-context.js +44 -4
- package/dist/session/session-context.js.map +1 -1
- package/dist/session/session-graph-projection.d.ts +32 -0
- package/dist/session/session-graph-projection.d.ts.map +1 -0
- package/dist/session/session-graph-projection.js +133 -0
- package/dist/session/session-graph-projection.js.map +1 -0
- package/dist/session/types.d.ts +18 -0
- package/dist/session/types.d.ts.map +1 -1
- package/dist/session/types.js +8 -0
- package/dist/session/types.js.map +1 -1
- package/dist/session/wire-format.generated.d.ts +3 -0
- package/dist/session/wire-format.generated.d.ts.map +1 -1
- package/dist/session/wire-format.generated.js +20 -0
- package/dist/session/wire-format.generated.js.map +1 -1
- package/dist/skills/eval-harness.d.ts +38 -0
- package/dist/skills/eval-harness.d.ts.map +1 -0
- package/dist/skills/eval-harness.js +112 -0
- package/dist/skills/eval-harness.js.map +1 -0
- package/dist/skills/index.d.ts +5 -1
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +5 -1
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/linter.d.ts +36 -0
- package/dist/skills/linter.d.ts.map +1 -0
- package/dist/skills/linter.js +398 -0
- package/dist/skills/linter.js.map +1 -0
- package/dist/skills/loader.d.ts +36 -6
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +169 -86
- package/dist/skills/loader.js.map +1 -1
- package/dist/skills/package-contract.d.ts +45 -0
- package/dist/skills/package-contract.d.ts.map +1 -0
- package/dist/skills/package-contract.js +153 -0
- package/dist/skills/package-contract.js.map +1 -0
- package/dist/skills/runtime-activation.d.ts +68 -0
- package/dist/skills/runtime-activation.d.ts.map +1 -0
- package/dist/skills/runtime-activation.js +228 -0
- package/dist/skills/runtime-activation.js.map +1 -0
- package/dist/skills/service-client.d.ts.map +1 -1
- package/dist/skills/service-client.js +3 -4
- package/dist/skills/service-client.js.map +1 -1
- package/dist/skills/tool.d.ts.map +1 -1
- package/dist/skills/tool.js +2 -0
- package/dist/skills/tool.js.map +1 -1
- package/dist/skills/types.d.ts +14 -0
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/skills/types.js.map +1 -1
- package/dist/telemetry/agent-operating-plane-context.d.ts +24 -0
- package/dist/telemetry/agent-operating-plane-context.d.ts.map +1 -0
- package/dist/telemetry/agent-operating-plane-context.js +54 -0
- package/dist/telemetry/agent-operating-plane-context.js.map +1 -0
- package/dist/telemetry/beacon.d.ts +24 -0
- package/dist/telemetry/beacon.d.ts.map +1 -0
- package/dist/telemetry/beacon.js +115 -0
- package/dist/telemetry/beacon.js.map +1 -0
- package/dist/telemetry/cli-command-aggregator.d.ts +36 -0
- package/dist/telemetry/cli-command-aggregator.d.ts.map +1 -0
- package/dist/telemetry/cli-command-aggregator.js +251 -0
- package/dist/telemetry/cli-command-aggregator.js.map +1 -0
- package/dist/telemetry/cli-startup.d.ts +21 -0
- package/dist/telemetry/cli-startup.d.ts.map +1 -0
- package/dist/telemetry/cli-startup.js +83 -0
- package/dist/telemetry/cli-startup.js.map +1 -0
- package/dist/telemetry/disablement.d.ts +13 -0
- package/dist/telemetry/disablement.d.ts.map +1 -0
- package/dist/telemetry/disablement.js +19 -0
- package/dist/telemetry/disablement.js.map +1 -0
- package/dist/telemetry/index.d.ts +6 -2
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +6 -2
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/maestro-event-bus.d.ts +52 -0
- package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-bus.js +179 -3
- package/dist/telemetry/maestro-event-bus.js.map +1 -1
- package/dist/telemetry/maestro-event-catalog.d.ts +3 -1
- package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-catalog.js +2 -0
- package/dist/telemetry/maestro-event-catalog.js.map +1 -1
- package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
- package/dist/telemetry/maestro-platform-replay-fixture.js +74 -9
- package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
- package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts +1 -1
- package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts.map +1 -1
- package/dist/telemetry/maestro-publisher-conformance-fixture.js +46 -11
- package/dist/telemetry/maestro-publisher-conformance-fixture.js.map +1 -1
- package/dist/telemetry/mcp-beacon.d.ts +20 -0
- package/dist/telemetry/mcp-beacon.d.ts.map +1 -0
- package/dist/telemetry/mcp-beacon.js +54 -0
- package/dist/telemetry/mcp-beacon.js.map +1 -0
- package/dist/telemetry/metadata-normalization.d.ts +7 -0
- package/dist/telemetry/metadata-normalization.d.ts.map +1 -0
- package/dist/telemetry/metadata-normalization.js +189 -0
- package/dist/telemetry/metadata-normalization.js.map +1 -0
- package/dist/telemetry/meter-service-client.d.ts.map +1 -1
- package/dist/telemetry/meter-service-client.js +5 -10
- package/dist/telemetry/meter-service-client.js.map +1 -1
- package/dist/telemetry/metrics.d.ts +123 -0
- package/dist/telemetry/metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics.js +184 -0
- package/dist/telemetry/metrics.js.map +1 -0
- package/dist/telemetry/turn-tracker.d.ts +1 -0
- package/dist/telemetry/turn-tracker.d.ts.map +1 -1
- package/dist/telemetry/turn-tracker.js +22 -1
- package/dist/telemetry/turn-tracker.js.map +1 -1
- package/dist/telemetry/wide-events.d.ts +31 -1
- package/dist/telemetry/wide-events.d.ts.map +1 -1
- package/dist/telemetry/wide-events.js +229 -1
- package/dist/telemetry/wide-events.js.map +1 -1
- package/dist/telemetry.d.ts +39 -3
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +160 -3
- package/dist/telemetry.js.map +1 -1
- package/dist/testing/test-verification-hook.d.ts.map +1 -1
- package/dist/testing/test-verification-hook.js +34 -21
- package/dist/testing/test-verification-hook.js.map +1 -1
- package/dist/tools/apply-patch-parser.d.ts +26 -0
- package/dist/tools/apply-patch-parser.d.ts.map +1 -0
- package/dist/tools/apply-patch-parser.js +146 -0
- package/dist/tools/apply-patch-parser.js.map +1 -0
- package/dist/tools/apply-patch.d.ts +42 -0
- package/dist/tools/apply-patch.d.ts.map +1 -0
- package/dist/tools/apply-patch.js +648 -0
- package/dist/tools/apply-patch.js.map +1 -0
- package/dist/tools/ask-user.d.ts +1 -0
- package/dist/tools/ask-user.d.ts.map +1 -1
- package/dist/tools/background/tool-handler.d.ts +1 -0
- package/dist/tools/background/tool-handler.d.ts.map +1 -1
- package/dist/tools/bash.d.ts +1 -0
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/codesearch.d.ts +1 -0
- package/dist/tools/codesearch.d.ts.map +1 -1
- package/dist/tools/conductor-client.d.ts +1 -0
- package/dist/tools/conductor-client.d.ts.map +1 -1
- package/dist/tools/conductor-client.js +63 -0
- package/dist/tools/conductor-client.js.map +1 -1
- package/dist/tools/diff.d.ts +1 -0
- package/dist/tools/diff.d.ts.map +1 -1
- package/dist/tools/edit.d.ts +1 -0
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/extract-document.d.ts +1 -0
- package/dist/tools/extract-document.d.ts.map +1 -1
- package/dist/tools/find.d.ts +10 -0
- package/dist/tools/find.d.ts.map +1 -1
- package/dist/tools/find.js +236 -27
- package/dist/tools/find.js.map +1 -1
- package/dist/tools/gh.d.ts +3 -0
- package/dist/tools/gh.d.ts.map +1 -1
- package/dist/tools/index.d.ts +50 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list.d.ts +1 -0
- package/dist/tools/list.d.ts.map +1 -1
- package/dist/tools/notebook.d.ts +1 -0
- package/dist/tools/notebook.d.ts.map +1 -1
- package/dist/tools/oracle.d.ts +1 -0
- package/dist/tools/oracle.d.ts.map +1 -1
- package/dist/tools/oracle.js +17 -32
- package/dist/tools/oracle.js.map +1 -1
- package/dist/tools/parallel-execution.d.ts +13 -2
- package/dist/tools/parallel-execution.d.ts.map +1 -1
- package/dist/tools/parallel-execution.js +178 -7
- package/dist/tools/parallel-execution.js.map +1 -1
- package/dist/tools/parallel-ripgrep.d.ts +1 -0
- package/dist/tools/parallel-ripgrep.d.ts.map +1 -1
- package/dist/tools/pipeline.d.ts +4 -0
- package/dist/tools/pipeline.d.ts.map +1 -1
- package/dist/tools/read.d.ts +1 -0
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/search.d.ts +1 -0
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/status.d.ts +1 -0
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/todo.d.ts +1 -0
- package/dist/tools/todo.d.ts.map +1 -1
- package/dist/tools/tool-dsl.d.ts +5 -1
- package/dist/tools/tool-dsl.d.ts.map +1 -1
- package/dist/tools/tool-dsl.js +1 -0
- package/dist/tools/tool-dsl.js.map +1 -1
- package/dist/tools/tool-result-cache.d.ts.map +1 -1
- package/dist/tools/tool-result-cache.js +1 -0
- package/dist/tools/tool-result-cache.js.map +1 -1
- package/dist/tools/typebox-tool.d.ts.map +1 -1
- package/dist/tools/typebox-tool.js +3 -0
- package/dist/tools/typebox-tool.js.map +1 -1
- package/dist/tools/webfetch.d.ts +1 -0
- package/dist/tools/webfetch.d.ts.map +1 -1
- package/dist/tools/websearch.d.ts +1 -0
- package/dist/tools/websearch.d.ts.map +1 -1
- package/dist/tools/write.d.ts +1 -0
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/utils/abort-error.d.ts +2 -0
- package/dist/utils/abort-error.d.ts.map +1 -0
- package/dist/utils/abort-error.js +7 -0
- package/dist/utils/abort-error.js.map +1 -0
- package/dist/utils/downstream.d.ts.map +1 -1
- package/dist/utils/downstream.js +4 -0
- package/dist/utils/downstream.js.map +1 -1
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +14 -3
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/path-containment.d.ts +2 -0
- package/dist/utils/path-containment.d.ts.map +1 -0
- package/dist/utils/path-containment.js +14 -0
- package/dist/utils/path-containment.js.map +1 -0
- package/dist/utils/prompt-safe-text.d.ts +7 -0
- package/dist/utils/prompt-safe-text.d.ts.map +1 -0
- package/dist/utils/prompt-safe-text.js +44 -0
- package/dist/utils/prompt-safe-text.js.map +1 -0
- package/dist/version.json +2 -2
- package/dist/web-server.d.ts.map +1 -1
- package/dist/web-server.js +32 -7
- package/dist/web-server.js.map +1 -1
- package/dist/workspace/root-resolver.d.ts +4 -1
- package/dist/workspace/root-resolver.d.ts.map +1 -1
- package/dist/workspace/root-resolver.js +16 -6
- package/dist/workspace/root-resolver.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/advisor-effort.d.ts +8 -0
- package/node_modules/@evalops/contracts/dist/advisor-effort.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/advisor-effort.js +35 -0
- package/node_modules/@evalops/contracts/dist/advisor-effort.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/delegation-prompt.d.ts +10 -0
- package/node_modules/@evalops/contracts/dist/delegation-prompt.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/delegation-prompt.js +48 -0
- package/node_modules/@evalops/contracts/dist/delegation-prompt.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/guarded-files-settings.d.ts +20 -0
- package/node_modules/@evalops/contracts/dist/guarded-files-settings.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/guarded-files-settings.js +147 -0
- package/node_modules/@evalops/contracts/dist/guarded-files-settings.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/headless-protocol-generated.d.ts +2 -0
- package/node_modules/@evalops/contracts/dist/headless-protocol-generated.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/headless-protocol-generated.js +1 -0
- package/node_modules/@evalops/contracts/dist/headless-protocol-generated.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +280 -5
- package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js +36 -1
- package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/index.d.ts +15 -1
- package/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/index.js +6 -0
- package/node_modules/@evalops/contracts/dist/index.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +593 -0
- package/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/maestro-app-server.js +218 -0
- package/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts +91 -0
- package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js +92 -61
- package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +3 -0
- package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/runtime-constraints.d.ts +28 -0
- package/node_modules/@evalops/contracts/dist/runtime-constraints.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/runtime-constraints.js +71 -0
- package/node_modules/@evalops/contracts/dist/runtime-constraints.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +7 -0
- package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/runtime-server-request.js +2 -0
- package/node_modules/@evalops/contracts/dist/runtime-server-request.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/scenario.d.ts +191 -0
- package/node_modules/@evalops/contracts/dist/scenario.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/scenario.js +4 -0
- package/node_modules/@evalops/contracts/dist/scenario.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/schemas.d.ts +17 -3
- package/node_modules/@evalops/contracts/dist/schemas.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/schemas.js +16 -0
- package/node_modules/@evalops/contracts/dist/schemas.js.map +1 -1
- package/node_modules/@evalops/contracts/package.json +1 -1
- package/node_modules/@evalops/tui/package.json +1 -1
- package/package.json +41 -7
- package/skills/incident-triage/SKILL.md +40 -0
- package/skills/incident-triage/mcp.json +14 -0
- package/skills/incident-triage/reference/triage.md +20 -0
- package/skills/incident-triage/toolbox/incident-timeline +22 -0
- package/skills/incident-triage/toolbox/incident-timeline.cmd +16 -0
- package/skills/pr-review/SKILL.md +40 -0
- package/skills/pr-review/mcp.json +14 -0
- package/skills/pr-review/reference/rubric.md +20 -0
- package/skills/pr-review/toolbox/review-summary +20 -0
- package/skills/pr-review/toolbox/review-summary.cmd +14 -0
- package/skills/release-verification/SKILL.md +40 -0
- package/skills/release-verification/mcp.json +15 -0
- package/skills/release-verification/reference/checklist.md +21 -0
- package/skills/release-verification/toolbox/release-readiness +18 -0
- package/skills/release-verification/toolbox/release-readiness.cmd +12 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-result-cache.d.ts","sourceRoot":"","sources":["../../src/tools/tool-result-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAmDH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,KAAK,EAAE,UAAU,CAAC;IAClB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B,kDAAkD;IAClD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"tool-result-cache.d.ts","sourceRoot":"","sources":["../../src/tools/tool-result-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -88,6 +88,7 @@ export const DEFAULT_TOOL_CACHE_CONFIGS = {
|
|
|
88
88
|
gitStateDependent: true,
|
|
89
89
|
},
|
|
90
90
|
// Mutating tools - not cacheable
|
|
91
|
+
apply_patch: { cacheable: false, ttlSeconds: 0, scope: "session" },
|
|
91
92
|
write: { cacheable: false, ttlSeconds: 0, scope: "session" },
|
|
92
93
|
edit: { cacheable: false, ttlSeconds: 0, scope: "session" },
|
|
93
94
|
bash: { cacheable: false, ttlSeconds: 0, scope: "session" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-result-cache.js","sourceRoot":"","sources":["../../src/tools/tool-result-cache.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tool Result Caching System\n *\n * Implements result memoization for idempotent tools to reduce redundant\n * executions. Uses content hashing for result validity and LRU eviction.\n *\n * Environment variables:\n * - MAESTRO_TOOL_CACHE_ENABLED: Enable/disable tool caching (default: true)\n * - MAESTRO_TOOL_CACHE_TTL: Default TTL in seconds (default: 300)\n * - MAESTRO_TOOL_CACHE_MAX_ENTRIES: Maximum cache entries (default: 1000)\n * - MAESTRO_TOOL_CACHE_MAX_BYTES: Maximum cache size in bytes (default: 50MB)\n * - MAESTRO_TOOL_CACHE_MAX_SIZE_BYTES: Legacy alias for max cache bytes (default: 50MB)\n * - MAESTRO_TOOL_CACHE_MAX_SIZE: Legacy alias for max entries (default: 1000)\n */\n\nimport { createHash } from \"node:crypto\";\nimport { createLogger } from \"../utils/logger.js\";\n\nconst logger = createLogger(\"tool-result-cache\");\n\n/**\n * LRU cache for memoizing hash computations.\n * Avoids repeated SHA256 hashing for identical tool+args combinations.\n */\nclass HashMemoCache {\n\tprivate cache = new Map<string, string>();\n\tprivate maxSize: number;\n\n\tconstructor(maxSize = 500) {\n\t\tthis.maxSize = maxSize;\n\t}\n\n\tget(key: string): string | undefined {\n\t\tconst value = this.cache.get(key);\n\t\tif (value !== undefined) {\n\t\t\t// Move to end for LRU (delete and re-add)\n\t\t\tthis.cache.delete(key);\n\t\t\tthis.cache.set(key, value);\n\t\t}\n\t\treturn value;\n\t}\n\n\tset(key: string, value: string): void {\n\t\t// If key exists, delete first to update position\n\t\tif (this.cache.has(key)) {\n\t\t\tthis.cache.delete(key);\n\t\t}\n\t\t// Evict oldest if at capacity\n\t\telse if (this.cache.size >= this.maxSize) {\n\t\t\tconst firstKey = this.cache.keys().next().value;\n\t\t\tif (firstKey !== undefined) {\n\t\t\t\tthis.cache.delete(firstKey);\n\t\t\t}\n\t\t}\n\t\tthis.cache.set(key, value);\n\t}\n\n\tclear(): void {\n\t\tthis.cache.clear();\n\t}\n}\n\nconst hashMemoCache = new HashMemoCache();\n\n/**\n * Cache scope determines visibility of cached results.\n */\nexport type CacheScope = \"session\" | \"user\" | \"global\";\n\n/**\n * Tool cacheability configuration.\n */\nexport interface ToolCacheConfig {\n\t/** Whether this tool's results can be cached */\n\tcacheable: boolean;\n\t/** TTL for cached results in seconds */\n\tttlSeconds: number;\n\t/** Cache scope */\n\tscope: CacheScope;\n\t/** Keys from input to include in cache key (null = all) */\n\tkeyFields?: string[] | null;\n\t/** Whether results depend on file system state */\n\tfileSystemDependent?: boolean;\n\t/** Whether results depend on git state */\n\tgitStateDependent?: boolean;\n}\n\n/**\n * Default cache configurations for built-in tools.\n */\nexport const DEFAULT_TOOL_CACHE_CONFIGS: Record<string, ToolCacheConfig> = {\n\t// Read-only tools - highly cacheable\n\tread: {\n\t\tcacheable: true,\n\t\tttlSeconds: 60,\n\t\tscope: \"session\",\n\t\tfileSystemDependent: true,\n\t},\n\tlist: {\n\t\tcacheable: true,\n\t\tttlSeconds: 60,\n\t\tscope: \"session\",\n\t\tfileSystemDependent: true,\n\t},\n\tsearch: {\n\t\tcacheable: true,\n\t\tttlSeconds: 120,\n\t\tscope: \"session\",\n\t\tfileSystemDependent: true,\n\t},\n\tdiff: {\n\t\tcacheable: true,\n\t\tttlSeconds: 30,\n\t\tscope: \"session\",\n\t\tgitStateDependent: true,\n\t},\n\tstatus: {\n\t\tcacheable: true,\n\t\tttlSeconds: 30,\n\t\tscope: \"session\",\n\t\tgitStateDependent: true,\n\t},\n\n\t// Mutating tools - not cacheable\n\twrite: { cacheable: false, ttlSeconds: 0, scope: \"session\" },\n\tedit: { cacheable: false, ttlSeconds: 0, scope: \"session\" },\n\tbash: { cacheable: false, ttlSeconds: 0, scope: \"session\" },\n\tnotebook_edit: { cacheable: false, ttlSeconds: 0, scope: \"session\" },\n\n\t// External tools - short TTL\n\twebsearch: {\n\t\tcacheable: true,\n\t\tttlSeconds: 300,\n\t\tscope: \"global\",\n\t},\n\twebfetch: {\n\t\tcacheable: true,\n\t\tttlSeconds: 300,\n\t\tscope: \"global\",\n\t},\n\tcodesearch: {\n\t\tcacheable: true,\n\t\tttlSeconds: 600,\n\t\tscope: \"global\",\n\t},\n\n\t// User interaction - not cacheable\n\task_user: { cacheable: false, ttlSeconds: 0, scope: \"session\" },\n\ttodo: { cacheable: false, ttlSeconds: 0, scope: \"session\" },\n};\n\n/**\n * A cached tool result entry.\n */\ninterface CacheEntry {\n\t/** The cached result */\n\tresult: unknown;\n\t/** When the entry was created */\n\tcreatedAt: number;\n\t/** When the entry was last accessed (for true LRU) */\n\tlastAccessedAt: number;\n\t/** When the entry expires */\n\texpiresAt: number;\n\t/** Hash of the input arguments */\n\tinputHash: string;\n\t/** Tool name */\n\ttoolName: string;\n\t/** Number of cache hits */\n\thitCount: number;\n\t/** Size estimate in bytes */\n\tsizeBytes: number;\n\t/** File modification times when cached (for file-dependent caches) */\n\tfileMtimes?: Record<string, number>;\n\t/** Git commit SHA when cached (for git-dependent caches) */\n\tgitSha?: string;\n}\n\n/**\n * Cache statistics.\n */\nexport interface ToolCacheStats {\n\t/** Total cache lookups */\n\ttotalLookups: number;\n\t/** Cache hits */\n\thits: number;\n\t/** Cache misses */\n\tmisses: number;\n\t/** Hit ratio (0-1) */\n\thitRatio: number;\n\t/** Current number of entries */\n\tentryCount: number;\n\t/** Estimated memory usage in bytes */\n\tmemorySizeBytes: number;\n\t/** Number of evictions */\n\tevictions: number;\n\t/** Stats per tool */\n\tbyTool: Record<\n\t\tstring,\n\t\t{ lookups: number; hits: number; misses: number; hitRatio: number }\n\t>;\n}\n\n/**\n * Global cache configuration.\n */\nexport interface ToolResultCacheConfig {\n\t/** Whether caching is enabled */\n\tenabled: boolean;\n\t/** Default TTL in seconds */\n\tdefaultTtlSeconds: number;\n\t/** Maximum number of cache entries */\n\tmaxEntries: number;\n\t/** Maximum memory size in bytes */\n\tmaxSizeBytes: number;\n\t/** Cleanup interval in ms */\n\tcleanupIntervalMs: number;\n}\n\nconst DEFAULT_CONFIG: ToolResultCacheConfig = {\n\tenabled: true,\n\tdefaultTtlSeconds: 300,\n\tmaxEntries: 1000,\n\tmaxSizeBytes: 50 * 1024 * 1024, // 50MB\n\tcleanupIntervalMs: 60000, // 1 minute\n};\n\n/**\n * Get tool cache configuration from environment.\n */\nexport function getToolResultCacheConfig(): ToolResultCacheConfig {\n\tconst enabled = process.env.MAESTRO_TOOL_CACHE_ENABLED !== \"false\";\n\tconst ttl = Number.parseInt(process.env.MAESTRO_TOOL_CACHE_TTL || \"300\", 10);\n\tconst maxEntries = Number.parseInt(\n\t\tprocess.env.MAESTRO_TOOL_CACHE_MAX_ENTRIES ??\n\t\t\tprocess.env.MAESTRO_TOOL_CACHE_MAX_SIZE ??\n\t\t\t\"1000\",\n\t\t10,\n\t);\n\tconst maxBytes = Number.parseInt(\n\t\tprocess.env.MAESTRO_TOOL_CACHE_MAX_BYTES ??\n\t\t\tprocess.env.MAESTRO_TOOL_CACHE_MAX_SIZE_BYTES ??\n\t\t\t`${DEFAULT_CONFIG.maxSizeBytes}`,\n\t\t10,\n\t);\n\n\treturn {\n\t\t...DEFAULT_CONFIG,\n\t\tenabled,\n\t\tdefaultTtlSeconds: Number.isNaN(ttl)\n\t\t\t? DEFAULT_CONFIG.defaultTtlSeconds\n\t\t\t: ttl,\n\t\tmaxEntries: Number.isNaN(maxEntries)\n\t\t\t? DEFAULT_CONFIG.maxEntries\n\t\t\t: maxEntries,\n\t\tmaxSizeBytes: Number.isNaN(maxBytes)\n\t\t\t? DEFAULT_CONFIG.maxSizeBytes\n\t\t\t: maxBytes,\n\t};\n}\n\n/**\n * Generate a cache key from tool name and arguments.\n * Uses memoization to avoid repeated SHA256 hashing for identical inputs.\n */\nfunction generateCacheKey(\n\ttoolName: string,\n\targs: Record<string, unknown>,\n\tscope: CacheScope,\n\tscopeId?: string,\n\tkeyFields?: string[] | null,\n): string {\n\t// Filter args to key fields if specified\n\tconst keyArgs =\n\t\tkeyFields === null\n\t\t\t? args\n\t\t\t: keyFields\n\t\t\t\t? Object.fromEntries(\n\t\t\t\t\t\tObject.entries(args).filter(([k]) => keyFields.includes(k)),\n\t\t\t\t\t)\n\t\t\t\t: args;\n\n\tconst argsString = JSON.stringify(keyArgs, Object.keys(keyArgs).sort());\n\tconst hashInput = `${toolName}:${argsString}`;\n\n\t// Check memoization cache first\n\tlet hash = hashMemoCache.get(hashInput);\n\tif (!hash) {\n\t\thash = createHash(\"sha256\").update(hashInput).digest(\"hex\").slice(0, 32);\n\t\thashMemoCache.set(hashInput, hash);\n\t}\n\n\tconst scopePrefix = scopeId ? `${scope}:${scopeId}` : scope;\n\treturn `${scopePrefix}:${toolName}:${hash}`;\n}\n\n/**\n * Estimate the size of a value in bytes.\n */\nfunction estimateSize(value: unknown): number {\n\tif (value === null || value === undefined) return 0;\n\tif (typeof value === \"string\") return value.length * 2; // UTF-16\n\tif (typeof value === \"number\") return 8;\n\tif (typeof value === \"boolean\") return 4;\n\tif (Array.isArray(value)) {\n\t\treturn value.reduce((sum, item) => sum + estimateSize(item), 0);\n\t}\n\tif (typeof value === \"object\") {\n\t\treturn Object.entries(value).reduce(\n\t\t\t(sum, [k, v]) => sum + k.length * 2 + estimateSize(v),\n\t\t\t0,\n\t\t);\n\t}\n\treturn JSON.stringify(value).length * 2;\n}\n\n/**\n * Tool Result Cache Manager.\n */\nexport class ToolResultCache {\n\tprivate config: ToolResultCacheConfig;\n\tprivate toolConfigs: Map<string, ToolCacheConfig> = new Map();\n\tprivate cache: Map<string, CacheEntry> = new Map();\n\tprivate stats: ToolCacheStats;\n\tprivate cleanupTimer: ReturnType<typeof setInterval> | null = null;\n\tprivate currentScopeId?: string;\n\tprivate currentGitSha?: string;\n\n\tconstructor(config?: Partial<ToolResultCacheConfig>) {\n\t\tthis.config = { ...getToolResultCacheConfig(), ...config };\n\t\tthis.stats = {\n\t\t\ttotalLookups: 0,\n\t\t\thits: 0,\n\t\t\tmisses: 0,\n\t\t\thitRatio: 0,\n\t\t\tentryCount: 0,\n\t\t\tmemorySizeBytes: 0,\n\t\t\tevictions: 0,\n\t\t\tbyTool: {},\n\t\t};\n\n\t\t// Initialize default tool configs\n\t\tfor (const [tool, cfg] of Object.entries(DEFAULT_TOOL_CACHE_CONFIGS)) {\n\t\t\tthis.toolConfigs.set(tool, cfg);\n\t\t}\n\n\t\t// Start cleanup timer\n\t\tthis.startCleanup();\n\t}\n\n\t/**\n\t * Set the current session/user scope ID.\n\t */\n\tsetScopeId(scopeId: string): void {\n\t\tthis.currentScopeId = scopeId;\n\t}\n\n\t/**\n\t * Set the current git SHA for git-dependent caches.\n\t */\n\tsetGitSha(sha: string | undefined): void {\n\t\tthis.currentGitSha = sha;\n\t}\n\n\t/**\n\t * Configure caching for a specific tool.\n\t */\n\tsetToolConfig(toolName: string, config: ToolCacheConfig): void {\n\t\tthis.toolConfigs.set(toolName, config);\n\t}\n\n\t/**\n\t * Get cache configuration for a tool.\n\t */\n\tgetToolConfig(toolName: string): ToolCacheConfig | undefined {\n\t\treturn this.toolConfigs.get(toolName);\n\t}\n\n\t/**\n\t * Check if a tool is cacheable.\n\t */\n\tisCacheable(toolName: string): boolean {\n\t\tif (!this.config.enabled) return false;\n\t\tconst toolConfig = this.toolConfigs.get(toolName);\n\t\treturn toolConfig?.cacheable ?? false;\n\t}\n\n\t/**\n\t * Get a cached result for a tool call.\n\t */\n\tget<T>(\n\t\ttoolName: string,\n\t\targs: Record<string, unknown>,\n\t): { hit: true; result: T } | { hit: false } {\n\t\tif (!this.config.enabled) {\n\t\t\treturn { hit: false };\n\t\t}\n\n\t\tconst toolConfig = this.toolConfigs.get(toolName);\n\t\tif (!toolConfig?.cacheable) {\n\t\t\treturn { hit: false };\n\t\t}\n\n\t\tconst key = generateCacheKey(\n\t\t\ttoolName,\n\t\t\targs,\n\t\t\ttoolConfig.scope,\n\t\t\tthis.currentScopeId,\n\t\t\ttoolConfig.keyFields,\n\t\t);\n\n\t\tconst entry = this.cache.get(key);\n\t\tthis.updateStats(toolName, false);\n\n\t\tif (!entry) {\n\t\t\treturn { hit: false };\n\t\t}\n\n\t\t// Check expiration\n\t\tif (Date.now() > entry.expiresAt) {\n\t\t\tthis.cache.delete(key);\n\t\t\tthis.stats.memorySizeBytes -= entry.sizeBytes;\n\t\t\treturn { hit: false };\n\t\t}\n\n\t\t// Check git state dependency\n\t\tif (toolConfig.gitStateDependent && entry.gitSha !== this.currentGitSha) {\n\t\t\tthis.cache.delete(key);\n\t\t\tthis.stats.memorySizeBytes -= entry.sizeBytes;\n\t\t\treturn { hit: false };\n\t\t}\n\n\t\t// Cache hit!\n\t\tentry.hitCount++;\n\t\tentry.lastAccessedAt = Date.now();\n\t\tthis.updateStats(toolName, true);\n\n\t\tlogger.debug(\"Cache hit\", {\n\t\t\ttool: toolName,\n\t\t\tkey: key.slice(-16),\n\t\t\thitCount: entry.hitCount,\n\t\t});\n\n\t\treturn { hit: true, result: entry.result as T };\n\t}\n\n\t/**\n\t * Store a result in the cache.\n\t */\n\tset(\n\t\ttoolName: string,\n\t\targs: Record<string, unknown>,\n\t\tresult: unknown,\n\t\toptions?: { ttlSeconds?: number; fileMtimes?: Record<string, number> },\n\t): void {\n\t\tif (!this.config.enabled) return;\n\n\t\tconst toolConfig = this.toolConfigs.get(toolName);\n\t\tif (!toolConfig?.cacheable) return;\n\n\t\tconst key = generateCacheKey(\n\t\t\ttoolName,\n\t\t\targs,\n\t\t\ttoolConfig.scope,\n\t\t\tthis.currentScopeId,\n\t\t\ttoolConfig.keyFields,\n\t\t);\n\n\t\tconst ttl = options?.ttlSeconds ?? toolConfig.ttlSeconds;\n\t\tconst now = Date.now();\n\t\tconst sizeBytes = estimateSize(result);\n\n\t\tif (sizeBytes > this.config.maxSizeBytes) {\n\t\t\tlogger.debug(\"Skipping cache entry larger than max size\", {\n\t\t\t\ttool: toolName,\n\t\t\t\tsize: sizeBytes,\n\t\t\t\tmaxSize: this.config.maxSizeBytes,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if we need to evict entries\n\t\tthis.ensureCapacity(sizeBytes);\n\n\t\tconst entry: CacheEntry = {\n\t\t\tresult,\n\t\t\tcreatedAt: now,\n\t\t\tlastAccessedAt: now,\n\t\t\texpiresAt: now + ttl * 1000,\n\t\t\tinputHash: key,\n\t\t\ttoolName,\n\t\t\thitCount: 0,\n\t\t\tsizeBytes,\n\t\t\tfileMtimes: options?.fileMtimes,\n\t\t\tgitSha: toolConfig.gitStateDependent ? this.currentGitSha : undefined,\n\t\t};\n\n\t\t// Remove old entry if exists\n\t\tconst oldEntry = this.cache.get(key);\n\t\tif (oldEntry) {\n\t\t\tthis.stats.memorySizeBytes -= oldEntry.sizeBytes;\n\t\t}\n\n\t\tthis.cache.set(key, entry);\n\t\tthis.stats.memorySizeBytes += sizeBytes;\n\t\tthis.stats.entryCount = this.cache.size;\n\n\t\tlogger.debug(\"Cached result\", {\n\t\t\ttool: toolName,\n\t\t\tkey: key.slice(-16),\n\t\t\tttl,\n\t\t\tsize: sizeBytes,\n\t\t});\n\t}\n\n\t/**\n\t * Invalidate cache entries for a tool.\n\t */\n\tinvalidate(toolName: string, args?: Record<string, unknown>): number {\n\t\tlet invalidated = 0;\n\n\t\tif (args) {\n\t\t\t// Invalidate specific entry\n\t\t\tconst toolConfig = this.toolConfigs.get(toolName);\n\t\t\tif (toolConfig) {\n\t\t\t\tconst key = generateCacheKey(\n\t\t\t\t\ttoolName,\n\t\t\t\t\targs,\n\t\t\t\t\ttoolConfig.scope,\n\t\t\t\t\tthis.currentScopeId,\n\t\t\t\t\ttoolConfig.keyFields,\n\t\t\t\t);\n\t\t\t\tconst entry = this.cache.get(key);\n\t\t\t\tif (entry) {\n\t\t\t\t\tthis.stats.memorySizeBytes -= entry.sizeBytes;\n\t\t\t\t\tthis.cache.delete(key);\n\t\t\t\t\tinvalidated = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Invalidate all entries for tool\n\t\t\tfor (const [key, entry] of this.cache) {\n\t\t\t\tif (entry.toolName === toolName) {\n\t\t\t\t\tthis.stats.memorySizeBytes -= entry.sizeBytes;\n\t\t\t\t\tthis.cache.delete(key);\n\t\t\t\t\tinvalidated++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (invalidated > 0) {\n\t\t\tthis.stats.entryCount = this.cache.size;\n\t\t\tlogger.debug(\"Invalidated cache entries\", {\n\t\t\t\ttool: toolName,\n\t\t\t\tinvalidated,\n\t\t\t});\n\t\t}\n\n\t\treturn invalidated;\n\t}\n\n\t/**\n\t * Invalidate all file-system dependent caches.\n\t */\n\tinvalidateFileSystemCaches(): number {\n\t\tlet invalidated = 0;\n\n\t\tfor (const [key, entry] of this.cache) {\n\t\t\tconst toolConfig = this.toolConfigs.get(entry.toolName);\n\t\t\tif (toolConfig?.fileSystemDependent) {\n\t\t\t\tthis.stats.memorySizeBytes -= entry.sizeBytes;\n\t\t\t\tthis.cache.delete(key);\n\t\t\t\tinvalidated++;\n\t\t\t}\n\t\t}\n\n\t\tif (invalidated > 0) {\n\t\t\tthis.stats.entryCount = this.cache.size;\n\t\t\tlogger.info(\"Invalidated file system caches\", { invalidated });\n\t\t}\n\n\t\treturn invalidated;\n\t}\n\n\t/**\n\t * Invalidate all git-state dependent caches.\n\t */\n\tinvalidateGitCaches(): number {\n\t\tlet invalidated = 0;\n\n\t\tfor (const [key, entry] of this.cache) {\n\t\t\tconst toolConfig = this.toolConfigs.get(entry.toolName);\n\t\t\tif (toolConfig?.gitStateDependent) {\n\t\t\t\tthis.stats.memorySizeBytes -= entry.sizeBytes;\n\t\t\t\tthis.cache.delete(key);\n\t\t\t\tinvalidated++;\n\t\t\t}\n\t\t}\n\n\t\tif (invalidated > 0) {\n\t\t\tthis.stats.entryCount = this.cache.size;\n\t\t\tlogger.info(\"Invalidated git caches\", { invalidated });\n\t\t}\n\n\t\treturn invalidated;\n\t}\n\n\t/**\n\t * Clear all cache entries.\n\t */\n\tclear(): void {\n\t\tthis.cache.clear();\n\t\tthis.stats.entryCount = 0;\n\t\tthis.stats.memorySizeBytes = 0;\n\t\tlogger.info(\"Cache cleared\");\n\t}\n\n\t/**\n\t * Get cache statistics.\n\t */\n\tgetStats(): ToolCacheStats {\n\t\treturn { ...this.stats, byTool: { ...this.stats.byTool } };\n\t}\n\n\t/**\n\t * Update statistics.\n\t */\n\tprivate updateStats(toolName: string, hit: boolean): void {\n\t\tthis.stats.totalLookups++;\n\t\tif (hit) {\n\t\t\tthis.stats.hits++;\n\t\t} else {\n\t\t\tthis.stats.misses++;\n\t\t}\n\n\t\tthis.stats.hitRatio =\n\t\t\tthis.stats.totalLookups > 0\n\t\t\t\t? this.stats.hits / this.stats.totalLookups\n\t\t\t\t: 0;\n\n\t\t// Per-tool stats\n\t\tif (!this.stats.byTool[toolName]) {\n\t\t\tthis.stats.byTool[toolName] = {\n\t\t\t\tlookups: 0,\n\t\t\t\thits: 0,\n\t\t\t\tmisses: 0,\n\t\t\t\thitRatio: 0,\n\t\t\t};\n\t\t}\n\t\tconst toolStats = this.stats.byTool[toolName];\n\t\ttoolStats.lookups++;\n\t\tif (hit) {\n\t\t\ttoolStats.hits++;\n\t\t} else {\n\t\t\ttoolStats.misses++;\n\t\t}\n\t\ttoolStats.hitRatio =\n\t\t\ttoolStats.lookups > 0 ? toolStats.hits / toolStats.lookups : 0;\n\t}\n\n\t/**\n\t * Ensure cache has capacity for new entry.\n\t */\n\tprivate ensureCapacity(requiredBytes: number): void {\n\t\t// Evict by count\n\t\twhile (this.cache.size >= this.config.maxEntries) {\n\t\t\tthis.evictLRU();\n\t\t}\n\n\t\t// Evict by size\n\t\twhile (\n\t\t\tthis.stats.memorySizeBytes + requiredBytes > this.config.maxSizeBytes &&\n\t\t\tthis.cache.size > 0\n\t\t) {\n\t\t\tthis.evictLRU();\n\t\t}\n\t}\n\n\t/**\n\t * Evict least recently used entry.\n\t */\n\tprivate evictLRU(): void {\n\t\tlet oldestKey: string | null = null;\n\t\tlet oldestTime = Number.POSITIVE_INFINITY;\n\n\t\tfor (const [key, entry] of this.cache) {\n\t\t\t// True LRU: evict the entry that was accessed least recently\n\t\t\tif (entry.lastAccessedAt < oldestTime) {\n\t\t\t\toldestTime = entry.lastAccessedAt;\n\t\t\t\toldestKey = key;\n\t\t\t}\n\t\t}\n\n\t\tif (oldestKey) {\n\t\t\tconst entry = this.cache.get(oldestKey);\n\t\t\tif (entry) {\n\t\t\t\tthis.stats.memorySizeBytes -= entry.sizeBytes;\n\t\t\t}\n\t\t\tthis.cache.delete(oldestKey);\n\t\t\tthis.stats.evictions++;\n\t\t\tthis.stats.entryCount = this.cache.size;\n\t\t}\n\t}\n\n\t/**\n\t * Start periodic cleanup.\n\t */\n\tprivate startCleanup(): void {\n\t\tif (this.cleanupTimer) {\n\t\t\tclearInterval(this.cleanupTimer);\n\t\t}\n\n\t\tthis.cleanupTimer = setInterval(() => {\n\t\t\tthis.cleanup();\n\t\t}, this.config.cleanupIntervalMs);\n\n\t\t// Don't keep process alive\n\t\tif (this.cleanupTimer.unref) {\n\t\t\tthis.cleanupTimer.unref();\n\t\t}\n\t}\n\n\t/**\n\t * Clean up expired entries.\n\t */\n\tcleanup(): number {\n\t\tconst now = Date.now();\n\t\tlet removed = 0;\n\n\t\tfor (const [key, entry] of this.cache) {\n\t\t\tif (now > entry.expiresAt) {\n\t\t\t\tthis.stats.memorySizeBytes -= entry.sizeBytes;\n\t\t\t\tthis.cache.delete(key);\n\t\t\t\tremoved++;\n\t\t\t}\n\t\t}\n\n\t\tif (removed > 0) {\n\t\t\tthis.stats.entryCount = this.cache.size;\n\t\t\tlogger.debug(\"Cleaned up expired entries\", { removed });\n\t\t}\n\n\t\treturn removed;\n\t}\n\n\t/**\n\t * Stop the cache (clear timer).\n\t */\n\tstop(): void {\n\t\tif (this.cleanupTimer) {\n\t\t\tclearInterval(this.cleanupTimer);\n\t\t\tthis.cleanupTimer = null;\n\t\t}\n\t}\n}\n\n/**\n * Create a default tool result cache.\n */\nexport function createToolResultCache(\n\tconfig?: Partial<ToolResultCacheConfig>,\n): ToolResultCache {\n\treturn new ToolResultCache(config);\n}\n\n/**\n * Global shared cache instance.\n */\nlet globalCache: ToolResultCache | null = null;\n\n/**\n * Get or create the global tool result cache.\n */\nexport function getGlobalToolResultCache(): ToolResultCache {\n\tif (!globalCache) {\n\t\tglobalCache = createToolResultCache();\n\t}\n\treturn globalCache;\n}\n\n/**\n * Reset the global cache (for testing).\n */\nexport function resetGlobalToolResultCache(): void {\n\tif (globalCache) {\n\t\tglobalCache.stop();\n\t\tglobalCache = null;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tool-result-cache.js","sourceRoot":"","sources":["../../src/tools/tool-result-cache.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tool Result Caching System\n *\n * Implements result memoization for idempotent tools to reduce redundant\n * executions. Uses content hashing for result validity and LRU eviction.\n *\n * Environment variables:\n * - MAESTRO_TOOL_CACHE_ENABLED: Enable/disable tool caching (default: true)\n * - MAESTRO_TOOL_CACHE_TTL: Default TTL in seconds (default: 300)\n * - MAESTRO_TOOL_CACHE_MAX_ENTRIES: Maximum cache entries (default: 1000)\n * - MAESTRO_TOOL_CACHE_MAX_BYTES: Maximum cache size in bytes (default: 50MB)\n * - MAESTRO_TOOL_CACHE_MAX_SIZE_BYTES: Legacy alias for max cache bytes (default: 50MB)\n * - MAESTRO_TOOL_CACHE_MAX_SIZE: Legacy alias for max entries (default: 1000)\n */\n\nimport { createHash } from \"node:crypto\";\nimport { createLogger } from \"../utils/logger.js\";\n\nconst logger = createLogger(\"tool-result-cache\");\n\n/**\n * LRU cache for memoizing hash computations.\n * Avoids repeated SHA256 hashing for identical tool+args combinations.\n */\nclass HashMemoCache {\n\tprivate cache = new Map<string, string>();\n\tprivate maxSize: number;\n\n\tconstructor(maxSize = 500) {\n\t\tthis.maxSize = maxSize;\n\t}\n\n\tget(key: string): string | undefined {\n\t\tconst value = this.cache.get(key);\n\t\tif (value !== undefined) {\n\t\t\t// Move to end for LRU (delete and re-add)\n\t\t\tthis.cache.delete(key);\n\t\t\tthis.cache.set(key, value);\n\t\t}\n\t\treturn value;\n\t}\n\n\tset(key: string, value: string): void {\n\t\t// If key exists, delete first to update position\n\t\tif (this.cache.has(key)) {\n\t\t\tthis.cache.delete(key);\n\t\t}\n\t\t// Evict oldest if at capacity\n\t\telse if (this.cache.size >= this.maxSize) {\n\t\t\tconst firstKey = this.cache.keys().next().value;\n\t\t\tif (firstKey !== undefined) {\n\t\t\t\tthis.cache.delete(firstKey);\n\t\t\t}\n\t\t}\n\t\tthis.cache.set(key, value);\n\t}\n\n\tclear(): void {\n\t\tthis.cache.clear();\n\t}\n}\n\nconst hashMemoCache = new HashMemoCache();\n\n/**\n * Cache scope determines visibility of cached results.\n */\nexport type CacheScope = \"session\" | \"user\" | \"global\";\n\n/**\n * Tool cacheability configuration.\n */\nexport interface ToolCacheConfig {\n\t/** Whether this tool's results can be cached */\n\tcacheable: boolean;\n\t/** TTL for cached results in seconds */\n\tttlSeconds: number;\n\t/** Cache scope */\n\tscope: CacheScope;\n\t/** Keys from input to include in cache key (null = all) */\n\tkeyFields?: string[] | null;\n\t/** Whether results depend on file system state */\n\tfileSystemDependent?: boolean;\n\t/** Whether results depend on git state */\n\tgitStateDependent?: boolean;\n}\n\n/**\n * Default cache configurations for built-in tools.\n */\nexport const DEFAULT_TOOL_CACHE_CONFIGS: Record<string, ToolCacheConfig> = {\n\t// Read-only tools - highly cacheable\n\tread: {\n\t\tcacheable: true,\n\t\tttlSeconds: 60,\n\t\tscope: \"session\",\n\t\tfileSystemDependent: true,\n\t},\n\tlist: {\n\t\tcacheable: true,\n\t\tttlSeconds: 60,\n\t\tscope: \"session\",\n\t\tfileSystemDependent: true,\n\t},\n\tsearch: {\n\t\tcacheable: true,\n\t\tttlSeconds: 120,\n\t\tscope: \"session\",\n\t\tfileSystemDependent: true,\n\t},\n\tdiff: {\n\t\tcacheable: true,\n\t\tttlSeconds: 30,\n\t\tscope: \"session\",\n\t\tgitStateDependent: true,\n\t},\n\tstatus: {\n\t\tcacheable: true,\n\t\tttlSeconds: 30,\n\t\tscope: \"session\",\n\t\tgitStateDependent: true,\n\t},\n\n\t// Mutating tools - not cacheable\n\tapply_patch: { cacheable: false, ttlSeconds: 0, scope: \"session\" },\n\twrite: { cacheable: false, ttlSeconds: 0, scope: \"session\" },\n\tedit: { cacheable: false, ttlSeconds: 0, scope: \"session\" },\n\tbash: { cacheable: false, ttlSeconds: 0, scope: \"session\" },\n\tnotebook_edit: { cacheable: false, ttlSeconds: 0, scope: \"session\" },\n\n\t// External tools - short TTL\n\twebsearch: {\n\t\tcacheable: true,\n\t\tttlSeconds: 300,\n\t\tscope: \"global\",\n\t},\n\twebfetch: {\n\t\tcacheable: true,\n\t\tttlSeconds: 300,\n\t\tscope: \"global\",\n\t},\n\tcodesearch: {\n\t\tcacheable: true,\n\t\tttlSeconds: 600,\n\t\tscope: \"global\",\n\t},\n\n\t// User interaction - not cacheable\n\task_user: { cacheable: false, ttlSeconds: 0, scope: \"session\" },\n\ttodo: { cacheable: false, ttlSeconds: 0, scope: \"session\" },\n};\n\n/**\n * A cached tool result entry.\n */\ninterface CacheEntry {\n\t/** The cached result */\n\tresult: unknown;\n\t/** When the entry was created */\n\tcreatedAt: number;\n\t/** When the entry was last accessed (for true LRU) */\n\tlastAccessedAt: number;\n\t/** When the entry expires */\n\texpiresAt: number;\n\t/** Hash of the input arguments */\n\tinputHash: string;\n\t/** Tool name */\n\ttoolName: string;\n\t/** Number of cache hits */\n\thitCount: number;\n\t/** Size estimate in bytes */\n\tsizeBytes: number;\n\t/** File modification times when cached (for file-dependent caches) */\n\tfileMtimes?: Record<string, number>;\n\t/** Git commit SHA when cached (for git-dependent caches) */\n\tgitSha?: string;\n}\n\n/**\n * Cache statistics.\n */\nexport interface ToolCacheStats {\n\t/** Total cache lookups */\n\ttotalLookups: number;\n\t/** Cache hits */\n\thits: number;\n\t/** Cache misses */\n\tmisses: number;\n\t/** Hit ratio (0-1) */\n\thitRatio: number;\n\t/** Current number of entries */\n\tentryCount: number;\n\t/** Estimated memory usage in bytes */\n\tmemorySizeBytes: number;\n\t/** Number of evictions */\n\tevictions: number;\n\t/** Stats per tool */\n\tbyTool: Record<\n\t\tstring,\n\t\t{ lookups: number; hits: number; misses: number; hitRatio: number }\n\t>;\n}\n\n/**\n * Global cache configuration.\n */\nexport interface ToolResultCacheConfig {\n\t/** Whether caching is enabled */\n\tenabled: boolean;\n\t/** Default TTL in seconds */\n\tdefaultTtlSeconds: number;\n\t/** Maximum number of cache entries */\n\tmaxEntries: number;\n\t/** Maximum memory size in bytes */\n\tmaxSizeBytes: number;\n\t/** Cleanup interval in ms */\n\tcleanupIntervalMs: number;\n}\n\nconst DEFAULT_CONFIG: ToolResultCacheConfig = {\n\tenabled: true,\n\tdefaultTtlSeconds: 300,\n\tmaxEntries: 1000,\n\tmaxSizeBytes: 50 * 1024 * 1024, // 50MB\n\tcleanupIntervalMs: 60000, // 1 minute\n};\n\n/**\n * Get tool cache configuration from environment.\n */\nexport function getToolResultCacheConfig(): ToolResultCacheConfig {\n\tconst enabled = process.env.MAESTRO_TOOL_CACHE_ENABLED !== \"false\";\n\tconst ttl = Number.parseInt(process.env.MAESTRO_TOOL_CACHE_TTL || \"300\", 10);\n\tconst maxEntries = Number.parseInt(\n\t\tprocess.env.MAESTRO_TOOL_CACHE_MAX_ENTRIES ??\n\t\t\tprocess.env.MAESTRO_TOOL_CACHE_MAX_SIZE ??\n\t\t\t\"1000\",\n\t\t10,\n\t);\n\tconst maxBytes = Number.parseInt(\n\t\tprocess.env.MAESTRO_TOOL_CACHE_MAX_BYTES ??\n\t\t\tprocess.env.MAESTRO_TOOL_CACHE_MAX_SIZE_BYTES ??\n\t\t\t`${DEFAULT_CONFIG.maxSizeBytes}`,\n\t\t10,\n\t);\n\n\treturn {\n\t\t...DEFAULT_CONFIG,\n\t\tenabled,\n\t\tdefaultTtlSeconds: Number.isNaN(ttl)\n\t\t\t? DEFAULT_CONFIG.defaultTtlSeconds\n\t\t\t: ttl,\n\t\tmaxEntries: Number.isNaN(maxEntries)\n\t\t\t? DEFAULT_CONFIG.maxEntries\n\t\t\t: maxEntries,\n\t\tmaxSizeBytes: Number.isNaN(maxBytes)\n\t\t\t? DEFAULT_CONFIG.maxSizeBytes\n\t\t\t: maxBytes,\n\t};\n}\n\n/**\n * Generate a cache key from tool name and arguments.\n * Uses memoization to avoid repeated SHA256 hashing for identical inputs.\n */\nfunction generateCacheKey(\n\ttoolName: string,\n\targs: Record<string, unknown>,\n\tscope: CacheScope,\n\tscopeId?: string,\n\tkeyFields?: string[] | null,\n): string {\n\t// Filter args to key fields if specified\n\tconst keyArgs =\n\t\tkeyFields === null\n\t\t\t? args\n\t\t\t: keyFields\n\t\t\t\t? Object.fromEntries(\n\t\t\t\t\t\tObject.entries(args).filter(([k]) => keyFields.includes(k)),\n\t\t\t\t\t)\n\t\t\t\t: args;\n\n\tconst argsString = JSON.stringify(keyArgs, Object.keys(keyArgs).sort());\n\tconst hashInput = `${toolName}:${argsString}`;\n\n\t// Check memoization cache first\n\tlet hash = hashMemoCache.get(hashInput);\n\tif (!hash) {\n\t\thash = createHash(\"sha256\").update(hashInput).digest(\"hex\").slice(0, 32);\n\t\thashMemoCache.set(hashInput, hash);\n\t}\n\n\tconst scopePrefix = scopeId ? `${scope}:${scopeId}` : scope;\n\treturn `${scopePrefix}:${toolName}:${hash}`;\n}\n\n/**\n * Estimate the size of a value in bytes.\n */\nfunction estimateSize(value: unknown): number {\n\tif (value === null || value === undefined) return 0;\n\tif (typeof value === \"string\") return value.length * 2; // UTF-16\n\tif (typeof value === \"number\") return 8;\n\tif (typeof value === \"boolean\") return 4;\n\tif (Array.isArray(value)) {\n\t\treturn value.reduce((sum, item) => sum + estimateSize(item), 0);\n\t}\n\tif (typeof value === \"object\") {\n\t\treturn Object.entries(value).reduce(\n\t\t\t(sum, [k, v]) => sum + k.length * 2 + estimateSize(v),\n\t\t\t0,\n\t\t);\n\t}\n\treturn JSON.stringify(value).length * 2;\n}\n\n/**\n * Tool Result Cache Manager.\n */\nexport class ToolResultCache {\n\tprivate config: ToolResultCacheConfig;\n\tprivate toolConfigs: Map<string, ToolCacheConfig> = new Map();\n\tprivate cache: Map<string, CacheEntry> = new Map();\n\tprivate stats: ToolCacheStats;\n\tprivate cleanupTimer: ReturnType<typeof setInterval> | null = null;\n\tprivate currentScopeId?: string;\n\tprivate currentGitSha?: string;\n\n\tconstructor(config?: Partial<ToolResultCacheConfig>) {\n\t\tthis.config = { ...getToolResultCacheConfig(), ...config };\n\t\tthis.stats = {\n\t\t\ttotalLookups: 0,\n\t\t\thits: 0,\n\t\t\tmisses: 0,\n\t\t\thitRatio: 0,\n\t\t\tentryCount: 0,\n\t\t\tmemorySizeBytes: 0,\n\t\t\tevictions: 0,\n\t\t\tbyTool: {},\n\t\t};\n\n\t\t// Initialize default tool configs\n\t\tfor (const [tool, cfg] of Object.entries(DEFAULT_TOOL_CACHE_CONFIGS)) {\n\t\t\tthis.toolConfigs.set(tool, cfg);\n\t\t}\n\n\t\t// Start cleanup timer\n\t\tthis.startCleanup();\n\t}\n\n\t/**\n\t * Set the current session/user scope ID.\n\t */\n\tsetScopeId(scopeId: string): void {\n\t\tthis.currentScopeId = scopeId;\n\t}\n\n\t/**\n\t * Set the current git SHA for git-dependent caches.\n\t */\n\tsetGitSha(sha: string | undefined): void {\n\t\tthis.currentGitSha = sha;\n\t}\n\n\t/**\n\t * Configure caching for a specific tool.\n\t */\n\tsetToolConfig(toolName: string, config: ToolCacheConfig): void {\n\t\tthis.toolConfigs.set(toolName, config);\n\t}\n\n\t/**\n\t * Get cache configuration for a tool.\n\t */\n\tgetToolConfig(toolName: string): ToolCacheConfig | undefined {\n\t\treturn this.toolConfigs.get(toolName);\n\t}\n\n\t/**\n\t * Check if a tool is cacheable.\n\t */\n\tisCacheable(toolName: string): boolean {\n\t\tif (!this.config.enabled) return false;\n\t\tconst toolConfig = this.toolConfigs.get(toolName);\n\t\treturn toolConfig?.cacheable ?? false;\n\t}\n\n\t/**\n\t * Get a cached result for a tool call.\n\t */\n\tget<T>(\n\t\ttoolName: string,\n\t\targs: Record<string, unknown>,\n\t): { hit: true; result: T } | { hit: false } {\n\t\tif (!this.config.enabled) {\n\t\t\treturn { hit: false };\n\t\t}\n\n\t\tconst toolConfig = this.toolConfigs.get(toolName);\n\t\tif (!toolConfig?.cacheable) {\n\t\t\treturn { hit: false };\n\t\t}\n\n\t\tconst key = generateCacheKey(\n\t\t\ttoolName,\n\t\t\targs,\n\t\t\ttoolConfig.scope,\n\t\t\tthis.currentScopeId,\n\t\t\ttoolConfig.keyFields,\n\t\t);\n\n\t\tconst entry = this.cache.get(key);\n\t\tthis.updateStats(toolName, false);\n\n\t\tif (!entry) {\n\t\t\treturn { hit: false };\n\t\t}\n\n\t\t// Check expiration\n\t\tif (Date.now() > entry.expiresAt) {\n\t\t\tthis.cache.delete(key);\n\t\t\tthis.stats.memorySizeBytes -= entry.sizeBytes;\n\t\t\treturn { hit: false };\n\t\t}\n\n\t\t// Check git state dependency\n\t\tif (toolConfig.gitStateDependent && entry.gitSha !== this.currentGitSha) {\n\t\t\tthis.cache.delete(key);\n\t\t\tthis.stats.memorySizeBytes -= entry.sizeBytes;\n\t\t\treturn { hit: false };\n\t\t}\n\n\t\t// Cache hit!\n\t\tentry.hitCount++;\n\t\tentry.lastAccessedAt = Date.now();\n\t\tthis.updateStats(toolName, true);\n\n\t\tlogger.debug(\"Cache hit\", {\n\t\t\ttool: toolName,\n\t\t\tkey: key.slice(-16),\n\t\t\thitCount: entry.hitCount,\n\t\t});\n\n\t\treturn { hit: true, result: entry.result as T };\n\t}\n\n\t/**\n\t * Store a result in the cache.\n\t */\n\tset(\n\t\ttoolName: string,\n\t\targs: Record<string, unknown>,\n\t\tresult: unknown,\n\t\toptions?: { ttlSeconds?: number; fileMtimes?: Record<string, number> },\n\t): void {\n\t\tif (!this.config.enabled) return;\n\n\t\tconst toolConfig = this.toolConfigs.get(toolName);\n\t\tif (!toolConfig?.cacheable) return;\n\n\t\tconst key = generateCacheKey(\n\t\t\ttoolName,\n\t\t\targs,\n\t\t\ttoolConfig.scope,\n\t\t\tthis.currentScopeId,\n\t\t\ttoolConfig.keyFields,\n\t\t);\n\n\t\tconst ttl = options?.ttlSeconds ?? toolConfig.ttlSeconds;\n\t\tconst now = Date.now();\n\t\tconst sizeBytes = estimateSize(result);\n\n\t\tif (sizeBytes > this.config.maxSizeBytes) {\n\t\t\tlogger.debug(\"Skipping cache entry larger than max size\", {\n\t\t\t\ttool: toolName,\n\t\t\t\tsize: sizeBytes,\n\t\t\t\tmaxSize: this.config.maxSizeBytes,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if we need to evict entries\n\t\tthis.ensureCapacity(sizeBytes);\n\n\t\tconst entry: CacheEntry = {\n\t\t\tresult,\n\t\t\tcreatedAt: now,\n\t\t\tlastAccessedAt: now,\n\t\t\texpiresAt: now + ttl * 1000,\n\t\t\tinputHash: key,\n\t\t\ttoolName,\n\t\t\thitCount: 0,\n\t\t\tsizeBytes,\n\t\t\tfileMtimes: options?.fileMtimes,\n\t\t\tgitSha: toolConfig.gitStateDependent ? this.currentGitSha : undefined,\n\t\t};\n\n\t\t// Remove old entry if exists\n\t\tconst oldEntry = this.cache.get(key);\n\t\tif (oldEntry) {\n\t\t\tthis.stats.memorySizeBytes -= oldEntry.sizeBytes;\n\t\t}\n\n\t\tthis.cache.set(key, entry);\n\t\tthis.stats.memorySizeBytes += sizeBytes;\n\t\tthis.stats.entryCount = this.cache.size;\n\n\t\tlogger.debug(\"Cached result\", {\n\t\t\ttool: toolName,\n\t\t\tkey: key.slice(-16),\n\t\t\tttl,\n\t\t\tsize: sizeBytes,\n\t\t});\n\t}\n\n\t/**\n\t * Invalidate cache entries for a tool.\n\t */\n\tinvalidate(toolName: string, args?: Record<string, unknown>): number {\n\t\tlet invalidated = 0;\n\n\t\tif (args) {\n\t\t\t// Invalidate specific entry\n\t\t\tconst toolConfig = this.toolConfigs.get(toolName);\n\t\t\tif (toolConfig) {\n\t\t\t\tconst key = generateCacheKey(\n\t\t\t\t\ttoolName,\n\t\t\t\t\targs,\n\t\t\t\t\ttoolConfig.scope,\n\t\t\t\t\tthis.currentScopeId,\n\t\t\t\t\ttoolConfig.keyFields,\n\t\t\t\t);\n\t\t\t\tconst entry = this.cache.get(key);\n\t\t\t\tif (entry) {\n\t\t\t\t\tthis.stats.memorySizeBytes -= entry.sizeBytes;\n\t\t\t\t\tthis.cache.delete(key);\n\t\t\t\t\tinvalidated = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Invalidate all entries for tool\n\t\t\tfor (const [key, entry] of this.cache) {\n\t\t\t\tif (entry.toolName === toolName) {\n\t\t\t\t\tthis.stats.memorySizeBytes -= entry.sizeBytes;\n\t\t\t\t\tthis.cache.delete(key);\n\t\t\t\t\tinvalidated++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (invalidated > 0) {\n\t\t\tthis.stats.entryCount = this.cache.size;\n\t\t\tlogger.debug(\"Invalidated cache entries\", {\n\t\t\t\ttool: toolName,\n\t\t\t\tinvalidated,\n\t\t\t});\n\t\t}\n\n\t\treturn invalidated;\n\t}\n\n\t/**\n\t * Invalidate all file-system dependent caches.\n\t */\n\tinvalidateFileSystemCaches(): number {\n\t\tlet invalidated = 0;\n\n\t\tfor (const [key, entry] of this.cache) {\n\t\t\tconst toolConfig = this.toolConfigs.get(entry.toolName);\n\t\t\tif (toolConfig?.fileSystemDependent) {\n\t\t\t\tthis.stats.memorySizeBytes -= entry.sizeBytes;\n\t\t\t\tthis.cache.delete(key);\n\t\t\t\tinvalidated++;\n\t\t\t}\n\t\t}\n\n\t\tif (invalidated > 0) {\n\t\t\tthis.stats.entryCount = this.cache.size;\n\t\t\tlogger.info(\"Invalidated file system caches\", { invalidated });\n\t\t}\n\n\t\treturn invalidated;\n\t}\n\n\t/**\n\t * Invalidate all git-state dependent caches.\n\t */\n\tinvalidateGitCaches(): number {\n\t\tlet invalidated = 0;\n\n\t\tfor (const [key, entry] of this.cache) {\n\t\t\tconst toolConfig = this.toolConfigs.get(entry.toolName);\n\t\t\tif (toolConfig?.gitStateDependent) {\n\t\t\t\tthis.stats.memorySizeBytes -= entry.sizeBytes;\n\t\t\t\tthis.cache.delete(key);\n\t\t\t\tinvalidated++;\n\t\t\t}\n\t\t}\n\n\t\tif (invalidated > 0) {\n\t\t\tthis.stats.entryCount = this.cache.size;\n\t\t\tlogger.info(\"Invalidated git caches\", { invalidated });\n\t\t}\n\n\t\treturn invalidated;\n\t}\n\n\t/**\n\t * Clear all cache entries.\n\t */\n\tclear(): void {\n\t\tthis.cache.clear();\n\t\tthis.stats.entryCount = 0;\n\t\tthis.stats.memorySizeBytes = 0;\n\t\tlogger.info(\"Cache cleared\");\n\t}\n\n\t/**\n\t * Get cache statistics.\n\t */\n\tgetStats(): ToolCacheStats {\n\t\treturn { ...this.stats, byTool: { ...this.stats.byTool } };\n\t}\n\n\t/**\n\t * Update statistics.\n\t */\n\tprivate updateStats(toolName: string, hit: boolean): void {\n\t\tthis.stats.totalLookups++;\n\t\tif (hit) {\n\t\t\tthis.stats.hits++;\n\t\t} else {\n\t\t\tthis.stats.misses++;\n\t\t}\n\n\t\tthis.stats.hitRatio =\n\t\t\tthis.stats.totalLookups > 0\n\t\t\t\t? this.stats.hits / this.stats.totalLookups\n\t\t\t\t: 0;\n\n\t\t// Per-tool stats\n\t\tif (!this.stats.byTool[toolName]) {\n\t\t\tthis.stats.byTool[toolName] = {\n\t\t\t\tlookups: 0,\n\t\t\t\thits: 0,\n\t\t\t\tmisses: 0,\n\t\t\t\thitRatio: 0,\n\t\t\t};\n\t\t}\n\t\tconst toolStats = this.stats.byTool[toolName];\n\t\ttoolStats.lookups++;\n\t\tif (hit) {\n\t\t\ttoolStats.hits++;\n\t\t} else {\n\t\t\ttoolStats.misses++;\n\t\t}\n\t\ttoolStats.hitRatio =\n\t\t\ttoolStats.lookups > 0 ? toolStats.hits / toolStats.lookups : 0;\n\t}\n\n\t/**\n\t * Ensure cache has capacity for new entry.\n\t */\n\tprivate ensureCapacity(requiredBytes: number): void {\n\t\t// Evict by count\n\t\twhile (this.cache.size >= this.config.maxEntries) {\n\t\t\tthis.evictLRU();\n\t\t}\n\n\t\t// Evict by size\n\t\twhile (\n\t\t\tthis.stats.memorySizeBytes + requiredBytes > this.config.maxSizeBytes &&\n\t\t\tthis.cache.size > 0\n\t\t) {\n\t\t\tthis.evictLRU();\n\t\t}\n\t}\n\n\t/**\n\t * Evict least recently used entry.\n\t */\n\tprivate evictLRU(): void {\n\t\tlet oldestKey: string | null = null;\n\t\tlet oldestTime = Number.POSITIVE_INFINITY;\n\n\t\tfor (const [key, entry] of this.cache) {\n\t\t\t// True LRU: evict the entry that was accessed least recently\n\t\t\tif (entry.lastAccessedAt < oldestTime) {\n\t\t\t\toldestTime = entry.lastAccessedAt;\n\t\t\t\toldestKey = key;\n\t\t\t}\n\t\t}\n\n\t\tif (oldestKey) {\n\t\t\tconst entry = this.cache.get(oldestKey);\n\t\t\tif (entry) {\n\t\t\t\tthis.stats.memorySizeBytes -= entry.sizeBytes;\n\t\t\t}\n\t\t\tthis.cache.delete(oldestKey);\n\t\t\tthis.stats.evictions++;\n\t\t\tthis.stats.entryCount = this.cache.size;\n\t\t}\n\t}\n\n\t/**\n\t * Start periodic cleanup.\n\t */\n\tprivate startCleanup(): void {\n\t\tif (this.cleanupTimer) {\n\t\t\tclearInterval(this.cleanupTimer);\n\t\t}\n\n\t\tthis.cleanupTimer = setInterval(() => {\n\t\t\tthis.cleanup();\n\t\t}, this.config.cleanupIntervalMs);\n\n\t\t// Don't keep process alive\n\t\tif (this.cleanupTimer.unref) {\n\t\t\tthis.cleanupTimer.unref();\n\t\t}\n\t}\n\n\t/**\n\t * Clean up expired entries.\n\t */\n\tcleanup(): number {\n\t\tconst now = Date.now();\n\t\tlet removed = 0;\n\n\t\tfor (const [key, entry] of this.cache) {\n\t\t\tif (now > entry.expiresAt) {\n\t\t\t\tthis.stats.memorySizeBytes -= entry.sizeBytes;\n\t\t\t\tthis.cache.delete(key);\n\t\t\t\tremoved++;\n\t\t\t}\n\t\t}\n\n\t\tif (removed > 0) {\n\t\t\tthis.stats.entryCount = this.cache.size;\n\t\t\tlogger.debug(\"Cleaned up expired entries\", { removed });\n\t\t}\n\n\t\treturn removed;\n\t}\n\n\t/**\n\t * Stop the cache (clear timer).\n\t */\n\tstop(): void {\n\t\tif (this.cleanupTimer) {\n\t\t\tclearInterval(this.cleanupTimer);\n\t\t\tthis.cleanupTimer = null;\n\t\t}\n\t}\n}\n\n/**\n * Create a default tool result cache.\n */\nexport function createToolResultCache(\n\tconfig?: Partial<ToolResultCacheConfig>,\n): ToolResultCache {\n\treturn new ToolResultCache(config);\n}\n\n/**\n * Global shared cache instance.\n */\nlet globalCache: ToolResultCache | null = null;\n\n/**\n * Get or create the global tool result cache.\n */\nexport function getGlobalToolResultCache(): ToolResultCache {\n\tif (!globalCache) {\n\t\tglobalCache = createToolResultCache();\n\t}\n\treturn globalCache;\n}\n\n/**\n * Reset the global cache (for testing).\n */\nexport function resetGlobalToolResultCache(): void {\n\tif (globalCache) {\n\t\tglobalCache.stop();\n\t\tglobalCache = null;\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typebox-tool.d.ts","sourceRoot":"","sources":["../../src/tools/typebox-tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,KAAK,EACX,SAAS,EACT,eAAe,EACf,eAAe,EACf,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"typebox-tool.d.ts","sourceRoot":"","sources":["../../src/tools/typebox-tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,KAAK,EACX,SAAS,EACT,eAAe,EACf,eAAe,EACf,MAAM,mBAAmB,CAAC;AAK3B,KAAK,aAAa,CAAC,OAAO,IACvB,eAAe,CAAC,OAAO,CAAC,GACxB,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;AAErC,UAAU,wBAAwB,CAAC,MAAM,SAAS,OAAO,EAAE,OAAO;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IAC1C,OAAO,EAAE,CACR,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EACtB,MAAM,CAAC,EAAE,WAAW,KAChB,aAAa,CAAC,OAAO,CAAC,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,CAAC,MAAM,SAAS,OAAO,EAAE,OAAO,GAAG,SAAS,EAC5E,OAAO,EAAE,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,GAChD,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAyG5B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { performance } from "node:perf_hooks";
|
|
2
|
+
import { getSkillArtifactMetadataFromDetails } from "../skills/artifact-metadata.js";
|
|
2
3
|
import { logToolFailure, recordToolExecution } from "../telemetry.js";
|
|
3
4
|
import { compileTypeboxSchema } from "../utils/typebox-ajv.js";
|
|
4
5
|
export function createTypeboxTool(options) {
|
|
@@ -45,10 +46,12 @@ export function createTypeboxTool(options) {
|
|
|
45
46
|
const start = performance.now();
|
|
46
47
|
try {
|
|
47
48
|
const result = await options.execute(toolCallId, parsedParams, signal);
|
|
49
|
+
const skillMetadata = getSkillArtifactMetadataFromDetails(result.details);
|
|
48
50
|
recordToolExecution(options.name, true, performance.now() - start, {
|
|
49
51
|
toolCallId,
|
|
50
52
|
attempt,
|
|
51
53
|
maxAttempts,
|
|
54
|
+
...(skillMetadata ? { skillMetadata } : {}),
|
|
52
55
|
});
|
|
53
56
|
return result;
|
|
54
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typebox-tool.js","sourceRoot":"","sources":["../../src/tools/typebox-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAQ9C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AA0B/D,MAAM,UAAU,iBAAiB,CAChC,OAAkD;IAElD,2EAA2E;IAC3E,wEAAwE;IACxE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,UAAU,GAAG,MAAM,CAAC;IAC1B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,GAAG,CAAC;IACjD,MAAM,WAAW,GAChB,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IAE1E,OAAO;QACN,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU;QACV,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,UAAU;QACV,YAAY;QACZ,WAAW;QACX,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAA+B,EAAE,MAAM,EAAE,EAAE;YACtE,IAAI,YAA4B,CAAC;YACjC,MAAM,KAAK,GACV,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;gBACnC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACpC,CAAC,CAAC,EAAE,CAAC;YACP,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,OAAO,GACZ,QAAQ,CAAC,MAAM;oBACd,EAAE,GAAG,CAAC,CAAC,GAAgB,EAAE,EAAE;oBAC1B,OAAO,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBACpD,CAAC,CAAC;qBACD,IAAI,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;YACtE,CAAC;YACD,YAAY,GAAG,KAAuB,CAAC;YAEvC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;YAEhD,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,SAAkB,CAAC;YAEvB,OAAO,OAAO,GAAG,WAAW,EAAE,CAAC;gBAC9B,OAAO,EAAE,CAAC;gBACV,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC;oBACJ,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CACnC,UAAU,EACV,YAAY,EACZ,MAAM,CACN,CAAC;oBACF,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE;wBAClE,UAAU;wBACV,OAAO;wBACP,WAAW;
|
|
1
|
+
{"version":3,"file":"typebox-tool.js","sourceRoot":"","sources":["../../src/tools/typebox-tool.ts"],"names":[],"mappings":"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","sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport type { Static, TSchema } from \"@sinclair/typebox\";\nimport type { ErrorObject } from \"ajv\";\nimport type {\n\tAgentTool,\n\tAgentToolResult,\n\tToolAnnotations,\n} from \"../agent/types.js\";\nimport { getSkillArtifactMetadataFromDetails } from \"../skills/artifact-metadata.js\";\nimport { logToolFailure, recordToolExecution } from \"../telemetry.js\";\nimport { compileTypeboxSchema } from \"../utils/typebox-ajv.js\";\n\ntype ExecuteResult<Details> =\n\t| AgentToolResult<Details>\n\t| Promise<AgentToolResult<Details>>;\n\ninterface CreateTypeboxToolOptions<Schema extends TSchema, Details> {\n\tname: string;\n\tlabel: string;\n\tdescription: string;\n\tschema: Schema;\n\tannotations?: ToolAnnotations;\n\ttoolType?: string;\n\tinputExamples?: unknown[];\n\tallowedCallers?: string[];\n\tdeferApiDefinition?: boolean;\n\tmaxRetries?: number;\n\tretryDelayMs?: number;\n\tshouldRetry?: (error: unknown) => boolean;\n\texecute: (\n\t\ttoolCallId: string,\n\t\tparams: Static<Schema>,\n\t\tsignal?: AbortSignal,\n\t) => ExecuteResult<Details>;\n}\n\nexport function createTypeboxTool<Schema extends TSchema, Details = undefined>(\n\toptions: CreateTypeboxToolOptions<Schema, Details>,\n): AgentTool<Schema, Details> {\n\t// In TypeBox 0.34.x+, Type.Strict() is no longer needed - internal symbols\n\t// are non-enumerable and automatically excluded from JSON serialization\n\tconst schema = options.schema;\n\tconst parameters = schema;\n\tconst validate = compileTypeboxSchema(schema);\n\tconst maxRetries = options.maxRetries ?? 1;\n\tconst retryDelayMs = options.retryDelayMs ?? 500;\n\tconst shouldRetry =\n\t\toptions.shouldRetry ?? ((error: unknown) => isTransientToolError(error));\n\n\treturn {\n\t\tname: options.name,\n\t\tlabel: options.label,\n\t\tdescription: options.description,\n\t\tparameters,\n\t\tannotations: options.annotations,\n\t\ttoolType: options.toolType,\n\t\tinputExamples: options.inputExamples,\n\t\tallowedCallers: options.allowedCallers,\n\t\tdeferApiDefinition: options.deferApiDefinition,\n\t\tmaxRetries,\n\t\tretryDelayMs,\n\t\tshouldRetry,\n\t\texecute: async (toolCallId, params: Record<string, unknown>, signal) => {\n\t\t\tlet parsedParams: Static<Schema>;\n\t\t\tconst input =\n\t\t\t\tparams && typeof params === \"object\"\n\t\t\t\t\t? JSON.parse(JSON.stringify(params))\n\t\t\t\t\t: {};\n\t\t\tif (!validate(input)) {\n\t\t\t\tconst message =\n\t\t\t\t\tvalidate.errors\n\t\t\t\t\t\t?.map((err: ErrorObject) => {\n\t\t\t\t\t\t\treturn `${err.instancePath || \"/\"} ${err.message}`;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(\"; \") ?? \"Invalid arguments\";\n\t\t\t\tthrow new Error(`Invalid arguments for ${options.name}: ${message}`);\n\t\t\t}\n\t\t\tparsedParams = input as Static<Schema>;\n\n\t\t\tconst maxAttempts = Math.max(1, maxRetries + 1);\n\n\t\t\tlet attempt = 0;\n\t\t\tlet lastError: unknown;\n\n\t\t\twhile (attempt < maxAttempts) {\n\t\t\t\tattempt++;\n\t\t\t\tconst start = performance.now();\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await options.execute(\n\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\tparsedParams,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t);\n\t\t\t\t\tconst skillMetadata = getSkillArtifactMetadataFromDetails(\n\t\t\t\t\t\tresult.details,\n\t\t\t\t\t);\n\t\t\t\t\trecordToolExecution(options.name, true, performance.now() - start, {\n\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\tmaxAttempts,\n\t\t\t\t\t\t...(skillMetadata ? { skillMetadata } : {}),\n\t\t\t\t\t});\n\t\t\t\t\treturn result;\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tlastError = error;\n\t\t\t\t\tconst errorMessage =\n\t\t\t\t\t\terror instanceof Error ? error.message : String(error ?? \"unknown\");\n\t\t\t\t\tconst isAbort = error instanceof Error && error.name === \"AbortError\";\n\t\t\t\t\tconst isFinalAttempt = attempt === maxAttempts;\n\n\t\t\t\t\tif (isAbort || !shouldRetry(error) || isFinalAttempt) {\n\t\t\t\t\t\trecordToolExecution(\n\t\t\t\t\t\t\toptions.name,\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\tperformance.now() - start,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\t\t\terror: errorMessage,\n\t\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\t\tmaxAttempts,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tlogToolFailure(options.name, errorMessage, {\n\t\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\tmaxAttempts,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\n\t\t\t\t\tlogToolFailure(options.name, errorMessage, {\n\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\tmaxAttempts,\n\t\t\t\t\t});\n\n\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, retryDelayMs));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthrow lastError ?? new Error(\"Unknown tool execution failure\");\n\t\t},\n\t};\n}\nfunction isTransientToolError(error: unknown): boolean {\n\tif (!error) return true;\n\tif (error instanceof Error) {\n\t\tif (error.name === \"AbortError\") {\n\t\t\treturn false;\n\t\t}\n\t\tconst message = error.message.toLowerCase();\n\t\tif (\n\t\t\tmessage.includes(\"invalid\") ||\n\t\t\tmessage.includes(\"syntax\") ||\n\t\t\tmessage.includes(\"not found\") ||\n\t\t\tmessage.includes(\"unknown command\")\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n"]}
|
package/dist/tools/webfetch.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export declare const webfetchTool: Readonly<{
|
|
|
23
23
|
}>]>>;
|
|
24
24
|
}>;
|
|
25
25
|
annotations: import("../agent/types.js").ToolAnnotations | undefined;
|
|
26
|
+
source: import("../agent/types.js").McpToolSourceMetadata | undefined;
|
|
26
27
|
toolType: string | undefined;
|
|
27
28
|
inputExamples: unknown[] | undefined;
|
|
28
29
|
allowedCallers: string[] | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webfetch.d.ts","sourceRoot":"","sources":["../../src/tools/webfetch.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AA4B1D,MAAM,WAAW,eAAe;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAcD,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"webfetch.d.ts","sourceRoot":"","sources":["../../src/tools/webfetch.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AA4B1D,MAAM,WAAW,eAAe;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAcD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiIvB,CAAC"}
|
|
@@ -93,6 +93,7 @@ export declare const websearchTool: Readonly<{
|
|
|
93
93
|
}>>;
|
|
94
94
|
}>;
|
|
95
95
|
annotations: import("../agent/types.js").ToolAnnotations | undefined;
|
|
96
|
+
source: import("../agent/types.js").McpToolSourceMetadata | undefined;
|
|
96
97
|
toolType: string | undefined;
|
|
97
98
|
inputExamples: unknown[] | undefined;
|
|
98
99
|
allowedCallers: string[] | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websearch.d.ts","sourceRoot":"","sources":["../../src/tools/websearch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAWH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAoHxD,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"websearch.d.ts","sourceRoot":"","sources":["../../src/tools/websearch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAWH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAoHxD,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsKxB,CAAC"}
|
package/dist/tools/write.d.ts
CHANGED
|
@@ -72,6 +72,7 @@ export declare const writeTool: Readonly<{
|
|
|
72
72
|
backup: import("@sinclair/typebox").TBoolean;
|
|
73
73
|
}>;
|
|
74
74
|
annotations: import("../agent/types.js").ToolAnnotations | undefined;
|
|
75
|
+
source: import("../agent/types.js").McpToolSourceMetadata | undefined;
|
|
75
76
|
toolType: string | undefined;
|
|
76
77
|
inputExamples: unknown[] | undefined;
|
|
77
78
|
allowedCallers: string[] | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAiBH,OAAO,EACN,KAAK,0BAA0B,EAG/B,MAAM,6BAA6B,CAAC;AAMrC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAyBjE,KAAK,gBAAgB,GAAG;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAClC,eAAe,CAAC,EAAE,0BAA0B,CAAC;IAC7C,IAAI,CAAC,EAAE,SAAS,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAiBH,OAAO,EACN,KAAK,0BAA0B,EAG/B,MAAM,6BAA6B,CAAC;AAMrC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAyBjE,KAAK,gBAAgB,GAAG;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAClC,eAAe,CAAC,EAAE,0BAA0B,CAAC;IAC7C,IAAI,CAAC,EAAE,SAAS,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;EA+KpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort-error.d.ts","sourceRoot":"","sources":["../../src/utils/abort-error.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort-error.js","sourceRoot":"","sources":["../../src/utils/abort-error.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,KAAc;IAC1C,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,KAAK,CAAC,IAAI,KAAK,YAAY,CAC3B,CAAC;AACH,CAAC","sourcesContent":["export function isAbortError(error: unknown): boolean {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"name\" in error &&\n\t\terror.name === \"AbortError\"\n\t);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"downstream.d.ts","sourceRoot":"","sources":["../../src/utils/downstream.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,cAAc,EACd,KAAK,oBAAoB,EACzB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"downstream.d.ts","sourceRoot":"","sources":["../../src/utils/downstream.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,cAAc,EACd,KAAK,oBAAoB,EACzB,MAAM,8BAA8B,CAAC;AAMtC,eAAO,MAAM,UAAU,gBAAgB,CAAC;AACxC,eAAO,MAAM,QAAQ,cAAc,CAAC;AAEpC,MAAM,MAAM,qBAAqB,GAAG,OAAO,UAAU,GAAG,OAAO,QAAQ,CAAC;AAExE,MAAM,WAAW,gBAAgB;IAChC,WAAW,EAAE,qBAAqB,CAAC;IACnC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC;CACjE;AAED,qBAAa,gBAAgB;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAiB;gBAE9B,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB;IAe5C,MAAM,CAAC,CAAC,EACb,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,aAAa,EAAE,MAAM,CAAC,GACpB,OAAO,CAAC,CAAC,CAAC;CAuBb;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAE5E;AAED,wBAAgB,MAAM,CAAC,CAAC,EACvB,MAAM,EAAE,gBAAgB,EACxB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,aAAa,EAAE,MAAM,CAAC,GACpB,OAAO,CAAC,CAAC,CAAC,CAEZ"}
|
package/dist/utils/downstream.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CircuitBreaker, } from "../safety/circuit-breaker.js";
|
|
2
|
+
import { isAbortError } from "./abort-error.js";
|
|
2
3
|
import { createLogger } from "./logger.js";
|
|
3
4
|
const logger = createLogger("runtime:downstream");
|
|
4
5
|
export const FailClosed = "fail-closed";
|
|
@@ -25,6 +26,9 @@ export class DownstreamClient {
|
|
|
25
26
|
return this.breaker ? await this.breaker.execute(fn) : await fn();
|
|
26
27
|
}
|
|
27
28
|
catch (error) {
|
|
29
|
+
if (isAbortError(error)) {
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
28
32
|
if (this.failureMode === FailOpen) {
|
|
29
33
|
logger.warn("Downstream call failed (fail-open)", {
|
|
30
34
|
downstream: this.name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"downstream.js","sourceRoot":"","sources":["../../src/utils/downstream.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,cAAc,GAEd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC;AACxC,MAAM,CAAC,MAAM,QAAQ,GAAG,WAAW,CAAC;AASpC,MAAM,OAAO,gBAAgB;IAK5B,YAAY,IAAY,EAAE,MAAwB;QACjD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9D,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAC1B,CAAC;aAAM,IAAI,MAAM,CAAC,OAAO,YAAY,cAAc,EAAE,CAAC;YACrD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC;gBACjC,GAAG,MAAM,CAAC,OAAO;gBACjB,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI;aACzC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,KAAK,CAAC,MAAM,CACX,EAAU,EACV,EAAoB,EACpB,aAAsB;QAEtB,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;oBACjD,UAAU,EAAE,IAAI,CAAC,IAAI;oBACrB,EAAE;oBACF,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC7D,CAAC,CAAC;gBACH,OAAO,aAAa,EAAE,CAAC;YACxB,CAAC;YACD,MAAM,CAAC,KAAK,CACX,sCAAsC,EACtC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EACzD,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAC7B,CAAC;YACF,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;CACD;AAED,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,MAAwB;IACzD,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,MAAM,CACrB,MAAwB,EACxB,EAAU,EACV,EAAoB,EACpB,aAAsB;IAEtB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["import {\n\tCircuitBreaker,\n\ttype CircuitBreakerConfig,\n} from \"../safety/circuit-breaker.js\";\nimport { createLogger } from \"./logger.js\";\n\nconst logger = createLogger(\"runtime:downstream\");\n\nexport const FailClosed = \"fail-closed\";\nexport const FailOpen = \"fail-open\";\n\nexport type DownstreamFailureMode = typeof FailClosed | typeof FailOpen;\n\nexport interface DownstreamConfig {\n\tfailureMode: DownstreamFailureMode;\n\tbreaker?: CircuitBreaker | Partial<CircuitBreakerConfig> | false;\n}\n\nexport class DownstreamClient {\n\treadonly name: string;\n\treadonly failureMode: DownstreamFailureMode;\n\tprivate readonly breaker?: CircuitBreaker;\n\n\tconstructor(name: string, config: DownstreamConfig) {\n\t\tthis.name = name;\n\t\tthis.failureMode = config.failureMode;\n\t\tif (config.breaker === false || config.breaker === undefined) {\n\t\t\tthis.breaker = undefined;\n\t\t} else if (config.breaker instanceof CircuitBreaker) {\n\t\t\tthis.breaker = config.breaker;\n\t\t} else {\n\t\t\tthis.breaker = new CircuitBreaker({\n\t\t\t\t...config.breaker,\n\t\t\t\ttoolName: config.breaker.toolName ?? name,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync callOp<T>(\n\t\top: string,\n\t\tfn: () => Promise<T>,\n\t\tfailOpenValue: () => T,\n\t): Promise<T> {\n\t\ttry {\n\t\t\treturn this.breaker ? await this.breaker.execute(fn) : await fn();\n\t\t} catch (error) {\n\t\t\tif (this.failureMode === FailOpen) {\n\t\t\t\tlogger.warn(\"Downstream call failed (fail-open)\", {\n\t\t\t\t\tdownstream: this.name,\n\t\t\t\t\top,\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t});\n\t\t\t\treturn failOpenValue();\n\t\t\t}\n\t\t\tlogger.error(\n\t\t\t\t\"Downstream call failed (fail-closed)\",\n\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t{ downstream: this.name, op },\n\t\t\t);\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n\nexport function New(name: string, config: DownstreamConfig): DownstreamClient {\n\treturn new DownstreamClient(name, config);\n}\n\nexport function CallOp<T>(\n\tclient: DownstreamClient,\n\top: string,\n\tfn: () => Promise<T>,\n\tfailOpenValue: () => T,\n): Promise<T> {\n\treturn client.callOp(op, fn, failOpenValue);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"downstream.js","sourceRoot":"","sources":["../../src/utils/downstream.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,cAAc,GAEd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC;AACxC,MAAM,CAAC,MAAM,QAAQ,GAAG,WAAW,CAAC;AASpC,MAAM,OAAO,gBAAgB;IAK5B,YAAY,IAAY,EAAE,MAAwB;QACjD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9D,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAC1B,CAAC;aAAM,IAAI,MAAM,CAAC,OAAO,YAAY,cAAc,EAAE,CAAC;YACrD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC;gBACjC,GAAG,MAAM,CAAC,OAAO;gBACjB,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI;aACzC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,KAAK,CAAC,MAAM,CACX,EAAU,EACV,EAAoB,EACpB,aAAsB;QAEtB,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,KAAK,CAAC;YACb,CAAC;YACD,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;oBACjD,UAAU,EAAE,IAAI,CAAC,IAAI;oBACrB,EAAE;oBACF,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC7D,CAAC,CAAC;gBACH,OAAO,aAAa,EAAE,CAAC;YACxB,CAAC;YACD,MAAM,CAAC,KAAK,CACX,sCAAsC,EACtC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EACzD,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAC7B,CAAC;YACF,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;CACD;AAED,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,MAAwB;IACzD,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,MAAM,CACrB,MAAwB,EACxB,EAAU,EACV,EAAoB,EACpB,aAAsB;IAEtB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["import {\n\tCircuitBreaker,\n\ttype CircuitBreakerConfig,\n} from \"../safety/circuit-breaker.js\";\nimport { isAbortError } from \"./abort-error.js\";\nimport { createLogger } from \"./logger.js\";\n\nconst logger = createLogger(\"runtime:downstream\");\n\nexport const FailClosed = \"fail-closed\";\nexport const FailOpen = \"fail-open\";\n\nexport type DownstreamFailureMode = typeof FailClosed | typeof FailOpen;\n\nexport interface DownstreamConfig {\n\tfailureMode: DownstreamFailureMode;\n\tbreaker?: CircuitBreaker | Partial<CircuitBreakerConfig> | false;\n}\n\nexport class DownstreamClient {\n\treadonly name: string;\n\treadonly failureMode: DownstreamFailureMode;\n\tprivate readonly breaker?: CircuitBreaker;\n\n\tconstructor(name: string, config: DownstreamConfig) {\n\t\tthis.name = name;\n\t\tthis.failureMode = config.failureMode;\n\t\tif (config.breaker === false || config.breaker === undefined) {\n\t\t\tthis.breaker = undefined;\n\t\t} else if (config.breaker instanceof CircuitBreaker) {\n\t\t\tthis.breaker = config.breaker;\n\t\t} else {\n\t\t\tthis.breaker = new CircuitBreaker({\n\t\t\t\t...config.breaker,\n\t\t\t\ttoolName: config.breaker.toolName ?? name,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync callOp<T>(\n\t\top: string,\n\t\tfn: () => Promise<T>,\n\t\tfailOpenValue: () => T,\n\t): Promise<T> {\n\t\ttry {\n\t\t\treturn this.breaker ? await this.breaker.execute(fn) : await fn();\n\t\t} catch (error) {\n\t\t\tif (isAbortError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tif (this.failureMode === FailOpen) {\n\t\t\t\tlogger.warn(\"Downstream call failed (fail-open)\", {\n\t\t\t\t\tdownstream: this.name,\n\t\t\t\t\top,\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t});\n\t\t\t\treturn failOpenValue();\n\t\t\t}\n\t\t\tlogger.error(\n\t\t\t\t\"Downstream call failed (fail-closed)\",\n\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t{ downstream: this.name, op },\n\t\t\t);\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n\nexport function New(name: string, config: DownstreamConfig): DownstreamClient {\n\treturn new DownstreamClient(name, config);\n}\n\nexport function CallOp<T>(\n\tclient: DownstreamClient,\n\top: string,\n\tfn: () => Promise<T>,\n\tfailOpenValue: () => T,\n): Promise<T> {\n\treturn client.callOp(op, fn, failOpenValue);\n}\n"]}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ interface LoggerConfig {
|
|
|
25
25
|
minLevel: LogLevel;
|
|
26
26
|
/** Whether to output JSON format (useful for log aggregation) */
|
|
27
27
|
jsonFormat: boolean;
|
|
28
|
+
/** Whether to route debug/info logs to stdout while preserving warnings/errors on stderr */
|
|
29
|
+
splitStreams: boolean;
|
|
28
30
|
/** Whether to include timestamps */
|
|
29
31
|
timestamps: boolean;
|
|
30
32
|
/** Custom output function (defaults to stderr) */
|
|
@@ -49,6 +51,7 @@ declare class Logger {
|
|
|
49
51
|
* Output as human-readable format
|
|
50
52
|
*/
|
|
51
53
|
private outputPretty;
|
|
54
|
+
private writeLine;
|
|
52
55
|
/**
|
|
53
56
|
* Log debug message (verbose, typically for development)
|
|
54
57
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,UAAU;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED,UAAU,QAAQ;IACjB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,KAAK,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACF;AAED;;GAEG;AACH,UAAU,YAAY;IACrB,gEAAgE;IAChE,QAAQ,EAAE,QAAQ,CAAC;IACnB,iEAAiE;IACjE,UAAU,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,kDAAkD;IAClD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CACnC;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,UAAU;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED,UAAU,QAAQ;IACjB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,KAAK,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACF;AAED;;GAEG;AACH,UAAU,YAAY;IACrB,gEAAgE;IAChE,QAAQ,EAAE,QAAQ,CAAC;IACnB,iEAAiE;IACjE,UAAU,EAAE,OAAO,CAAC;IACpB,4FAA4F;IAC5F,YAAY,EAAE,OAAO,CAAC;IACtB,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,kDAAkD;IAClD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CACnC;AAwBD,cAAM,MAAM;IACX,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;IAU1C;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,GAAG;IAkCX;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,SAAS;IAMjB;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIlD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjE;;OAEG;IACH,KAAK,CAAC,iBAAiB,EAAE,UAAU,GAAG,MAAM;IAI5C;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;CAG9C;AAkCD;;GAEG;AACH,eAAO,MAAM,MAAM,QAAe,CAAC;AAEnC;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAkC5D;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IACjD,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC9B,GAAG,IAAI,CA4BP;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAW7C;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAsBhD"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -18,11 +18,18 @@ const LOG_LEVELS = {
|
|
|
18
18
|
warn: 2,
|
|
19
19
|
error: 3,
|
|
20
20
|
};
|
|
21
|
+
const LOG_SEVERITIES = {
|
|
22
|
+
debug: "DEBUG",
|
|
23
|
+
info: "INFO",
|
|
24
|
+
warn: "WARNING",
|
|
25
|
+
error: "ERROR",
|
|
26
|
+
};
|
|
21
27
|
class Logger {
|
|
22
28
|
constructor(config) {
|
|
23
29
|
this.config = {
|
|
24
30
|
minLevel: process.env.MAESTRO_LOG_LEVEL ?? "info",
|
|
25
31
|
jsonFormat: process.env.MAESTRO_LOG_JSON === "1",
|
|
32
|
+
splitStreams: process.env.MAESTRO_LOG_SPLIT_STREAMS === "1",
|
|
26
33
|
timestamps: true,
|
|
27
34
|
...config,
|
|
28
35
|
};
|
|
@@ -67,7 +74,7 @@ class Logger {
|
|
|
67
74
|
* Output as JSON (for log aggregation systems)
|
|
68
75
|
*/
|
|
69
76
|
outputJson(entry) {
|
|
70
|
-
|
|
77
|
+
this.writeLine(entry, JSON.stringify({ ...entry, severity: LOG_SEVERITIES[entry.level] }));
|
|
71
78
|
}
|
|
72
79
|
/**
|
|
73
80
|
* Output as human-readable format
|
|
@@ -82,11 +89,15 @@ class Logger {
|
|
|
82
89
|
if (entry.context && Object.keys(entry.context).length > 0) {
|
|
83
90
|
parts.push(JSON.stringify(entry.context));
|
|
84
91
|
}
|
|
85
|
-
|
|
92
|
+
this.writeLine(entry, parts.join(" "));
|
|
86
93
|
if (entry.error?.stack) {
|
|
87
|
-
|
|
94
|
+
this.writeLine(entry, entry.error.stack);
|
|
88
95
|
}
|
|
89
96
|
}
|
|
97
|
+
writeLine(entry, line) {
|
|
98
|
+
const writeToStdout = this.config.splitStreams && LOG_LEVELS[entry.level] < LOG_LEVELS.warn;
|
|
99
|
+
(writeToStdout ? console.log : console.error)(line);
|
|
100
|
+
}
|
|
90
101
|
/**
|
|
91
102
|
* Log debug message (verbose, typically for development)
|
|
92
103
|
*/
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Structured logging service for Composer CLI.\n * Replaces scattered console.log/error calls with centralized, level-based logging.\n */\n\nimport { appendFileSync, mkdirSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { PATHS } from \"../config/constants.js\";\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport interface LogContext {\n\t[key: string]: unknown;\n}\n\ninterface LogEntry {\n\tlevel: LogLevel;\n\tmessage: string;\n\ttimestamp: string;\n\tcontext?: LogContext;\n\terror?: {\n\t\tname: string;\n\t\tmessage: string;\n\t\tstack?: string;\n\t};\n}\n\n/**\n * Logger configuration\n */\ninterface LoggerConfig {\n\t/** Minimum log level to output (debug < info < warn < error) */\n\tminLevel: LogLevel;\n\t/** Whether to output JSON format (useful for log aggregation) */\n\tjsonFormat: boolean;\n\t/** Whether to include timestamps */\n\ttimestamps: boolean;\n\t/** Custom output function (defaults to stderr) */\n\toutput?: (entry: LogEntry) => void;\n}\n\nconst originalConsole = {\n\tlog: console.log.bind(console),\n\tinfo: console.info.bind(console),\n\twarn: console.warn.bind(console),\n\terror: console.error.bind(console),\n\tdebug: console.debug.bind(console),\n};\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n\tdebug: 0,\n\tinfo: 1,\n\twarn: 2,\n\terror: 3,\n};\n\nclass Logger {\n\tprivate config: LoggerConfig;\n\n\tconstructor(config?: Partial<LoggerConfig>) {\n\t\tthis.config = {\n\t\t\tminLevel: (process.env.MAESTRO_LOG_LEVEL as LogLevel) ?? \"info\",\n\t\t\tjsonFormat: process.env.MAESTRO_LOG_JSON === \"1\",\n\t\t\ttimestamps: true,\n\t\t\t...config,\n\t\t};\n\t}\n\n\t/**\n\t * Check if a log level should be output\n\t */\n\tprivate shouldLog(level: LogLevel): boolean {\n\t\treturn LOG_LEVELS[level] >= LOG_LEVELS[this.config.minLevel];\n\t}\n\n\t/**\n\t * Format and output a log entry\n\t */\n\tprivate log(\n\t\tlevel: LogLevel,\n\t\tmessage: string,\n\t\tcontext?: LogContext,\n\t\terror?: Error,\n\t): void {\n\t\tif (!this.shouldLog(level)) return;\n\n\t\tconst entry: LogEntry = {\n\t\t\tlevel,\n\t\t\tmessage,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tcontext,\n\t\t\terror: error\n\t\t\t\t? {\n\t\t\t\t\t\tname: error.name,\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\tstack: error.stack,\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t};\n\n\t\tif (this.config.output) {\n\t\t\tthis.config.output(entry);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.config.jsonFormat) {\n\t\t\tthis.outputJson(entry);\n\t\t} else {\n\t\t\tthis.outputPretty(entry);\n\t\t}\n\t}\n\n\t/**\n\t * Output as JSON (for log aggregation systems)\n\t */\n\tprivate outputJson(entry: LogEntry): void {\n\t\tconsole.error(JSON.stringify(entry));\n\t}\n\n\t/**\n\t * Output as human-readable format\n\t */\n\tprivate outputPretty(entry: LogEntry): void {\n\t\tconst parts: string[] = [];\n\n\t\tif (this.config.timestamps) {\n\t\t\tparts.push(`[${entry.timestamp}]`);\n\t\t}\n\n\t\tparts.push(`[${entry.level.toUpperCase()}]`);\n\t\tparts.push(entry.message);\n\n\t\tif (entry.context && Object.keys(entry.context).length > 0) {\n\t\t\tparts.push(JSON.stringify(entry.context));\n\t\t}\n\n\t\tconsole.error(parts.join(\" \"));\n\n\t\tif (entry.error?.stack) {\n\t\t\tconsole.error(entry.error.stack);\n\t\t}\n\t}\n\n\t/**\n\t * Log debug message (verbose, typically for development)\n\t */\n\tdebug(message: string, context?: LogContext): void {\n\t\tthis.log(\"debug\", message, context);\n\t}\n\n\t/**\n\t * Log info message (general information)\n\t */\n\tinfo(message: string, context?: LogContext): void {\n\t\tthis.log(\"info\", message, context);\n\t}\n\n\t/**\n\t * Log warning message (potentially problematic situations)\n\t */\n\twarn(message: string, context?: LogContext): void {\n\t\tthis.log(\"warn\", message, context);\n\t}\n\n\t/**\n\t * Log error message (failures and exceptions)\n\t */\n\terror(message: string, error?: Error, context?: LogContext): void {\n\t\tthis.log(\"error\", message, context, error);\n\t}\n\n\t/**\n\t * Create a child logger with additional context\n\t */\n\tchild(additionalContext: LogContext): Logger {\n\t\treturn new ContextualLogger(this, additionalContext);\n\t}\n\n\t/**\n\t * Update logger configuration\n\t */\n\tconfigure(config: Partial<LoggerConfig>): void {\n\t\tthis.config = { ...this.config, ...config };\n\t}\n}\n\n/**\n * Logger that automatically includes context in all log calls\n */\nclass ContextualLogger extends Logger {\n\tconstructor(\n\t\tprivate parent: Logger,\n\t\tprivate contextData: LogContext,\n\t) {\n\t\tsuper();\n\t}\n\n\tprivate mergeContext(context?: LogContext): LogContext {\n\t\treturn { ...this.contextData, ...context };\n\t}\n\n\toverride debug(message: string, context?: LogContext): void {\n\t\tthis.parent.debug(message, this.mergeContext(context));\n\t}\n\n\toverride info(message: string, context?: LogContext): void {\n\t\tthis.parent.info(message, this.mergeContext(context));\n\t}\n\n\toverride warn(message: string, context?: LogContext): void {\n\t\tthis.parent.warn(message, this.mergeContext(context));\n\t}\n\n\toverride error(message: string, error?: Error, context?: LogContext): void {\n\t\tthis.parent.error(message, error, this.mergeContext(context));\n\t}\n}\n\n/**\n * Global logger instance\n */\nexport const logger = new Logger();\n\n/**\n * Create a logger for a specific module/component\n */\nexport function createLogger(moduleName: string): Logger {\n\treturn logger.child({ module: moduleName });\n}\n\n/**\n * Silence the logger (useful for TUI mode where stdout must not be polluted)\n */\nexport function silenceLogger(): void {\n\tlogger.configure({ output: () => {} });\n}\n\n/**\n * Redirect all logs to a file (useful for TUI mode)\n * @param filePath - Path to the log file (defaults to ~/.maestro/logs/maestro.log)\n */\nexport function redirectLoggerToFile(filePath?: string): void {\n\tconst logFile = filePath ?? join(PATHS.MAESTRO_HOME, \"logs\", \"maestro.log\");\n\n\t// Ensure directory exists\n\ttry {\n\t\tmkdirSync(dirname(logFile), { recursive: true });\n\t} catch {\n\t\t// Directory may already exist\n\t}\n\n\tlogger.configure({\n\t\toutput: (entry) => {\n\t\t\tconst parts: string[] = [];\n\t\t\tparts.push(`[${entry.timestamp}]`);\n\t\t\tparts.push(`[${entry.level.toUpperCase()}]`);\n\t\t\tparts.push(entry.message);\n\n\t\t\tif (entry.context && Object.keys(entry.context).length > 0) {\n\t\t\t\tparts.push(JSON.stringify(entry.context));\n\t\t\t}\n\n\t\t\tlet line = `${parts.join(\" \")}\\n`;\n\n\t\t\tif (entry.error?.stack) {\n\t\t\t\tline += `${entry.error.stack}\\n`;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tappendFileSync(logFile, line);\n\t\t\t} catch {\n\t\t\t\t// Silently fail if we can't write to the log file\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Redirect global console methods to the structured logger.\n *\n * Important: Call this only after redirectLoggerToFile() (or a custom logger\n * output) has been configured; otherwise console.* would route back to the\n * console-backed logger output and recurse.\n */\nexport function redirectConsoleToLogger(options?: {\n\tpreserveErrorStderr?: boolean;\n}): void {\n\tconsole.log = (...args: unknown[]) => {\n\t\tlogger.info(args.map(String).join(\" \"));\n\t};\n\tconsole.info = (...args: unknown[]) => {\n\t\tlogger.info(args.map(String).join(\" \"));\n\t};\n\tconsole.warn = (...args: unknown[]) => {\n\t\tlogger.warn(args.map(String).join(\" \"));\n\t};\n\tconsole.error = (...args: unknown[]) => {\n\t\tif (options?.preserveErrorStderr) {\n\t\t\toriginalConsole.error(...args);\n\t\t\treturn;\n\t\t}\n\t\t// Preserve first Error stack if present\n\t\tconst maybeError = args.find((a) => a instanceof Error) as\n\t\t\t| Error\n\t\t\t| undefined;\n\t\tif (maybeError) {\n\t\t\tlogger.error(maybeError.message, maybeError);\n\t\t} else {\n\t\t\tlogger.error(args.map(String).join(\" \"));\n\t\t}\n\t};\n\tconsole.debug = (...args: unknown[]) => {\n\t\tlogger.debug(args.map(String).join(\" \"));\n\t};\n}\n\n/**\n * Redirect process.stderr writes to the structured logger.\n * Useful in TUI mode to prevent third-party libraries from corrupting the terminal.\n */\nexport function redirectStderrToLogger(): void {\n\tprocess.stderr.write = (chunk: unknown) => {\n\t\tconst text =\n\t\t\ttypeof chunk === \"string\"\n\t\t\t\t? chunk\n\t\t\t\t: chunk instanceof Buffer\n\t\t\t\t\t? chunk.toString()\n\t\t\t\t\t: String(chunk);\n\t\tlogger.error(text.trimEnd());\n\t\treturn true;\n\t};\n}\n\n/**\n * Wire process warning / rejection hooks into the logger so they don't hit stderr.\n */\nexport function pipeProcessEventsToLogger(): void {\n\tprocess.on(\"warning\", (warning) => {\n\t\tlogger.warn(\n\t\t\t`${warning.name}: ${warning.message}${\n\t\t\t\twarning.stack ? `\\n${warning.stack}` : \"\"\n\t\t\t}`,\n\t\t);\n\t});\n\n\tprocess.on(\"unhandledRejection\", (reason, promise) => {\n\t\tlogger.error(\n\t\t\t`UnhandledRejection: ${String(reason)} (promise: ${String(promise)})`,\n\t\t);\n\t});\n\n\tprocess.on(\"uncaughtException\", (error) => {\n\t\tif (error instanceof Error) {\n\t\t\tlogger.error(error.message, error);\n\t\t} else {\n\t\t\tlogger.error(`UncaughtException: ${String(error)}`);\n\t\t}\n\t});\n}\n"]}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Structured logging service for Composer CLI.\n * Replaces scattered console.log/error calls with centralized, level-based logging.\n */\n\nimport { appendFileSync, mkdirSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { PATHS } from \"../config/constants.js\";\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport interface LogContext {\n\t[key: string]: unknown;\n}\n\ninterface LogEntry {\n\tlevel: LogLevel;\n\tmessage: string;\n\ttimestamp: string;\n\tcontext?: LogContext;\n\terror?: {\n\t\tname: string;\n\t\tmessage: string;\n\t\tstack?: string;\n\t};\n}\n\n/**\n * Logger configuration\n */\ninterface LoggerConfig {\n\t/** Minimum log level to output (debug < info < warn < error) */\n\tminLevel: LogLevel;\n\t/** Whether to output JSON format (useful for log aggregation) */\n\tjsonFormat: boolean;\n\t/** Whether to route debug/info logs to stdout while preserving warnings/errors on stderr */\n\tsplitStreams: boolean;\n\t/** Whether to include timestamps */\n\ttimestamps: boolean;\n\t/** Custom output function (defaults to stderr) */\n\toutput?: (entry: LogEntry) => void;\n}\n\nconst originalConsole = {\n\tlog: console.log.bind(console),\n\tinfo: console.info.bind(console),\n\twarn: console.warn.bind(console),\n\terror: console.error.bind(console),\n\tdebug: console.debug.bind(console),\n};\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n\tdebug: 0,\n\tinfo: 1,\n\twarn: 2,\n\terror: 3,\n};\n\nconst LOG_SEVERITIES: Record<LogLevel, string> = {\n\tdebug: \"DEBUG\",\n\tinfo: \"INFO\",\n\twarn: \"WARNING\",\n\terror: \"ERROR\",\n};\n\nclass Logger {\n\tprivate config: LoggerConfig;\n\n\tconstructor(config?: Partial<LoggerConfig>) {\n\t\tthis.config = {\n\t\t\tminLevel: (process.env.MAESTRO_LOG_LEVEL as LogLevel) ?? \"info\",\n\t\t\tjsonFormat: process.env.MAESTRO_LOG_JSON === \"1\",\n\t\t\tsplitStreams: process.env.MAESTRO_LOG_SPLIT_STREAMS === \"1\",\n\t\t\ttimestamps: true,\n\t\t\t...config,\n\t\t};\n\t}\n\n\t/**\n\t * Check if a log level should be output\n\t */\n\tprivate shouldLog(level: LogLevel): boolean {\n\t\treturn LOG_LEVELS[level] >= LOG_LEVELS[this.config.minLevel];\n\t}\n\n\t/**\n\t * Format and output a log entry\n\t */\n\tprivate log(\n\t\tlevel: LogLevel,\n\t\tmessage: string,\n\t\tcontext?: LogContext,\n\t\terror?: Error,\n\t): void {\n\t\tif (!this.shouldLog(level)) return;\n\n\t\tconst entry: LogEntry = {\n\t\t\tlevel,\n\t\t\tmessage,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tcontext,\n\t\t\terror: error\n\t\t\t\t? {\n\t\t\t\t\t\tname: error.name,\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\tstack: error.stack,\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t};\n\n\t\tif (this.config.output) {\n\t\t\tthis.config.output(entry);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.config.jsonFormat) {\n\t\t\tthis.outputJson(entry);\n\t\t} else {\n\t\t\tthis.outputPretty(entry);\n\t\t}\n\t}\n\n\t/**\n\t * Output as JSON (for log aggregation systems)\n\t */\n\tprivate outputJson(entry: LogEntry): void {\n\t\tthis.writeLine(\n\t\t\tentry,\n\t\t\tJSON.stringify({ ...entry, severity: LOG_SEVERITIES[entry.level] }),\n\t\t);\n\t}\n\n\t/**\n\t * Output as human-readable format\n\t */\n\tprivate outputPretty(entry: LogEntry): void {\n\t\tconst parts: string[] = [];\n\n\t\tif (this.config.timestamps) {\n\t\t\tparts.push(`[${entry.timestamp}]`);\n\t\t}\n\n\t\tparts.push(`[${entry.level.toUpperCase()}]`);\n\t\tparts.push(entry.message);\n\n\t\tif (entry.context && Object.keys(entry.context).length > 0) {\n\t\t\tparts.push(JSON.stringify(entry.context));\n\t\t}\n\n\t\tthis.writeLine(entry, parts.join(\" \"));\n\n\t\tif (entry.error?.stack) {\n\t\t\tthis.writeLine(entry, entry.error.stack);\n\t\t}\n\t}\n\n\tprivate writeLine(entry: Pick<LogEntry, \"level\">, line: string): void {\n\t\tconst writeToStdout =\n\t\t\tthis.config.splitStreams && LOG_LEVELS[entry.level] < LOG_LEVELS.warn;\n\t\t(writeToStdout ? console.log : console.error)(line);\n\t}\n\n\t/**\n\t * Log debug message (verbose, typically for development)\n\t */\n\tdebug(message: string, context?: LogContext): void {\n\t\tthis.log(\"debug\", message, context);\n\t}\n\n\t/**\n\t * Log info message (general information)\n\t */\n\tinfo(message: string, context?: LogContext): void {\n\t\tthis.log(\"info\", message, context);\n\t}\n\n\t/**\n\t * Log warning message (potentially problematic situations)\n\t */\n\twarn(message: string, context?: LogContext): void {\n\t\tthis.log(\"warn\", message, context);\n\t}\n\n\t/**\n\t * Log error message (failures and exceptions)\n\t */\n\terror(message: string, error?: Error, context?: LogContext): void {\n\t\tthis.log(\"error\", message, context, error);\n\t}\n\n\t/**\n\t * Create a child logger with additional context\n\t */\n\tchild(additionalContext: LogContext): Logger {\n\t\treturn new ContextualLogger(this, additionalContext);\n\t}\n\n\t/**\n\t * Update logger configuration\n\t */\n\tconfigure(config: Partial<LoggerConfig>): void {\n\t\tthis.config = { ...this.config, ...config };\n\t}\n}\n\n/**\n * Logger that automatically includes context in all log calls\n */\nclass ContextualLogger extends Logger {\n\tconstructor(\n\t\tprivate parent: Logger,\n\t\tprivate contextData: LogContext,\n\t) {\n\t\tsuper();\n\t}\n\n\tprivate mergeContext(context?: LogContext): LogContext {\n\t\treturn { ...this.contextData, ...context };\n\t}\n\n\toverride debug(message: string, context?: LogContext): void {\n\t\tthis.parent.debug(message, this.mergeContext(context));\n\t}\n\n\toverride info(message: string, context?: LogContext): void {\n\t\tthis.parent.info(message, this.mergeContext(context));\n\t}\n\n\toverride warn(message: string, context?: LogContext): void {\n\t\tthis.parent.warn(message, this.mergeContext(context));\n\t}\n\n\toverride error(message: string, error?: Error, context?: LogContext): void {\n\t\tthis.parent.error(message, error, this.mergeContext(context));\n\t}\n}\n\n/**\n * Global logger instance\n */\nexport const logger = new Logger();\n\n/**\n * Create a logger for a specific module/component\n */\nexport function createLogger(moduleName: string): Logger {\n\treturn logger.child({ module: moduleName });\n}\n\n/**\n * Silence the logger (useful for TUI mode where stdout must not be polluted)\n */\nexport function silenceLogger(): void {\n\tlogger.configure({ output: () => {} });\n}\n\n/**\n * Redirect all logs to a file (useful for TUI mode)\n * @param filePath - Path to the log file (defaults to ~/.maestro/logs/maestro.log)\n */\nexport function redirectLoggerToFile(filePath?: string): void {\n\tconst logFile = filePath ?? join(PATHS.MAESTRO_HOME, \"logs\", \"maestro.log\");\n\n\t// Ensure directory exists\n\ttry {\n\t\tmkdirSync(dirname(logFile), { recursive: true });\n\t} catch {\n\t\t// Directory may already exist\n\t}\n\n\tlogger.configure({\n\t\toutput: (entry) => {\n\t\t\tconst parts: string[] = [];\n\t\t\tparts.push(`[${entry.timestamp}]`);\n\t\t\tparts.push(`[${entry.level.toUpperCase()}]`);\n\t\t\tparts.push(entry.message);\n\n\t\t\tif (entry.context && Object.keys(entry.context).length > 0) {\n\t\t\t\tparts.push(JSON.stringify(entry.context));\n\t\t\t}\n\n\t\t\tlet line = `${parts.join(\" \")}\\n`;\n\n\t\t\tif (entry.error?.stack) {\n\t\t\t\tline += `${entry.error.stack}\\n`;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tappendFileSync(logFile, line);\n\t\t\t} catch {\n\t\t\t\t// Silently fail if we can't write to the log file\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Redirect global console methods to the structured logger.\n *\n * Important: Call this only after redirectLoggerToFile() (or a custom logger\n * output) has been configured; otherwise console.* would route back to the\n * console-backed logger output and recurse.\n */\nexport function redirectConsoleToLogger(options?: {\n\tpreserveErrorStderr?: boolean;\n}): void {\n\tconsole.log = (...args: unknown[]) => {\n\t\tlogger.info(args.map(String).join(\" \"));\n\t};\n\tconsole.info = (...args: unknown[]) => {\n\t\tlogger.info(args.map(String).join(\" \"));\n\t};\n\tconsole.warn = (...args: unknown[]) => {\n\t\tlogger.warn(args.map(String).join(\" \"));\n\t};\n\tconsole.error = (...args: unknown[]) => {\n\t\tif (options?.preserveErrorStderr) {\n\t\t\toriginalConsole.error(...args);\n\t\t\treturn;\n\t\t}\n\t\t// Preserve first Error stack if present\n\t\tconst maybeError = args.find((a) => a instanceof Error) as\n\t\t\t| Error\n\t\t\t| undefined;\n\t\tif (maybeError) {\n\t\t\tlogger.error(maybeError.message, maybeError);\n\t\t} else {\n\t\t\tlogger.error(args.map(String).join(\" \"));\n\t\t}\n\t};\n\tconsole.debug = (...args: unknown[]) => {\n\t\tlogger.debug(args.map(String).join(\" \"));\n\t};\n}\n\n/**\n * Redirect process.stderr writes to the structured logger.\n * Useful in TUI mode to prevent third-party libraries from corrupting the terminal.\n */\nexport function redirectStderrToLogger(): void {\n\tprocess.stderr.write = (chunk: unknown) => {\n\t\tconst text =\n\t\t\ttypeof chunk === \"string\"\n\t\t\t\t? chunk\n\t\t\t\t: chunk instanceof Buffer\n\t\t\t\t\t? chunk.toString()\n\t\t\t\t\t: String(chunk);\n\t\tlogger.error(text.trimEnd());\n\t\treturn true;\n\t};\n}\n\n/**\n * Wire process warning / rejection hooks into the logger so they don't hit stderr.\n */\nexport function pipeProcessEventsToLogger(): void {\n\tprocess.on(\"warning\", (warning) => {\n\t\tlogger.warn(\n\t\t\t`${warning.name}: ${warning.message}${\n\t\t\t\twarning.stack ? `\\n${warning.stack}` : \"\"\n\t\t\t}`,\n\t\t);\n\t});\n\n\tprocess.on(\"unhandledRejection\", (reason, promise) => {\n\t\tlogger.error(\n\t\t\t`UnhandledRejection: ${String(reason)} (promise: ${String(promise)})`,\n\t\t);\n\t});\n\n\tprocess.on(\"uncaughtException\", (error) => {\n\t\tif (error instanceof Error) {\n\t\t\tlogger.error(error.message, error);\n\t\t} else {\n\t\t\tlogger.error(`UncaughtException: ${String(error)}`);\n\t\t}\n\t});\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-containment.d.ts","sourceRoot":"","sources":["../../src/utils/path-containment.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAWnE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { isAbsolute, relative, resolve } from "node:path";
|
|
2
|
+
export function isPathWithin(child, parent) {
|
|
3
|
+
const normalizedChild = resolve(child);
|
|
4
|
+
const normalizedParent = resolve(parent);
|
|
5
|
+
if (normalizedChild === normalizedParent) {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
if (normalizedParent === "/") {
|
|
9
|
+
return normalizedChild.startsWith("/");
|
|
10
|
+
}
|
|
11
|
+
const rel = relative(normalizedParent, normalizedChild);
|
|
12
|
+
return rel !== "" && !rel.startsWith("..") && !isAbsolute(rel);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=path-containment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-containment.js","sourceRoot":"","sources":["../../src/utils/path-containment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1D,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,MAAc;IACzD,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,eAAe,KAAK,gBAAgB,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,gBAAgB,KAAK,GAAG,EAAE,CAAC;QAC9B,OAAO,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,GAAG,GAAG,QAAQ,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;IACxD,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAChE,CAAC","sourcesContent":["import { isAbsolute, relative, resolve } from \"node:path\";\n\nexport function isPathWithin(child: string, parent: string): boolean {\n\tconst normalizedChild = resolve(child);\n\tconst normalizedParent = resolve(parent);\n\tif (normalizedChild === normalizedParent) {\n\t\treturn true;\n\t}\n\tif (normalizedParent === \"/\") {\n\t\treturn normalizedChild.startsWith(\"/\");\n\t}\n\tconst rel = relative(normalizedParent, normalizedChild);\n\treturn rel !== \"\" && !rel.startsWith(\"..\") && !isAbsolute(rel);\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const DEFAULT_PROMPT_SAFE_TEXT_MAX_LENGTH = 1024;
|
|
2
|
+
/**
|
|
3
|
+
* Normalize externally-authored metadata before including it in prompts or
|
|
4
|
+
* model-facing tool output.
|
|
5
|
+
*/
|
|
6
|
+
export declare function promptSafeText(value: string | null | undefined, maxLength?: number): string | null;
|
|
7
|
+
//# sourceMappingURL=prompt-safe-text.d.ts.map
|