@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
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { constants, accessSync, existsSync, readFileSync, readdirSync, statSync, } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { isWindowsRunnableToolboxEntry } from "./linter.js";
|
|
4
|
+
const MAX_MCP_JSON_BYTES = 1024 * 1024;
|
|
5
|
+
function isRecord(value) {
|
|
6
|
+
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
7
|
+
}
|
|
8
|
+
function isDirectory(path) {
|
|
9
|
+
if (!path || !existsSync(path)) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
return statSync(path).isDirectory();
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function isFile(path) {
|
|
20
|
+
if (!path || !existsSync(path)) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
return statSync(path).isFile();
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function nonEmptyString(value) {
|
|
31
|
+
return typeof value === "string" && value.trim().length > 0
|
|
32
|
+
? value.trim()
|
|
33
|
+
: undefined;
|
|
34
|
+
}
|
|
35
|
+
function nonEmptyStringList(value) {
|
|
36
|
+
if (!Array.isArray(value)) {
|
|
37
|
+
return { status: "missing", values: [] };
|
|
38
|
+
}
|
|
39
|
+
const values = [];
|
|
40
|
+
for (const entry of value) {
|
|
41
|
+
const normalized = nonEmptyString(entry);
|
|
42
|
+
if (!normalized) {
|
|
43
|
+
return { status: "invalid", values: [] };
|
|
44
|
+
}
|
|
45
|
+
values.push(normalized);
|
|
46
|
+
}
|
|
47
|
+
return { status: "valid", values };
|
|
48
|
+
}
|
|
49
|
+
function isRunnableFile(path, platform = process.platform) {
|
|
50
|
+
if (!isFile(path)) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
if (platform === "win32") {
|
|
54
|
+
return isWindowsRunnableToolboxEntry(path);
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
accessSync(path, constants.X_OK);
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function errorMessage(error) {
|
|
65
|
+
return error instanceof Error ? error.message : String(error);
|
|
66
|
+
}
|
|
67
|
+
function buildResourceDirectories(skill) {
|
|
68
|
+
return {
|
|
69
|
+
...(skill.resourceDirs.scriptsDir
|
|
70
|
+
? { scripts: skill.resourceDirs.scriptsDir }
|
|
71
|
+
: {}),
|
|
72
|
+
...(skill.resourceDirs.referenceDir
|
|
73
|
+
? { reference: skill.resourceDirs.referenceDir }
|
|
74
|
+
: {}),
|
|
75
|
+
...(skill.resourceDirs.referencesDir
|
|
76
|
+
? { references: skill.resourceDirs.referencesDir }
|
|
77
|
+
: {}),
|
|
78
|
+
...(skill.resourceDirs.assetsDir
|
|
79
|
+
? { assets: skill.resourceDirs.assetsDir }
|
|
80
|
+
: {}),
|
|
81
|
+
...(skill.resourceDirs.toolboxDir
|
|
82
|
+
? { toolbox: skill.resourceDirs.toolboxDir }
|
|
83
|
+
: {}),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function buildToolboxActivation(toolboxDir, options = {}) {
|
|
87
|
+
if (!isDirectory(toolboxDir)) {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
let directoryEntries;
|
|
91
|
+
try {
|
|
92
|
+
directoryEntries = readdirSync(toolboxDir);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
return {
|
|
96
|
+
directory: toolboxDir,
|
|
97
|
+
entries: [],
|
|
98
|
+
warnings: [`toolbox directory could not be read: ${errorMessage(error)}`],
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const entries = directoryEntries
|
|
102
|
+
.filter((entry) => !entry.startsWith(".") && entry.toLowerCase() !== "readme.md")
|
|
103
|
+
.map((entry) => ({ name: entry, path: join(toolboxDir, entry) }))
|
|
104
|
+
.filter((entry) => isRunnableFile(entry.path, options.platform ?? process.platform))
|
|
105
|
+
.sort((left, right) => left.name.localeCompare(right.name));
|
|
106
|
+
return {
|
|
107
|
+
directory: toolboxDir,
|
|
108
|
+
entries,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function buildMcpActivation(mcpJsonPath) {
|
|
112
|
+
if (!isFile(mcpJsonPath)) {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
const warnings = [];
|
|
116
|
+
let stats;
|
|
117
|
+
try {
|
|
118
|
+
stats = statSync(mcpJsonPath);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
warnings.push(`mcp.json could not be inspected: ${errorMessage(error)}`);
|
|
122
|
+
return { configPath: mcpJsonPath, servers: [], warnings };
|
|
123
|
+
}
|
|
124
|
+
if (stats.size > MAX_MCP_JSON_BYTES) {
|
|
125
|
+
warnings.push(`mcp.json is too large to load: ${stats.size} bytes exceeds ${MAX_MCP_JSON_BYTES} byte limit.`);
|
|
126
|
+
return { configPath: mcpJsonPath, servers: [], warnings };
|
|
127
|
+
}
|
|
128
|
+
let parsed;
|
|
129
|
+
try {
|
|
130
|
+
parsed = JSON.parse(readFileSync(mcpJsonPath, "utf8"));
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
warnings.push(`mcp.json could not be parsed: ${errorMessage(error)}`);
|
|
134
|
+
return { configPath: mcpJsonPath, servers: [], warnings };
|
|
135
|
+
}
|
|
136
|
+
if (!isRecord(parsed)) {
|
|
137
|
+
return {
|
|
138
|
+
configPath: mcpJsonPath,
|
|
139
|
+
servers: [],
|
|
140
|
+
warnings: ["mcp.json must be an object keyed by server name."],
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const servers = [];
|
|
144
|
+
for (const [name, server] of Object.entries(parsed).sort(([left], [right]) => left.localeCompare(right))) {
|
|
145
|
+
if (!isRecord(server)) {
|
|
146
|
+
warnings.push(`MCP server '${name}' must be an object.`);
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const command = nonEmptyString(server.command);
|
|
150
|
+
if (!command) {
|
|
151
|
+
warnings.push(`MCP server '${name}' requires a non-empty command.`);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
const includeTools = nonEmptyStringList(server.includeTools);
|
|
155
|
+
if (includeTools.status === "invalid") {
|
|
156
|
+
warnings.push(`MCP server '${name}' includeTools entries must be non-empty strings.`);
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
if (includeTools.status === "missing" || includeTools.values.length === 0) {
|
|
160
|
+
warnings.push(`MCP server '${name}' does not declare bounded includeTools.`);
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
if (server.args !== undefined &&
|
|
164
|
+
(!Array.isArray(server.args) ||
|
|
165
|
+
server.args.some((arg) => typeof arg !== "string"))) {
|
|
166
|
+
warnings.push(`MCP server '${name}' args entries must be strings.`);
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
if (server.env !== undefined &&
|
|
170
|
+
(!isRecord(server.env) ||
|
|
171
|
+
Object.values(server.env).some((value) => typeof value !== "string"))) {
|
|
172
|
+
warnings.push(`MCP server '${name}' env values must be strings.`);
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
servers.push({
|
|
176
|
+
name,
|
|
177
|
+
command,
|
|
178
|
+
includeTools: includeTools.values,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
configPath: mcpJsonPath,
|
|
183
|
+
servers,
|
|
184
|
+
...(warnings.length > 0 ? { warnings } : {}),
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Build the runtime-facing activation contract for a loaded skill.
|
|
189
|
+
*
|
|
190
|
+
* This intentionally exposes only scoped resource paths and MCP tool bounds. The
|
|
191
|
+
* raw MCP config remains on disk so runtimes can activate it without copying env
|
|
192
|
+
* values or credentials into agent-visible telemetry.
|
|
193
|
+
*/
|
|
194
|
+
export function buildSkillRuntimeActivation(skill, options = {}) {
|
|
195
|
+
const toolbox = buildToolboxActivation(skill.resourceDirs.toolboxDir, options);
|
|
196
|
+
const mcp = buildMcpActivation(skill.resourceDirs.mcpJsonPath);
|
|
197
|
+
return {
|
|
198
|
+
name: skill.name,
|
|
199
|
+
source: skill.sourceType,
|
|
200
|
+
...(skill.sourcePath ? { sourcePath: skill.sourcePath } : {}),
|
|
201
|
+
profile: {
|
|
202
|
+
...(skill.argumentHint ? { argumentHint: skill.argumentHint } : {}),
|
|
203
|
+
...(skill.compatibility ? { compatibility: skill.compatibility } : {}),
|
|
204
|
+
...(skill.isolatedContext !== undefined
|
|
205
|
+
? { isolatedContext: skill.isolatedContext }
|
|
206
|
+
: {}),
|
|
207
|
+
...(skill.mode ? { mode: skill.mode } : {}),
|
|
208
|
+
...(skill.model ? { model: skill.model } : {}),
|
|
209
|
+
},
|
|
210
|
+
tools: {
|
|
211
|
+
allowed: [...(skill.allowedTools ?? [])],
|
|
212
|
+
builtin: [...(skill.builtinTools ?? [])],
|
|
213
|
+
},
|
|
214
|
+
resources: {
|
|
215
|
+
files: skill.resources.map((resource) => ({
|
|
216
|
+
name: resource.name,
|
|
217
|
+
path: resource.path,
|
|
218
|
+
type: resource.type,
|
|
219
|
+
})),
|
|
220
|
+
directories: buildResourceDirectories(skill),
|
|
221
|
+
},
|
|
222
|
+
toolPackage: {
|
|
223
|
+
...(toolbox ? { toolbox } : {}),
|
|
224
|
+
...(mcp ? { mcp } : {}),
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=runtime-activation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-activation.js","sourceRoot":"","sources":["../../src/skills/runtime-activation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tconstants,\n\taccessSync,\n\texistsSync,\n\treadFileSync,\n\treaddirSync,\n\tstatSync,\n} from \"node:fs\";\nimport { join } from \"node:path\";\nimport { isWindowsRunnableToolboxEntry } from \"./linter.js\";\nimport type { LoadedSkill, SkillResource } from \"./loader.js\";\n\nconst MAX_MCP_JSON_BYTES = 1024 * 1024;\n\nexport interface SkillRuntimeActivation {\n\tname: string;\n\tsource: LoadedSkill[\"sourceType\"];\n\tsourcePath?: string;\n\tprofile: {\n\t\targumentHint?: string;\n\t\tcompatibility?: string;\n\t\tisolatedContext?: boolean;\n\t\tmode?: string;\n\t\tmodel?: string;\n\t};\n\ttools: {\n\t\tallowed: string[];\n\t\tbuiltin: string[];\n\t};\n\tresources: {\n\t\tfiles: SkillRuntimeResource[];\n\t\tdirectories: SkillRuntimeResourceDirectories;\n\t};\n\ttoolPackage: {\n\t\ttoolbox?: SkillRuntimeToolboxActivation;\n\t\tmcp?: SkillRuntimeMcpActivation;\n\t};\n}\n\nexport interface SkillRuntimeResource {\n\tname: string;\n\tpath: string;\n\ttype: SkillResource[\"type\"];\n}\n\nexport interface SkillRuntimeResourceDirectories {\n\tscripts?: string;\n\treference?: string;\n\treferences?: string;\n\tassets?: string;\n\ttoolbox?: string;\n}\n\nexport interface SkillRuntimeToolboxActivation {\n\tdirectory: string;\n\tentries: SkillRuntimeToolboxEntry[];\n\twarnings?: string[];\n}\n\nexport interface SkillRuntimeToolboxEntry {\n\tname: string;\n\tpath: string;\n}\n\nexport interface SkillRuntimeMcpActivation {\n\tconfigPath: string;\n\tservers: SkillRuntimeMcpServer[];\n\twarnings?: string[];\n}\n\nexport interface SkillRuntimeMcpServer {\n\tname: string;\n\tcommand: string;\n\tincludeTools: string[];\n}\n\nexport interface SkillRuntimeActivationOptions {\n\tplatform?: NodeJS.Platform;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction isDirectory(path: string | undefined): path is string {\n\tif (!path || !existsSync(path)) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn statSync(path).isDirectory();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction isFile(path: string | undefined): path is string {\n\tif (!path || !existsSync(path)) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn statSync(path).isFile();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim().length > 0\n\t\t? value.trim()\n\t\t: undefined;\n}\n\ntype StringListParseResult =\n\t| { status: \"valid\"; values: string[] }\n\t| { status: \"missing\"; values: [] }\n\t| { status: \"invalid\"; values: [] };\n\nfunction nonEmptyStringList(value: unknown): StringListParseResult {\n\tif (!Array.isArray(value)) {\n\t\treturn { status: \"missing\", values: [] };\n\t}\n\tconst values: string[] = [];\n\tfor (const entry of value) {\n\t\tconst normalized = nonEmptyString(entry);\n\t\tif (!normalized) {\n\t\t\treturn { status: \"invalid\", values: [] };\n\t\t}\n\t\tvalues.push(normalized);\n\t}\n\treturn { status: \"valid\", values };\n}\n\nfunction isRunnableFile(\n\tpath: string | undefined,\n\tplatform: NodeJS.Platform = process.platform,\n): path is string {\n\tif (!isFile(path)) {\n\t\treturn false;\n\t}\n\tif (platform === \"win32\") {\n\t\treturn isWindowsRunnableToolboxEntry(path);\n\t}\n\ttry {\n\t\taccessSync(path, constants.X_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction buildResourceDirectories(\n\tskill: LoadedSkill,\n): SkillRuntimeResourceDirectories {\n\treturn {\n\t\t...(skill.resourceDirs.scriptsDir\n\t\t\t? { scripts: skill.resourceDirs.scriptsDir }\n\t\t\t: {}),\n\t\t...(skill.resourceDirs.referenceDir\n\t\t\t? { reference: skill.resourceDirs.referenceDir }\n\t\t\t: {}),\n\t\t...(skill.resourceDirs.referencesDir\n\t\t\t? { references: skill.resourceDirs.referencesDir }\n\t\t\t: {}),\n\t\t...(skill.resourceDirs.assetsDir\n\t\t\t? { assets: skill.resourceDirs.assetsDir }\n\t\t\t: {}),\n\t\t...(skill.resourceDirs.toolboxDir\n\t\t\t? { toolbox: skill.resourceDirs.toolboxDir }\n\t\t\t: {}),\n\t};\n}\n\nfunction buildToolboxActivation(\n\ttoolboxDir: string | undefined,\n\toptions: SkillRuntimeActivationOptions = {},\n): SkillRuntimeToolboxActivation | undefined {\n\tif (!isDirectory(toolboxDir)) {\n\t\treturn undefined;\n\t}\n\tlet directoryEntries: string[];\n\ttry {\n\t\tdirectoryEntries = readdirSync(toolboxDir);\n\t} catch (error) {\n\t\treturn {\n\t\t\tdirectory: toolboxDir,\n\t\t\tentries: [],\n\t\t\twarnings: [`toolbox directory could not be read: ${errorMessage(error)}`],\n\t\t};\n\t}\n\tconst entries = directoryEntries\n\t\t.filter(\n\t\t\t(entry) => !entry.startsWith(\".\") && entry.toLowerCase() !== \"readme.md\",\n\t\t)\n\t\t.map((entry) => ({ name: entry, path: join(toolboxDir, entry) }))\n\t\t.filter((entry) =>\n\t\t\tisRunnableFile(entry.path, options.platform ?? process.platform),\n\t\t)\n\t\t.sort((left, right) => left.name.localeCompare(right.name));\n\n\treturn {\n\t\tdirectory: toolboxDir,\n\t\tentries,\n\t};\n}\n\nfunction buildMcpActivation(\n\tmcpJsonPath: string | undefined,\n): SkillRuntimeMcpActivation | undefined {\n\tif (!isFile(mcpJsonPath)) {\n\t\treturn undefined;\n\t}\n\n\tconst warnings: string[] = [];\n\tlet stats: ReturnType<typeof statSync>;\n\ttry {\n\t\tstats = statSync(mcpJsonPath);\n\t} catch (error) {\n\t\twarnings.push(`mcp.json could not be inspected: ${errorMessage(error)}`);\n\t\treturn { configPath: mcpJsonPath, servers: [], warnings };\n\t}\n\tif (stats.size > MAX_MCP_JSON_BYTES) {\n\t\twarnings.push(\n\t\t\t`mcp.json is too large to load: ${stats.size} bytes exceeds ${MAX_MCP_JSON_BYTES} byte limit.`,\n\t\t);\n\t\treturn { configPath: mcpJsonPath, servers: [], warnings };\n\t}\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(readFileSync(mcpJsonPath, \"utf8\"));\n\t} catch (error) {\n\t\twarnings.push(`mcp.json could not be parsed: ${errorMessage(error)}`);\n\t\treturn { configPath: mcpJsonPath, servers: [], warnings };\n\t}\n\n\tif (!isRecord(parsed)) {\n\t\treturn {\n\t\t\tconfigPath: mcpJsonPath,\n\t\t\tservers: [],\n\t\t\twarnings: [\"mcp.json must be an object keyed by server name.\"],\n\t\t};\n\t}\n\n\tconst servers: SkillRuntimeMcpServer[] = [];\n\tfor (const [name, server] of Object.entries(parsed).sort(([left], [right]) =>\n\t\tleft.localeCompare(right),\n\t)) {\n\t\tif (!isRecord(server)) {\n\t\t\twarnings.push(`MCP server '${name}' must be an object.`);\n\t\t\tcontinue;\n\t\t}\n\t\tconst command = nonEmptyString(server.command);\n\t\tif (!command) {\n\t\t\twarnings.push(`MCP server '${name}' requires a non-empty command.`);\n\t\t\tcontinue;\n\t\t}\n\t\tconst includeTools = nonEmptyStringList(server.includeTools);\n\t\tif (includeTools.status === \"invalid\") {\n\t\t\twarnings.push(\n\t\t\t\t`MCP server '${name}' includeTools entries must be non-empty strings.`,\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tif (includeTools.status === \"missing\" || includeTools.values.length === 0) {\n\t\t\twarnings.push(\n\t\t\t\t`MCP server '${name}' does not declare bounded includeTools.`,\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\tserver.args !== undefined &&\n\t\t\t(!Array.isArray(server.args) ||\n\t\t\t\tserver.args.some((arg) => typeof arg !== \"string\"))\n\t\t) {\n\t\t\twarnings.push(`MCP server '${name}' args entries must be strings.`);\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\tserver.env !== undefined &&\n\t\t\t(!isRecord(server.env) ||\n\t\t\t\tObject.values(server.env).some((value) => typeof value !== \"string\"))\n\t\t) {\n\t\t\twarnings.push(`MCP server '${name}' env values must be strings.`);\n\t\t\tcontinue;\n\t\t}\n\t\tservers.push({\n\t\t\tname,\n\t\t\tcommand,\n\t\t\tincludeTools: includeTools.values,\n\t\t});\n\t}\n\n\treturn {\n\t\tconfigPath: mcpJsonPath,\n\t\tservers,\n\t\t...(warnings.length > 0 ? { warnings } : {}),\n\t};\n}\n\n/**\n * Build the runtime-facing activation contract for a loaded skill.\n *\n * This intentionally exposes only scoped resource paths and MCP tool bounds. The\n * raw MCP config remains on disk so runtimes can activate it without copying env\n * values or credentials into agent-visible telemetry.\n */\nexport function buildSkillRuntimeActivation(\n\tskill: LoadedSkill,\n\toptions: SkillRuntimeActivationOptions = {},\n): SkillRuntimeActivation {\n\tconst toolbox = buildToolboxActivation(\n\t\tskill.resourceDirs.toolboxDir,\n\t\toptions,\n\t);\n\tconst mcp = buildMcpActivation(skill.resourceDirs.mcpJsonPath);\n\n\treturn {\n\t\tname: skill.name,\n\t\tsource: skill.sourceType,\n\t\t...(skill.sourcePath ? { sourcePath: skill.sourcePath } : {}),\n\t\tprofile: {\n\t\t\t...(skill.argumentHint ? { argumentHint: skill.argumentHint } : {}),\n\t\t\t...(skill.compatibility ? { compatibility: skill.compatibility } : {}),\n\t\t\t...(skill.isolatedContext !== undefined\n\t\t\t\t? { isolatedContext: skill.isolatedContext }\n\t\t\t\t: {}),\n\t\t\t...(skill.mode ? { mode: skill.mode } : {}),\n\t\t\t...(skill.model ? { model: skill.model } : {}),\n\t\t},\n\t\ttools: {\n\t\t\tallowed: [...(skill.allowedTools ?? [])],\n\t\t\tbuiltin: [...(skill.builtinTools ?? [])],\n\t\t},\n\t\tresources: {\n\t\t\tfiles: skill.resources.map((resource) => ({\n\t\t\t\tname: resource.name,\n\t\t\t\tpath: resource.path,\n\t\t\t\ttype: resource.type,\n\t\t\t})),\n\t\t\tdirectories: buildResourceDirectories(skill),\n\t\t},\n\t\ttoolPackage: {\n\t\t\t...(toolbox ? { toolbox } : {}),\n\t\t\t...(mcp ? { mcp } : {}),\n\t\t},\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-client.d.ts","sourceRoot":"","sources":["../../src/skills/service-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service-client.d.ts","sourceRoot":"","sources":["../../src/skills/service-client.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,KAAK,qBAAqB,IAAI,yBAAyB,EAEvD,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS/C,eAAO,MAAM,yBAAyB;;;;;CAK5B,CAAC;AAIX,MAAM,WAAW,mBAAmB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,WAAW,EAAE,yBAAyB,CAAC;CACvC;AA4ED,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,mBAAmB,GAAG,KAAK,GAAG,SAAS,GAC7C,2BAA2B,GAAG,IAAI,CAkGpC;AAmHD,wBAAsB,qBAAqB,CAC1C,MAAM,EAAE,2BAA2B,EACnC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAChC,OAAO,CAAC,WAAW,EAAE,CAAC,CAyCxB;AAED,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { EVALOPS_ACCESS_TOKEN_ENV_VARS, EVALOPS_ORGANIZATION_ID_ENV_VARS, } from "../evalops/env-aliases.js";
|
|
1
2
|
import { loadOAuthCredentials } from "../oauth/storage.js";
|
|
2
3
|
import { fetchDownstream, } from "../utils/downstream-http.js";
|
|
3
4
|
import * as downstream from "../utils/downstream.js";
|
|
@@ -45,9 +46,7 @@ function resolveWorkspaceId(config) {
|
|
|
45
46
|
const envWorkspaceId = getEnvValue([
|
|
46
47
|
"SKILLS_SERVICE_WORKSPACE_ID",
|
|
47
48
|
"MAESTRO_SKILLS_WORKSPACE_ID",
|
|
48
|
-
|
|
49
|
-
"EVALOPS_ORGANIZATION_ID",
|
|
50
|
-
"MAESTRO_ENTERPRISE_ORG_ID",
|
|
49
|
+
...EVALOPS_ORGANIZATION_ID_ENV_VARS,
|
|
51
50
|
]);
|
|
52
51
|
if (configuredWorkspaceId ?? envWorkspaceId) {
|
|
53
52
|
return configuredWorkspaceId ?? envWorkspaceId;
|
|
@@ -81,7 +80,7 @@ export function resolveSkillsServiceConfig(config) {
|
|
|
81
80
|
getEnvValue([
|
|
82
81
|
"SKILLS_SERVICE_TOKEN",
|
|
83
82
|
"MAESTRO_SKILLS_SERVICE_TOKEN",
|
|
84
|
-
|
|
83
|
+
...EVALOPS_ACCESS_TOKEN_ENV_VARS,
|
|
85
84
|
]) ??
|
|
86
85
|
storedToken;
|
|
87
86
|
const required = config?.required ??
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-client.js","sourceRoot":"","sources":["../../src/skills/service-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { loadOAuthCredentials } from \"../oauth/storage.js\";\nimport {\n\ttype DownstreamFailureMode as DownstreamHttpFailureMode,\n\tfetchDownstream,\n} from \"../utils/downstream-http.js\";\nimport * as downstream from \"../utils/downstream.js\";\nimport type { LoadedSkill } from \"./loader.js\";\n\nconst CONNECT_PROTOCOL_VERSION = \"1\";\nconst DEFAULT_LIMIT = 100;\nconst DEFAULT_MAX_ATTEMPTS = 2;\nconst DEFAULT_SURFACE = \"maestro\";\nconst DEFAULT_TIMEOUT_MS = 2_000;\nconst LIST_SKILLS_PATH = \"/skills.v1.SkillService/List\";\n\nexport const SKILLS_CALL_FAILURE_MODES = {\n\tlistSkills: {\n\t\toptional: downstream.FailOpen,\n\t\trequired: downstream.FailClosed,\n\t},\n} as const;\n\ntype SkillsCall = keyof typeof SKILLS_CALL_FAILURE_MODES;\n\nexport interface SkillsServiceConfig {\n\tbaseUrl?: string;\n\ttoken?: string;\n\tworkspaceId?: string;\n\tsurface?: string;\n\tentityId?: string;\n\tlimit?: number;\n\ttimeoutMs?: number;\n\tmaxAttempts?: number;\n\tcircuitFailureThreshold?: number;\n\tcircuitResetTimeoutMs?: number;\n\tcircuitSuccessThreshold?: number;\n\trequired?: boolean;\n}\n\nexport interface ResolvedSkillsServiceConfig {\n\tbaseUrl: string;\n\ttoken?: string;\n\tworkspaceId: string;\n\tsurface: string;\n\tentityId?: string;\n\tlimit: number;\n\ttimeoutMs: number;\n\tmaxAttempts: number;\n\tcircuitFailureThreshold: number;\n\tcircuitResetTimeoutMs: number;\n\tcircuitSuccessThreshold: number;\n\tfailureMode: DownstreamHttpFailureMode;\n}\n\ninterface SkillsServiceSkill {\n\tid?: string;\n\tworkspaceId?: string;\n\townerId?: string;\n\tname?: string;\n\tdescription?: string;\n\tscope?: string | number;\n\tcontent?: string;\n\tcurrentVersion?: number;\n\ttags?: string[];\n}\n\ninterface ListSkillsResponse {\n\tskills?: SkillsServiceSkill[];\n\ttotal?: number;\n}\n\nconst downstreamClients = new Map<string, downstream.DownstreamClient>();\n\nfunction trimString(value: string | undefined): string | undefined {\n\tconst trimmed = value?.trim();\n\treturn trimmed ? trimmed : undefined;\n}\n\nfunction getEnvValue(names: string[]): string | undefined {\n\tfor (const name of names) {\n\t\tconst value = trimString(process.env[name]);\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction parsePositiveInt(value: string | undefined, fallback: number): number {\n\tconst parsed = Number.parseInt(value ?? \"\", 10);\n\treturn Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;\n}\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n\tlet normalized = baseUrl.trim();\n\tfor (const suffix of [LIST_SKILLS_PATH, \"/skills.v1.SkillService\"]) {\n\t\tif (normalized.endsWith(suffix)) {\n\t\t\tnormalized = normalized.slice(0, -suffix.length);\n\t\t}\n\t}\n\treturn normalized.replace(/\\/+$/, \"\");\n}\n\nfunction resolveWorkspaceId(\n\tconfig: SkillsServiceConfig | undefined,\n): string | undefined {\n\tconst configuredWorkspaceId = trimString(config?.workspaceId);\n\tconst envWorkspaceId = getEnvValue([\n\t\t\"SKILLS_SERVICE_WORKSPACE_ID\",\n\t\t\"MAESTRO_SKILLS_WORKSPACE_ID\",\n\t\t\"MAESTRO_EVALOPS_ORG_ID\",\n\t\t\"EVALOPS_ORGANIZATION_ID\",\n\t\t\"MAESTRO_ENTERPRISE_ORG_ID\",\n\t]);\n\tif (configuredWorkspaceId ?? envWorkspaceId) {\n\t\treturn configuredWorkspaceId ?? envWorkspaceId;\n\t}\n\tconst stored = loadOAuthCredentials(\"evalops\")?.metadata?.organizationId;\n\treturn typeof stored === \"string\" && stored.trim().length > 0\n\t\t? stored.trim()\n\t\t: undefined;\n}\n\nfunction normalizeLimit(value: number | undefined): number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) {\n\t\treturn DEFAULT_LIMIT;\n\t}\n\treturn Math.max(1, Math.min(500, Math.trunc(value)));\n}\n\nexport function resolveSkillsServiceConfig(\n\tconfig: SkillsServiceConfig | false | undefined,\n): ResolvedSkillsServiceConfig | null {\n\tif (config === false) {\n\t\treturn null;\n\t}\n\n\tconst baseUrl =\n\t\ttrimString(config?.baseUrl) ??\n\t\tgetEnvValue([\"SKILLS_SERVICE_URL\", \"MAESTRO_SKILLS_SERVICE_URL\"]);\n\tif (!baseUrl) {\n\t\treturn null;\n\t}\n\n\tconst workspaceId = resolveWorkspaceId(config);\n\tif (!workspaceId) {\n\t\treturn null;\n\t}\n\n\tconst storedToken = trimString(loadOAuthCredentials(\"evalops\")?.access);\n\tconst token =\n\t\ttrimString(config?.token) ??\n\t\tgetEnvValue([\n\t\t\t\"SKILLS_SERVICE_TOKEN\",\n\t\t\t\"MAESTRO_SKILLS_SERVICE_TOKEN\",\n\t\t\t\"MAESTRO_EVALOPS_ACCESS_TOKEN\",\n\t\t]) ??\n\t\tstoredToken;\n\n\tconst required =\n\t\tconfig?.required ??\n\t\tgetEnvValue([\n\t\t\t\"SKILLS_SERVICE_REQUIRED\",\n\t\t\t\"MAESTRO_SKILLS_SERVICE_REQUIRED\",\n\t\t]) === \"1\";\n\n\treturn {\n\t\tbaseUrl: normalizeBaseUrl(baseUrl),\n\t\tcircuitFailureThreshold:\n\t\t\tconfig?.circuitFailureThreshold ??\n\t\t\tparsePositiveInt(\n\t\t\t\tgetEnvValue([\n\t\t\t\t\t\"SKILLS_SERVICE_CIRCUIT_FAILURE_THRESHOLD\",\n\t\t\t\t\t\"MAESTRO_SKILLS_SERVICE_CIRCUIT_FAILURE_THRESHOLD\",\n\t\t\t\t]),\n\t\t\t\t5,\n\t\t\t),\n\t\tcircuitResetTimeoutMs:\n\t\t\tconfig?.circuitResetTimeoutMs ??\n\t\t\tparsePositiveInt(\n\t\t\t\tgetEnvValue([\n\t\t\t\t\t\"SKILLS_SERVICE_CIRCUIT_RESET_TIMEOUT_MS\",\n\t\t\t\t\t\"MAESTRO_SKILLS_SERVICE_CIRCUIT_RESET_TIMEOUT_MS\",\n\t\t\t\t]),\n\t\t\t\t30_000,\n\t\t\t),\n\t\tcircuitSuccessThreshold:\n\t\t\tconfig?.circuitSuccessThreshold ??\n\t\t\tparsePositiveInt(\n\t\t\t\tgetEnvValue([\n\t\t\t\t\t\"SKILLS_SERVICE_CIRCUIT_SUCCESS_THRESHOLD\",\n\t\t\t\t\t\"MAESTRO_SKILLS_SERVICE_CIRCUIT_SUCCESS_THRESHOLD\",\n\t\t\t\t]),\n\t\t\t\t2,\n\t\t\t),\n\t\tentityId:\n\t\t\ttrimString(config?.entityId) ??\n\t\t\tgetEnvValue([\"SKILLS_SERVICE_ENTITY_ID\", \"MAESTRO_SKILLS_ENTITY_ID\"]),\n\t\tfailureMode: required ? \"required\" : \"optional\",\n\t\tlimit:\n\t\t\tconfig?.limit ??\n\t\t\tparsePositiveInt(\n\t\t\t\tgetEnvValue([\"SKILLS_SERVICE_LIMIT\", \"MAESTRO_SKILLS_SERVICE_LIMIT\"]),\n\t\t\t\tDEFAULT_LIMIT,\n\t\t\t),\n\t\tmaxAttempts:\n\t\t\tconfig?.maxAttempts ??\n\t\t\tparsePositiveInt(\n\t\t\t\tgetEnvValue([\n\t\t\t\t\t\"SKILLS_SERVICE_MAX_ATTEMPTS\",\n\t\t\t\t\t\"MAESTRO_SKILLS_SERVICE_MAX_ATTEMPTS\",\n\t\t\t\t]),\n\t\t\t\tDEFAULT_MAX_ATTEMPTS,\n\t\t\t),\n\t\tsurface:\n\t\t\ttrimString(config?.surface) ??\n\t\t\tgetEnvValue([\"SKILLS_SERVICE_SURFACE\"]) ??\n\t\t\tDEFAULT_SURFACE,\n\t\ttimeoutMs:\n\t\t\tconfig?.timeoutMs ??\n\t\t\tparsePositiveInt(\n\t\t\t\tgetEnvValue([\n\t\t\t\t\t\"SKILLS_SERVICE_TIMEOUT_MS\",\n\t\t\t\t\t\"MAESTRO_SKILLS_SERVICE_TIMEOUT_MS\",\n\t\t\t\t]),\n\t\t\t\tDEFAULT_TIMEOUT_MS,\n\t\t\t),\n\t\ttoken,\n\t\tworkspaceId,\n\t};\n}\n\nfunction getDownstreamClient(\n\tconfig: ResolvedSkillsServiceConfig,\n\top: SkillsCall,\n): downstream.DownstreamClient {\n\tconst failureMode = SKILLS_CALL_FAILURE_MODES[op][config.failureMode];\n\tconst key = JSON.stringify({\n\t\tbaseUrl: config.baseUrl,\n\t\tfailureMode,\n\t\top,\n\t\treset: config.circuitResetTimeoutMs,\n\t\tsuccess: config.circuitSuccessThreshold,\n\t\tthreshold: config.circuitFailureThreshold,\n\t});\n\tconst cached = downstreamClients.get(key);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\tconst client = downstream.New(`skills.${op}`, {\n\t\tfailureMode,\n\t\tbreaker: {\n\t\t\tfailureThreshold: config.circuitFailureThreshold,\n\t\t\tresetTimeoutMs: config.circuitResetTimeoutMs,\n\t\t\tsuccessThreshold: config.circuitSuccessThreshold,\n\t\t\ttoolName: `skills.${op}`,\n\t\t},\n\t});\n\tdownstreamClients.set(key, client);\n\treturn client;\n}\n\nfunction toHttpFailureMode(\n\tclient: downstream.DownstreamClient,\n): DownstreamHttpFailureMode {\n\treturn client.failureMode === downstream.FailClosed ? \"required\" : \"optional\";\n}\n\nfunction buildHeaders(\n\tconfig: ResolvedSkillsServiceConfig,\n): Record<string, string> {\n\treturn {\n\t\t...(config.token ? { Authorization: `Bearer ${config.token}` } : {}),\n\t\t\"Connect-Protocol-Version\": CONNECT_PROTOCOL_VERSION,\n\t\t\"Content-Type\": \"application/json\",\n\t\t\"X-Surface\": config.surface,\n\t\t...(config.entityId ? { \"X-Entity-ID\": config.entityId } : {}),\n\t};\n}\n\nfunction normalizeScope(\n\tscope: string | number | undefined,\n): string | undefined {\n\tswitch (scope) {\n\t\tcase \"SKILL_SCOPE_GLOBAL\":\n\t\tcase \"global\":\n\t\tcase 1:\n\t\t\treturn \"global\";\n\t\tcase \"SKILL_SCOPE_WORKSPACE\":\n\t\tcase \"workspace\":\n\t\tcase 2:\n\t\t\treturn \"workspace\";\n\t\tcase \"SKILL_SCOPE_PERSONAL\":\n\t\tcase \"personal\":\n\t\tcase 3:\n\t\t\treturn \"personal\";\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nfunction normalizeTags(tags: string[] | undefined): string[] | undefined {\n\tconst normalized = Array.isArray(tags)\n\t\t? tags.map((tag) => tag.trim()).filter((tag) => tag.length > 0)\n\t\t: [];\n\treturn normalized.length > 0 ? normalized : undefined;\n}\n\nfunction toLoadedSkill(skill: SkillsServiceSkill): LoadedSkill | null {\n\tconst id = trimString(skill.id);\n\tconst name = trimString(skill.name);\n\tconst content = trimString(skill.content);\n\tif (!id || !name || !content) {\n\t\treturn null;\n\t}\n\n\tconst scope = normalizeScope(skill.scope);\n\tconst metadata: Record<string, string> = {\n\t\tskillServiceId: id,\n\t\t...(trimString(skill.workspaceId)\n\t\t\t? { workspaceId: trimString(skill.workspaceId)! }\n\t\t\t: {}),\n\t\t...(trimString(skill.ownerId)\n\t\t\t? { ownerId: trimString(skill.ownerId)! }\n\t\t\t: {}),\n\t\t...(typeof skill.currentVersion === \"number\" &&\n\t\tNumber.isFinite(skill.currentVersion)\n\t\t\t? { currentVersion: String(Math.trunc(skill.currentVersion)) }\n\t\t\t: {}),\n\t\t...(scope ? { scope } : {}),\n\t};\n\n\treturn {\n\t\tname,\n\t\tdescription: trimString(skill.description) ?? \"Skill from skills service\",\n\t\tcontent,\n\t\tmetadata,\n\t\ttags: normalizeTags(skill.tags),\n\t\tsourcePath: `skills-service://${id}`,\n\t\tsourceType: \"service\",\n\t\tresources: [],\n\t\tresourceDirs: {},\n\t};\n}\n\nexport async function loadSkillsFromService(\n\tconfig: ResolvedSkillsServiceConfig,\n\toptions?: { signal?: AbortSignal },\n): Promise<LoadedSkill[]> {\n\tconst client = getDownstreamClient(config, \"listSkills\");\n\treturn downstream.CallOp(\n\t\tclient,\n\t\t\"listSkills\",\n\t\tasync () => {\n\t\t\tconst response = await fetchDownstream(\n\t\t\t\t`${config.baseUrl}${LIST_SKILLS_PATH}`,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: buildHeaders(config),\n\t\t\t\t\tsignal: options?.signal,\n\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\tworkspaceId: config.workspaceId,\n\t\t\t\t\t\tlimit: normalizeLimit(config.limit),\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tserviceName: \"skills service\",\n\t\t\t\t\tfailureMode: toHttpFailureMode(client),\n\t\t\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\t\t\tmaxAttempts: config.maxAttempts,\n\t\t\t\t},\n\t\t\t);\n\t\t\tif (!response.ok) {\n\t\t\t\tconst text = await response.text();\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`skills service returned ${response.status}: ${\n\t\t\t\t\t\ttext || response.statusText\n\t\t\t\t\t}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst payload = (await response.json()) as ListSkillsResponse;\n\t\t\treturn (payload.skills ?? [])\n\t\t\t\t.map(toLoadedSkill)\n\t\t\t\t.filter((skill): skill is LoadedSkill => skill !== null);\n\t\t},\n\t\t() => [],\n\t);\n}\n\nexport function resetSkillsDownstreamForTests(): void {\n\tdownstreamClients.clear();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"service-client.js","sourceRoot":"","sources":["../../src/skills/service-client.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tEVALOPS_ACCESS_TOKEN_ENV_VARS,\n\tEVALOPS_ORGANIZATION_ID_ENV_VARS,\n} from \"../evalops/env-aliases.js\";\nimport { loadOAuthCredentials } from \"../oauth/storage.js\";\nimport {\n\ttype DownstreamFailureMode as DownstreamHttpFailureMode,\n\tfetchDownstream,\n} from \"../utils/downstream-http.js\";\nimport * as downstream from \"../utils/downstream.js\";\nimport type { LoadedSkill } from \"./loader.js\";\n\nconst CONNECT_PROTOCOL_VERSION = \"1\";\nconst DEFAULT_LIMIT = 100;\nconst DEFAULT_MAX_ATTEMPTS = 2;\nconst DEFAULT_SURFACE = \"maestro\";\nconst DEFAULT_TIMEOUT_MS = 2_000;\nconst LIST_SKILLS_PATH = \"/skills.v1.SkillService/List\";\n\nexport const SKILLS_CALL_FAILURE_MODES = {\n\tlistSkills: {\n\t\toptional: downstream.FailOpen,\n\t\trequired: downstream.FailClosed,\n\t},\n} as const;\n\ntype SkillsCall = keyof typeof SKILLS_CALL_FAILURE_MODES;\n\nexport interface SkillsServiceConfig {\n\tbaseUrl?: string;\n\ttoken?: string;\n\tworkspaceId?: string;\n\tsurface?: string;\n\tentityId?: string;\n\tlimit?: number;\n\ttimeoutMs?: number;\n\tmaxAttempts?: number;\n\tcircuitFailureThreshold?: number;\n\tcircuitResetTimeoutMs?: number;\n\tcircuitSuccessThreshold?: number;\n\trequired?: boolean;\n}\n\nexport interface ResolvedSkillsServiceConfig {\n\tbaseUrl: string;\n\ttoken?: string;\n\tworkspaceId: string;\n\tsurface: string;\n\tentityId?: string;\n\tlimit: number;\n\ttimeoutMs: number;\n\tmaxAttempts: number;\n\tcircuitFailureThreshold: number;\n\tcircuitResetTimeoutMs: number;\n\tcircuitSuccessThreshold: number;\n\tfailureMode: DownstreamHttpFailureMode;\n}\n\ninterface SkillsServiceSkill {\n\tid?: string;\n\tworkspaceId?: string;\n\townerId?: string;\n\tname?: string;\n\tdescription?: string;\n\tscope?: string | number;\n\tcontent?: string;\n\tcurrentVersion?: number;\n\ttags?: string[];\n}\n\ninterface ListSkillsResponse {\n\tskills?: SkillsServiceSkill[];\n\ttotal?: number;\n}\n\nconst downstreamClients = new Map<string, downstream.DownstreamClient>();\n\nfunction trimString(value: string | undefined): string | undefined {\n\tconst trimmed = value?.trim();\n\treturn trimmed ? trimmed : undefined;\n}\n\nfunction getEnvValue(names: string[]): string | undefined {\n\tfor (const name of names) {\n\t\tconst value = trimString(process.env[name]);\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction parsePositiveInt(value: string | undefined, fallback: number): number {\n\tconst parsed = Number.parseInt(value ?? \"\", 10);\n\treturn Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;\n}\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n\tlet normalized = baseUrl.trim();\n\tfor (const suffix of [LIST_SKILLS_PATH, \"/skills.v1.SkillService\"]) {\n\t\tif (normalized.endsWith(suffix)) {\n\t\t\tnormalized = normalized.slice(0, -suffix.length);\n\t\t}\n\t}\n\treturn normalized.replace(/\\/+$/, \"\");\n}\n\nfunction resolveWorkspaceId(\n\tconfig: SkillsServiceConfig | undefined,\n): string | undefined {\n\tconst configuredWorkspaceId = trimString(config?.workspaceId);\n\tconst envWorkspaceId = getEnvValue([\n\t\t\"SKILLS_SERVICE_WORKSPACE_ID\",\n\t\t\"MAESTRO_SKILLS_WORKSPACE_ID\",\n\t\t...EVALOPS_ORGANIZATION_ID_ENV_VARS,\n\t]);\n\tif (configuredWorkspaceId ?? envWorkspaceId) {\n\t\treturn configuredWorkspaceId ?? envWorkspaceId;\n\t}\n\tconst stored = loadOAuthCredentials(\"evalops\")?.metadata?.organizationId;\n\treturn typeof stored === \"string\" && stored.trim().length > 0\n\t\t? stored.trim()\n\t\t: undefined;\n}\n\nfunction normalizeLimit(value: number | undefined): number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) {\n\t\treturn DEFAULT_LIMIT;\n\t}\n\treturn Math.max(1, Math.min(500, Math.trunc(value)));\n}\n\nexport function resolveSkillsServiceConfig(\n\tconfig: SkillsServiceConfig | false | undefined,\n): ResolvedSkillsServiceConfig | null {\n\tif (config === false) {\n\t\treturn null;\n\t}\n\n\tconst baseUrl =\n\t\ttrimString(config?.baseUrl) ??\n\t\tgetEnvValue([\"SKILLS_SERVICE_URL\", \"MAESTRO_SKILLS_SERVICE_URL\"]);\n\tif (!baseUrl) {\n\t\treturn null;\n\t}\n\n\tconst workspaceId = resolveWorkspaceId(config);\n\tif (!workspaceId) {\n\t\treturn null;\n\t}\n\n\tconst storedToken = trimString(loadOAuthCredentials(\"evalops\")?.access);\n\tconst token =\n\t\ttrimString(config?.token) ??\n\t\tgetEnvValue([\n\t\t\t\"SKILLS_SERVICE_TOKEN\",\n\t\t\t\"MAESTRO_SKILLS_SERVICE_TOKEN\",\n\t\t\t...EVALOPS_ACCESS_TOKEN_ENV_VARS,\n\t\t]) ??\n\t\tstoredToken;\n\n\tconst required =\n\t\tconfig?.required ??\n\t\tgetEnvValue([\n\t\t\t\"SKILLS_SERVICE_REQUIRED\",\n\t\t\t\"MAESTRO_SKILLS_SERVICE_REQUIRED\",\n\t\t]) === \"1\";\n\n\treturn {\n\t\tbaseUrl: normalizeBaseUrl(baseUrl),\n\t\tcircuitFailureThreshold:\n\t\t\tconfig?.circuitFailureThreshold ??\n\t\t\tparsePositiveInt(\n\t\t\t\tgetEnvValue([\n\t\t\t\t\t\"SKILLS_SERVICE_CIRCUIT_FAILURE_THRESHOLD\",\n\t\t\t\t\t\"MAESTRO_SKILLS_SERVICE_CIRCUIT_FAILURE_THRESHOLD\",\n\t\t\t\t]),\n\t\t\t\t5,\n\t\t\t),\n\t\tcircuitResetTimeoutMs:\n\t\t\tconfig?.circuitResetTimeoutMs ??\n\t\t\tparsePositiveInt(\n\t\t\t\tgetEnvValue([\n\t\t\t\t\t\"SKILLS_SERVICE_CIRCUIT_RESET_TIMEOUT_MS\",\n\t\t\t\t\t\"MAESTRO_SKILLS_SERVICE_CIRCUIT_RESET_TIMEOUT_MS\",\n\t\t\t\t]),\n\t\t\t\t30_000,\n\t\t\t),\n\t\tcircuitSuccessThreshold:\n\t\t\tconfig?.circuitSuccessThreshold ??\n\t\t\tparsePositiveInt(\n\t\t\t\tgetEnvValue([\n\t\t\t\t\t\"SKILLS_SERVICE_CIRCUIT_SUCCESS_THRESHOLD\",\n\t\t\t\t\t\"MAESTRO_SKILLS_SERVICE_CIRCUIT_SUCCESS_THRESHOLD\",\n\t\t\t\t]),\n\t\t\t\t2,\n\t\t\t),\n\t\tentityId:\n\t\t\ttrimString(config?.entityId) ??\n\t\t\tgetEnvValue([\"SKILLS_SERVICE_ENTITY_ID\", \"MAESTRO_SKILLS_ENTITY_ID\"]),\n\t\tfailureMode: required ? \"required\" : \"optional\",\n\t\tlimit:\n\t\t\tconfig?.limit ??\n\t\t\tparsePositiveInt(\n\t\t\t\tgetEnvValue([\"SKILLS_SERVICE_LIMIT\", \"MAESTRO_SKILLS_SERVICE_LIMIT\"]),\n\t\t\t\tDEFAULT_LIMIT,\n\t\t\t),\n\t\tmaxAttempts:\n\t\t\tconfig?.maxAttempts ??\n\t\t\tparsePositiveInt(\n\t\t\t\tgetEnvValue([\n\t\t\t\t\t\"SKILLS_SERVICE_MAX_ATTEMPTS\",\n\t\t\t\t\t\"MAESTRO_SKILLS_SERVICE_MAX_ATTEMPTS\",\n\t\t\t\t]),\n\t\t\t\tDEFAULT_MAX_ATTEMPTS,\n\t\t\t),\n\t\tsurface:\n\t\t\ttrimString(config?.surface) ??\n\t\t\tgetEnvValue([\"SKILLS_SERVICE_SURFACE\"]) ??\n\t\t\tDEFAULT_SURFACE,\n\t\ttimeoutMs:\n\t\t\tconfig?.timeoutMs ??\n\t\t\tparsePositiveInt(\n\t\t\t\tgetEnvValue([\n\t\t\t\t\t\"SKILLS_SERVICE_TIMEOUT_MS\",\n\t\t\t\t\t\"MAESTRO_SKILLS_SERVICE_TIMEOUT_MS\",\n\t\t\t\t]),\n\t\t\t\tDEFAULT_TIMEOUT_MS,\n\t\t\t),\n\t\ttoken,\n\t\tworkspaceId,\n\t};\n}\n\nfunction getDownstreamClient(\n\tconfig: ResolvedSkillsServiceConfig,\n\top: SkillsCall,\n): downstream.DownstreamClient {\n\tconst failureMode = SKILLS_CALL_FAILURE_MODES[op][config.failureMode];\n\tconst key = JSON.stringify({\n\t\tbaseUrl: config.baseUrl,\n\t\tfailureMode,\n\t\top,\n\t\treset: config.circuitResetTimeoutMs,\n\t\tsuccess: config.circuitSuccessThreshold,\n\t\tthreshold: config.circuitFailureThreshold,\n\t});\n\tconst cached = downstreamClients.get(key);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\tconst client = downstream.New(`skills.${op}`, {\n\t\tfailureMode,\n\t\tbreaker: {\n\t\t\tfailureThreshold: config.circuitFailureThreshold,\n\t\t\tresetTimeoutMs: config.circuitResetTimeoutMs,\n\t\t\tsuccessThreshold: config.circuitSuccessThreshold,\n\t\t\ttoolName: `skills.${op}`,\n\t\t},\n\t});\n\tdownstreamClients.set(key, client);\n\treturn client;\n}\n\nfunction toHttpFailureMode(\n\tclient: downstream.DownstreamClient,\n): DownstreamHttpFailureMode {\n\treturn client.failureMode === downstream.FailClosed ? \"required\" : \"optional\";\n}\n\nfunction buildHeaders(\n\tconfig: ResolvedSkillsServiceConfig,\n): Record<string, string> {\n\treturn {\n\t\t...(config.token ? { Authorization: `Bearer ${config.token}` } : {}),\n\t\t\"Connect-Protocol-Version\": CONNECT_PROTOCOL_VERSION,\n\t\t\"Content-Type\": \"application/json\",\n\t\t\"X-Surface\": config.surface,\n\t\t...(config.entityId ? { \"X-Entity-ID\": config.entityId } : {}),\n\t};\n}\n\nfunction normalizeScope(\n\tscope: string | number | undefined,\n): string | undefined {\n\tswitch (scope) {\n\t\tcase \"SKILL_SCOPE_GLOBAL\":\n\t\tcase \"global\":\n\t\tcase 1:\n\t\t\treturn \"global\";\n\t\tcase \"SKILL_SCOPE_WORKSPACE\":\n\t\tcase \"workspace\":\n\t\tcase 2:\n\t\t\treturn \"workspace\";\n\t\tcase \"SKILL_SCOPE_PERSONAL\":\n\t\tcase \"personal\":\n\t\tcase 3:\n\t\t\treturn \"personal\";\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nfunction normalizeTags(tags: string[] | undefined): string[] | undefined {\n\tconst normalized = Array.isArray(tags)\n\t\t? tags.map((tag) => tag.trim()).filter((tag) => tag.length > 0)\n\t\t: [];\n\treturn normalized.length > 0 ? normalized : undefined;\n}\n\nfunction toLoadedSkill(skill: SkillsServiceSkill): LoadedSkill | null {\n\tconst id = trimString(skill.id);\n\tconst name = trimString(skill.name);\n\tconst content = trimString(skill.content);\n\tif (!id || !name || !content) {\n\t\treturn null;\n\t}\n\n\tconst scope = normalizeScope(skill.scope);\n\tconst metadata: Record<string, string> = {\n\t\tskillServiceId: id,\n\t\t...(trimString(skill.workspaceId)\n\t\t\t? { workspaceId: trimString(skill.workspaceId)! }\n\t\t\t: {}),\n\t\t...(trimString(skill.ownerId)\n\t\t\t? { ownerId: trimString(skill.ownerId)! }\n\t\t\t: {}),\n\t\t...(typeof skill.currentVersion === \"number\" &&\n\t\tNumber.isFinite(skill.currentVersion)\n\t\t\t? { currentVersion: String(Math.trunc(skill.currentVersion)) }\n\t\t\t: {}),\n\t\t...(scope ? { scope } : {}),\n\t};\n\n\treturn {\n\t\tname,\n\t\tdescription: trimString(skill.description) ?? \"Skill from skills service\",\n\t\tcontent,\n\t\tmetadata,\n\t\ttags: normalizeTags(skill.tags),\n\t\tsourcePath: `skills-service://${id}`,\n\t\tsourceType: \"service\",\n\t\tresources: [],\n\t\tresourceDirs: {},\n\t};\n}\n\nexport async function loadSkillsFromService(\n\tconfig: ResolvedSkillsServiceConfig,\n\toptions?: { signal?: AbortSignal },\n): Promise<LoadedSkill[]> {\n\tconst client = getDownstreamClient(config, \"listSkills\");\n\treturn downstream.CallOp(\n\t\tclient,\n\t\t\"listSkills\",\n\t\tasync () => {\n\t\t\tconst response = await fetchDownstream(\n\t\t\t\t`${config.baseUrl}${LIST_SKILLS_PATH}`,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: buildHeaders(config),\n\t\t\t\t\tsignal: options?.signal,\n\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\tworkspaceId: config.workspaceId,\n\t\t\t\t\t\tlimit: normalizeLimit(config.limit),\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tserviceName: \"skills service\",\n\t\t\t\t\tfailureMode: toHttpFailureMode(client),\n\t\t\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\t\t\tmaxAttempts: config.maxAttempts,\n\t\t\t\t},\n\t\t\t);\n\t\t\tif (!response.ok) {\n\t\t\t\tconst text = await response.text();\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`skills service returned ${response.status}: ${\n\t\t\t\t\t\ttext || response.statusText\n\t\t\t\t\t}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst payload = (await response.json()) as ListSkillsResponse;\n\t\t\treturn (payload.skills ?? [])\n\t\t\t\t.map(toLoadedSkill)\n\t\t\t\t.filter((skill): skill is LoadedSkill => skill !== null);\n\t\t},\n\t\t() => [],\n\t);\n}\n\nexport function resetSkillsDownstreamForTests(): void {\n\tdownstreamClients.clear();\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/skills/tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/skills/tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AAYpE,OAAO,EACN,KAAK,mBAAmB,EAGxB,MAAM,qBAAqB,CAAC;AAmB7B;;GAEG;AACH,wBAAgB,eAAe,CAC9B,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IACT,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAC;CAC5C,GACC,SAAS,CAsJX;AA2DD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C"}
|
package/dist/skills/tool.js
CHANGED
|
@@ -8,6 +8,7 @@ import { Type } from "@sinclair/typebox";
|
|
|
8
8
|
import { createLogger } from "../utils/logger.js";
|
|
9
9
|
import { buildSkillArtifactMetadata } from "./artifact-metadata.js";
|
|
10
10
|
import { findSkill, formatSkillForInjection, formatSkillListItem, loadSkills, searchSkills, } from "./loader.js";
|
|
11
|
+
import { buildSkillRuntimeActivation } from "./runtime-activation.js";
|
|
11
12
|
import { loadSkillsFromService, resolveSkillsServiceConfig, } from "./service-client.js";
|
|
12
13
|
const logger = createLogger("skills:tool");
|
|
13
14
|
/**
|
|
@@ -149,6 +150,7 @@ Available skills can be listed by calling this tool with skill="list".`,
|
|
|
149
150
|
content: [{ type: "text", text }],
|
|
150
151
|
details: {
|
|
151
152
|
skillMetadata: buildSkillArtifactMetadata(skill),
|
|
153
|
+
skillRuntimeActivation: buildSkillRuntimeActivation(skill),
|
|
152
154
|
},
|
|
153
155
|
};
|
|
154
156
|
},
|
package/dist/skills/tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/skills/tool.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Skill Tool - Allows the agent to load specialized domain skills.\n *\n * This tool enables the agent to dynamically load skill instructions\n * and resources when it recognizes a task that matches a skill's domain.\n */\n\nimport { Type } from \"@sinclair/typebox\";\nimport type { AgentTool, AgentToolResult } from \"../agent/types.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport { buildSkillArtifactMetadata } from \"./artifact-metadata.js\";\nimport {\n\ttype LoadedSkill,\n\tfindSkill,\n\tformatSkillForInjection,\n\tformatSkillListItem,\n\tloadSkills,\n\tsearchSkills,\n} from \"./loader.js\";\nimport {\n\ttype SkillsServiceConfig,\n\tloadSkillsFromService,\n\tresolveSkillsServiceConfig,\n} from \"./service-client.js\";\n\nconst logger = createLogger(\"skills:tool\");\n\n/**\n * Skill tool input schema.\n */\nconst SkillToolSchema = Type.Object({\n\tskill: Type.String({\n\t\tdescription:\n\t\t\t'The name of the skill to load. Use \"list\" to see all available skills, or a search term to find matching skills.',\n\t}),\n\targs: Type.Optional(\n\t\tType.Record(Type.String(), Type.String(), {\n\t\t\tdescription: \"Optional arguments to pass to the skill\",\n\t\t}),\n\t),\n});\n\n/**\n * Create the Skill tool definition.\n */\nexport function createSkillTool(\n\tworkspaceDir: string,\n\toptions?: {\n\t\tincludeSystem?: boolean;\n\t\tincludeService?: boolean;\n\t\tskillsService?: SkillsServiceConfig | false;\n\t},\n): AgentTool {\n\t// Load skills once when tool is created\n\tlet cachedSkills: Promise<LoadedSkill[]> | null = null;\n\n\tconst getSkills = async (): Promise<LoadedSkill[]> => {\n\t\tif (cachedSkills === null) {\n\t\t\tcachedSkills = loadSkillsForTool(workspaceDir, options).catch((error) => {\n\t\t\t\tcachedSkills = null;\n\t\t\t\tthrow error;\n\t\t\t});\n\t\t}\n\t\treturn await cachedSkills;\n\t};\n\n\treturn {\n\t\tname: \"Skill\",\n\t\tlabel: \"Skill\",\n\t\tdescription: `Load a specialized skill that provides domain-specific instructions and workflows.\n\nWhen you recognize that a task matches one of the available skills, use this tool to load the full skill instructions. The skill will inject detailed instructions, workflows, and access to bundled resources (scripts, references, templates) into the conversation context.\n\nUse this tool proactively when:\n- The user asks about a domain that matches an available skill\n- You need specialized procedures or workflows\n- You want access to skill-specific resources\n\nAvailable skills can be listed by calling this tool with skill=\"list\".`,\n\t\tparameters: SkillToolSchema,\n\t\texecute: async (\n\t\t\ttoolCallId: string,\n\t\t\tparams: Record<string, unknown>,\n\t\t): Promise<AgentToolResult> => {\n\t\t\tconst skillName = (params.skill as string)?.trim() ?? \"\";\n\t\t\tconst args = params.args as Record<string, string> | undefined;\n\n\t\t\tif (!skillName) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Error: skill name is required\" }],\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet skills: LoadedSkill[];\n\t\t\ttry {\n\t\t\t\tskills = await getSkills();\n\t\t\t} catch (error) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Error loading skills: ${\n\t\t\t\t\t\t\t\terror instanceof Error ? error.message : String(error)\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle \"list\" command\n\t\t\tif (skillName.toLowerCase() === \"list\") {\n\t\t\t\tif (skills.length === 0) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: \"No skills available. Skills can be added to `.maestro/skills/` in your workspace or `~/.maestro/skills/` for global skills.\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst lines = [\n\t\t\t\t\t`Available Skills (${skills.length}):`,\n\t\t\t\t\t\"\",\n\t\t\t\t\t...skills.map((s) => `- ${formatSkillListItem(s)}`),\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"Use Skill tool with the skill name to load its instructions.\",\n\t\t\t\t];\n\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: lines.join(\"\\n\") }],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Try to find exact match first\n\t\t\tlet skill = findSkill(skills, skillName);\n\n\t\t\t// If no exact match, try search\n\t\t\tif (!skill) {\n\t\t\t\tconst matches = searchSkills(skills, skillName);\n\t\t\t\tif (matches.length === 1) {\n\t\t\t\t\tskill = matches[0];\n\t\t\t\t} else if (matches.length > 1) {\n\t\t\t\t\tconst lines = [\n\t\t\t\t\t\t`Multiple skills match \"${skillName}\":`,\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t...matches.map((s) => `- ${formatSkillListItem(s)}`),\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\"Please specify the exact skill name.\",\n\t\t\t\t\t];\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: lines.join(\"\\n\") }],\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!skill) {\n\t\t\t\tconst suggestions =\n\t\t\t\t\tskills.length > 0\n\t\t\t\t\t\t? `\\n\\nAvailable skills: ${skills.map((s) => s.name).join(\", \")}`\n\t\t\t\t\t\t: '\\n\\nNo skills are available. Add skills to `.maestro/skills/` or use \"list\" to check.';\n\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Skill \"${skillName}\" not found.${suggestions}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlogger.info(\"Loading skill\", {\n\t\t\t\tname: skill.name,\n\t\t\t\tsourceType: skill.sourceType,\n\t\t\t});\n\n\t\t\t// Format skill content for injection\n\t\t\tlet text = formatSkillForInjection(skill);\n\n\t\t\t// Handle args substitution if provided\n\t\t\tif (args && Object.keys(args).length > 0) {\n\t\t\t\tfor (const [key, value] of Object.entries(args)) {\n\t\t\t\t\tconst pattern = new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, \"g\");\n\t\t\t\t\ttext = text.replace(pattern, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text }],\n\t\t\t\tdetails: {\n\t\t\t\t\tskillMetadata: buildSkillArtifactMetadata(skill),\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nfunction mergeSkills(\n\tlocalSkills: LoadedSkill[],\n\tserviceSkills: LoadedSkill[],\n): LoadedSkill[] {\n\tconst skillMap = new Map<string, LoadedSkill>();\n\tfor (const skill of localSkills) {\n\t\tskillMap.set(skill.name.toLowerCase(), skill);\n\t}\n\tfor (const skill of serviceSkills) {\n\t\tconst existing = skillMap.get(skill.name.toLowerCase());\n\t\tif (existing) {\n\t\t\tlogger.debug(\"Skills service skill overrides local skill\", {\n\t\t\t\tname: skill.name,\n\t\t\t\toverridden: existing.sourceType,\n\t\t\t});\n\t\t}\n\t\tskillMap.set(skill.name.toLowerCase(), skill);\n\t}\n\treturn Array.from(skillMap.values());\n}\n\nasync function loadSkillsForTool(\n\tworkspaceDir: string,\n\toptions?: {\n\t\tincludeSystem?: boolean;\n\t\tincludeService?: boolean;\n\t\tskillsService?: SkillsServiceConfig | false;\n\t},\n): Promise<LoadedSkill[]> {\n\tconst result = loadSkills(workspaceDir, options);\n\tif (options?.includeService === false) {\n\t\treturn result.skills;\n\t}\n\n\tconst config = resolveSkillsServiceConfig(options?.skillsService);\n\tif (!config) {\n\t\treturn result.skills;\n\t}\n\n\ttry {\n\t\tconst serviceSkills = await loadSkillsFromService(config);\n\t\treturn mergeSkills(result.skills, serviceSkills);\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tif (config.failureMode === \"required\") {\n\t\t\tthrow new Error(`Skills service unavailable: ${message}`);\n\t\t}\n\t\tlogger.warn(\n\t\t\t\"Failed to load skills from skills service; using local skills\",\n\t\t\t{\n\t\t\t\terror: message,\n\t\t\t},\n\t\t);\n\t\treturn result.skills;\n\t}\n}\n\n/**\n * Invalidate cached skills (call after skill files change).\n */\nexport function invalidateSkillCache(): void {\n\t// This would need to be connected to the actual tool instance\n\t// For now, skills are loaded fresh each time createSkillTool is called\n\tlogger.debug(\"Skill cache invalidation requested\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/skills/tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAEN,SAAS,EACT,uBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,YAAY,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAEN,qBAAqB,EACrB,0BAA0B,GAC1B,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,WAAW,EACV,kHAAkH;KACnH,CAAC;IACF,IAAI,EAAE,IAAI,CAAC,QAAQ,CAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;QACzC,WAAW,EAAE,yCAAyC;KACtD,CAAC,CACF;CACD,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,eAAe,CAC9B,YAAoB,EACpB,OAIC;IAED,wCAAwC;IACxC,IAAI,YAAY,GAAkC,IAAI,CAAC;IAEvD,MAAM,SAAS,GAAG,KAAK,IAA4B,EAAE;QACpD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC3B,YAAY,GAAG,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACvE,YAAY,GAAG,IAAI,CAAC;gBACpB,MAAM,KAAK,CAAC;YACb,CAAC,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,YAAY,CAAC;IAC3B,CAAC,CAAC;IAEF,OAAO;QACN,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;QACd,WAAW,EAAE;;;;;;;;;uEASwD;QACrE,UAAU,EAAE,eAAe;QAC3B,OAAO,EAAE,KAAK,EACb,UAAkB,EAClB,MAA+B,EACJ,EAAE;YAC7B,MAAM,SAAS,GAAI,MAAM,CAAC,KAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,MAAM,CAAC,IAA0C,CAAC;YAE/D,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,OAAO;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC;oBAClE,OAAO,EAAE,IAAI;iBACb,CAAC;YACH,CAAC;YAED,IAAI,MAAqB,CAAC;YAC1B,IAAI,CAAC;gBACJ,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;YAC5B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,OAAO;oBACN,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,yBACL,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACtD,EAAE;yBACF;qBACD;oBACD,OAAO,EAAE,IAAI;iBACb,CAAC;YACH,CAAC;YAED,wBAAwB;YACxB,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;gBACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO;wBACN,OAAO,EAAE;4BACR;gCACC,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,6HAA6H;6BACnI;yBACD;qBACD,CAAC;gBACH,CAAC;gBAED,MAAM,KAAK,GAAG;oBACb,qBAAqB,MAAM,CAAC,MAAM,IAAI;oBACtC,EAAE;oBACF,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnD,EAAE;oBACF,8DAA8D;iBAC9D,CAAC;gBAEF,OAAO;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;iBACnD,CAAC;YACH,CAAC;YAED,gCAAgC;YAChC,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAEzC,gCAAgC;YAChC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAChD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1B,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACpB,CAAC;qBAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAG;wBACb,0BAA0B,SAAS,IAAI;wBACvC,EAAE;wBACF,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;wBACpD,EAAE;wBACF,sCAAsC;qBACtC,CAAC;oBAEF,OAAO;wBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnD,CAAC;gBACH,CAAC;YACF,CAAC;YAED,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,MAAM,WAAW,GAChB,MAAM,CAAC,MAAM,GAAG,CAAC;oBAChB,CAAC,CAAC,yBAAyB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACjE,CAAC,CAAC,uFAAuF,CAAC;gBAE5F,OAAO;oBACN,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,UAAU,SAAS,eAAe,WAAW,EAAE;yBACrD;qBACD;oBACD,OAAO,EAAE,IAAI;iBACb,CAAC;YACH,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;gBAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,UAAU,EAAE,KAAK,CAAC,UAAU;aAC5B,CAAC,CAAC;YAEH,qCAAqC;YACrC,IAAI,IAAI,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;YAE1C,uCAAuC;YACvC,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjD,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,SAAS,GAAG,QAAQ,EAAE,GAAG,CAAC,CAAC;oBACtD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACrC,CAAC;YACF,CAAC;YAED,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBACjC,OAAO,EAAE;oBACR,aAAa,EAAE,0BAA0B,CAAC,KAAK,CAAC;oBAChD,sBAAsB,EAAE,2BAA2B,CAAC,KAAK,CAAC;iBAC1D;aACD,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CACnB,WAA0B,EAC1B,aAA4B;IAE5B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAChD,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QACjC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACxD,IAAI,QAAQ,EAAE,CAAC;YACd,MAAM,CAAC,KAAK,CAAC,4CAA4C,EAAE;gBAC1D,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,UAAU,EAAE,QAAQ,CAAC,UAAU;aAC/B,CAAC,CAAC;QACJ,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC/B,YAAoB,EACpB,OAIC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACjD,IAAI,OAAO,EAAE,cAAc,KAAK,KAAK,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,MAAM,CAAC;IACtB,CAAC;IAED,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAClE,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,MAAM,CAAC,MAAM,CAAC;IACtB,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,MAAM,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,CAAC,IAAI,CACV,+DAA+D,EAC/D;YACC,KAAK,EAAE,OAAO;SACd,CACD,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,CAAC;IACtB,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IACnC,8DAA8D;IAC9D,uEAAuE;IACvE,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACpD,CAAC","sourcesContent":["/**\n * Skill Tool - Allows the agent to load specialized domain skills.\n *\n * This tool enables the agent to dynamically load skill instructions\n * and resources when it recognizes a task that matches a skill's domain.\n */\n\nimport { Type } from \"@sinclair/typebox\";\nimport type { AgentTool, AgentToolResult } from \"../agent/types.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport { buildSkillArtifactMetadata } from \"./artifact-metadata.js\";\nimport {\n\ttype LoadedSkill,\n\tfindSkill,\n\tformatSkillForInjection,\n\tformatSkillListItem,\n\tloadSkills,\n\tsearchSkills,\n} from \"./loader.js\";\nimport { buildSkillRuntimeActivation } from \"./runtime-activation.js\";\nimport {\n\ttype SkillsServiceConfig,\n\tloadSkillsFromService,\n\tresolveSkillsServiceConfig,\n} from \"./service-client.js\";\n\nconst logger = createLogger(\"skills:tool\");\n\n/**\n * Skill tool input schema.\n */\nconst SkillToolSchema = Type.Object({\n\tskill: Type.String({\n\t\tdescription:\n\t\t\t'The name of the skill to load. Use \"list\" to see all available skills, or a search term to find matching skills.',\n\t}),\n\targs: Type.Optional(\n\t\tType.Record(Type.String(), Type.String(), {\n\t\t\tdescription: \"Optional arguments to pass to the skill\",\n\t\t}),\n\t),\n});\n\n/**\n * Create the Skill tool definition.\n */\nexport function createSkillTool(\n\tworkspaceDir: string,\n\toptions?: {\n\t\tincludeSystem?: boolean;\n\t\tincludeService?: boolean;\n\t\tskillsService?: SkillsServiceConfig | false;\n\t},\n): AgentTool {\n\t// Load skills once when tool is created\n\tlet cachedSkills: Promise<LoadedSkill[]> | null = null;\n\n\tconst getSkills = async (): Promise<LoadedSkill[]> => {\n\t\tif (cachedSkills === null) {\n\t\t\tcachedSkills = loadSkillsForTool(workspaceDir, options).catch((error) => {\n\t\t\t\tcachedSkills = null;\n\t\t\t\tthrow error;\n\t\t\t});\n\t\t}\n\t\treturn await cachedSkills;\n\t};\n\n\treturn {\n\t\tname: \"Skill\",\n\t\tlabel: \"Skill\",\n\t\tdescription: `Load a specialized skill that provides domain-specific instructions and workflows.\n\nWhen you recognize that a task matches one of the available skills, use this tool to load the full skill instructions. The skill will inject detailed instructions, workflows, and access to bundled resources (scripts, references, templates) into the conversation context.\n\nUse this tool proactively when:\n- The user asks about a domain that matches an available skill\n- You need specialized procedures or workflows\n- You want access to skill-specific resources\n\nAvailable skills can be listed by calling this tool with skill=\"list\".`,\n\t\tparameters: SkillToolSchema,\n\t\texecute: async (\n\t\t\ttoolCallId: string,\n\t\t\tparams: Record<string, unknown>,\n\t\t): Promise<AgentToolResult> => {\n\t\t\tconst skillName = (params.skill as string)?.trim() ?? \"\";\n\t\t\tconst args = params.args as Record<string, string> | undefined;\n\n\t\t\tif (!skillName) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Error: skill name is required\" }],\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet skills: LoadedSkill[];\n\t\t\ttry {\n\t\t\t\tskills = await getSkills();\n\t\t\t} catch (error) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Error loading skills: ${\n\t\t\t\t\t\t\t\terror instanceof Error ? error.message : String(error)\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle \"list\" command\n\t\t\tif (skillName.toLowerCase() === \"list\") {\n\t\t\t\tif (skills.length === 0) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: \"No skills available. Skills can be added to `.maestro/skills/` in your workspace or `~/.maestro/skills/` for global skills.\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst lines = [\n\t\t\t\t\t`Available Skills (${skills.length}):`,\n\t\t\t\t\t\"\",\n\t\t\t\t\t...skills.map((s) => `- ${formatSkillListItem(s)}`),\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"Use Skill tool with the skill name to load its instructions.\",\n\t\t\t\t];\n\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: lines.join(\"\\n\") }],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Try to find exact match first\n\t\t\tlet skill = findSkill(skills, skillName);\n\n\t\t\t// If no exact match, try search\n\t\t\tif (!skill) {\n\t\t\t\tconst matches = searchSkills(skills, skillName);\n\t\t\t\tif (matches.length === 1) {\n\t\t\t\t\tskill = matches[0];\n\t\t\t\t} else if (matches.length > 1) {\n\t\t\t\t\tconst lines = [\n\t\t\t\t\t\t`Multiple skills match \"${skillName}\":`,\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t...matches.map((s) => `- ${formatSkillListItem(s)}`),\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\"Please specify the exact skill name.\",\n\t\t\t\t\t];\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: lines.join(\"\\n\") }],\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!skill) {\n\t\t\t\tconst suggestions =\n\t\t\t\t\tskills.length > 0\n\t\t\t\t\t\t? `\\n\\nAvailable skills: ${skills.map((s) => s.name).join(\", \")}`\n\t\t\t\t\t\t: '\\n\\nNo skills are available. Add skills to `.maestro/skills/` or use \"list\" to check.';\n\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Skill \"${skillName}\" not found.${suggestions}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlogger.info(\"Loading skill\", {\n\t\t\t\tname: skill.name,\n\t\t\t\tsourceType: skill.sourceType,\n\t\t\t});\n\n\t\t\t// Format skill content for injection\n\t\t\tlet text = formatSkillForInjection(skill);\n\n\t\t\t// Handle args substitution if provided\n\t\t\tif (args && Object.keys(args).length > 0) {\n\t\t\t\tfor (const [key, value] of Object.entries(args)) {\n\t\t\t\t\tconst pattern = new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, \"g\");\n\t\t\t\t\ttext = text.replace(pattern, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text }],\n\t\t\t\tdetails: {\n\t\t\t\t\tskillMetadata: buildSkillArtifactMetadata(skill),\n\t\t\t\t\tskillRuntimeActivation: buildSkillRuntimeActivation(skill),\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nfunction mergeSkills(\n\tlocalSkills: LoadedSkill[],\n\tserviceSkills: LoadedSkill[],\n): LoadedSkill[] {\n\tconst skillMap = new Map<string, LoadedSkill>();\n\tfor (const skill of localSkills) {\n\t\tskillMap.set(skill.name.toLowerCase(), skill);\n\t}\n\tfor (const skill of serviceSkills) {\n\t\tconst existing = skillMap.get(skill.name.toLowerCase());\n\t\tif (existing) {\n\t\t\tlogger.debug(\"Skills service skill overrides local skill\", {\n\t\t\t\tname: skill.name,\n\t\t\t\toverridden: existing.sourceType,\n\t\t\t});\n\t\t}\n\t\tskillMap.set(skill.name.toLowerCase(), skill);\n\t}\n\treturn Array.from(skillMap.values());\n}\n\nasync function loadSkillsForTool(\n\tworkspaceDir: string,\n\toptions?: {\n\t\tincludeSystem?: boolean;\n\t\tincludeService?: boolean;\n\t\tskillsService?: SkillsServiceConfig | false;\n\t},\n): Promise<LoadedSkill[]> {\n\tconst result = loadSkills(workspaceDir, options);\n\tif (options?.includeService === false) {\n\t\treturn result.skills;\n\t}\n\n\tconst config = resolveSkillsServiceConfig(options?.skillsService);\n\tif (!config) {\n\t\treturn result.skills;\n\t}\n\n\ttry {\n\t\tconst serviceSkills = await loadSkillsFromService(config);\n\t\treturn mergeSkills(result.skills, serviceSkills);\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tif (config.failureMode === \"required\") {\n\t\t\tthrow new Error(`Skills service unavailable: ${message}`);\n\t\t}\n\t\tlogger.warn(\n\t\t\t\"Failed to load skills from skills service; using local skills\",\n\t\t\t{\n\t\t\t\terror: message,\n\t\t\t},\n\t\t);\n\t\treturn result.skills;\n\t}\n}\n\n/**\n * Invalidate cached skills (call after skill files change).\n */\nexport function invalidateSkillCache(): void {\n\t// This would need to be connected to the actual tool instance\n\t// For now, skills are loaded fresh each time createSkillTool is called\n\tlogger.debug(\"Skill cache invalidation requested\");\n}\n"]}
|
package/dist/skills/types.d.ts
CHANGED
|
@@ -22,6 +22,14 @@ export interface Skill {
|
|
|
22
22
|
tags?: string[];
|
|
23
23
|
/** Required tools for this skill */
|
|
24
24
|
requiredTools?: string[];
|
|
25
|
+
/** Built-in Maestro tools this skill expects to use */
|
|
26
|
+
builtinTools?: string[];
|
|
27
|
+
/** Preferred model while this skill is active */
|
|
28
|
+
model?: string;
|
|
29
|
+
/** Preferred agent mode while this skill is active */
|
|
30
|
+
mode?: string;
|
|
31
|
+
/** Whether the skill should run in isolated context when supported */
|
|
32
|
+
isolatedContext?: boolean;
|
|
25
33
|
/** Whether this skill is currently active in the session */
|
|
26
34
|
active?: boolean;
|
|
27
35
|
}
|
|
@@ -37,6 +45,12 @@ export interface SkillMetadata {
|
|
|
37
45
|
tags?: string[];
|
|
38
46
|
/** Required tools */
|
|
39
47
|
tools?: string[];
|
|
48
|
+
/** Built-in Maestro tools */
|
|
49
|
+
builtinTools?: string[];
|
|
50
|
+
/** Preferred model */
|
|
51
|
+
model?: string;
|
|
52
|
+
/** Preferred mode */
|
|
53
|
+
mode?: string;
|
|
40
54
|
/** Trigger patterns (when to auto-activate) */
|
|
41
55
|
triggers?: string[];
|
|
42
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,KAAK;IACrB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,QAAQ,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,iCAAiC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,wCAAwC;IACxC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,KAAK;IACrB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,QAAQ,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,4DAA4D;IAC5D,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,iCAAiC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,wCAAwC;IACxC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB"}
|
package/dist/skills/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG","sourcesContent":["/**\n * Skills System Types\n *\n * Type definitions for the skills system that enables reusable,\n * shareable capabilities for the agent.\n */\n\n/**\n * A skill definition.\n */\nexport interface Skill {\n\t/** Unique skill name (used in .maestro/skills/<name>.md) */\n\tname: string;\n\t/** Human-readable description */\n\tdescription: string;\n\t/** The skill's prompt/instructions content */\n\tcontent: string;\n\t/** File path where the skill is defined */\n\tfilePath: string;\n\t/** Whether this skill is from the global config */\n\tisGlobal: boolean;\n\t/** Tags for categorization */\n\ttags?: string[];\n\t/** Required tools for this skill */\n\trequiredTools?: string[];\n\t/** Whether this skill is currently active in the session */\n\tactive?: boolean;\n}\n\n/**\n * Skill metadata parsed from frontmatter.\n */\nexport interface SkillMetadata {\n\t/** Skill name override */\n\tname?: string;\n\t/** Skill description */\n\tdescription?: string;\n\t/** Tags for categorization */\n\ttags?: string[];\n\t/** Required tools */\n\ttools?: string[];\n\t/** Trigger patterns (when to auto-activate) */\n\ttriggers?: string[];\n}\n\n/**\n * Result of loading skills from a directory.\n */\nexport interface SkillsLoadResult {\n\t/** Successfully loaded skills */\n\tskills: Skill[];\n\t/** Errors encountered during loading */\n\terrors: Array<{ file: string; error: string }>;\n}\n\n/**\n * Skill execution context.\n */\nexport interface SkillContext {\n\t/** Current working directory */\n\tcwd: string;\n\t/** Arguments passed to the skill */\n\targs?: string;\n\t/** Available tools */\n\ttools?: string[];\n\t/** Session ID */\n\tsessionId?: string;\n}\n\n/**\n * Options for skill activation.\n */\nexport interface SkillActivationOptions {\n\t/** Arguments to pass to the skill */\n\targs?: string;\n\t/** Whether to auto-deactivate after use */\n\tautoDeactivate?: boolean;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG","sourcesContent":["/**\n * Skills System Types\n *\n * Type definitions for the skills system that enables reusable,\n * shareable capabilities for the agent.\n */\n\n/**\n * A skill definition.\n */\nexport interface Skill {\n\t/** Unique skill name (used in .maestro/skills/<name>.md) */\n\tname: string;\n\t/** Human-readable description */\n\tdescription: string;\n\t/** The skill's prompt/instructions content */\n\tcontent: string;\n\t/** File path where the skill is defined */\n\tfilePath: string;\n\t/** Whether this skill is from the global config */\n\tisGlobal: boolean;\n\t/** Tags for categorization */\n\ttags?: string[];\n\t/** Required tools for this skill */\n\trequiredTools?: string[];\n\t/** Built-in Maestro tools this skill expects to use */\n\tbuiltinTools?: string[];\n\t/** Preferred model while this skill is active */\n\tmodel?: string;\n\t/** Preferred agent mode while this skill is active */\n\tmode?: string;\n\t/** Whether the skill should run in isolated context when supported */\n\tisolatedContext?: boolean;\n\t/** Whether this skill is currently active in the session */\n\tactive?: boolean;\n}\n\n/**\n * Skill metadata parsed from frontmatter.\n */\nexport interface SkillMetadata {\n\t/** Skill name override */\n\tname?: string;\n\t/** Skill description */\n\tdescription?: string;\n\t/** Tags for categorization */\n\ttags?: string[];\n\t/** Required tools */\n\ttools?: string[];\n\t/** Built-in Maestro tools */\n\tbuiltinTools?: string[];\n\t/** Preferred model */\n\tmodel?: string;\n\t/** Preferred mode */\n\tmode?: string;\n\t/** Trigger patterns (when to auto-activate) */\n\ttriggers?: string[];\n}\n\n/**\n * Result of loading skills from a directory.\n */\nexport interface SkillsLoadResult {\n\t/** Successfully loaded skills */\n\tskills: Skill[];\n\t/** Errors encountered during loading */\n\terrors: Array<{ file: string; error: string }>;\n}\n\n/**\n * Skill execution context.\n */\nexport interface SkillContext {\n\t/** Current working directory */\n\tcwd: string;\n\t/** Arguments passed to the skill */\n\targs?: string;\n\t/** Available tools */\n\ttools?: string[];\n\t/** Session ID */\n\tsessionId?: string;\n}\n\n/**\n * Options for skill activation.\n */\nexport interface SkillActivationOptions {\n\t/** Arguments to pass to the skill */\n\targs?: string;\n\t/** Whether to auto-deactivate after use */\n\tautoDeactivate?: boolean;\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { MaestroCorrelation } from "./maestro-event-bus.js";
|
|
2
|
+
export type AgentOperatingPlaneDataClassification = "public" | "internal" | "customer" | "restricted";
|
|
3
|
+
export type AgentOperatingPlaneRetentionClass = "ephemeral" | "operational_audit" | "security_audit" | "legal_hold";
|
|
4
|
+
export interface AgentOperatingPlaneCorrelationInput extends Partial<MaestroCorrelation> {
|
|
5
|
+
workspace_id: string;
|
|
6
|
+
session_id: string;
|
|
7
|
+
}
|
|
8
|
+
export interface AgentOperatingPlaneMetadataInput {
|
|
9
|
+
dataClassification?: AgentOperatingPlaneDataClassification;
|
|
10
|
+
retentionClass?: AgentOperatingPlaneRetentionClass;
|
|
11
|
+
safeSummary?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AgentOperatingPlaneContextInput {
|
|
14
|
+
correlation: AgentOperatingPlaneCorrelationInput;
|
|
15
|
+
metadata?: AgentOperatingPlaneMetadataInput;
|
|
16
|
+
}
|
|
17
|
+
export interface AgentOperatingPlaneContext {
|
|
18
|
+
correlation: MaestroCorrelation;
|
|
19
|
+
metadata: Record<string, string>;
|
|
20
|
+
}
|
|
21
|
+
export declare function buildAgentOperatingPlaneCorrelation(input: AgentOperatingPlaneCorrelationInput): MaestroCorrelation;
|
|
22
|
+
export declare function buildAgentOperatingPlaneMetadata(input?: AgentOperatingPlaneMetadataInput): Record<string, string>;
|
|
23
|
+
export declare function buildAgentOperatingPlaneContext(input: AgentOperatingPlaneContextInput): AgentOperatingPlaneContext;
|
|
24
|
+
//# sourceMappingURL=agent-operating-plane-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-operating-plane-context.d.ts","sourceRoot":"","sources":["../../src/telemetry/agent-operating-plane-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,MAAM,qCAAqC,GAC9C,QAAQ,GACR,UAAU,GACV,UAAU,GACV,YAAY,CAAC;AAEhB,MAAM,MAAM,iCAAiC,GAC1C,WAAW,GACX,mBAAmB,GACnB,gBAAgB,GAChB,YAAY,CAAC;AAEhB,MAAM,WAAW,mCAChB,SAAQ,OAAO,CAAC,kBAAkB,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gCAAgC;IAChD,kBAAkB,CAAC,EAAE,qCAAqC,CAAC;IAC3D,cAAc,CAAC,EAAE,iCAAiC,CAAC;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,+BAA+B;IAC/C,WAAW,EAAE,mCAAmC,CAAC;IACjD,QAAQ,CAAC,EAAE,gCAAgC,CAAC;CAC5C;AAED,MAAM,WAAW,0BAA0B;IAC1C,WAAW,EAAE,kBAAkB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAmBD,wBAAgB,mCAAmC,CAClD,KAAK,EAAE,mCAAmC,GACxC,kBAAkB,CAqBpB;AAED,wBAAgB,gCAAgC,CAC/C,KAAK,GAAE,gCAAqC,GAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB;AAED,wBAAgB,+BAA+B,CAC9C,KAAK,EAAE,+BAA+B,GACpC,0BAA0B,CAK5B"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
function cleanString(value) {
|
|
2
|
+
const cleanValue = value?.trim();
|
|
3
|
+
return cleanValue ? cleanValue : undefined;
|
|
4
|
+
}
|
|
5
|
+
function compactStringRecord(record) {
|
|
6
|
+
if (!record)
|
|
7
|
+
return undefined;
|
|
8
|
+
const compacted = Object.fromEntries(Object.entries(record)
|
|
9
|
+
.map(([key, value]) => [key, cleanString(value)])
|
|
10
|
+
.filter((entry) => Boolean(entry[1])));
|
|
11
|
+
return Object.keys(compacted).length > 0 ? compacted : undefined;
|
|
12
|
+
}
|
|
13
|
+
export function buildAgentOperatingPlaneCorrelation(input) {
|
|
14
|
+
return {
|
|
15
|
+
organization_id: cleanString(input.organization_id),
|
|
16
|
+
user_id: cleanString(input.user_id),
|
|
17
|
+
workspace_id: cleanString(input.workspace_id) ?? "unknown",
|
|
18
|
+
session_id: cleanString(input.session_id) ?? "unknown",
|
|
19
|
+
agent_run_id: cleanString(input.agent_run_id),
|
|
20
|
+
agent_run_step_id: cleanString(input.agent_run_step_id),
|
|
21
|
+
agent_id: cleanString(input.agent_id),
|
|
22
|
+
actor_id: cleanString(input.actor_id),
|
|
23
|
+
principal_id: cleanString(input.principal_id),
|
|
24
|
+
trace_id: cleanString(input.trace_id),
|
|
25
|
+
traceparent: cleanString(input.traceparent),
|
|
26
|
+
tracestate: cleanString(input.tracestate),
|
|
27
|
+
request_id: cleanString(input.request_id),
|
|
28
|
+
parent_event_id: cleanString(input.parent_event_id),
|
|
29
|
+
remote_runner_session_id: cleanString(input.remote_runner_session_id),
|
|
30
|
+
objective_id: cleanString(input.objective_id),
|
|
31
|
+
conversation_id: cleanString(input.conversation_id),
|
|
32
|
+
attributes: compactStringRecord(input.attributes),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function buildAgentOperatingPlaneMetadata(input = {}) {
|
|
36
|
+
const metadata = {};
|
|
37
|
+
const dataClassification = cleanString(input.dataClassification);
|
|
38
|
+
const retentionClass = cleanString(input.retentionClass);
|
|
39
|
+
const safeSummary = cleanString(input.safeSummary);
|
|
40
|
+
if (dataClassification)
|
|
41
|
+
metadata.data_classification = dataClassification;
|
|
42
|
+
if (retentionClass)
|
|
43
|
+
metadata.retention_class = retentionClass;
|
|
44
|
+
if (safeSummary)
|
|
45
|
+
metadata.safe_summary = safeSummary;
|
|
46
|
+
return metadata;
|
|
47
|
+
}
|
|
48
|
+
export function buildAgentOperatingPlaneContext(input) {
|
|
49
|
+
return {
|
|
50
|
+
correlation: buildAgentOperatingPlaneCorrelation(input.correlation),
|
|
51
|
+
metadata: buildAgentOperatingPlaneMetadata(input.metadata),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=agent-operating-plane-context.js.map
|