@evalops/maestro 0.10.17 → 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/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +6 -0
- package/dist/cli/commands/init.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 +136 -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 +49209 -26165
- 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/agent-bootstrap.d.ts +1 -0
- package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
- package/dist/evalops/agent-bootstrap.js +41 -1
- package/dist/evalops/agent-bootstrap.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 +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -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 +217 -0
- package/dist/platform/a2a-client.d.ts.map +1 -0
- package/dist/platform/a2a-client.js +589 -0
- package/dist/platform/a2a-client.js.map +1 -0
- 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 +2 -0
- package/dist/platform/client.d.ts.map +1 -1
- package/dist/platform/client.js +7 -14
- 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,398 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync, } from "node:fs";
|
|
3
|
+
import { constants, access } from "node:fs/promises";
|
|
4
|
+
import { basename, extname, join, resolve } from "node:path";
|
|
5
|
+
import { SKILL_FRONTMATTER_FIELDS, findSkillMd, parseFrontmatter, stringArrayValue, } from "./loader.js";
|
|
6
|
+
export const SKILL_BODY_MAX_LINES = 500;
|
|
7
|
+
export const SKILL_BODY_MAX_CHARS = 20_000;
|
|
8
|
+
const FIELD_SET = new Set(SKILL_FRONTMATTER_FIELDS);
|
|
9
|
+
const SKILL_NAME_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
10
|
+
function issue(code, severity, path, message) {
|
|
11
|
+
return { code, severity, path, message };
|
|
12
|
+
}
|
|
13
|
+
function isRecord(value) {
|
|
14
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
15
|
+
}
|
|
16
|
+
function validateSkillName(value, dirName, path) {
|
|
17
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
18
|
+
return [
|
|
19
|
+
issue("missing_name", "error", path, "Skill frontmatter requires name."),
|
|
20
|
+
];
|
|
21
|
+
}
|
|
22
|
+
const issues = [];
|
|
23
|
+
if (value.length > 64) {
|
|
24
|
+
issues.push(issue("name_too_long", "error", path, "Skill name must be <= 64 chars."));
|
|
25
|
+
}
|
|
26
|
+
if (!SKILL_NAME_PATTERN.test(value)) {
|
|
27
|
+
issues.push(issue("invalid_name", "error", path, "Skill name must use lowercase letters, numbers, and single hyphens."));
|
|
28
|
+
}
|
|
29
|
+
if (dirName !== "skills" && value !== dirName) {
|
|
30
|
+
issues.push(issue("name_mismatch", "error", path, `Skill name '${value}' must match directory '${dirName}'.`));
|
|
31
|
+
}
|
|
32
|
+
return issues;
|
|
33
|
+
}
|
|
34
|
+
function validateDescription(value, path) {
|
|
35
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
36
|
+
return [
|
|
37
|
+
issue("missing_description", "error", path, "Skill frontmatter requires description."),
|
|
38
|
+
];
|
|
39
|
+
}
|
|
40
|
+
const issues = [];
|
|
41
|
+
if (value.length > 1024) {
|
|
42
|
+
issues.push(issue("description_too_long", "error", path, "Skill description must be <= 1024 chars."));
|
|
43
|
+
}
|
|
44
|
+
if (!/\b(use|when)\b/i.test(value)) {
|
|
45
|
+
issues.push(issue("description_missing_when", "warning", path, 'Description should include when to use the skill, for example "Use when ...".'));
|
|
46
|
+
}
|
|
47
|
+
return issues;
|
|
48
|
+
}
|
|
49
|
+
function validateStringArrayField(frontmatter, field, path) {
|
|
50
|
+
const value = frontmatter[field];
|
|
51
|
+
if (value === undefined)
|
|
52
|
+
return [];
|
|
53
|
+
if (Array.isArray(value)) {
|
|
54
|
+
if (value.length === 0 ||
|
|
55
|
+
value.some((entry) => typeof entry !== "string" || entry.trim() === "")) {
|
|
56
|
+
return [
|
|
57
|
+
issue("invalid_string_list", "error", path, `${field} entries must all be non-empty strings.`),
|
|
58
|
+
];
|
|
59
|
+
}
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
const normalized = stringArrayValue(value);
|
|
63
|
+
if (!normalized || normalized.length === 0) {
|
|
64
|
+
return [
|
|
65
|
+
issue("invalid_string_list", "error", path, `${field} must be a non-empty string or list of strings.`),
|
|
66
|
+
];
|
|
67
|
+
}
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
function isBooleanFrontmatterValue(value) {
|
|
71
|
+
if (typeof value === "boolean")
|
|
72
|
+
return true;
|
|
73
|
+
if (typeof value === "string") {
|
|
74
|
+
const normalized = value.toLowerCase();
|
|
75
|
+
return normalized === "true" || normalized === "false";
|
|
76
|
+
}
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
function validateBody(body, path) {
|
|
80
|
+
const issues = [];
|
|
81
|
+
const lines = body.split("\n").length;
|
|
82
|
+
if (lines > SKILL_BODY_MAX_LINES) {
|
|
83
|
+
issues.push(issue("skill_oversize", "error", path, `SKILL.md body has ${lines} lines; maximum is ${SKILL_BODY_MAX_LINES}.`));
|
|
84
|
+
}
|
|
85
|
+
if (body.length > SKILL_BODY_MAX_CHARS) {
|
|
86
|
+
issues.push(issue("skill_oversize", "error", path, `SKILL.md body has ${body.length} chars; maximum is ${SKILL_BODY_MAX_CHARS}.`));
|
|
87
|
+
}
|
|
88
|
+
return issues;
|
|
89
|
+
}
|
|
90
|
+
function validateMcpJson(skillDir) {
|
|
91
|
+
const path = join(skillDir, "mcp.json");
|
|
92
|
+
if (!existsSync(path))
|
|
93
|
+
return [];
|
|
94
|
+
let parsed;
|
|
95
|
+
try {
|
|
96
|
+
parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
return [
|
|
100
|
+
issue("invalid_mcp_json", "error", path, `mcp.json must be valid JSON: ${error instanceof Error ? error.message : String(error)}`),
|
|
101
|
+
];
|
|
102
|
+
}
|
|
103
|
+
if (!isRecord(parsed)) {
|
|
104
|
+
return [
|
|
105
|
+
issue("invalid_mcp_json", "error", path, "mcp.json must be an object keyed by server name."),
|
|
106
|
+
];
|
|
107
|
+
}
|
|
108
|
+
const issues = [];
|
|
109
|
+
for (const [serverName, server] of Object.entries(parsed)) {
|
|
110
|
+
const serverPath = `${path}#${serverName}`;
|
|
111
|
+
if (!isRecord(server)) {
|
|
112
|
+
issues.push(issue("invalid_mcp_server", "error", serverPath, "MCP server config must be an object."));
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (typeof server.command !== "string" || server.command.trim() === "") {
|
|
116
|
+
issues.push(issue("invalid_mcp_command", "error", serverPath, "MCP server requires a non-empty command."));
|
|
117
|
+
}
|
|
118
|
+
if (!Array.isArray(server.includeTools) ||
|
|
119
|
+
server.includeTools.length === 0) {
|
|
120
|
+
issues.push(issue("mcp_tools_unfiltered", "error", serverPath, "MCP server must declare includeTools with at least one tool."));
|
|
121
|
+
}
|
|
122
|
+
else if (server.includeTools.some((tool) => typeof tool !== "string" || tool.trim() === "")) {
|
|
123
|
+
issues.push(issue("invalid_mcp_include_tools", "error", serverPath, "includeTools entries must be non-empty strings."));
|
|
124
|
+
}
|
|
125
|
+
if (server.args !== undefined &&
|
|
126
|
+
(!Array.isArray(server.args) ||
|
|
127
|
+
server.args.some((arg) => typeof arg !== "string"))) {
|
|
128
|
+
issues.push(issue("invalid_mcp_args", "error", serverPath, "MCP args must be a list of strings."));
|
|
129
|
+
}
|
|
130
|
+
if (server.env !== undefined && !isRecord(server.env)) {
|
|
131
|
+
issues.push(issue("invalid_mcp_env", "error", serverPath, "MCP env must be an object of string values."));
|
|
132
|
+
}
|
|
133
|
+
if (isRecord(server.env) &&
|
|
134
|
+
Object.values(server.env).some((value) => typeof value !== "string")) {
|
|
135
|
+
issues.push(issue("invalid_mcp_env", "error", serverPath, "MCP env values must be strings."));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return issues;
|
|
139
|
+
}
|
|
140
|
+
const DEFAULT_WINDOWS_EXECUTABLE_EXTENSIONS = ".COM;.EXE;.BAT;.CMD;.PS1";
|
|
141
|
+
function windowsExecutableExtensions(pathExt = process.env.PATHEXT) {
|
|
142
|
+
return new Set((pathExt || DEFAULT_WINDOWS_EXECUTABLE_EXTENSIONS)
|
|
143
|
+
.split(";")
|
|
144
|
+
.map((entry) => entry.trim().toUpperCase())
|
|
145
|
+
.filter(Boolean));
|
|
146
|
+
}
|
|
147
|
+
export function isWindowsRunnableToolboxEntry(path, pathExt = process.env.PATHEXT) {
|
|
148
|
+
const extension = extname(path).toUpperCase();
|
|
149
|
+
return Boolean(extension && windowsExecutableExtensions(pathExt).has(extension));
|
|
150
|
+
}
|
|
151
|
+
function hasWindowsRunnableToolboxCompanion(entry, directoryEntries, pathExt = process.env.PATHEXT) {
|
|
152
|
+
if (isWindowsRunnableToolboxEntry(entry, pathExt)) {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
const entryStem = basename(entry, extname(entry)).toLowerCase();
|
|
156
|
+
return directoryEntries.some((candidate) => {
|
|
157
|
+
if (candidate === entry) {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
if (!isWindowsRunnableToolboxEntry(candidate, pathExt)) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
return basename(candidate, extname(candidate)).toLowerCase() === entryStem;
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
export function shouldUseShellForToolboxDescribe(platform = process.platform) {
|
|
167
|
+
return platform === "win32";
|
|
168
|
+
}
|
|
169
|
+
export function toolboxDescribeSpawnCommand(path, platform = process.platform) {
|
|
170
|
+
return platform === "win32" ? `"${path}"` : path;
|
|
171
|
+
}
|
|
172
|
+
async function isExecutable(path, platform = process.platform) {
|
|
173
|
+
if (platform === "win32") {
|
|
174
|
+
return isWindowsRunnableToolboxEntry(path);
|
|
175
|
+
}
|
|
176
|
+
try {
|
|
177
|
+
await access(path, constants.X_OK);
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
async function validateToolbox(skillDir, options = {}) {
|
|
185
|
+
const toolboxDir = join(skillDir, "toolbox");
|
|
186
|
+
if (!existsSync(toolboxDir) || !statSync(toolboxDir).isDirectory())
|
|
187
|
+
return [];
|
|
188
|
+
const issues = [];
|
|
189
|
+
const directoryEntries = readdirSync(toolboxDir);
|
|
190
|
+
const platform = options.platform ?? process.platform;
|
|
191
|
+
let toolboxEntryCount = 0;
|
|
192
|
+
let runnableEntryCount = 0;
|
|
193
|
+
for (const entry of directoryEntries) {
|
|
194
|
+
if (entry.startsWith(".") || entry.toLowerCase() === "readme.md")
|
|
195
|
+
continue;
|
|
196
|
+
const path = join(toolboxDir, entry);
|
|
197
|
+
if (!statSync(path).isFile())
|
|
198
|
+
continue;
|
|
199
|
+
toolboxEntryCount += 1;
|
|
200
|
+
if (platform !== "win32" && isWindowsRunnableToolboxEntry(path)) {
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
if (platform === "win32" &&
|
|
204
|
+
!isWindowsRunnableToolboxEntry(path) &&
|
|
205
|
+
hasWindowsRunnableToolboxCompanion(entry, directoryEntries)) {
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
if (!(await isExecutable(path, platform))) {
|
|
209
|
+
issues.push(issue("toolbox_not_executable", "error", path, "Toolbox entries must be executable files."));
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
runnableEntryCount += 1;
|
|
213
|
+
if (options.describeToolbox) {
|
|
214
|
+
const result = spawnSync(toolboxDescribeSpawnCommand(path, platform), {
|
|
215
|
+
env: { ...process.env, MAESTRO_TOOLBOX_ACTION: "describe" },
|
|
216
|
+
encoding: "utf8",
|
|
217
|
+
shell: shouldUseShellForToolboxDescribe(platform),
|
|
218
|
+
timeout: 5000,
|
|
219
|
+
});
|
|
220
|
+
if (result.status !== 0) {
|
|
221
|
+
issues.push(issue("toolbox_describe_failed", "error", path, `Toolbox describe failed: ${result.stderr || result.stdout || "non-zero exit"}`));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (toolboxEntryCount > 0 &&
|
|
226
|
+
runnableEntryCount === 0 &&
|
|
227
|
+
issues.length === 0) {
|
|
228
|
+
issues.push(issue("toolbox_no_runnable_entries", "error", toolboxDir, "Toolbox must include at least one executable entry runnable on the target platform."));
|
|
229
|
+
}
|
|
230
|
+
return issues;
|
|
231
|
+
}
|
|
232
|
+
export async function lintSkillDirectory(skillDir, options = {}) {
|
|
233
|
+
const resolvedDir = resolve(skillDir);
|
|
234
|
+
const skillFile = findSkillMd(resolvedDir);
|
|
235
|
+
const issues = [];
|
|
236
|
+
if (!skillFile) {
|
|
237
|
+
return {
|
|
238
|
+
path: resolvedDir,
|
|
239
|
+
issues: [
|
|
240
|
+
issue("missing_skill_md", "error", resolvedDir, "Skill package requires SKILL.md."),
|
|
241
|
+
],
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
try {
|
|
245
|
+
const { frontmatter, body } = parseFrontmatter(readFileSync(skillFile, "utf8"));
|
|
246
|
+
for (const key of Object.keys(frontmatter)) {
|
|
247
|
+
if (!FIELD_SET.has(key)) {
|
|
248
|
+
issues.push(issue("unexpected_field", "error", skillFile, `Unexpected frontmatter field '${key}'.`));
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
issues.push(...validateSkillName(frontmatter.name, basename(resolvedDir), skillFile));
|
|
252
|
+
issues.push(...validateDescription(frontmatter.description, skillFile));
|
|
253
|
+
for (const field of ["allowed-tools", "builtin-tools"]) {
|
|
254
|
+
issues.push(...validateStringArrayField(frontmatter, field, skillFile));
|
|
255
|
+
}
|
|
256
|
+
if (frontmatter.compatibility !== undefined &&
|
|
257
|
+
typeof frontmatter.compatibility !== "string") {
|
|
258
|
+
issues.push(issue("invalid_compatibility", "error", skillFile, "compatibility must be a string."));
|
|
259
|
+
}
|
|
260
|
+
if (frontmatter.isolatedContext !== undefined &&
|
|
261
|
+
!isBooleanFrontmatterValue(frontmatter.isolatedContext)) {
|
|
262
|
+
issues.push(issue("invalid_isolated_context", "error", skillFile, "isolatedContext must be a boolean."));
|
|
263
|
+
}
|
|
264
|
+
issues.push(...validateBody(body, skillFile));
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
issues.push(issue("invalid_skill_md", "error", skillFile, error instanceof Error ? error.message : String(error)));
|
|
268
|
+
}
|
|
269
|
+
if (existsSync(join(resolvedDir, "reference")) &&
|
|
270
|
+
existsSync(join(resolvedDir, "references"))) {
|
|
271
|
+
issues.push(issue("duplicate_reference_dirs", "warning", resolvedDir, "Use either reference/ or references/; reference/ is preferred."));
|
|
272
|
+
}
|
|
273
|
+
issues.push(...validateMcpJson(resolvedDir));
|
|
274
|
+
issues.push(...(await validateToolbox(resolvedDir, options)));
|
|
275
|
+
return { path: resolvedDir, issues };
|
|
276
|
+
}
|
|
277
|
+
export async function lintSkillPaths(paths, options = {}) {
|
|
278
|
+
const results = [];
|
|
279
|
+
for (const path of paths) {
|
|
280
|
+
const resolved = resolve(path);
|
|
281
|
+
if (!existsSync(resolved)) {
|
|
282
|
+
results.push({
|
|
283
|
+
path: resolved,
|
|
284
|
+
issues: [
|
|
285
|
+
issue("missing_path", "error", resolved, "Skill path does not exist."),
|
|
286
|
+
],
|
|
287
|
+
});
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
const stat = statSync(resolved);
|
|
291
|
+
if (!stat.isDirectory()) {
|
|
292
|
+
results.push({
|
|
293
|
+
path: resolved,
|
|
294
|
+
issues: [
|
|
295
|
+
issue("invalid_path", "error", resolved, "Skill path must be a directory."),
|
|
296
|
+
],
|
|
297
|
+
});
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
if (findSkillMd(resolved)) {
|
|
301
|
+
results.push(await lintSkillDirectory(resolved, options));
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
for (const entry of readdirSync(resolved)) {
|
|
305
|
+
const child = join(resolved, entry);
|
|
306
|
+
if (statSync(child).isDirectory()) {
|
|
307
|
+
results.push(await lintSkillDirectory(child, options));
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return results;
|
|
312
|
+
}
|
|
313
|
+
export function formatSkillLintText(results) {
|
|
314
|
+
const lines = [];
|
|
315
|
+
let errorCount = 0;
|
|
316
|
+
let warningCount = 0;
|
|
317
|
+
for (const result of results) {
|
|
318
|
+
const issues = result.issues;
|
|
319
|
+
if (issues.length === 0) {
|
|
320
|
+
lines.push(`OK ${result.path}`);
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
lines.push(result.path);
|
|
324
|
+
for (const item of issues) {
|
|
325
|
+
if (item.severity === "error")
|
|
326
|
+
errorCount++;
|
|
327
|
+
if (item.severity === "warning")
|
|
328
|
+
warningCount++;
|
|
329
|
+
lines.push(` ${item.severity.toUpperCase()} ${item.code}: ${item.message}`);
|
|
330
|
+
if (item.path !== result.path) {
|
|
331
|
+
lines.push(` ${item.path}`);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
lines.push("");
|
|
336
|
+
lines.push(`${errorCount} error${errorCount === 1 ? "" : "s"}, ${warningCount} warning${warningCount === 1 ? "" : "s"}`);
|
|
337
|
+
return lines.join("\n");
|
|
338
|
+
}
|
|
339
|
+
export function hasSkillLintErrors(results) {
|
|
340
|
+
return results.some((result) => result.issues.some((item) => item.severity === "error"));
|
|
341
|
+
}
|
|
342
|
+
export function scaffoldSkill(baseDir, name, options = {}) {
|
|
343
|
+
if (!SKILL_NAME_PATTERN.test(name) || name.length > 64) {
|
|
344
|
+
throw new Error("Skill name must use lowercase letters, numbers, and single hyphens.");
|
|
345
|
+
}
|
|
346
|
+
const directory = resolve(baseDir, name);
|
|
347
|
+
if (existsSync(directory) && !options.force) {
|
|
348
|
+
throw new Error(`Skill already exists at ${directory}`);
|
|
349
|
+
}
|
|
350
|
+
const description = options.description ??
|
|
351
|
+
`${name.replace(/-/g, " ")}. Use when a task needs this packaged workflow.`;
|
|
352
|
+
const files = [];
|
|
353
|
+
mkdirSync(join(directory, "reference"), { recursive: true });
|
|
354
|
+
mkdirSync(join(directory, "scripts"), { recursive: true });
|
|
355
|
+
mkdirSync(join(directory, "toolbox"), { recursive: true });
|
|
356
|
+
const skillMd = join(directory, "SKILL.md");
|
|
357
|
+
const escapedDescription = description
|
|
358
|
+
.replace(/\\/g, "\\\\")
|
|
359
|
+
.replace(/"/g, '\\"');
|
|
360
|
+
writeFileSync(skillMd, [
|
|
361
|
+
"---",
|
|
362
|
+
`name: ${name}`,
|
|
363
|
+
`description: "${escapedDescription}"`,
|
|
364
|
+
"allowed-tools:",
|
|
365
|
+
" - read",
|
|
366
|
+
"builtin-tools:",
|
|
367
|
+
" - read",
|
|
368
|
+
"---",
|
|
369
|
+
"",
|
|
370
|
+
`# ${name}`,
|
|
371
|
+
"",
|
|
372
|
+
"## Workflow",
|
|
373
|
+
"",
|
|
374
|
+
"1. State the task-specific outcome.",
|
|
375
|
+
"2. Load only the reference files needed for the request.",
|
|
376
|
+
"3. Use bundled scripts or toolbox executables when they are more reliable than retyping long commands.",
|
|
377
|
+
"",
|
|
378
|
+
"## References",
|
|
379
|
+
"",
|
|
380
|
+
"- Read `reference/overview.md` when the user asks for implementation detail.",
|
|
381
|
+
"",
|
|
382
|
+
].join("\n"));
|
|
383
|
+
files.push(skillMd);
|
|
384
|
+
const reference = join(directory, "reference", "overview.md");
|
|
385
|
+
writeFileSync(reference, `# ${name} Reference\n\nAdd deeper examples, protocol notes, and troubleshooting details here. Keep this out of SKILL.md until needed.\n`);
|
|
386
|
+
files.push(reference);
|
|
387
|
+
const scriptsReadme = join(directory, "scripts", "README.md");
|
|
388
|
+
writeFileSync(scriptsReadme, "# Scripts\n\nPut deterministic helper scripts here. Agents should run these instead of retyping long workflows.\n");
|
|
389
|
+
files.push(scriptsReadme);
|
|
390
|
+
const toolboxReadme = join(directory, "toolbox", "README.md");
|
|
391
|
+
writeFileSync(toolboxReadme, "# Toolbox\n\nPut executable Toolbox protocol commands here. Each executable should support `MAESTRO_TOOLBOX_ACTION=describe`.\n");
|
|
392
|
+
files.push(toolboxReadme);
|
|
393
|
+
const mcpJson = join(directory, "mcp.json.example");
|
|
394
|
+
writeFileSync(mcpJson, '{\n "example-server": {\n "command": "npx",\n "args": ["-y", "example-mcp-server"],\n "includeTools": ["example_tool"]\n }\n}\n');
|
|
395
|
+
files.push(mcpJson);
|
|
396
|
+
return { name, directory, files };
|
|
397
|
+
}
|
|
398
|
+
//# sourceMappingURL=linter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linter.js","sourceRoot":"","sources":["../../src/skills/linter.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport {\n\texistsSync,\n\tmkdirSync,\n\treadFileSync,\n\treaddirSync,\n\tstatSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { constants, access } from \"node:fs/promises\";\nimport { basename, extname, join, resolve } from \"node:path\";\nimport {\n\tSKILL_FRONTMATTER_FIELDS,\n\tfindSkillMd,\n\tparseFrontmatter,\n\tstringArrayValue,\n} from \"./loader.js\";\n\nexport type SkillLintSeverity = \"error\" | \"warning\";\n\nexport interface SkillLintIssue {\n\tcode: string;\n\tseverity: SkillLintSeverity;\n\tmessage: string;\n\tpath: string;\n}\n\nexport interface SkillLintResult {\n\tpath: string;\n\tissues: SkillLintIssue[];\n}\n\nexport interface SkillScaffoldOptions {\n\tdescription?: string;\n\tforce?: boolean;\n}\n\nexport interface SkillScaffoldResult {\n\tname: string;\n\tdirectory: string;\n\tfiles: string[];\n}\n\ntype SkillLintOptions = {\n\tdescribeToolbox?: boolean;\n\tplatform?: NodeJS.Platform;\n};\n\nexport const SKILL_BODY_MAX_LINES = 500;\nexport const SKILL_BODY_MAX_CHARS = 20_000;\n\nconst FIELD_SET = new Set<string>(SKILL_FRONTMATTER_FIELDS);\nconst SKILL_NAME_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n\nfunction issue(\n\tcode: string,\n\tseverity: SkillLintSeverity,\n\tpath: string,\n\tmessage: string,\n): SkillLintIssue {\n\treturn { code, severity, path, message };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction validateSkillName(\n\tvalue: unknown,\n\tdirName: string,\n\tpath: string,\n): SkillLintIssue[] {\n\tif (typeof value !== \"string\" || value.trim().length === 0) {\n\t\treturn [\n\t\t\tissue(\"missing_name\", \"error\", path, \"Skill frontmatter requires name.\"),\n\t\t];\n\t}\n\n\tconst issues: SkillLintIssue[] = [];\n\tif (value.length > 64) {\n\t\tissues.push(\n\t\t\tissue(\"name_too_long\", \"error\", path, \"Skill name must be <= 64 chars.\"),\n\t\t);\n\t}\n\tif (!SKILL_NAME_PATTERN.test(value)) {\n\t\tissues.push(\n\t\t\tissue(\n\t\t\t\t\"invalid_name\",\n\t\t\t\t\"error\",\n\t\t\t\tpath,\n\t\t\t\t\"Skill name must use lowercase letters, numbers, and single hyphens.\",\n\t\t\t),\n\t\t);\n\t}\n\tif (dirName !== \"skills\" && value !== dirName) {\n\t\tissues.push(\n\t\t\tissue(\n\t\t\t\t\"name_mismatch\",\n\t\t\t\t\"error\",\n\t\t\t\tpath,\n\t\t\t\t`Skill name '${value}' must match directory '${dirName}'.`,\n\t\t\t),\n\t\t);\n\t}\n\treturn issues;\n}\n\nfunction validateDescription(value: unknown, path: string): SkillLintIssue[] {\n\tif (typeof value !== \"string\" || value.trim().length === 0) {\n\t\treturn [\n\t\t\tissue(\n\t\t\t\t\"missing_description\",\n\t\t\t\t\"error\",\n\t\t\t\tpath,\n\t\t\t\t\"Skill frontmatter requires description.\",\n\t\t\t),\n\t\t];\n\t}\n\n\tconst issues: SkillLintIssue[] = [];\n\tif (value.length > 1024) {\n\t\tissues.push(\n\t\t\tissue(\n\t\t\t\t\"description_too_long\",\n\t\t\t\t\"error\",\n\t\t\t\tpath,\n\t\t\t\t\"Skill description must be <= 1024 chars.\",\n\t\t\t),\n\t\t);\n\t}\n\tif (!/\\b(use|when)\\b/i.test(value)) {\n\t\tissues.push(\n\t\t\tissue(\n\t\t\t\t\"description_missing_when\",\n\t\t\t\t\"warning\",\n\t\t\t\tpath,\n\t\t\t\t'Description should include when to use the skill, for example \"Use when ...\".',\n\t\t\t),\n\t\t);\n\t}\n\treturn issues;\n}\n\nfunction validateStringArrayField(\n\tfrontmatter: Record<string, unknown>,\n\tfield: string,\n\tpath: string,\n): SkillLintIssue[] {\n\tconst value = frontmatter[field];\n\tif (value === undefined) return [];\n\tif (Array.isArray(value)) {\n\t\tif (\n\t\t\tvalue.length === 0 ||\n\t\t\tvalue.some((entry) => typeof entry !== \"string\" || entry.trim() === \"\")\n\t\t) {\n\t\t\treturn [\n\t\t\t\tissue(\n\t\t\t\t\t\"invalid_string_list\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\tpath,\n\t\t\t\t\t`${field} entries must all be non-empty strings.`,\n\t\t\t\t),\n\t\t\t];\n\t\t}\n\t\treturn [];\n\t}\n\tconst normalized = stringArrayValue(value);\n\tif (!normalized || normalized.length === 0) {\n\t\treturn [\n\t\t\tissue(\n\t\t\t\t\"invalid_string_list\",\n\t\t\t\t\"error\",\n\t\t\t\tpath,\n\t\t\t\t`${field} must be a non-empty string or list of strings.`,\n\t\t\t),\n\t\t];\n\t}\n\treturn [];\n}\n\nfunction isBooleanFrontmatterValue(value: unknown): boolean {\n\tif (typeof value === \"boolean\") return true;\n\tif (typeof value === \"string\") {\n\t\tconst normalized = value.toLowerCase();\n\t\treturn normalized === \"true\" || normalized === \"false\";\n\t}\n\treturn false;\n}\n\nfunction validateBody(body: string, path: string): SkillLintIssue[] {\n\tconst issues: SkillLintIssue[] = [];\n\tconst lines = body.split(\"\\n\").length;\n\tif (lines > SKILL_BODY_MAX_LINES) {\n\t\tissues.push(\n\t\t\tissue(\n\t\t\t\t\"skill_oversize\",\n\t\t\t\t\"error\",\n\t\t\t\tpath,\n\t\t\t\t`SKILL.md body has ${lines} lines; maximum is ${SKILL_BODY_MAX_LINES}.`,\n\t\t\t),\n\t\t);\n\t}\n\tif (body.length > SKILL_BODY_MAX_CHARS) {\n\t\tissues.push(\n\t\t\tissue(\n\t\t\t\t\"skill_oversize\",\n\t\t\t\t\"error\",\n\t\t\t\tpath,\n\t\t\t\t`SKILL.md body has ${body.length} chars; maximum is ${SKILL_BODY_MAX_CHARS}.`,\n\t\t\t),\n\t\t);\n\t}\n\treturn issues;\n}\n\nfunction validateMcpJson(skillDir: string): SkillLintIssue[] {\n\tconst path = join(skillDir, \"mcp.json\");\n\tif (!existsSync(path)) return [];\n\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(readFileSync(path, \"utf8\"));\n\t} catch (error) {\n\t\treturn [\n\t\t\tissue(\n\t\t\t\t\"invalid_mcp_json\",\n\t\t\t\t\"error\",\n\t\t\t\tpath,\n\t\t\t\t`mcp.json must be valid JSON: ${\n\t\t\t\t\terror instanceof Error ? error.message : String(error)\n\t\t\t\t}`,\n\t\t\t),\n\t\t];\n\t}\n\n\tif (!isRecord(parsed)) {\n\t\treturn [\n\t\t\tissue(\n\t\t\t\t\"invalid_mcp_json\",\n\t\t\t\t\"error\",\n\t\t\t\tpath,\n\t\t\t\t\"mcp.json must be an object keyed by server name.\",\n\t\t\t),\n\t\t];\n\t}\n\n\tconst issues: SkillLintIssue[] = [];\n\tfor (const [serverName, server] of Object.entries(parsed)) {\n\t\tconst serverPath = `${path}#${serverName}`;\n\t\tif (!isRecord(server)) {\n\t\t\tissues.push(\n\t\t\t\tissue(\n\t\t\t\t\t\"invalid_mcp_server\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\tserverPath,\n\t\t\t\t\t\"MCP server config must be an object.\",\n\t\t\t\t),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof server.command !== \"string\" || server.command.trim() === \"\") {\n\t\t\tissues.push(\n\t\t\t\tissue(\n\t\t\t\t\t\"invalid_mcp_command\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\tserverPath,\n\t\t\t\t\t\"MCP server requires a non-empty command.\",\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\t!Array.isArray(server.includeTools) ||\n\t\t\tserver.includeTools.length === 0\n\t\t) {\n\t\t\tissues.push(\n\t\t\t\tissue(\n\t\t\t\t\t\"mcp_tools_unfiltered\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\tserverPath,\n\t\t\t\t\t\"MCP server must declare includeTools with at least one tool.\",\n\t\t\t\t),\n\t\t\t);\n\t\t} else if (\n\t\t\tserver.includeTools.some(\n\t\t\t\t(tool) => typeof tool !== \"string\" || tool.trim() === \"\",\n\t\t\t)\n\t\t) {\n\t\t\tissues.push(\n\t\t\t\tissue(\n\t\t\t\t\t\"invalid_mcp_include_tools\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\tserverPath,\n\t\t\t\t\t\"includeTools entries must be non-empty strings.\",\n\t\t\t\t),\n\t\t\t);\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\tissues.push(\n\t\t\t\tissue(\n\t\t\t\t\t\"invalid_mcp_args\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\tserverPath,\n\t\t\t\t\t\"MCP args must be a list of strings.\",\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tif (server.env !== undefined && !isRecord(server.env)) {\n\t\t\tissues.push(\n\t\t\t\tissue(\n\t\t\t\t\t\"invalid_mcp_env\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\tserverPath,\n\t\t\t\t\t\"MCP env must be an object of string values.\",\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tisRecord(server.env) &&\n\t\t\tObject.values(server.env).some((value) => typeof value !== \"string\")\n\t\t) {\n\t\t\tissues.push(\n\t\t\t\tissue(\n\t\t\t\t\t\"invalid_mcp_env\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\tserverPath,\n\t\t\t\t\t\"MCP env values must be strings.\",\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\treturn issues;\n}\n\nconst DEFAULT_WINDOWS_EXECUTABLE_EXTENSIONS = \".COM;.EXE;.BAT;.CMD;.PS1\";\n\nfunction windowsExecutableExtensions(\n\tpathExt = process.env.PATHEXT,\n): Set<string> {\n\treturn new Set(\n\t\t(pathExt || DEFAULT_WINDOWS_EXECUTABLE_EXTENSIONS)\n\t\t\t.split(\";\")\n\t\t\t.map((entry) => entry.trim().toUpperCase())\n\t\t\t.filter(Boolean),\n\t);\n}\n\nexport function isWindowsRunnableToolboxEntry(\n\tpath: string,\n\tpathExt = process.env.PATHEXT,\n): boolean {\n\tconst extension = extname(path).toUpperCase();\n\treturn Boolean(\n\t\textension && windowsExecutableExtensions(pathExt).has(extension),\n\t);\n}\n\nfunction hasWindowsRunnableToolboxCompanion(\n\tentry: string,\n\tdirectoryEntries: string[],\n\tpathExt = process.env.PATHEXT,\n): boolean {\n\tif (isWindowsRunnableToolboxEntry(entry, pathExt)) {\n\t\treturn false;\n\t}\n\tconst entryStem = basename(entry, extname(entry)).toLowerCase();\n\treturn directoryEntries.some((candidate) => {\n\t\tif (candidate === entry) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!isWindowsRunnableToolboxEntry(candidate, pathExt)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn basename(candidate, extname(candidate)).toLowerCase() === entryStem;\n\t});\n}\n\nexport function shouldUseShellForToolboxDescribe(\n\tplatform: NodeJS.Platform = process.platform,\n): boolean {\n\treturn platform === \"win32\";\n}\n\nexport function toolboxDescribeSpawnCommand(\n\tpath: string,\n\tplatform: NodeJS.Platform = process.platform,\n): string {\n\treturn platform === \"win32\" ? `\"${path}\"` : path;\n}\n\nasync function isExecutable(\n\tpath: string,\n\tplatform: NodeJS.Platform = process.platform,\n): Promise<boolean> {\n\tif (platform === \"win32\") {\n\t\treturn isWindowsRunnableToolboxEntry(path);\n\t}\n\ttry {\n\t\tawait access(path, constants.X_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function validateToolbox(\n\tskillDir: string,\n\toptions: SkillLintOptions = {},\n): Promise<SkillLintIssue[]> {\n\tconst toolboxDir = join(skillDir, \"toolbox\");\n\tif (!existsSync(toolboxDir) || !statSync(toolboxDir).isDirectory()) return [];\n\n\tconst issues: SkillLintIssue[] = [];\n\tconst directoryEntries = readdirSync(toolboxDir);\n\tconst platform = options.platform ?? process.platform;\n\tlet toolboxEntryCount = 0;\n\tlet runnableEntryCount = 0;\n\tfor (const entry of directoryEntries) {\n\t\tif (entry.startsWith(\".\") || entry.toLowerCase() === \"readme.md\") continue;\n\t\tconst path = join(toolboxDir, entry);\n\t\tif (!statSync(path).isFile()) continue;\n\t\ttoolboxEntryCount += 1;\n\t\tif (platform !== \"win32\" && isWindowsRunnableToolboxEntry(path)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\tplatform === \"win32\" &&\n\t\t\t!isWindowsRunnableToolboxEntry(path) &&\n\t\t\thasWindowsRunnableToolboxCompanion(entry, directoryEntries)\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!(await isExecutable(path, platform))) {\n\t\t\tissues.push(\n\t\t\t\tissue(\n\t\t\t\t\t\"toolbox_not_executable\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\tpath,\n\t\t\t\t\t\"Toolbox entries must be executable files.\",\n\t\t\t\t),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\trunnableEntryCount += 1;\n\t\tif (options.describeToolbox) {\n\t\t\tconst result = spawnSync(toolboxDescribeSpawnCommand(path, platform), {\n\t\t\t\tenv: { ...process.env, MAESTRO_TOOLBOX_ACTION: \"describe\" },\n\t\t\t\tencoding: \"utf8\",\n\t\t\t\tshell: shouldUseShellForToolboxDescribe(platform),\n\t\t\t\ttimeout: 5000,\n\t\t\t});\n\t\t\tif (result.status !== 0) {\n\t\t\t\tissues.push(\n\t\t\t\t\tissue(\n\t\t\t\t\t\t\"toolbox_describe_failed\",\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\t`Toolbox describe failed: ${result.stderr || result.stdout || \"non-zero exit\"}`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\tif (\n\t\ttoolboxEntryCount > 0 &&\n\t\trunnableEntryCount === 0 &&\n\t\tissues.length === 0\n\t) {\n\t\tissues.push(\n\t\t\tissue(\n\t\t\t\t\"toolbox_no_runnable_entries\",\n\t\t\t\t\"error\",\n\t\t\t\ttoolboxDir,\n\t\t\t\t\"Toolbox must include at least one executable entry runnable on the target platform.\",\n\t\t\t),\n\t\t);\n\t}\n\treturn issues;\n}\n\nexport async function lintSkillDirectory(\n\tskillDir: string,\n\toptions: SkillLintOptions = {},\n): Promise<SkillLintResult> {\n\tconst resolvedDir = resolve(skillDir);\n\tconst skillFile = findSkillMd(resolvedDir);\n\tconst issues: SkillLintIssue[] = [];\n\tif (!skillFile) {\n\t\treturn {\n\t\t\tpath: resolvedDir,\n\t\t\tissues: [\n\t\t\t\tissue(\n\t\t\t\t\t\"missing_skill_md\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\tresolvedDir,\n\t\t\t\t\t\"Skill package requires SKILL.md.\",\n\t\t\t\t),\n\t\t\t],\n\t\t};\n\t}\n\n\ttry {\n\t\tconst { frontmatter, body } = parseFrontmatter(\n\t\t\treadFileSync(skillFile, \"utf8\"),\n\t\t);\n\t\tfor (const key of Object.keys(frontmatter)) {\n\t\t\tif (!FIELD_SET.has(key)) {\n\t\t\t\tissues.push(\n\t\t\t\t\tissue(\n\t\t\t\t\t\t\"unexpected_field\",\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t\tskillFile,\n\t\t\t\t\t\t`Unexpected frontmatter field '${key}'.`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tissues.push(\n\t\t\t...validateSkillName(frontmatter.name, basename(resolvedDir), skillFile),\n\t\t);\n\t\tissues.push(...validateDescription(frontmatter.description, skillFile));\n\t\tfor (const field of [\"allowed-tools\", \"builtin-tools\"]) {\n\t\t\tissues.push(...validateStringArrayField(frontmatter, field, skillFile));\n\t\t}\n\t\tif (\n\t\t\tfrontmatter.compatibility !== undefined &&\n\t\t\ttypeof frontmatter.compatibility !== \"string\"\n\t\t) {\n\t\t\tissues.push(\n\t\t\t\tissue(\n\t\t\t\t\t\"invalid_compatibility\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\tskillFile,\n\t\t\t\t\t\"compatibility must be a string.\",\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tfrontmatter.isolatedContext !== undefined &&\n\t\t\t!isBooleanFrontmatterValue(frontmatter.isolatedContext)\n\t\t) {\n\t\t\tissues.push(\n\t\t\t\tissue(\n\t\t\t\t\t\"invalid_isolated_context\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\tskillFile,\n\t\t\t\t\t\"isolatedContext must be a boolean.\",\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tissues.push(...validateBody(body, skillFile));\n\t} catch (error) {\n\t\tissues.push(\n\t\t\tissue(\n\t\t\t\t\"invalid_skill_md\",\n\t\t\t\t\"error\",\n\t\t\t\tskillFile,\n\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t),\n\t\t);\n\t}\n\n\tif (\n\t\texistsSync(join(resolvedDir, \"reference\")) &&\n\t\texistsSync(join(resolvedDir, \"references\"))\n\t) {\n\t\tissues.push(\n\t\t\tissue(\n\t\t\t\t\"duplicate_reference_dirs\",\n\t\t\t\t\"warning\",\n\t\t\t\tresolvedDir,\n\t\t\t\t\"Use either reference/ or references/; reference/ is preferred.\",\n\t\t\t),\n\t\t);\n\t}\n\tissues.push(...validateMcpJson(resolvedDir));\n\tissues.push(...(await validateToolbox(resolvedDir, options)));\n\treturn { path: resolvedDir, issues };\n}\n\nexport async function lintSkillPaths(\n\tpaths: string[],\n\toptions: SkillLintOptions = {},\n): Promise<SkillLintResult[]> {\n\tconst results: SkillLintResult[] = [];\n\tfor (const path of paths) {\n\t\tconst resolved = resolve(path);\n\t\tif (!existsSync(resolved)) {\n\t\t\tresults.push({\n\t\t\t\tpath: resolved,\n\t\t\t\tissues: [\n\t\t\t\t\tissue(\n\t\t\t\t\t\t\"missing_path\",\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t\tresolved,\n\t\t\t\t\t\t\"Skill path does not exist.\",\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst stat = statSync(resolved);\n\t\tif (!stat.isDirectory()) {\n\t\t\tresults.push({\n\t\t\t\tpath: resolved,\n\t\t\t\tissues: [\n\t\t\t\t\tissue(\n\t\t\t\t\t\t\"invalid_path\",\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t\tresolved,\n\t\t\t\t\t\t\"Skill path must be a directory.\",\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (findSkillMd(resolved)) {\n\t\t\tresults.push(await lintSkillDirectory(resolved, options));\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const entry of readdirSync(resolved)) {\n\t\t\tconst child = join(resolved, entry);\n\t\t\tif (statSync(child).isDirectory()) {\n\t\t\t\tresults.push(await lintSkillDirectory(child, options));\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n}\n\nexport function formatSkillLintText(results: SkillLintResult[]): string {\n\tconst lines: string[] = [];\n\tlet errorCount = 0;\n\tlet warningCount = 0;\n\tfor (const result of results) {\n\t\tconst issues = result.issues;\n\t\tif (issues.length === 0) {\n\t\t\tlines.push(`OK ${result.path}`);\n\t\t\tcontinue;\n\t\t}\n\t\tlines.push(result.path);\n\t\tfor (const item of issues) {\n\t\t\tif (item.severity === \"error\") errorCount++;\n\t\t\tif (item.severity === \"warning\") warningCount++;\n\t\t\tlines.push(\n\t\t\t\t` ${item.severity.toUpperCase()} ${item.code}: ${item.message}`,\n\t\t\t);\n\t\t\tif (item.path !== result.path) {\n\t\t\t\tlines.push(` ${item.path}`);\n\t\t\t}\n\t\t}\n\t}\n\tlines.push(\"\");\n\tlines.push(\n\t\t`${errorCount} error${errorCount === 1 ? \"\" : \"s\"}, ${warningCount} warning${\n\t\t\twarningCount === 1 ? \"\" : \"s\"\n\t\t}`,\n\t);\n\treturn lines.join(\"\\n\");\n}\n\nexport function hasSkillLintErrors(results: SkillLintResult[]): boolean {\n\treturn results.some((result) =>\n\t\tresult.issues.some((item) => item.severity === \"error\"),\n\t);\n}\n\nexport function scaffoldSkill(\n\tbaseDir: string,\n\tname: string,\n\toptions: SkillScaffoldOptions = {},\n): SkillScaffoldResult {\n\tif (!SKILL_NAME_PATTERN.test(name) || name.length > 64) {\n\t\tthrow new Error(\n\t\t\t\"Skill name must use lowercase letters, numbers, and single hyphens.\",\n\t\t);\n\t}\n\tconst directory = resolve(baseDir, name);\n\tif (existsSync(directory) && !options.force) {\n\t\tthrow new Error(`Skill already exists at ${directory}`);\n\t}\n\n\tconst description =\n\t\toptions.description ??\n\t\t`${name.replace(/-/g, \" \")}. Use when a task needs this packaged workflow.`;\n\tconst files: string[] = [];\n\tmkdirSync(join(directory, \"reference\"), { recursive: true });\n\tmkdirSync(join(directory, \"scripts\"), { recursive: true });\n\tmkdirSync(join(directory, \"toolbox\"), { recursive: true });\n\n\tconst skillMd = join(directory, \"SKILL.md\");\n\tconst escapedDescription = description\n\t\t.replace(/\\\\/g, \"\\\\\\\\\")\n\t\t.replace(/\"/g, '\\\\\"');\n\twriteFileSync(\n\t\tskillMd,\n\t\t[\n\t\t\t\"---\",\n\t\t\t`name: ${name}`,\n\t\t\t`description: \"${escapedDescription}\"`,\n\t\t\t\"allowed-tools:\",\n\t\t\t\" - read\",\n\t\t\t\"builtin-tools:\",\n\t\t\t\" - read\",\n\t\t\t\"---\",\n\t\t\t\"\",\n\t\t\t`# ${name}`,\n\t\t\t\"\",\n\t\t\t\"## Workflow\",\n\t\t\t\"\",\n\t\t\t\"1. State the task-specific outcome.\",\n\t\t\t\"2. Load only the reference files needed for the request.\",\n\t\t\t\"3. Use bundled scripts or toolbox executables when they are more reliable than retyping long commands.\",\n\t\t\t\"\",\n\t\t\t\"## References\",\n\t\t\t\"\",\n\t\t\t\"- Read `reference/overview.md` when the user asks for implementation detail.\",\n\t\t\t\"\",\n\t\t].join(\"\\n\"),\n\t);\n\tfiles.push(skillMd);\n\n\tconst reference = join(directory, \"reference\", \"overview.md\");\n\twriteFileSync(\n\t\treference,\n\t\t`# ${name} Reference\\n\\nAdd deeper examples, protocol notes, and troubleshooting details here. Keep this out of SKILL.md until needed.\\n`,\n\t);\n\tfiles.push(reference);\n\n\tconst scriptsReadme = join(directory, \"scripts\", \"README.md\");\n\twriteFileSync(\n\t\tscriptsReadme,\n\t\t\"# Scripts\\n\\nPut deterministic helper scripts here. Agents should run these instead of retyping long workflows.\\n\",\n\t);\n\tfiles.push(scriptsReadme);\n\n\tconst toolboxReadme = join(directory, \"toolbox\", \"README.md\");\n\twriteFileSync(\n\t\ttoolboxReadme,\n\t\t\"# Toolbox\\n\\nPut executable Toolbox protocol commands here. Each executable should support `MAESTRO_TOOLBOX_ACTION=describe`.\\n\",\n\t);\n\tfiles.push(toolboxReadme);\n\n\tconst mcpJson = join(directory, \"mcp.json.example\");\n\twriteFileSync(\n\t\tmcpJson,\n\t\t'{\\n \"example-server\": {\\n \"command\": \"npx\",\\n \"args\": [\"-y\", \"example-mcp-server\"],\\n \"includeTools\": [\"example_tool\"]\\n }\\n}\\n',\n\t);\n\tfiles.push(mcpJson);\n\n\treturn { name, directory, files };\n}\n"]}
|
package/dist/skills/loader.d.ts
CHANGED
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
* - SKILL.md or skill.md - Main skill file with YAML frontmatter
|
|
17
17
|
* - Optional: scripts/, references/, assets/ directories
|
|
18
18
|
*/
|
|
19
|
+
/** Allowed frontmatter fields per Agent Skills spec */
|
|
20
|
+
export declare const SKILL_FRONTMATTER_FIELDS: readonly ["name", "description", "license", "compatibility", "allowed-tools", "argument-hint", "builtin-tools", "model", "mode", "isolatedContext", "metadata", "tags", "author", "version", "triggers"];
|
|
19
21
|
/**
|
|
20
22
|
* Skill definition from SKILL.md frontmatter (per Agent Skills spec).
|
|
21
23
|
*/
|
|
@@ -28,8 +30,18 @@ export interface SkillDefinition {
|
|
|
28
30
|
license?: string;
|
|
29
31
|
/** Compatibility/environment requirements (max 500 chars) */
|
|
30
32
|
compatibility?: string;
|
|
31
|
-
/**
|
|
32
|
-
allowedTools?: string;
|
|
33
|
+
/** Pre-approved MCP/toolbox tools this skill can use */
|
|
34
|
+
allowedTools?: string[];
|
|
35
|
+
/** Built-in Maestro tools this skill needs */
|
|
36
|
+
builtinTools?: string[];
|
|
37
|
+
/** Argument hint shown by authoring surfaces */
|
|
38
|
+
argumentHint?: string;
|
|
39
|
+
/** Preferred model while this skill is active */
|
|
40
|
+
model?: string;
|
|
41
|
+
/** Preferred agent mode while this skill is active */
|
|
42
|
+
mode?: string;
|
|
43
|
+
/** Whether the skill should run in isolated context when supported */
|
|
44
|
+
isolatedContext?: boolean;
|
|
33
45
|
/** Additional key-value metadata */
|
|
34
46
|
metadata?: Record<string, string>;
|
|
35
47
|
/** @deprecated Use metadata instead */
|
|
@@ -62,10 +74,16 @@ export interface LoadedSkill extends SkillDefinition {
|
|
|
62
74
|
export interface SkillResourceDirs {
|
|
63
75
|
/** Path to scripts directory if it exists */
|
|
64
76
|
scriptsDir?: string;
|
|
65
|
-
/** Path to
|
|
77
|
+
/** Path to Sourcegraph/Amp-style singular reference directory if it exists */
|
|
78
|
+
referenceDir?: string;
|
|
79
|
+
/** Path to legacy/plural references directory if it exists */
|
|
66
80
|
referencesDir?: string;
|
|
67
81
|
/** Path to assets directory if it exists */
|
|
68
82
|
assetsDir?: string;
|
|
83
|
+
/** Path to toolbox executable directory if it exists */
|
|
84
|
+
toolboxDir?: string;
|
|
85
|
+
/** Path to bundled MCP config if it exists */
|
|
86
|
+
mcpJsonPath?: string;
|
|
69
87
|
}
|
|
70
88
|
/**
|
|
71
89
|
* A bundled resource file within a skill.
|
|
@@ -83,9 +101,21 @@ export interface SkillResource {
|
|
|
83
101
|
*/
|
|
84
102
|
export declare class SkillLoadError extends Error {
|
|
85
103
|
readonly path: string;
|
|
86
|
-
readonly code: "MISSING_FRONTMATTER" | "INVALID_YAML" | "INVALID_NAME" | "INVALID_DESCRIPTION" | "INVALID_COMPATIBILITY" | "UNEXPECTED_FIELDS" | "NAME_MISMATCH" | "READ_ERROR";
|
|
87
|
-
constructor(message: string, path: string, code: "MISSING_FRONTMATTER" | "INVALID_YAML" | "INVALID_NAME" | "INVALID_DESCRIPTION" | "INVALID_COMPATIBILITY" | "UNEXPECTED_FIELDS" | "NAME_MISMATCH" | "READ_ERROR");
|
|
104
|
+
readonly code: "MISSING_FRONTMATTER" | "INVALID_YAML" | "INVALID_NAME" | "INVALID_DESCRIPTION" | "INVALID_COMPATIBILITY" | "INVALID_TOOL_LIST" | "UNEXPECTED_FIELDS" | "NAME_MISMATCH" | "READ_ERROR";
|
|
105
|
+
constructor(message: string, path: string, code: "MISSING_FRONTMATTER" | "INVALID_YAML" | "INVALID_NAME" | "INVALID_DESCRIPTION" | "INVALID_COMPATIBILITY" | "INVALID_TOOL_LIST" | "UNEXPECTED_FIELDS" | "NAME_MISMATCH" | "READ_ERROR");
|
|
88
106
|
}
|
|
107
|
+
export declare function stringArrayValue(value: unknown): string[] | undefined;
|
|
108
|
+
/**
|
|
109
|
+
* Find SKILL.md file (case-insensitive per spec).
|
|
110
|
+
*/
|
|
111
|
+
export declare function findSkillMd(dir: string): string | null;
|
|
112
|
+
/**
|
|
113
|
+
* Parse YAML frontmatter from markdown content.
|
|
114
|
+
*/
|
|
115
|
+
export declare function parseFrontmatter(content: string): {
|
|
116
|
+
frontmatter: Record<string, unknown>;
|
|
117
|
+
body: string;
|
|
118
|
+
};
|
|
89
119
|
/**
|
|
90
120
|
* Load all available skills from system, user, and project directories.
|
|
91
121
|
*
|
|
@@ -113,7 +143,7 @@ export declare function searchSkills(skills: LoadedSkill[], query: string): Load
|
|
|
113
143
|
* Convert skill to dictionary (per Agent Skills SDK).
|
|
114
144
|
* Excludes undefined values.
|
|
115
145
|
*/
|
|
116
|
-
export declare function skillToDict(skill: LoadedSkill): Record<string, string | Record<string, string>>;
|
|
146
|
+
export declare function skillToDict(skill: LoadedSkill): Record<string, string | string[] | boolean | Record<string, string>>;
|
|
117
147
|
/**
|
|
118
148
|
* Convert skill to JSON string.
|
|
119
149
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"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"}
|