@evalops/maestro 0.10.50 → 0.10.51
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/dist/agent/agent-outcome.d.ts +54 -0
- package/dist/agent/agent-outcome.d.ts.map +1 -0
- package/dist/agent/agent-outcome.js +142 -0
- package/dist/agent/agent-outcome.js.map +1 -0
- package/dist/agent/agent-resume.d.ts.map +1 -1
- package/dist/agent/agent-resume.js +3 -3
- package/dist/agent/agent-resume.js.map +1 -1
- package/dist/agent/agent-run-summary.d.ts +37 -0
- package/dist/agent/agent-run-summary.d.ts.map +1 -0
- package/dist/agent/agent-run-summary.js +15 -0
- package/dist/agent/agent-run-summary.js.map +1 -0
- package/dist/agent/agent-work-board.d.ts +82 -0
- package/dist/agent/agent-work-board.d.ts.map +1 -0
- package/dist/agent/agent-work-board.js +312 -0
- package/dist/agent/agent-work-board.js.map +1 -0
- package/dist/agent/auto-compaction.d.ts +7 -2
- package/dist/agent/auto-compaction.d.ts.map +1 -1
- package/dist/agent/auto-compaction.js +23 -10
- package/dist/agent/auto-compaction.js.map +1 -1
- package/dist/agent/mission-artifacts.d.ts +62 -0
- package/dist/agent/mission-artifacts.d.ts.map +1 -0
- package/dist/agent/mission-artifacts.js +438 -0
- package/dist/agent/mission-artifacts.js.map +1 -0
- package/dist/agent/mission-manifest.d.ts +139 -3
- package/dist/agent/mission-manifest.d.ts.map +1 -1
- package/dist/agent/mission-manifest.js +549 -3
- package/dist/agent/mission-manifest.js.map +1 -1
- package/dist/agent/mission-store.d.ts +80 -0
- package/dist/agent/mission-store.d.ts.map +1 -0
- package/dist/agent/mission-store.js +603 -0
- package/dist/agent/mission-store.js.map +1 -0
- package/dist/agent/modes.d.ts +2 -2
- package/dist/agent/modes.d.ts.map +1 -1
- package/dist/agent/modes.js +10 -3
- package/dist/agent/modes.js.map +1 -1
- package/dist/agent/providers/codex-app-server.d.ts.map +1 -1
- package/dist/agent/providers/codex-app-server.js +1 -3
- package/dist/agent/providers/codex-app-server.js.map +1 -1
- package/dist/agent/providers/google-gemini-cli.js +203 -107
- package/dist/agent/providers/google.js +100 -41
- package/dist/agent/providers/scripted.d.ts.map +1 -1
- package/dist/agent/providers/scripted.js +1 -3
- package/dist/agent/providers/scripted.js.map +1 -1
- package/dist/agent/providers/validation.d.ts.map +1 -1
- package/dist/agent/providers/validation.js +1 -3
- package/dist/agent/providers/validation.js.map +1 -1
- package/dist/agent/providers/vertex.js +203 -107
- package/dist/agent/snapshot-store.d.ts +32 -0
- package/dist/agent/snapshot-store.d.ts.map +1 -0
- package/dist/agent/snapshot-store.js +195 -0
- package/dist/agent/snapshot-store.js.map +1 -0
- package/dist/agent/specialist-profiles.d.ts +36 -0
- package/dist/agent/specialist-profiles.d.ts.map +1 -0
- package/dist/agent/specialist-profiles.js +159 -0
- package/dist/agent/specialist-profiles.js.map +1 -0
- package/dist/agent/subagent-specs.d.ts +4 -1
- package/dist/agent/subagent-specs.d.ts.map +1 -1
- package/dist/agent/subagent-specs.js +81 -8
- package/dist/agent/subagent-specs.js.map +1 -1
- package/dist/agent/swarm/coverage-gate.d.ts +37 -0
- package/dist/agent/swarm/coverage-gate.d.ts.map +1 -0
- package/dist/agent/swarm/coverage-gate.js +48 -0
- package/dist/agent/swarm/coverage-gate.js.map +1 -0
- package/dist/agent/swarm/executor.d.ts +1 -0
- package/dist/agent/swarm/executor.d.ts.map +1 -1
- package/dist/agent/swarm/executor.js +151 -15
- package/dist/agent/swarm/executor.js.map +1 -1
- package/dist/agent/swarm/orchestrator-prompt.d.ts +25 -0
- package/dist/agent/swarm/orchestrator-prompt.d.ts.map +1 -0
- package/dist/agent/swarm/orchestrator-prompt.js +48 -0
- package/dist/agent/swarm/orchestrator-prompt.js.map +1 -0
- package/dist/agent/swarm/plan-parser.d.ts.map +1 -1
- package/dist/agent/swarm/plan-parser.js +27 -2
- package/dist/agent/swarm/plan-parser.js.map +1 -1
- package/dist/agent/swarm/types.d.ts +17 -0
- package/dist/agent/swarm/types.d.ts.map +1 -1
- package/dist/agent/swarm/types.js.map +1 -1
- package/dist/agent/swarm/validation-directive.d.ts +21 -0
- package/dist/agent/swarm/validation-directive.d.ts.map +1 -0
- package/dist/agent/swarm/validation-directive.js +25 -0
- package/dist/agent/swarm/validation-directive.js.map +1 -0
- package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
- package/dist/agent/transport/tool-execution-bridge.js +4 -1
- package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
- package/dist/api/enterprise-routes.d.ts.map +1 -1
- package/dist/api/enterprise-routes.js +87 -10
- package/dist/api/enterprise-routes.js.map +1 -1
- package/dist/api/org-settings-merge.d.ts +12 -0
- package/dist/api/org-settings-merge.d.ts.map +1 -0
- package/dist/api/org-settings-merge.js +38 -0
- package/dist/api/org-settings-merge.js.map +1 -0
- package/dist/api/user-settings-merge.d.ts +16 -0
- package/dist/api/user-settings-merge.d.ts.map +1 -0
- package/dist/api/user-settings-merge.js +37 -0
- package/dist/api/user-settings-merge.js.map +1 -0
- package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -1
- package/dist/app-server/daemon-lifecycle-api.js +1 -3
- package/dist/app-server/daemon-lifecycle-api.js.map +1 -1
- package/dist/app-server/external-agent-import-api.d.ts.map +1 -1
- package/dist/app-server/external-agent-import-api.js +1 -3
- package/dist/app-server/external-agent-import-api.js.map +1 -1
- package/dist/app-server/network-governance-api.d.ts.map +1 -1
- package/dist/app-server/network-governance-api.js +1 -3
- package/dist/app-server/network-governance-api.js.map +1 -1
- package/dist/app-server/plugin-bundle-api.d.ts.map +1 -1
- package/dist/app-server/plugin-bundle-api.js +1 -3
- package/dist/app-server/plugin-bundle-api.js.map +1 -1
- package/dist/app-server/policy-control-api.d.ts.map +1 -1
- package/dist/app-server/policy-control-api.js +1 -3
- package/dist/app-server/policy-control-api.js.map +1 -1
- package/dist/app-server/protocol-modes-api.d.ts.map +1 -1
- package/dist/app-server/protocol-modes-api.js +1 -3
- package/dist/app-server/protocol-modes-api.js.map +1 -1
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +15 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/a2a.d.ts.map +1 -1
- package/dist/cli/commands/a2a.js +1 -3
- package/dist/cli/commands/a2a.js.map +1 -1
- package/dist/cli/commands/agents.d.ts +4 -0
- package/dist/cli/commands/agents.d.ts.map +1 -1
- package/dist/cli/commands/agents.js +149 -0
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/mission.d.ts +4 -0
- package/dist/cli/commands/mission.d.ts.map +1 -0
- package/dist/cli/commands/mission.js +196 -0
- package/dist/cli/commands/mission.js.map +1 -0
- package/dist/cli/commands/value.d.ts +10 -0
- package/dist/cli/commands/value.d.ts.map +1 -0
- package/dist/cli/commands/value.js +33 -0
- package/dist/cli/commands/value.js.map +1 -0
- package/dist/cli/headless-protocol.d.ts.map +1 -1
- package/dist/cli/headless-protocol.js +1 -3
- package/dist/cli/headless-protocol.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +10 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/system-prompt.d.ts.map +1 -1
- package/dist/cli/system-prompt.js +38 -7
- package/dist/cli/system-prompt.js.map +1 -1
- package/dist/cli-runtime.js +7756 -2800
- package/dist/cli-tui/client-tools/client-tool-controller.d.ts.map +1 -1
- package/dist/cli-tui/client-tools/client-tool-controller.js +1 -3
- package/dist/cli-tui/client-tools/client-tool-controller.js.map +1 -1
- package/dist/cli-tui/commands/undo-handlers.d.ts.map +1 -1
- package/dist/cli-tui/commands/undo-handlers.js +7 -2
- package/dist/cli-tui/commands/undo-handlers.js.map +1 -1
- package/dist/cli-tui/tui-renderer/skills-controller.d.ts +3 -0
- package/dist/cli-tui/tui-renderer/skills-controller.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer/skills-controller.js +77 -33
- package/dist/cli-tui/tui-renderer/skills-controller.js.map +1 -1
- package/dist/codex/app-server-client.d.ts.map +1 -1
- package/dist/codex/app-server-client.js +1 -3
- package/dist/codex/app-server-client.js.map +1 -1
- package/dist/codex/compatibility.d.ts.map +1 -1
- package/dist/codex/compatibility.js +1 -3
- package/dist/codex/compatibility.js.map +1 -1
- package/dist/codex/subagent-dispatch-table.d.ts +8 -0
- package/dist/codex/subagent-dispatch-table.d.ts.map +1 -1
- package/dist/codex/subagent-dispatch-table.js +23 -0
- package/dist/codex/subagent-dispatch-table.js.map +1 -1
- package/dist/context/manifest.d.ts.map +1 -1
- package/dist/context/manifest.js +1 -3
- package/dist/context/manifest.js.map +1 -1
- package/dist/conversation/render-model.d.ts +0 -36
- package/dist/conversation/render-model.d.ts.map +1 -1
- package/dist/conversation/render-model.js +1 -3
- package/dist/conversation/render-model.js.map +1 -1
- package/dist/customer-value/ambient-learning.d.ts +75 -0
- package/dist/customer-value/ambient-learning.d.ts.map +1 -0
- package/dist/customer-value/ambient-learning.js +472 -0
- package/dist/customer-value/ambient-learning.js.map +1 -0
- package/dist/customer-value/internal-helpers.d.ts +13 -0
- package/dist/customer-value/internal-helpers.d.ts.map +1 -0
- package/dist/customer-value/internal-helpers.js +70 -0
- package/dist/customer-value/internal-helpers.js.map +1 -0
- package/dist/customer-value/report.d.ts +282 -0
- package/dist/customer-value/report.d.ts.map +1 -0
- package/dist/customer-value/report.js +2085 -0
- package/dist/customer-value/report.js.map +1 -0
- package/dist/db/schema.d.ts +5 -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.map +1 -1
- package/dist/evalops/agent-bootstrap.js +1 -3
- package/dist/evalops/agent-bootstrap.js.map +1 -1
- package/dist/evalops/agent-mcp-metadata.d.ts.map +1 -1
- package/dist/evalops/agent-mcp-metadata.js +1 -3
- package/dist/evalops/agent-mcp-metadata.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/installers/maestro-review-workflow.d.ts +38 -0
- package/dist/installers/maestro-review-workflow.d.ts.map +1 -0
- package/dist/installers/maestro-review-workflow.js +163 -0
- package/dist/installers/maestro-review-workflow.js.map +1 -0
- package/dist/load-env.d.ts.map +1 -1
- package/dist/load-env.js +2 -1
- package/dist/load-env.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +92 -3
- package/dist/main.js.map +1 -1
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/mcp/config.js +1 -3
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/elicitation.d.ts.map +1 -1
- package/dist/mcp/elicitation.js +1 -3
- package/dist/mcp/elicitation.js.map +1 -1
- package/dist/mcp/official-registry.d.ts.map +1 -1
- package/dist/mcp/official-registry.js +1 -3
- package/dist/mcp/official-registry.js.map +1 -1
- package/dist/mcp/workspace-trust.d.ts.map +1 -1
- package/dist/mcp/workspace-trust.js +1 -3
- package/dist/mcp/workspace-trust.js.map +1 -1
- package/dist/memory/service-client.d.ts.map +1 -1
- package/dist/memory/service-client.js +1 -3
- package/dist/memory/service-client.js.map +1 -1
- package/dist/models/config-loader.d.ts.map +1 -1
- package/dist/models/config-loader.js +1 -3
- package/dist/models/config-loader.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/index.d.ts +1 -0
- package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/index.js +1 -0
- package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts +61 -0
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts.map +1 -0
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js +183 -0
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js.map +1 -0
- package/dist/node_modules/@evalops/contracts/package.json +1 -1
- package/dist/node_modules/@evalops/tui/package.json +1 -1
- package/dist/oauth/connectors.d.ts.map +1 -1
- package/dist/oauth/connectors.js +1 -3
- package/dist/oauth/connectors.js.map +1 -1
- package/dist/oauth/evalops.d.ts.map +1 -1
- package/dist/oauth/evalops.js +1 -3
- package/dist/oauth/evalops.js.map +1 -1
- package/dist/platform/a2a-client.d.ts.map +1 -1
- package/dist/platform/a2a-client.js +1 -3
- package/dist/platform/a2a-client.js.map +1 -1
- package/dist/platform/a2a-cockpit.d.ts +1 -0
- package/dist/platform/a2a-cockpit.d.ts.map +1 -1
- package/dist/platform/a2a-cockpit.js +42 -11
- package/dist/platform/a2a-cockpit.js.map +1 -1
- package/dist/platform/a2a-completion-audit.d.ts +1 -1
- package/dist/platform/a2a-completion-audit.d.ts.map +1 -1
- package/dist/platform/a2a-completion-audit.js +7 -11
- package/dist/platform/a2a-completion-audit.js.map +1 -1
- package/dist/platform/a2a-maestro-peer.js +16 -0
- package/dist/platform/a2a-maestro-peer.js.map +1 -1
- package/dist/platform/a2a-peer-pairing.d.ts.map +1 -1
- package/dist/platform/a2a-peer-pairing.js +1 -3
- package/dist/platform/a2a-peer-pairing.js.map +1 -1
- package/dist/platform/a2a-peer-registry.d.ts.map +1 -1
- package/dist/platform/a2a-peer-registry.js +1 -3
- package/dist/platform/a2a-peer-registry.js.map +1 -1
- package/dist/platform/a2a-task-ledger.d.ts +20 -0
- package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
- package/dist/platform/a2a-task-ledger.js +207 -11
- package/dist/platform/a2a-task-ledger.js.map +1 -1
- package/dist/platform/a2a-work-graph.d.ts.map +1 -1
- package/dist/platform/a2a-work-graph.js +1 -3
- package/dist/platform/a2a-work-graph.js.map +1 -1
- package/dist/platform/operating-layer.d.ts.map +1 -1
- package/dist/platform/operating-layer.js +14 -8
- package/dist/platform/operating-layer.js.map +1 -1
- package/dist/platform/tool-execution-client.d.ts.map +1 -1
- package/dist/platform/tool-execution-client.js +19 -2
- package/dist/platform/tool-execution-client.js.map +1 -1
- package/dist/providers/auth.d.ts.map +1 -1
- package/dist/providers/auth.js +1 -3
- package/dist/providers/auth.js.map +1 -1
- package/dist/runtime/env.d.ts +9 -1
- package/dist/runtime/env.d.ts.map +1 -1
- package/dist/runtime/env.js +63 -1
- package/dist/runtime/env.js.map +1 -1
- package/dist/safety/policy.d.ts.map +1 -1
- package/dist/safety/policy.js +1 -4
- package/dist/safety/policy.js.map +1 -1
- package/dist/sandbox/docker-sandbox.d.ts.map +1 -1
- package/dist/sandbox/docker-sandbox.js +6 -1
- package/dist/sandbox/docker-sandbox.js.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.js +1 -3
- package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
- package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
- package/dist/server/handlers/platform-a2a-push.js +53 -2
- package/dist/server/handlers/platform-a2a-push.js.map +1 -1
- package/dist/server/handlers/runtime-app-server-ws.d.ts.map +1 -1
- package/dist/server/handlers/runtime-app-server-ws.js +1 -3
- package/dist/server/handlers/runtime-app-server-ws.js.map +1 -1
- package/dist/server/headless-runtime-service.d.ts +16 -0
- package/dist/server/headless-runtime-service.d.ts.map +1 -1
- package/dist/server/headless-runtime-service.js +232 -206
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
- package/dist/server/hosted-agent-runtime-progress.js +12 -3
- package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
- package/dist/server/pending-request-payload.d.ts.map +1 -1
- package/dist/server/pending-request-payload.js +1 -3
- package/dist/server/pending-request-payload.js.map +1 -1
- package/dist/server/route-auth.d.ts.map +1 -1
- package/dist/server/route-auth.js +2 -0
- package/dist/server/route-auth.js.map +1 -1
- package/dist/server/session-serialization.d.ts.map +1 -1
- package/dist/server/session-serialization.js +1 -3
- package/dist/server/session-serialization.js.map +1 -1
- package/dist/services/compliance/normalize.d.ts.map +1 -1
- package/dist/services/compliance/normalize.js +1 -3
- package/dist/services/compliance/normalize.js.map +1 -1
- package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
- package/dist/services/intelligent-router/normalize.js +1 -3
- package/dist/services/intelligent-router/normalize.js.map +1 -1
- package/dist/services/revenue-attribution/normalize.d.ts.map +1 -1
- package/dist/services/revenue-attribution/normalize.js +1 -3
- package/dist/services/revenue-attribution/normalize.js.map +1 -1
- package/dist/services/traces/normalize.d.ts.map +1 -1
- package/dist/services/traces/normalize.js +1 -3
- package/dist/services/traces/normalize.js.map +1 -1
- package/dist/services/workspace-config/normalize.d.ts.map +1 -1
- package/dist/services/workspace-config/normalize.js +1 -3
- package/dist/services/workspace-config/normalize.js.map +1 -1
- package/dist/skills/composer.d.ts.map +1 -1
- package/dist/skills/composer.js +13 -1
- package/dist/skills/composer.js.map +1 -1
- package/dist/skills/index.d.ts +1 -0
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +1 -0
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/learned-guidelines.d.ts +33 -0
- package/dist/skills/learned-guidelines.d.ts.map +1 -0
- package/dist/skills/learned-guidelines.js +291 -0
- package/dist/skills/learned-guidelines.js.map +1 -0
- package/dist/skills/linter.d.ts.map +1 -1
- package/dist/skills/linter.js +1 -3
- package/dist/skills/linter.js.map +1 -1
- package/dist/skills/runtime-activation.d.ts +1 -0
- package/dist/skills/runtime-activation.d.ts.map +1 -1
- package/dist/skills/runtime-activation.js +2 -3
- package/dist/skills/runtime-activation.js.map +1 -1
- package/dist/skills/tool.d.ts.map +1 -1
- package/dist/skills/tool.js +26 -21
- package/dist/skills/tool.js.map +1 -1
- package/dist/skills/trust-cache.d.ts +7 -0
- package/dist/skills/trust-cache.d.ts.map +1 -1
- package/dist/skills/trust-cache.js +16 -0
- package/dist/skills/trust-cache.js.map +1 -1
- package/dist/telemetry/agent-workforce-native-event.d.ts.map +1 -1
- package/dist/telemetry/agent-workforce-native-event.js +1 -3
- package/dist/telemetry/agent-workforce-native-event.js.map +1 -1
- package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-bus.js +42 -81
- package/dist/telemetry/maestro-event-bus.js.map +1 -1
- package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
- package/dist/telemetry/maestro-platform-replay-fixture.js +1 -3
- package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +54 -43
- package/dist/telemetry.js.map +1 -1
- package/dist/theme/theme-loader.d.ts.map +1 -1
- package/dist/theme/theme-loader.js +1 -3
- package/dist/theme/theme-loader.js.map +1 -1
- package/dist/tools/apply-patch.d.ts.map +1 -1
- package/dist/tools/apply-patch.js +76 -8
- package/dist/tools/apply-patch.js.map +1 -1
- package/dist/tools/diff-preview.d.ts.map +1 -1
- package/dist/tools/diff-preview.js +10 -1
- package/dist/tools/diff-preview.js.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +17 -0
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +9 -0
- package/dist/tools/write.js.map +1 -1
- package/dist/undo/tracker.d.ts +5 -0
- package/dist/undo/tracker.d.ts.map +1 -1
- package/dist/undo/tracker.js +13 -0
- package/dist/undo/tracker.js.map +1 -1
- package/dist/utils/fs.d.ts +1 -1
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +29 -2
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/git-stash.d.ts.map +1 -1
- package/dist/utils/git-stash.js +15 -8
- package/dist/utils/git-stash.js.map +1 -1
- package/dist/utils/json.d.ts +11 -0
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js +9 -0
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/shell-env.d.ts.map +1 -1
- package/dist/utils/shell-env.js +2 -0
- package/dist/utils/shell-env.js.map +1 -1
- package/dist/utils/url-extractor-git.d.ts +26 -0
- package/dist/utils/url-extractor-git.d.ts.map +1 -0
- package/dist/utils/url-extractor-git.js +259 -0
- package/dist/utils/url-extractor-git.js.map +1 -0
- package/dist/utils/url-extractor.d.ts.map +1 -1
- package/dist/utils/url-extractor.js +23 -251
- package/dist/utils/url-extractor.js.map +1 -1
- package/dist/version.json +2 -2
- package/package.json +310 -306
- package/skills/incident-triage/SKILL.md +19 -1
- package/skills/install-code-review/SKILL.md +69 -0
- package/skills/security-review/SKILL.md +68 -0
- package/skills/security-review/reference/rubric.md +85 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-governance-api.js","sourceRoot":"","sources":["../../src/app-server/network-governance-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { request as requestHttp } from \"node:http\";\nimport { request as requestHttps } from \"node:https\";\nimport { Readable } from \"node:stream\";\nimport type {\n\tMaestroAppServerNetworkAuditListResult,\n\tMaestroAppServerNetworkAuditRecord,\n\tMaestroAppServerNetworkFetchResult,\n\tMaestroAppServerNetworkGovernanceStatus,\n} from \"@evalops/contracts\";\nimport { type EnterprisePolicy, loadPolicy } from \"../safety/policy.js\";\nimport { checkNetworkRestrictionsDetailed } from \"../safety/validators/network-policy-validator.js\";\n\ntype UnknownRecord = Record<string, unknown>;\ninterface NetworkFetchBinding {\n\toriginalHost?: string;\n\tresolvedAddress?: string;\n\tresolvedAddresses?: string[];\n}\ntype FetchLike = (\n\tinput: string,\n\tinit?: RequestInit,\n\tbinding?: NetworkFetchBinding,\n) => Promise<Response>;\n\nconst DEFAULT_MAX_RESPONSE_BYTES = 1024 * 1024;\nconst DEFAULT_MAX_AUDIT_RECORDS = 100;\nconst DEFAULT_PINNED_ADDRESS_TIMEOUT_MS = 30_000;\nconst DEFAULT_PAGE_LIMIT = 50;\nconst MAX_PAGE_LIMIT = 100;\nconst IDEMPOTENT_HTTP_METHODS = new Set([\n\t\"GET\",\n\t\"HEAD\",\n\t\"OPTIONS\",\n\t\"TRACE\",\n\t\"PUT\",\n\t\"DELETE\",\n]);\n\nexport class MaestroAppServerNetworkGovernanceError extends Error {\n\tconstructor(\n\t\treadonly code: number,\n\t\tmessage: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"MaestroAppServerNetworkGovernanceError\";\n\t}\n}\n\nexport interface MaestroAppServerNetworkGovernanceOptions {\n\tfetchImpl?: FetchLike;\n\tmaxResponseBytes?: number;\n\tmaxAuditRecords?: number;\n\tpinnedAddressTimeoutMs?: number;\n}\n\nexport interface MaestroAppServerNetworkGovernance {\n\tfetch(params?: UnknownRecord): Promise<MaestroAppServerNetworkFetchResult>;\n\tlistAudit(\n\t\tparams?: UnknownRecord,\n\t): Promise<MaestroAppServerNetworkAuditListResult>;\n}\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction normalizeLimit(value: unknown): number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) {\n\t\treturn DEFAULT_PAGE_LIMIT;\n\t}\n\treturn Math.min(MAX_PAGE_LIMIT, Math.max(1, Math.trunc(value)));\n}\n\nfunction normalizePositiveInteger(value: unknown, fallback: number): number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) {\n\t\treturn fallback;\n\t}\n\treturn Math.max(1, Math.trunc(value));\n}\n\nfunction readOptionalString(value: unknown, field: string): string | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (typeof value !== \"string\") {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(\n\t\t\t-32602,\n\t\t\t`Invalid ${field}`,\n\t\t);\n\t}\n\treturn value;\n}\n\nfunction requireUrl(params: UnknownRecord): URL {\n\tconst rawUrl = readOptionalString(params.url, \"url\");\n\tif (!rawUrl) {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(-32602, \"Missing url\");\n\t}\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(rawUrl);\n\t} catch {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(-32602, \"Invalid url\");\n\t}\n\tif (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(\n\t\t\t-32602,\n\t\t\t\"Only http and https URLs are supported\",\n\t\t);\n\t}\n\treturn parsed;\n}\n\nfunction normalizeMethod(value: unknown): string {\n\tconst method = readOptionalString(value, \"method\") ?? \"GET\";\n\tconst normalized = method.trim().toUpperCase();\n\tif (!/^[A-Z]+$/.test(normalized)) {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(-32602, \"Invalid method\");\n\t}\n\treturn normalized;\n}\n\nfunction isIdempotentMethod(method: string | undefined): boolean {\n\treturn IDEMPOTENT_HTTP_METHODS.has((method ?? \"GET\").trim().toUpperCase());\n}\n\nfunction normalizeHeaders(value: unknown): Record<string, string> | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (!isRecord(value)) {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(-32602, \"Invalid headers\");\n\t}\n\tconst headers: Record<string, string> = {};\n\tfor (const [key, headerValue] of Object.entries(value)) {\n\t\tif (typeof headerValue !== \"string\") {\n\t\t\tthrow new MaestroAppServerNetworkGovernanceError(\n\t\t\t\t-32602,\n\t\t\t\t\"Invalid headers\",\n\t\t\t);\n\t\t}\n\t\theaders[key] = headerValue;\n\t}\n\treturn headers;\n}\n\nfunction normalizeBody(value: unknown): Uint8Array | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (typeof value !== \"string\") {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(\n\t\t\t-32602,\n\t\t\t\"Invalid bodyBase64\",\n\t\t);\n\t}\n\tif (\n\t\t!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(\n\t\t\tvalue,\n\t\t)\n\t) {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(\n\t\t\t-32602,\n\t\t\t\"bodyBase64 must be valid base64\",\n\t\t);\n\t}\n\tconst decoded = Buffer.from(value, \"base64\");\n\tif (decoded.toString(\"base64\") !== value) {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(\n\t\t\t-32602,\n\t\t\t\"bodyBase64 must be canonical base64\",\n\t\t);\n\t}\n\treturn decoded;\n}\n\nfunction responseHeadersToRecord(headers: Headers): Record<string, string> {\n\tconst record: Record<string, string> = {};\n\tfor (const [key, value] of headers.entries()) {\n\t\tconst normalizedKey = key.toLowerCase();\n\t\tconst existing = record[normalizedKey];\n\t\trecord[normalizedKey] =\n\t\t\texisting === undefined ? value : `${existing}\\n${value}`;\n\t}\n\treturn record;\n}\n\nfunction nowIso(): string {\n\treturn new Date().toISOString();\n}\n\nfunction redactAuditUrl(url: URL): string {\n\tconst redacted = new URL(url.toString());\n\tredacted.username = \"\";\n\tredacted.password = \"\";\n\treturn redacted.toString();\n}\n\nfunction urlWithoutCredentials(url: URL): URL {\n\tconst credentialless = new URL(url.toString());\n\tcredentialless.username = \"\";\n\tcredentialless.password = \"\";\n\treturn credentialless;\n}\n\nfunction decodeUrlCredential(value: string): string {\n\ttry {\n\t\treturn decodeURIComponent(value);\n\t} catch {\n\t\treturn value;\n\t}\n}\n\nfunction applyUrlCredentials(url: URL, headers: Headers): void {\n\tif ((!url.username && !url.password) || headers.has(\"authorization\")) {\n\t\treturn;\n\t}\n\tconst credentials = `${decodeUrlCredential(url.username)}:${decodeUrlCredential(\n\t\turl.password,\n\t)}`;\n\theaders.set(\n\t\t\"authorization\",\n\t\t`Basic ${Buffer.from(credentials, \"utf8\").toString(\"base64\")}`,\n\t);\n}\n\nfunction createAuditRecord(input: {\n\tmethod: string;\n\turl: URL;\n\tallowed: boolean;\n\tstatus: MaestroAppServerNetworkGovernanceStatus;\n\tstartedAt: string;\n\treason?: string;\n\tstatusCode?: number;\n}): MaestroAppServerNetworkAuditRecord {\n\treturn {\n\t\tid: randomUUID(),\n\t\tmethod: input.method,\n\t\turl: redactAuditUrl(input.url),\n\t\thost: input.url.hostname.toLowerCase().replace(/^\\[|\\]$/g, \"\"),\n\t\tallowed: input.allowed,\n\t\tstatus: input.status,\n\t\t...(input.reason ? { reason: input.reason } : {}),\n\t\t...(input.statusCode !== undefined ? { statusCode: input.statusCode } : {}),\n\t\tstartedAt: input.startedAt,\n\t\tcompletedAt: nowIso(),\n\t};\n}\n\nfunction cloneAuditRecord(\n\trecord: MaestroAppServerNetworkAuditRecord,\n): MaestroAppServerNetworkAuditRecord {\n\treturn { ...record };\n}\n\nfunction headersToRecord(headers: Headers): Record<string, string> {\n\tconst record: Record<string, string> = {};\n\tfor (const [key, value] of headers.entries()) {\n\t\trecord[key] = value;\n\t}\n\treturn record;\n}\n\nfunction responseHeadersFromNode(\n\theaders: Record<string, string | string[] | undefined>,\n): Headers {\n\tconst responseHeaders = new Headers();\n\tfor (const [key, value] of Object.entries(headers)) {\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (const entry of value) {\n\t\t\t\tresponseHeaders.append(key, entry);\n\t\t\t}\n\t\t} else if (value !== undefined) {\n\t\t\tresponseHeaders.set(key, value);\n\t\t}\n\t}\n\treturn responseHeaders;\n}\n\nexport async function fetchWithPinnedAddress(\n\tinput: string,\n\tinit: RequestInit | undefined,\n\tbinding: NetworkFetchBinding = {},\n\tpinnedAddressTimeoutMs = DEFAULT_PINNED_ADDRESS_TIMEOUT_MS,\n): Promise<Response> {\n\tconst resolvedAddresses =\n\t\tbinding.resolvedAddresses && binding.resolvedAddresses.length > 0\n\t\t\t? binding.resolvedAddresses\n\t\t\t: binding.resolvedAddress\n\t\t\t\t? [binding.resolvedAddress]\n\t\t\t\t: [];\n\tif (resolvedAddresses.length === 0) {\n\t\tconst url = new URL(input);\n\t\tif (!url.username && !url.password) {\n\t\t\treturn globalThis.fetch(input, init);\n\t\t}\n\t\tconst requestHeaders = new Headers(init?.headers);\n\t\tapplyUrlCredentials(url, requestHeaders);\n\t\treturn globalThis.fetch(urlWithoutCredentials(url).toString(), {\n\t\t\t...init,\n\t\t\theaders: requestHeaders,\n\t\t});\n\t}\n\tconst addressesToTry = isIdempotentMethod(init?.method)\n\t\t? resolvedAddresses\n\t\t: resolvedAddresses.slice(0, 1);\n\tlet lastError: unknown;\n\tfor (const resolvedAddress of addressesToTry) {\n\t\ttry {\n\t\t\treturn await fetchWithSinglePinnedAddress(\n\t\t\t\tinput,\n\t\t\t\tinit,\n\t\t\t\t{\n\t\t\t\t\t...binding,\n\t\t\t\t\tresolvedAddress,\n\t\t\t\t},\n\t\t\t\tpinnedAddressTimeoutMs,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tlastError = error;\n\t\t}\n\t}\n\tthrow lastError instanceof Error\n\t\t? lastError\n\t\t: new Error(\"Network request failed\");\n}\n\nasync function fetchWithSinglePinnedAddress(\n\tinput: string,\n\tinit: RequestInit | undefined,\n\tbinding: Required<Pick<NetworkFetchBinding, \"resolvedAddress\">> &\n\t\tNetworkFetchBinding,\n\tpinnedAddressTimeoutMs: number,\n): Promise<Response> {\n\tconst url = new URL(input);\n\tconst requestHeaders = new Headers(init?.headers);\n\tapplyUrlCredentials(url, requestHeaders);\n\trequestHeaders.set(\"host\", url.host);\n\tconst transport = url.protocol === \"https:\" ? requestHttps : requestHttp;\n\tconst method = init?.method ?? \"GET\";\n\n\treturn new Promise<Response>((resolve, reject) => {\n\t\tlet settled = false;\n\t\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\t\tlet abortListener: (() => void) | undefined;\n\t\tconst signal = init?.signal;\n\t\tconst timeoutMessage = `Pinned network request to ${binding.resolvedAddress} timed out after ${pinnedAddressTimeoutMs}ms`;\n\t\tconst cleanup = () => {\n\t\t\tif (timeout) {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\ttimeout = undefined;\n\t\t\t}\n\t\t\tif (signal && abortListener) {\n\t\t\t\tsignal.removeEventListener(\"abort\", abortListener);\n\t\t\t\tabortListener = undefined;\n\t\t\t}\n\t\t};\n\t\tconst finishResolve = (response: Response) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tresolve(response);\n\t\t};\n\t\tconst finishReject = (error: Error) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\treject(error);\n\t\t};\n\t\tconst request = transport(\n\t\t\t{\n\t\t\t\thostname: binding.resolvedAddress,\n\t\t\t\tmethod,\n\t\t\t\tpath: `${url.pathname}${url.search}`,\n\t\t\t\tport: url.port ? Number(url.port) : undefined,\n\t\t\t\theaders: headersToRecord(requestHeaders),\n\t\t\t\t...(url.protocol === \"https:\"\n\t\t\t\t\t? { servername: binding.originalHost ?? url.hostname }\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t\t(response) => {\n\t\t\t\tfinishResolve(\n\t\t\t\t\tnew Response(Readable.toWeb(response) as ReadableStream<Uint8Array>, {\n\t\t\t\t\t\tstatus: response.statusCode ?? 500,\n\t\t\t\t\t\tstatusText: response.statusMessage,\n\t\t\t\t\t\theaders: responseHeadersFromNode(response.headers),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t\trequest.on(\"error\", finishReject);\n\t\trequest.setTimeout(pinnedAddressTimeoutMs, () => {\n\t\t\trequest.destroy(new Error(timeoutMessage));\n\t\t});\n\t\ttimeout = setTimeout(() => {\n\t\t\trequest.destroy(new Error(timeoutMessage));\n\t\t}, pinnedAddressTimeoutMs);\n\t\ttimeout.unref?.();\n\t\tif (signal) {\n\t\t\tif (signal.aborted) {\n\t\t\t\tconst error = new Error(\"Request aborted\");\n\t\t\t\trequest.destroy(error);\n\t\t\t\tfinishReject(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tabortListener = () => {\n\t\t\t\tconst error = new Error(\"Request aborted\");\n\t\t\t\trequest.destroy(error);\n\t\t\t\tfinishReject(error);\n\t\t\t};\n\t\t\tsignal.addEventListener(\"abort\", abortListener, { once: true });\n\t\t}\n\t\tconst body = init?.body;\n\t\tif (body !== undefined && body !== null) {\n\t\t\tif (\n\t\t\t\ttypeof body === \"string\" ||\n\t\t\t\tbody instanceof Uint8Array ||\n\t\t\t\tbody instanceof ArrayBuffer\n\t\t\t) {\n\t\t\t\trequest.write(body instanceof ArrayBuffer ? Buffer.from(body) : body);\n\t\t\t} else {\n\t\t\t\tconst error = new Error(\"Unsupported request body\");\n\t\t\t\trequest.destroy(error);\n\t\t\t\tfinishReject(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\trequest.end();\n\t});\n}\n\nasync function readResponseBytes(\n\tresponse: Response,\n\tmaxResponseBytes: number,\n): Promise<Buffer> {\n\tif (!response.body) {\n\t\treturn Buffer.from(await response.arrayBuffer());\n\t}\n\n\tconst reader = response.body.getReader();\n\tconst chunks: Buffer[] = [];\n\tlet totalBytes = 0;\n\ttry {\n\t\tfor (;;) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (!value) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttotalBytes += value.byteLength;\n\t\t\tif (totalBytes > maxResponseBytes) {\n\t\t\t\tawait reader.cancel().catch(() => undefined);\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Response body exceeds ${maxResponseBytes} byte network proxy limit`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tchunks.push(Buffer.from(value));\n\t\t}\n\t} finally {\n\t\treader.releaseLock();\n\t}\n\treturn Buffer.concat(chunks, totalBytes);\n}\n\nasync function evaluateNetworkPolicy(url: URL): Promise<{\n\tallowed: boolean;\n\treason?: string;\n\toriginalHost?: string;\n\tresolvedAddress?: string;\n\tresolvedAddresses?: string[];\n}> {\n\tlet policy: EnterprisePolicy | null;\n\ttry {\n\t\tpolicy = loadPolicy();\n\t} catch (error) {\n\t\treturn {\n\t\t\tallowed: false,\n\t\t\treason: `Failed to load managed policy: ${error instanceof Error ? error.message : \"unknown error\"}`,\n\t\t};\n\t}\n\tif (!policy?.network) {\n\t\treturn { allowed: true };\n\t}\n\tconst check = await checkNetworkRestrictionsDetailed(\n\t\turl.toString(),\n\t\tpolicy.network,\n\t);\n\treturn {\n\t\tallowed: check.allowed,\n\t\t...(check.reason ? { reason: check.reason } : {}),\n\t\t...(check.normalizedHost ? { originalHost: check.normalizedHost } : {}),\n\t\t...(check.resolvedIPs[0] ? { resolvedAddress: check.resolvedIPs[0] } : {}),\n\t\t...(check.resolvedIPs.length > 0\n\t\t\t? { resolvedAddresses: [...check.resolvedIPs] }\n\t\t\t: {}),\n\t};\n}\n\nexport function createMaestroAppServerNetworkGovernance(\n\toptions: MaestroAppServerNetworkGovernanceOptions = {},\n): MaestroAppServerNetworkGovernance {\n\tconst pinnedAddressTimeoutMs = normalizePositiveInteger(\n\t\toptions.pinnedAddressTimeoutMs,\n\t\tDEFAULT_PINNED_ADDRESS_TIMEOUT_MS,\n\t);\n\tconst fetchImpl =\n\t\toptions.fetchImpl ??\n\t\t((input, init, binding) =>\n\t\t\tfetchWithPinnedAddress(input, init, binding, pinnedAddressTimeoutMs));\n\tconst maxResponseBytes = normalizePositiveInteger(\n\t\toptions.maxResponseBytes,\n\t\tDEFAULT_MAX_RESPONSE_BYTES,\n\t);\n\tconst maxAuditRecords = normalizePositiveInteger(\n\t\toptions.maxAuditRecords,\n\t\tDEFAULT_MAX_AUDIT_RECORDS,\n\t);\n\tconst audit: MaestroAppServerNetworkAuditRecord[] = [];\n\n\tfunction recordAudit(record: MaestroAppServerNetworkAuditRecord): void {\n\t\taudit.push(record);\n\t\tif (audit.length > maxAuditRecords) {\n\t\t\taudit.splice(0, audit.length - maxAuditRecords);\n\t\t}\n\t}\n\n\treturn {\n\t\tasync fetch(params = {}) {\n\t\t\tif (!isRecord(params)) {\n\t\t\t\tthrow new MaestroAppServerNetworkGovernanceError(\n\t\t\t\t\t-32602,\n\t\t\t\t\t\"Invalid params\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst url = requireUrl(params);\n\t\t\tconst method = normalizeMethod(params.method);\n\t\t\tconst headers = normalizeHeaders(params.headers);\n\t\t\tconst body = normalizeBody(params.bodyBase64);\n\t\t\tconst startedAt = nowIso();\n\n\t\t\tconst policyCheck = await evaluateNetworkPolicy(url);\n\t\t\tif (!policyCheck.allowed) {\n\t\t\t\tconst auditRecord = createAuditRecord({\n\t\t\t\t\tmethod,\n\t\t\t\t\turl,\n\t\t\t\t\tallowed: false,\n\t\t\t\t\tstatus: \"blocked\",\n\t\t\t\t\treason: policyCheck.reason,\n\t\t\t\t\tstartedAt,\n\t\t\t\t});\n\t\t\t\trecordAudit(auditRecord);\n\t\t\t\treturn {\n\t\t\t\t\tallowed: false,\n\t\t\t\t\tstatus: \"blocked\",\n\t\t\t\t\t...(policyCheck.reason ? { reason: policyCheck.reason } : {}),\n\t\t\t\t\taudit: cloneAuditRecord(auditRecord),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst response = await fetchImpl(\n\t\t\t\t\turl.toString(),\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t\tredirect: \"manual\",\n\t\t\t\t\t\t...(headers ? { headers } : {}),\n\t\t\t\t\t\t...(body ? { body } : {}),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\toriginalHost: policyCheck.originalHost,\n\t\t\t\t\t\tresolvedAddress: policyCheck.resolvedAddress,\n\t\t\t\t\t\tresolvedAddresses: policyCheck.resolvedAddresses,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tconst bytes = await readResponseBytes(response, maxResponseBytes);\n\t\t\t\tconst auditRecord = createAuditRecord({\n\t\t\t\t\tmethod,\n\t\t\t\t\turl,\n\t\t\t\t\tallowed: true,\n\t\t\t\t\tstatus: \"allowed\",\n\t\t\t\t\tstatusCode: response.status,\n\t\t\t\t\tstartedAt,\n\t\t\t\t});\n\t\t\t\trecordAudit(auditRecord);\n\t\t\t\treturn {\n\t\t\t\t\tallowed: true,\n\t\t\t\t\tstatus: \"allowed\",\n\t\t\t\t\tstatusCode: response.status,\n\t\t\t\t\theaders: responseHeadersToRecord(response.headers),\n\t\t\t\t\tbodyBase64: bytes.toString(\"base64\"),\n\t\t\t\t\taudit: cloneAuditRecord(auditRecord),\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tconst reason =\n\t\t\t\t\terror instanceof Error ? error.message : \"Network request failed\";\n\t\t\t\tconst auditRecord = createAuditRecord({\n\t\t\t\t\tmethod,\n\t\t\t\t\turl,\n\t\t\t\t\tallowed: true,\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\treason,\n\t\t\t\t\tstartedAt,\n\t\t\t\t});\n\t\t\t\trecordAudit(auditRecord);\n\t\t\t\treturn {\n\t\t\t\t\tallowed: true,\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\treason,\n\t\t\t\t\taudit: cloneAuditRecord(auditRecord),\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tasync listAudit(params = {}) {\n\t\t\tif (!isRecord(params)) {\n\t\t\t\tthrow new MaestroAppServerNetworkGovernanceError(\n\t\t\t\t\t-32602,\n\t\t\t\t\t\"Invalid params\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst limit = normalizeLimit(params.limit);\n\t\t\treturn {\n\t\t\t\taudit: audit.slice(-limit).map(cloneAuditRecord),\n\t\t\t\tnextCursor: null,\n\t\t\t};\n\t\t},\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"network-governance-api.js","sourceRoot":"","sources":["../../src/app-server/network-governance-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { request as requestHttp } from \"node:http\";\nimport { request as requestHttps } from \"node:https\";\nimport { Readable } from \"node:stream\";\nimport type {\n\tMaestroAppServerNetworkAuditListResult,\n\tMaestroAppServerNetworkAuditRecord,\n\tMaestroAppServerNetworkFetchResult,\n\tMaestroAppServerNetworkGovernanceStatus,\n} from \"@evalops/contracts\";\nimport { type EnterprisePolicy, loadPolicy } from \"../safety/policy.js\";\nimport { checkNetworkRestrictionsDetailed } from \"../safety/validators/network-policy-validator.js\";\nimport { isRecord } from \"../utils/json.js\";\n\ntype UnknownRecord = Record<string, unknown>;\ninterface NetworkFetchBinding {\n\toriginalHost?: string;\n\tresolvedAddress?: string;\n\tresolvedAddresses?: string[];\n}\ntype FetchLike = (\n\tinput: string,\n\tinit?: RequestInit,\n\tbinding?: NetworkFetchBinding,\n) => Promise<Response>;\n\nconst DEFAULT_MAX_RESPONSE_BYTES = 1024 * 1024;\nconst DEFAULT_MAX_AUDIT_RECORDS = 100;\nconst DEFAULT_PINNED_ADDRESS_TIMEOUT_MS = 30_000;\nconst DEFAULT_PAGE_LIMIT = 50;\nconst MAX_PAGE_LIMIT = 100;\nconst IDEMPOTENT_HTTP_METHODS = new Set([\n\t\"GET\",\n\t\"HEAD\",\n\t\"OPTIONS\",\n\t\"TRACE\",\n\t\"PUT\",\n\t\"DELETE\",\n]);\n\nexport class MaestroAppServerNetworkGovernanceError extends Error {\n\tconstructor(\n\t\treadonly code: number,\n\t\tmessage: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"MaestroAppServerNetworkGovernanceError\";\n\t}\n}\n\nexport interface MaestroAppServerNetworkGovernanceOptions {\n\tfetchImpl?: FetchLike;\n\tmaxResponseBytes?: number;\n\tmaxAuditRecords?: number;\n\tpinnedAddressTimeoutMs?: number;\n}\n\nexport interface MaestroAppServerNetworkGovernance {\n\tfetch(params?: UnknownRecord): Promise<MaestroAppServerNetworkFetchResult>;\n\tlistAudit(\n\t\tparams?: UnknownRecord,\n\t): Promise<MaestroAppServerNetworkAuditListResult>;\n}\n\nfunction normalizeLimit(value: unknown): number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) {\n\t\treturn DEFAULT_PAGE_LIMIT;\n\t}\n\treturn Math.min(MAX_PAGE_LIMIT, Math.max(1, Math.trunc(value)));\n}\n\nfunction normalizePositiveInteger(value: unknown, fallback: number): number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) {\n\t\treturn fallback;\n\t}\n\treturn Math.max(1, Math.trunc(value));\n}\n\nfunction readOptionalString(value: unknown, field: string): string | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (typeof value !== \"string\") {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(\n\t\t\t-32602,\n\t\t\t`Invalid ${field}`,\n\t\t);\n\t}\n\treturn value;\n}\n\nfunction requireUrl(params: UnknownRecord): URL {\n\tconst rawUrl = readOptionalString(params.url, \"url\");\n\tif (!rawUrl) {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(-32602, \"Missing url\");\n\t}\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(rawUrl);\n\t} catch {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(-32602, \"Invalid url\");\n\t}\n\tif (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(\n\t\t\t-32602,\n\t\t\t\"Only http and https URLs are supported\",\n\t\t);\n\t}\n\treturn parsed;\n}\n\nfunction normalizeMethod(value: unknown): string {\n\tconst method = readOptionalString(value, \"method\") ?? \"GET\";\n\tconst normalized = method.trim().toUpperCase();\n\tif (!/^[A-Z]+$/.test(normalized)) {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(-32602, \"Invalid method\");\n\t}\n\treturn normalized;\n}\n\nfunction isIdempotentMethod(method: string | undefined): boolean {\n\treturn IDEMPOTENT_HTTP_METHODS.has((method ?? \"GET\").trim().toUpperCase());\n}\n\nfunction normalizeHeaders(value: unknown): Record<string, string> | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (!isRecord(value)) {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(-32602, \"Invalid headers\");\n\t}\n\tconst headers: Record<string, string> = {};\n\tfor (const [key, headerValue] of Object.entries(value)) {\n\t\tif (typeof headerValue !== \"string\") {\n\t\t\tthrow new MaestroAppServerNetworkGovernanceError(\n\t\t\t\t-32602,\n\t\t\t\t\"Invalid headers\",\n\t\t\t);\n\t\t}\n\t\theaders[key] = headerValue;\n\t}\n\treturn headers;\n}\n\nfunction normalizeBody(value: unknown): Uint8Array | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (typeof value !== \"string\") {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(\n\t\t\t-32602,\n\t\t\t\"Invalid bodyBase64\",\n\t\t);\n\t}\n\tif (\n\t\t!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(\n\t\t\tvalue,\n\t\t)\n\t) {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(\n\t\t\t-32602,\n\t\t\t\"bodyBase64 must be valid base64\",\n\t\t);\n\t}\n\tconst decoded = Buffer.from(value, \"base64\");\n\tif (decoded.toString(\"base64\") !== value) {\n\t\tthrow new MaestroAppServerNetworkGovernanceError(\n\t\t\t-32602,\n\t\t\t\"bodyBase64 must be canonical base64\",\n\t\t);\n\t}\n\treturn decoded;\n}\n\nfunction responseHeadersToRecord(headers: Headers): Record<string, string> {\n\tconst record: Record<string, string> = {};\n\tfor (const [key, value] of headers.entries()) {\n\t\tconst normalizedKey = key.toLowerCase();\n\t\tconst existing = record[normalizedKey];\n\t\trecord[normalizedKey] =\n\t\t\texisting === undefined ? value : `${existing}\\n${value}`;\n\t}\n\treturn record;\n}\n\nfunction nowIso(): string {\n\treturn new Date().toISOString();\n}\n\nfunction redactAuditUrl(url: URL): string {\n\tconst redacted = new URL(url.toString());\n\tredacted.username = \"\";\n\tredacted.password = \"\";\n\treturn redacted.toString();\n}\n\nfunction urlWithoutCredentials(url: URL): URL {\n\tconst credentialless = new URL(url.toString());\n\tcredentialless.username = \"\";\n\tcredentialless.password = \"\";\n\treturn credentialless;\n}\n\nfunction decodeUrlCredential(value: string): string {\n\ttry {\n\t\treturn decodeURIComponent(value);\n\t} catch {\n\t\treturn value;\n\t}\n}\n\nfunction applyUrlCredentials(url: URL, headers: Headers): void {\n\tif ((!url.username && !url.password) || headers.has(\"authorization\")) {\n\t\treturn;\n\t}\n\tconst credentials = `${decodeUrlCredential(url.username)}:${decodeUrlCredential(\n\t\turl.password,\n\t)}`;\n\theaders.set(\n\t\t\"authorization\",\n\t\t`Basic ${Buffer.from(credentials, \"utf8\").toString(\"base64\")}`,\n\t);\n}\n\nfunction createAuditRecord(input: {\n\tmethod: string;\n\turl: URL;\n\tallowed: boolean;\n\tstatus: MaestroAppServerNetworkGovernanceStatus;\n\tstartedAt: string;\n\treason?: string;\n\tstatusCode?: number;\n}): MaestroAppServerNetworkAuditRecord {\n\treturn {\n\t\tid: randomUUID(),\n\t\tmethod: input.method,\n\t\turl: redactAuditUrl(input.url),\n\t\thost: input.url.hostname.toLowerCase().replace(/^\\[|\\]$/g, \"\"),\n\t\tallowed: input.allowed,\n\t\tstatus: input.status,\n\t\t...(input.reason ? { reason: input.reason } : {}),\n\t\t...(input.statusCode !== undefined ? { statusCode: input.statusCode } : {}),\n\t\tstartedAt: input.startedAt,\n\t\tcompletedAt: nowIso(),\n\t};\n}\n\nfunction cloneAuditRecord(\n\trecord: MaestroAppServerNetworkAuditRecord,\n): MaestroAppServerNetworkAuditRecord {\n\treturn { ...record };\n}\n\nfunction headersToRecord(headers: Headers): Record<string, string> {\n\tconst record: Record<string, string> = {};\n\tfor (const [key, value] of headers.entries()) {\n\t\trecord[key] = value;\n\t}\n\treturn record;\n}\n\nfunction responseHeadersFromNode(\n\theaders: Record<string, string | string[] | undefined>,\n): Headers {\n\tconst responseHeaders = new Headers();\n\tfor (const [key, value] of Object.entries(headers)) {\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (const entry of value) {\n\t\t\t\tresponseHeaders.append(key, entry);\n\t\t\t}\n\t\t} else if (value !== undefined) {\n\t\t\tresponseHeaders.set(key, value);\n\t\t}\n\t}\n\treturn responseHeaders;\n}\n\nexport async function fetchWithPinnedAddress(\n\tinput: string,\n\tinit: RequestInit | undefined,\n\tbinding: NetworkFetchBinding = {},\n\tpinnedAddressTimeoutMs = DEFAULT_PINNED_ADDRESS_TIMEOUT_MS,\n): Promise<Response> {\n\tconst resolvedAddresses =\n\t\tbinding.resolvedAddresses && binding.resolvedAddresses.length > 0\n\t\t\t? binding.resolvedAddresses\n\t\t\t: binding.resolvedAddress\n\t\t\t\t? [binding.resolvedAddress]\n\t\t\t\t: [];\n\tif (resolvedAddresses.length === 0) {\n\t\tconst url = new URL(input);\n\t\tif (!url.username && !url.password) {\n\t\t\treturn globalThis.fetch(input, init);\n\t\t}\n\t\tconst requestHeaders = new Headers(init?.headers);\n\t\tapplyUrlCredentials(url, requestHeaders);\n\t\treturn globalThis.fetch(urlWithoutCredentials(url).toString(), {\n\t\t\t...init,\n\t\t\theaders: requestHeaders,\n\t\t});\n\t}\n\tconst addressesToTry = isIdempotentMethod(init?.method)\n\t\t? resolvedAddresses\n\t\t: resolvedAddresses.slice(0, 1);\n\tlet lastError: unknown;\n\tfor (const resolvedAddress of addressesToTry) {\n\t\ttry {\n\t\t\treturn await fetchWithSinglePinnedAddress(\n\t\t\t\tinput,\n\t\t\t\tinit,\n\t\t\t\t{\n\t\t\t\t\t...binding,\n\t\t\t\t\tresolvedAddress,\n\t\t\t\t},\n\t\t\t\tpinnedAddressTimeoutMs,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tlastError = error;\n\t\t}\n\t}\n\tthrow lastError instanceof Error\n\t\t? lastError\n\t\t: new Error(\"Network request failed\");\n}\n\nasync function fetchWithSinglePinnedAddress(\n\tinput: string,\n\tinit: RequestInit | undefined,\n\tbinding: Required<Pick<NetworkFetchBinding, \"resolvedAddress\">> &\n\t\tNetworkFetchBinding,\n\tpinnedAddressTimeoutMs: number,\n): Promise<Response> {\n\tconst url = new URL(input);\n\tconst requestHeaders = new Headers(init?.headers);\n\tapplyUrlCredentials(url, requestHeaders);\n\trequestHeaders.set(\"host\", url.host);\n\tconst transport = url.protocol === \"https:\" ? requestHttps : requestHttp;\n\tconst method = init?.method ?? \"GET\";\n\n\treturn new Promise<Response>((resolve, reject) => {\n\t\tlet settled = false;\n\t\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\t\tlet abortListener: (() => void) | undefined;\n\t\tconst signal = init?.signal;\n\t\tconst timeoutMessage = `Pinned network request to ${binding.resolvedAddress} timed out after ${pinnedAddressTimeoutMs}ms`;\n\t\tconst cleanup = () => {\n\t\t\tif (timeout) {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\ttimeout = undefined;\n\t\t\t}\n\t\t\tif (signal && abortListener) {\n\t\t\t\tsignal.removeEventListener(\"abort\", abortListener);\n\t\t\t\tabortListener = undefined;\n\t\t\t}\n\t\t};\n\t\tconst finishResolve = (response: Response) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tresolve(response);\n\t\t};\n\t\tconst finishReject = (error: Error) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\treject(error);\n\t\t};\n\t\tconst request = transport(\n\t\t\t{\n\t\t\t\thostname: binding.resolvedAddress,\n\t\t\t\tmethod,\n\t\t\t\tpath: `${url.pathname}${url.search}`,\n\t\t\t\tport: url.port ? Number(url.port) : undefined,\n\t\t\t\theaders: headersToRecord(requestHeaders),\n\t\t\t\t...(url.protocol === \"https:\"\n\t\t\t\t\t? { servername: binding.originalHost ?? url.hostname }\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t\t(response) => {\n\t\t\t\tfinishResolve(\n\t\t\t\t\tnew Response(Readable.toWeb(response) as ReadableStream<Uint8Array>, {\n\t\t\t\t\t\tstatus: response.statusCode ?? 500,\n\t\t\t\t\t\tstatusText: response.statusMessage,\n\t\t\t\t\t\theaders: responseHeadersFromNode(response.headers),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t\trequest.on(\"error\", finishReject);\n\t\trequest.setTimeout(pinnedAddressTimeoutMs, () => {\n\t\t\trequest.destroy(new Error(timeoutMessage));\n\t\t});\n\t\ttimeout = setTimeout(() => {\n\t\t\trequest.destroy(new Error(timeoutMessage));\n\t\t}, pinnedAddressTimeoutMs);\n\t\ttimeout.unref?.();\n\t\tif (signal) {\n\t\t\tif (signal.aborted) {\n\t\t\t\tconst error = new Error(\"Request aborted\");\n\t\t\t\trequest.destroy(error);\n\t\t\t\tfinishReject(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tabortListener = () => {\n\t\t\t\tconst error = new Error(\"Request aborted\");\n\t\t\t\trequest.destroy(error);\n\t\t\t\tfinishReject(error);\n\t\t\t};\n\t\t\tsignal.addEventListener(\"abort\", abortListener, { once: true });\n\t\t}\n\t\tconst body = init?.body;\n\t\tif (body !== undefined && body !== null) {\n\t\t\tif (\n\t\t\t\ttypeof body === \"string\" ||\n\t\t\t\tbody instanceof Uint8Array ||\n\t\t\t\tbody instanceof ArrayBuffer\n\t\t\t) {\n\t\t\t\trequest.write(body instanceof ArrayBuffer ? Buffer.from(body) : body);\n\t\t\t} else {\n\t\t\t\tconst error = new Error(\"Unsupported request body\");\n\t\t\t\trequest.destroy(error);\n\t\t\t\tfinishReject(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\trequest.end();\n\t});\n}\n\nasync function readResponseBytes(\n\tresponse: Response,\n\tmaxResponseBytes: number,\n): Promise<Buffer> {\n\tif (!response.body) {\n\t\treturn Buffer.from(await response.arrayBuffer());\n\t}\n\n\tconst reader = response.body.getReader();\n\tconst chunks: Buffer[] = [];\n\tlet totalBytes = 0;\n\ttry {\n\t\tfor (;;) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (!value) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttotalBytes += value.byteLength;\n\t\t\tif (totalBytes > maxResponseBytes) {\n\t\t\t\tawait reader.cancel().catch(() => undefined);\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Response body exceeds ${maxResponseBytes} byte network proxy limit`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tchunks.push(Buffer.from(value));\n\t\t}\n\t} finally {\n\t\treader.releaseLock();\n\t}\n\treturn Buffer.concat(chunks, totalBytes);\n}\n\nasync function evaluateNetworkPolicy(url: URL): Promise<{\n\tallowed: boolean;\n\treason?: string;\n\toriginalHost?: string;\n\tresolvedAddress?: string;\n\tresolvedAddresses?: string[];\n}> {\n\tlet policy: EnterprisePolicy | null;\n\ttry {\n\t\tpolicy = loadPolicy();\n\t} catch (error) {\n\t\treturn {\n\t\t\tallowed: false,\n\t\t\treason: `Failed to load managed policy: ${error instanceof Error ? error.message : \"unknown error\"}`,\n\t\t};\n\t}\n\tif (!policy?.network) {\n\t\treturn { allowed: true };\n\t}\n\tconst check = await checkNetworkRestrictionsDetailed(\n\t\turl.toString(),\n\t\tpolicy.network,\n\t);\n\treturn {\n\t\tallowed: check.allowed,\n\t\t...(check.reason ? { reason: check.reason } : {}),\n\t\t...(check.normalizedHost ? { originalHost: check.normalizedHost } : {}),\n\t\t...(check.resolvedIPs[0] ? { resolvedAddress: check.resolvedIPs[0] } : {}),\n\t\t...(check.resolvedIPs.length > 0\n\t\t\t? { resolvedAddresses: [...check.resolvedIPs] }\n\t\t\t: {}),\n\t};\n}\n\nexport function createMaestroAppServerNetworkGovernance(\n\toptions: MaestroAppServerNetworkGovernanceOptions = {},\n): MaestroAppServerNetworkGovernance {\n\tconst pinnedAddressTimeoutMs = normalizePositiveInteger(\n\t\toptions.pinnedAddressTimeoutMs,\n\t\tDEFAULT_PINNED_ADDRESS_TIMEOUT_MS,\n\t);\n\tconst fetchImpl =\n\t\toptions.fetchImpl ??\n\t\t((input, init, binding) =>\n\t\t\tfetchWithPinnedAddress(input, init, binding, pinnedAddressTimeoutMs));\n\tconst maxResponseBytes = normalizePositiveInteger(\n\t\toptions.maxResponseBytes,\n\t\tDEFAULT_MAX_RESPONSE_BYTES,\n\t);\n\tconst maxAuditRecords = normalizePositiveInteger(\n\t\toptions.maxAuditRecords,\n\t\tDEFAULT_MAX_AUDIT_RECORDS,\n\t);\n\tconst audit: MaestroAppServerNetworkAuditRecord[] = [];\n\n\tfunction recordAudit(record: MaestroAppServerNetworkAuditRecord): void {\n\t\taudit.push(record);\n\t\tif (audit.length > maxAuditRecords) {\n\t\t\taudit.splice(0, audit.length - maxAuditRecords);\n\t\t}\n\t}\n\n\treturn {\n\t\tasync fetch(params = {}) {\n\t\t\tif (!isRecord(params)) {\n\t\t\t\tthrow new MaestroAppServerNetworkGovernanceError(\n\t\t\t\t\t-32602,\n\t\t\t\t\t\"Invalid params\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst url = requireUrl(params);\n\t\t\tconst method = normalizeMethod(params.method);\n\t\t\tconst headers = normalizeHeaders(params.headers);\n\t\t\tconst body = normalizeBody(params.bodyBase64);\n\t\t\tconst startedAt = nowIso();\n\n\t\t\tconst policyCheck = await evaluateNetworkPolicy(url);\n\t\t\tif (!policyCheck.allowed) {\n\t\t\t\tconst auditRecord = createAuditRecord({\n\t\t\t\t\tmethod,\n\t\t\t\t\turl,\n\t\t\t\t\tallowed: false,\n\t\t\t\t\tstatus: \"blocked\",\n\t\t\t\t\treason: policyCheck.reason,\n\t\t\t\t\tstartedAt,\n\t\t\t\t});\n\t\t\t\trecordAudit(auditRecord);\n\t\t\t\treturn {\n\t\t\t\t\tallowed: false,\n\t\t\t\t\tstatus: \"blocked\",\n\t\t\t\t\t...(policyCheck.reason ? { reason: policyCheck.reason } : {}),\n\t\t\t\t\taudit: cloneAuditRecord(auditRecord),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst response = await fetchImpl(\n\t\t\t\t\turl.toString(),\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t\tredirect: \"manual\",\n\t\t\t\t\t\t...(headers ? { headers } : {}),\n\t\t\t\t\t\t...(body ? { body } : {}),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\toriginalHost: policyCheck.originalHost,\n\t\t\t\t\t\tresolvedAddress: policyCheck.resolvedAddress,\n\t\t\t\t\t\tresolvedAddresses: policyCheck.resolvedAddresses,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tconst bytes = await readResponseBytes(response, maxResponseBytes);\n\t\t\t\tconst auditRecord = createAuditRecord({\n\t\t\t\t\tmethod,\n\t\t\t\t\turl,\n\t\t\t\t\tallowed: true,\n\t\t\t\t\tstatus: \"allowed\",\n\t\t\t\t\tstatusCode: response.status,\n\t\t\t\t\tstartedAt,\n\t\t\t\t});\n\t\t\t\trecordAudit(auditRecord);\n\t\t\t\treturn {\n\t\t\t\t\tallowed: true,\n\t\t\t\t\tstatus: \"allowed\",\n\t\t\t\t\tstatusCode: response.status,\n\t\t\t\t\theaders: responseHeadersToRecord(response.headers),\n\t\t\t\t\tbodyBase64: bytes.toString(\"base64\"),\n\t\t\t\t\taudit: cloneAuditRecord(auditRecord),\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tconst reason =\n\t\t\t\t\terror instanceof Error ? error.message : \"Network request failed\";\n\t\t\t\tconst auditRecord = createAuditRecord({\n\t\t\t\t\tmethod,\n\t\t\t\t\turl,\n\t\t\t\t\tallowed: true,\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\treason,\n\t\t\t\t\tstartedAt,\n\t\t\t\t});\n\t\t\t\trecordAudit(auditRecord);\n\t\t\t\treturn {\n\t\t\t\t\tallowed: true,\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\treason,\n\t\t\t\t\taudit: cloneAuditRecord(auditRecord),\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tasync listAudit(params = {}) {\n\t\t\tif (!isRecord(params)) {\n\t\t\t\tthrow new MaestroAppServerNetworkGovernanceError(\n\t\t\t\t\t-32602,\n\t\t\t\t\t\"Invalid params\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst limit = normalizeLimit(params.limit);\n\t\t\treturn {\n\t\t\t\taudit: audit.slice(-limit).map(cloneAuditRecord),\n\t\t\t\tnextCursor: null,\n\t\t\t};\n\t\t},\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-bundle-api.d.ts","sourceRoot":"","sources":["../../src/app-server/plugin-bundle-api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,sCAAsC,EACtC,0CAA0C,EAE1C,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin-bundle-api.d.ts","sourceRoot":"","sources":["../../src/app-server/plugin-bundle-api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,sCAAsC,EACtC,0CAA0C,EAE1C,MAAM,oBAAoB,CAAC;AAiB5B,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE7C,qBAAa,iCAAkC,SAAQ,KAAK;IAE1D,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAKhB;AAED,MAAM,WAAW,+BAA+B;IAC/C,WAAW,CACV,MAAM,CAAC,EAAE,aAAa,GACpB,OAAO,CAAC,sCAAsC,CAAC,CAAC;IACnD,aAAa,CACZ,MAAM,CAAC,EAAE,aAAa,GACpB,OAAO,CAAC,0CAA0C,CAAC,CAAC;IACvD,YAAY,CACX,MAAM,CAAC,EAAE,aAAa,GACpB,OAAO,CAAC,0CAA0C,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,sCAAsC;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AA+KD,wBAAgB,qCAAqC,CACpD,OAAO,GAAE,sCAA2C,GAClD,+BAA+B,CAuGjC"}
|
|
@@ -3,6 +3,7 @@ import { addConfiguredPackageSpecToConfig, getWritablePackageConfigPath, loadCon
|
|
|
3
3
|
import { parsePackageSpec } from "../packages/loader.js";
|
|
4
4
|
import { loadConfiguredPackageResources } from "../packages/runtime.js";
|
|
5
5
|
import { formatPackageSource, parsePackageSource, } from "../packages/sources.js";
|
|
6
|
+
import { isRecord } from "../utils/json.js";
|
|
6
7
|
export class MaestroAppServerPluginBundleError extends Error {
|
|
7
8
|
constructor(code, message) {
|
|
8
9
|
super(message);
|
|
@@ -10,9 +11,6 @@ export class MaestroAppServerPluginBundleError extends Error {
|
|
|
10
11
|
this.name = "MaestroAppServerPluginBundleError";
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
|
-
function isRecord(value) {
|
|
14
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
15
|
-
}
|
|
16
14
|
function stringValue(value) {
|
|
17
15
|
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
18
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-bundle-api.js","sourceRoot":"","sources":["../../src/app-server/plugin-bundle-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname, resolve } from \"node:path\";\nimport type {\n\tMaestroAppServerPluginBundleListResult,\n\tMaestroAppServerPluginBundleMutationResult,\n\tMaestroAppServerPluginBundleScope,\n} from \"@evalops/contracts\";\nimport {\n\ttype WritablePackageScope,\n\taddConfiguredPackageSpecToConfig,\n\tgetWritablePackageConfigPath,\n\tloadConfiguredPackageSpecs,\n\tremoveConfiguredPackageSpecFromConfig,\n} from \"../config/toml-config.js\";\nimport { parsePackageSpec } from \"../packages/loader.js\";\nimport { loadConfiguredPackageResources } from \"../packages/runtime.js\";\nimport {\n\tformatPackageSource,\n\tparsePackageSource,\n} from \"../packages/sources.js\";\nimport type { PackageSpec } from \"../packages/types.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport class MaestroAppServerPluginBundleError extends Error {\n\tconstructor(\n\t\treadonly code: number,\n\t\tmessage: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"MaestroAppServerPluginBundleError\";\n\t}\n}\n\nexport interface MaestroAppServerPluginBundleApi {\n\tlistBundles(\n\t\tparams?: UnknownRecord,\n\t): Promise<MaestroAppServerPluginBundleListResult>;\n\tinstallBundle(\n\t\tparams?: UnknownRecord,\n\t): Promise<MaestroAppServerPluginBundleMutationResult>;\n\tremoveBundle(\n\t\tparams?: UnknownRecord,\n\t): Promise<MaestroAppServerPluginBundleMutationResult>;\n}\n\nexport interface MaestroAppServerPluginBundleApiOptions {\n\tprojectRoot?: string;\n}\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction stringValue(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction booleanValue(value: unknown, fallback: boolean): boolean {\n\treturn typeof value === \"boolean\" ? value : fallback;\n}\n\nfunction paramsRecord(params: unknown): UnknownRecord {\n\tif (params === undefined) {\n\t\treturn {};\n\t}\n\tif (isRecord(params)) {\n\t\treturn params;\n\t}\n\tthrow new MaestroAppServerPluginBundleError(-32602, \"Invalid params\");\n}\n\nfunction projectRootFromParams(\n\toptions: MaestroAppServerPluginBundleApiOptions,\n\tparams: UnknownRecord,\n): string {\n\tconst projectRoot = resolve(options.projectRoot ?? process.cwd());\n\tconst requestedProjectRoot = stringValue(params.projectRoot);\n\tif (requestedProjectRoot && resolve(requestedProjectRoot) !== projectRoot) {\n\t\tthrow new MaestroAppServerPluginBundleError(\n\t\t\t-32602,\n\t\t\t\"Plugin bundle projectRoot is not available for this server\",\n\t\t);\n\t}\n\treturn projectRoot;\n}\n\nfunction scopeFromParams(params: UnknownRecord): WritablePackageScope {\n\tconst scope = stringValue(params.scope);\n\tif (scope === \"project\" || scope === \"local\" || scope === \"user\") {\n\t\treturn scope;\n\t}\n\tif (scope !== undefined) {\n\t\tthrow new MaestroAppServerPluginBundleError(\n\t\t\t-32602,\n\t\t\t\"Invalid plugin bundle scope\",\n\t\t);\n\t}\n\treturn \"local\";\n}\n\nfunction packageSpecFromParams(params: UnknownRecord): PackageSpec {\n\tconst spec = params.spec ?? params.source;\n\tif (typeof spec === \"string\" && spec.trim()) {\n\t\treturn spec.trim();\n\t}\n\tif (isRecord(spec) && typeof spec.source === \"string\" && spec.source.trim()) {\n\t\treturn spec as unknown as PackageSpec;\n\t}\n\tthrow new MaestroAppServerPluginBundleError(\n\t\t-32602,\n\t\t\"Plugin bundle requires source or spec\",\n\t);\n}\n\nfunction sourceString(spec: PackageSpec): string {\n\treturn typeof spec === \"string\" ? spec : spec.source;\n}\n\nfunction resolvePackageSpecIdentity(spec: PackageSpec, cwd: string): string {\n\tconst [sourceSpec] = parsePackageSpec(spec, cwd);\n\treturn formatPackageSource(parsePackageSource(sourceSpec, cwd));\n}\n\nfunction tryResolvePackageSourceIdentity(\n\tsourceSpec: string,\n\tcwd: string,\n): string | null {\n\ttry {\n\t\treturn formatPackageSource(parsePackageSource(sourceSpec, cwd));\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction configuredPackageMatches(\n\tentry: ReturnType<typeof loadConfiguredPackageSpecs>[number],\n\trequestedSpec: string,\n\trequestedCwd: string,\n): boolean {\n\tconst [rawSourceSpec] = parsePackageSpec(entry.spec, entry.cwd);\n\tif (rawSourceSpec === requestedSpec) {\n\t\treturn true;\n\t}\n\tconst requestedIdentity = tryResolvePackageSourceIdentity(\n\t\trequestedSpec,\n\t\trequestedCwd,\n\t);\n\tif (!requestedIdentity) {\n\t\treturn false;\n\t}\n\treturn (\n\t\tresolvePackageSpecIdentity(entry.spec, entry.cwd) === requestedIdentity\n\t);\n}\n\nfunction validateBundleInstall(\n\tprojectRoot: string,\n\tscope: WritablePackageScope,\n\tspec: PackageSpec,\n): { configPath: string } {\n\tconst configPath = getWritablePackageConfigPath(scope, projectRoot);\n\tconst configDir = dirname(configPath);\n\tconst requestedIdentity = resolvePackageSpecIdentity(spec, projectRoot);\n\tconst duplicate = loadConfiguredPackageSpecs(projectRoot).find(\n\t\t(entry) =>\n\t\t\tentry.configPath === configPath &&\n\t\t\tresolvePackageSpecIdentity(entry.spec, configDir) === requestedIdentity,\n\t);\n\tif (duplicate) {\n\t\tconst [sourceSpec] = parsePackageSpec(duplicate.spec, configDir);\n\t\tthrow new MaestroAppServerPluginBundleError(\n\t\t\t-32602,\n\t\t\t`Package \"${sourceSpec}\" already exists in ${configPath}.`,\n\t\t);\n\t}\n\treturn { configPath };\n}\n\nfunction resolveBundleRemoval(\n\tprojectRoot: string,\n\tspec: PackageSpec,\n\tscope?: WritablePackageScope,\n): { configPath: string; scope: WritablePackageScope } {\n\tconst requestedSpec = sourceString(spec);\n\tconst matches = loadConfiguredPackageSpecs(projectRoot).filter(\n\t\t(entry) =>\n\t\t\t(scope === undefined || entry.scope === scope) &&\n\t\t\tconfiguredPackageMatches(entry, requestedSpec, projectRoot),\n\t);\n\tconst orderedScopes: WritablePackageScope[] =\n\t\tscope === undefined ? [\"local\", \"project\", \"user\"] : [scope];\n\tfor (const candidateScope of orderedScopes) {\n\t\tconst match = matches.find((entry) => entry.scope === candidateScope);\n\t\tif (match) {\n\t\t\treturn { configPath: match.configPath, scope: match.scope };\n\t\t}\n\t}\n\tconst scopeMessage = scope === undefined ? \"\" : ` in ${scope} config`;\n\tthrow new MaestroAppServerPluginBundleError(\n\t\t-32602,\n\t\t`Configured package \"${requestedSpec}\" was not found${scopeMessage}.`,\n\t);\n}\n\nfunction toBundleScope(\n\tscope: WritablePackageScope,\n): MaestroAppServerPluginBundleScope {\n\treturn scope;\n}\n\nfunction pluginBundleErrorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction toPluginBundleInvalidParams(\n\terror: unknown,\n): MaestroAppServerPluginBundleError {\n\tif (error instanceof MaestroAppServerPluginBundleError) {\n\t\treturn error;\n\t}\n\treturn new MaestroAppServerPluginBundleError(\n\t\t-32602,\n\t\tpluginBundleErrorMessage(error),\n\t);\n}\n\nexport function createMaestroAppServerPluginBundleApi(\n\toptions: MaestroAppServerPluginBundleApiOptions = {},\n): MaestroAppServerPluginBundleApi {\n\treturn {\n\t\tasync listBundles(params = {}) {\n\t\t\tconst normalizedParams = paramsRecord(params);\n\t\t\tconst projectRoot = projectRootFromParams(options, normalizedParams);\n\t\t\tconst resources = loadConfiguredPackageResources(projectRoot);\n\t\t\treturn {\n\t\t\t\tbundles: loadConfiguredPackageSpecs(projectRoot).map((entry) => ({\n\t\t\t\t\tsource: sourceString(entry.spec),\n\t\t\t\t\tscope: toBundleScope(entry.scope),\n\t\t\t\t\tconfigPath: entry.configPath,\n\t\t\t\t})),\n\t\t\t\tresources: {\n\t\t\t\t\textensions: resources.extensions,\n\t\t\t\t\tskills: resources.skills,\n\t\t\t\t\tprompts: resources.prompts,\n\t\t\t\t\tthemes: resources.themes,\n\t\t\t\t},\n\t\t\t\terrors: resources.errors,\n\t\t\t};\n\t\t},\n\n\t\tasync installBundle(params = {}) {\n\t\t\tconst normalizedParams = paramsRecord(params);\n\t\t\tconst projectRoot = projectRootFromParams(options, normalizedParams);\n\t\t\tconst spec = packageSpecFromParams(normalizedParams);\n\t\t\tconst source = sourceString(spec);\n\t\t\tconst scope = scopeFromParams(normalizedParams);\n\t\t\tlet validation: ReturnType<typeof validateBundleInstall>;\n\t\t\ttry {\n\t\t\t\tvalidation = validateBundleInstall(projectRoot, scope, spec);\n\t\t\t} catch (error) {\n\t\t\t\tthrow toPluginBundleInvalidParams(error);\n\t\t\t}\n\t\t\tconst { configPath } = validation;\n\t\t\tif (booleanValue(normalizedParams.dryRun, false)) {\n\t\t\t\treturn {\n\t\t\t\t\tsource,\n\t\t\t\t\tscope,\n\t\t\t\t\tconfigPath,\n\t\t\t\t\tchanged: false,\n\t\t\t\t\tmessage: \"Plugin bundle install planned\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tlet result: ReturnType<typeof addConfiguredPackageSpecToConfig>;\n\t\t\ttry {\n\t\t\t\tresult = addConfiguredPackageSpecToConfig({\n\t\t\t\t\tworkspaceDir: projectRoot,\n\t\t\t\t\tscope,\n\t\t\t\t\tspec,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthrow toPluginBundleInvalidParams(error);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsource,\n\t\t\t\tscope: result.scope,\n\t\t\t\tconfigPath: result.path,\n\t\t\t\tchanged: true,\n\t\t\t\tmessage: \"Plugin bundle installed\",\n\t\t\t};\n\t\t},\n\n\t\tasync removeBundle(params = {}) {\n\t\t\tconst normalizedParams = paramsRecord(params);\n\t\t\tconst projectRoot = projectRootFromParams(options, normalizedParams);\n\t\t\tconst spec = packageSpecFromParams(normalizedParams);\n\t\t\tconst scope =\n\t\t\t\tnormalizedParams.scope === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: scopeFromParams(normalizedParams);\n\t\t\tconst removal = resolveBundleRemoval(projectRoot, spec, scope);\n\t\t\tif (booleanValue(normalizedParams.dryRun, false)) {\n\t\t\t\treturn {\n\t\t\t\t\tsource: sourceString(spec),\n\t\t\t\t\tscope: removal.scope,\n\t\t\t\t\tconfigPath: removal.configPath,\n\t\t\t\t\tchanged: false,\n\t\t\t\t\tmessage: \"Plugin bundle removal planned\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tlet result: ReturnType<typeof removeConfiguredPackageSpecFromConfig>;\n\t\t\ttry {\n\t\t\t\tresult = removeConfiguredPackageSpecFromConfig({\n\t\t\t\t\tworkspaceDir: projectRoot,\n\t\t\t\t\tscope,\n\t\t\t\t\tspec: sourceString(spec),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthrow new MaestroAppServerPluginBundleError(\n\t\t\t\t\t-32602,\n\t\t\t\t\tpluginBundleErrorMessage(error),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsource: sourceString(spec),\n\t\t\t\tscope: result.scope,\n\t\t\t\tconfigPath: result.path,\n\t\t\t\tchanged: result.removedCount > 0,\n\t\t\t\tmessage: `Removed ${result.removedCount} plugin bundle(s)`,\n\t\t\t};\n\t\t},\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"plugin-bundle-api.js","sourceRoot":"","sources":["../../src/app-server/plugin-bundle-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname, resolve } from \"node:path\";\nimport type {\n\tMaestroAppServerPluginBundleListResult,\n\tMaestroAppServerPluginBundleMutationResult,\n\tMaestroAppServerPluginBundleScope,\n} from \"@evalops/contracts\";\nimport {\n\ttype WritablePackageScope,\n\taddConfiguredPackageSpecToConfig,\n\tgetWritablePackageConfigPath,\n\tloadConfiguredPackageSpecs,\n\tremoveConfiguredPackageSpecFromConfig,\n} from \"../config/toml-config.js\";\nimport { parsePackageSpec } from \"../packages/loader.js\";\nimport { loadConfiguredPackageResources } from \"../packages/runtime.js\";\nimport {\n\tformatPackageSource,\n\tparsePackageSource,\n} from \"../packages/sources.js\";\nimport type { PackageSpec } from \"../packages/types.js\";\nimport { isRecord } from \"../utils/json.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport class MaestroAppServerPluginBundleError extends Error {\n\tconstructor(\n\t\treadonly code: number,\n\t\tmessage: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"MaestroAppServerPluginBundleError\";\n\t}\n}\n\nexport interface MaestroAppServerPluginBundleApi {\n\tlistBundles(\n\t\tparams?: UnknownRecord,\n\t): Promise<MaestroAppServerPluginBundleListResult>;\n\tinstallBundle(\n\t\tparams?: UnknownRecord,\n\t): Promise<MaestroAppServerPluginBundleMutationResult>;\n\tremoveBundle(\n\t\tparams?: UnknownRecord,\n\t): Promise<MaestroAppServerPluginBundleMutationResult>;\n}\n\nexport interface MaestroAppServerPluginBundleApiOptions {\n\tprojectRoot?: string;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction booleanValue(value: unknown, fallback: boolean): boolean {\n\treturn typeof value === \"boolean\" ? value : fallback;\n}\n\nfunction paramsRecord(params: unknown): UnknownRecord {\n\tif (params === undefined) {\n\t\treturn {};\n\t}\n\tif (isRecord(params)) {\n\t\treturn params;\n\t}\n\tthrow new MaestroAppServerPluginBundleError(-32602, \"Invalid params\");\n}\n\nfunction projectRootFromParams(\n\toptions: MaestroAppServerPluginBundleApiOptions,\n\tparams: UnknownRecord,\n): string {\n\tconst projectRoot = resolve(options.projectRoot ?? process.cwd());\n\tconst requestedProjectRoot = stringValue(params.projectRoot);\n\tif (requestedProjectRoot && resolve(requestedProjectRoot) !== projectRoot) {\n\t\tthrow new MaestroAppServerPluginBundleError(\n\t\t\t-32602,\n\t\t\t\"Plugin bundle projectRoot is not available for this server\",\n\t\t);\n\t}\n\treturn projectRoot;\n}\n\nfunction scopeFromParams(params: UnknownRecord): WritablePackageScope {\n\tconst scope = stringValue(params.scope);\n\tif (scope === \"project\" || scope === \"local\" || scope === \"user\") {\n\t\treturn scope;\n\t}\n\tif (scope !== undefined) {\n\t\tthrow new MaestroAppServerPluginBundleError(\n\t\t\t-32602,\n\t\t\t\"Invalid plugin bundle scope\",\n\t\t);\n\t}\n\treturn \"local\";\n}\n\nfunction packageSpecFromParams(params: UnknownRecord): PackageSpec {\n\tconst spec = params.spec ?? params.source;\n\tif (typeof spec === \"string\" && spec.trim()) {\n\t\treturn spec.trim();\n\t}\n\tif (isRecord(spec) && typeof spec.source === \"string\" && spec.source.trim()) {\n\t\treturn spec as unknown as PackageSpec;\n\t}\n\tthrow new MaestroAppServerPluginBundleError(\n\t\t-32602,\n\t\t\"Plugin bundle requires source or spec\",\n\t);\n}\n\nfunction sourceString(spec: PackageSpec): string {\n\treturn typeof spec === \"string\" ? spec : spec.source;\n}\n\nfunction resolvePackageSpecIdentity(spec: PackageSpec, cwd: string): string {\n\tconst [sourceSpec] = parsePackageSpec(spec, cwd);\n\treturn formatPackageSource(parsePackageSource(sourceSpec, cwd));\n}\n\nfunction tryResolvePackageSourceIdentity(\n\tsourceSpec: string,\n\tcwd: string,\n): string | null {\n\ttry {\n\t\treturn formatPackageSource(parsePackageSource(sourceSpec, cwd));\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction configuredPackageMatches(\n\tentry: ReturnType<typeof loadConfiguredPackageSpecs>[number],\n\trequestedSpec: string,\n\trequestedCwd: string,\n): boolean {\n\tconst [rawSourceSpec] = parsePackageSpec(entry.spec, entry.cwd);\n\tif (rawSourceSpec === requestedSpec) {\n\t\treturn true;\n\t}\n\tconst requestedIdentity = tryResolvePackageSourceIdentity(\n\t\trequestedSpec,\n\t\trequestedCwd,\n\t);\n\tif (!requestedIdentity) {\n\t\treturn false;\n\t}\n\treturn (\n\t\tresolvePackageSpecIdentity(entry.spec, entry.cwd) === requestedIdentity\n\t);\n}\n\nfunction validateBundleInstall(\n\tprojectRoot: string,\n\tscope: WritablePackageScope,\n\tspec: PackageSpec,\n): { configPath: string } {\n\tconst configPath = getWritablePackageConfigPath(scope, projectRoot);\n\tconst configDir = dirname(configPath);\n\tconst requestedIdentity = resolvePackageSpecIdentity(spec, projectRoot);\n\tconst duplicate = loadConfiguredPackageSpecs(projectRoot).find(\n\t\t(entry) =>\n\t\t\tentry.configPath === configPath &&\n\t\t\tresolvePackageSpecIdentity(entry.spec, configDir) === requestedIdentity,\n\t);\n\tif (duplicate) {\n\t\tconst [sourceSpec] = parsePackageSpec(duplicate.spec, configDir);\n\t\tthrow new MaestroAppServerPluginBundleError(\n\t\t\t-32602,\n\t\t\t`Package \"${sourceSpec}\" already exists in ${configPath}.`,\n\t\t);\n\t}\n\treturn { configPath };\n}\n\nfunction resolveBundleRemoval(\n\tprojectRoot: string,\n\tspec: PackageSpec,\n\tscope?: WritablePackageScope,\n): { configPath: string; scope: WritablePackageScope } {\n\tconst requestedSpec = sourceString(spec);\n\tconst matches = loadConfiguredPackageSpecs(projectRoot).filter(\n\t\t(entry) =>\n\t\t\t(scope === undefined || entry.scope === scope) &&\n\t\t\tconfiguredPackageMatches(entry, requestedSpec, projectRoot),\n\t);\n\tconst orderedScopes: WritablePackageScope[] =\n\t\tscope === undefined ? [\"local\", \"project\", \"user\"] : [scope];\n\tfor (const candidateScope of orderedScopes) {\n\t\tconst match = matches.find((entry) => entry.scope === candidateScope);\n\t\tif (match) {\n\t\t\treturn { configPath: match.configPath, scope: match.scope };\n\t\t}\n\t}\n\tconst scopeMessage = scope === undefined ? \"\" : ` in ${scope} config`;\n\tthrow new MaestroAppServerPluginBundleError(\n\t\t-32602,\n\t\t`Configured package \"${requestedSpec}\" was not found${scopeMessage}.`,\n\t);\n}\n\nfunction toBundleScope(\n\tscope: WritablePackageScope,\n): MaestroAppServerPluginBundleScope {\n\treturn scope;\n}\n\nfunction pluginBundleErrorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction toPluginBundleInvalidParams(\n\terror: unknown,\n): MaestroAppServerPluginBundleError {\n\tif (error instanceof MaestroAppServerPluginBundleError) {\n\t\treturn error;\n\t}\n\treturn new MaestroAppServerPluginBundleError(\n\t\t-32602,\n\t\tpluginBundleErrorMessage(error),\n\t);\n}\n\nexport function createMaestroAppServerPluginBundleApi(\n\toptions: MaestroAppServerPluginBundleApiOptions = {},\n): MaestroAppServerPluginBundleApi {\n\treturn {\n\t\tasync listBundles(params = {}) {\n\t\t\tconst normalizedParams = paramsRecord(params);\n\t\t\tconst projectRoot = projectRootFromParams(options, normalizedParams);\n\t\t\tconst resources = loadConfiguredPackageResources(projectRoot);\n\t\t\treturn {\n\t\t\t\tbundles: loadConfiguredPackageSpecs(projectRoot).map((entry) => ({\n\t\t\t\t\tsource: sourceString(entry.spec),\n\t\t\t\t\tscope: toBundleScope(entry.scope),\n\t\t\t\t\tconfigPath: entry.configPath,\n\t\t\t\t})),\n\t\t\t\tresources: {\n\t\t\t\t\textensions: resources.extensions,\n\t\t\t\t\tskills: resources.skills,\n\t\t\t\t\tprompts: resources.prompts,\n\t\t\t\t\tthemes: resources.themes,\n\t\t\t\t},\n\t\t\t\terrors: resources.errors,\n\t\t\t};\n\t\t},\n\n\t\tasync installBundle(params = {}) {\n\t\t\tconst normalizedParams = paramsRecord(params);\n\t\t\tconst projectRoot = projectRootFromParams(options, normalizedParams);\n\t\t\tconst spec = packageSpecFromParams(normalizedParams);\n\t\t\tconst source = sourceString(spec);\n\t\t\tconst scope = scopeFromParams(normalizedParams);\n\t\t\tlet validation: ReturnType<typeof validateBundleInstall>;\n\t\t\ttry {\n\t\t\t\tvalidation = validateBundleInstall(projectRoot, scope, spec);\n\t\t\t} catch (error) {\n\t\t\t\tthrow toPluginBundleInvalidParams(error);\n\t\t\t}\n\t\t\tconst { configPath } = validation;\n\t\t\tif (booleanValue(normalizedParams.dryRun, false)) {\n\t\t\t\treturn {\n\t\t\t\t\tsource,\n\t\t\t\t\tscope,\n\t\t\t\t\tconfigPath,\n\t\t\t\t\tchanged: false,\n\t\t\t\t\tmessage: \"Plugin bundle install planned\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tlet result: ReturnType<typeof addConfiguredPackageSpecToConfig>;\n\t\t\ttry {\n\t\t\t\tresult = addConfiguredPackageSpecToConfig({\n\t\t\t\t\tworkspaceDir: projectRoot,\n\t\t\t\t\tscope,\n\t\t\t\t\tspec,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthrow toPluginBundleInvalidParams(error);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsource,\n\t\t\t\tscope: result.scope,\n\t\t\t\tconfigPath: result.path,\n\t\t\t\tchanged: true,\n\t\t\t\tmessage: \"Plugin bundle installed\",\n\t\t\t};\n\t\t},\n\n\t\tasync removeBundle(params = {}) {\n\t\t\tconst normalizedParams = paramsRecord(params);\n\t\t\tconst projectRoot = projectRootFromParams(options, normalizedParams);\n\t\t\tconst spec = packageSpecFromParams(normalizedParams);\n\t\t\tconst scope =\n\t\t\t\tnormalizedParams.scope === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: scopeFromParams(normalizedParams);\n\t\t\tconst removal = resolveBundleRemoval(projectRoot, spec, scope);\n\t\t\tif (booleanValue(normalizedParams.dryRun, false)) {\n\t\t\t\treturn {\n\t\t\t\t\tsource: sourceString(spec),\n\t\t\t\t\tscope: removal.scope,\n\t\t\t\t\tconfigPath: removal.configPath,\n\t\t\t\t\tchanged: false,\n\t\t\t\t\tmessage: \"Plugin bundle removal planned\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tlet result: ReturnType<typeof removeConfiguredPackageSpecFromConfig>;\n\t\t\ttry {\n\t\t\t\tresult = removeConfiguredPackageSpecFromConfig({\n\t\t\t\t\tworkspaceDir: projectRoot,\n\t\t\t\t\tscope,\n\t\t\t\t\tspec: sourceString(spec),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthrow new MaestroAppServerPluginBundleError(\n\t\t\t\t\t-32602,\n\t\t\t\t\tpluginBundleErrorMessage(error),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsource: sourceString(spec),\n\t\t\t\tscope: result.scope,\n\t\t\t\tconfigPath: result.path,\n\t\t\t\tchanged: result.removedCount > 0,\n\t\t\t\tmessage: `Removed ${result.removedCount} plugin bundle(s)`,\n\t\t\t};\n\t\t},\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy-control-api.d.ts","sourceRoot":"","sources":["../../src/app-server/policy-control-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,iCAAiC,EACjC,gCAAgC,EAChC,sCAAsC,EACtC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"policy-control-api.d.ts","sourceRoot":"","sources":["../../src/app-server/policy-control-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,iCAAiC,EACjC,gCAAgC,EAChC,sCAAsC,EACtC,MAAM,oBAAoB,CAAC;AAW5B,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE7C,qBAAa,kCAAmC,SAAQ,KAAK;IAE3D,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAKhB;AAED,MAAM,WAAW,6BAA6B;IAC7C,UAAU,IAAI,gCAAgC,CAAC;IAC/C,WAAW,CACV,MAAM,CAAC,EAAE,aAAa,GACpB,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAC9C,gBAAgB,IAAI,sCAAsC,CAAC;CAC3D;AAuKD,wBAAgB,mCAAmC,IAAI,6BAA6B,CA+EnF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { checkModelPolicy, checkPolicy, checkSessionLimits, loadPolicy, } from "../safety/policy.js";
|
|
2
|
+
import { isRecord } from "../utils/json.js";
|
|
2
3
|
export class MaestroAppServerPolicyControlError extends Error {
|
|
3
4
|
constructor(code, message) {
|
|
4
5
|
super(message);
|
|
@@ -29,9 +30,6 @@ function clonePolicySnapshot(policy) {
|
|
|
29
30
|
}
|
|
30
31
|
return deepFreezeSnapshot(structuredClone(policy));
|
|
31
32
|
}
|
|
32
|
-
function isRecord(value) {
|
|
33
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
34
|
-
}
|
|
35
33
|
function hasOwnKey(value, key) {
|
|
36
34
|
return Object.prototype.hasOwnProperty.call(value, key);
|
|
37
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy-control-api.js","sourceRoot":"","sources":["../../src/app-server/policy-control-api.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tMaestroAppServerPolicyCheckItem,\n\tMaestroAppServerPolicyCheckResult,\n\tMaestroAppServerPolicyReadResult,\n\tMaestroAppServerRequirementsListResult,\n} from \"@evalops/contracts\";\nimport type { ActionApprovalContext } from \"../agent/action-approval.js\";\nimport {\n\ttype EnterprisePolicy,\n\tcheckModelPolicy,\n\tcheckPolicy,\n\tcheckSessionLimits,\n\tloadPolicy,\n} from \"../safety/policy.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport class MaestroAppServerPolicyControlError extends Error {\n\tconstructor(\n\t\treadonly code: number,\n\t\tmessage: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"MaestroAppServerPolicyControlError\";\n\t}\n}\n\nexport interface MaestroAppServerPolicyControl {\n\treadPolicy(): MaestroAppServerPolicyReadResult;\n\tcheckPolicy(\n\t\tparams?: UnknownRecord,\n\t): Promise<MaestroAppServerPolicyCheckResult>;\n\tlistRequirements(): MaestroAppServerRequirementsListResult;\n}\n\nfunction readCurrentPolicy() {\n\ttry {\n\t\treturn loadPolicy();\n\t} catch (error) {\n\t\tthrow new MaestroAppServerPolicyControlError(\n\t\t\t-32000,\n\t\t\t`Failed to load managed policy: ${error instanceof Error ? error.message : \"unknown error\"}`,\n\t\t);\n\t}\n}\n\nfunction deepFreezeSnapshot<T>(value: T): T {\n\tif (typeof value !== \"object\" || value === null) {\n\t\treturn value;\n\t}\n\tfor (const key of Object.getOwnPropertyNames(value)) {\n\t\tdeepFreezeSnapshot((value as Record<string, unknown>)[key]);\n\t}\n\treturn Object.freeze(value);\n}\n\nfunction clonePolicySnapshot(\n\tpolicy: EnterprisePolicy | null,\n): MaestroAppServerPolicyReadResult[\"policy\"] {\n\tif (policy === null) {\n\t\treturn null;\n\t}\n\treturn deepFreezeSnapshot(structuredClone(policy));\n}\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction hasOwnKey(value: object, key: PropertyKey): boolean {\n\treturn Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction optionalNonEmptyString(\n\tvalue: unknown,\n\tfield: string,\n): string | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (typeof value !== \"string\" || value.trim().length === 0) {\n\t\tthrow new MaestroAppServerPolicyControlError(-32602, `Invalid ${field}`);\n\t}\n\treturn value.trim();\n}\n\nfunction parseUser(value: unknown): ActionApprovalContext[\"user\"] | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (!isRecord(value)) {\n\t\tthrow new MaestroAppServerPolicyControlError(-32602, \"Invalid user\");\n\t}\n\tconst id = optionalNonEmptyString(value.id, \"user.id\");\n\tconst orgId = optionalNonEmptyString(value.orgId, \"user.orgId\");\n\tif (!id || !orgId) {\n\t\tthrow new MaestroAppServerPolicyControlError(-32602, \"Invalid user\");\n\t}\n\treturn { id, orgId };\n}\n\nfunction parseSession(\n\tvalue: unknown,\n\trequireId: boolean,\n): ActionApprovalContext[\"session\"] {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (!isRecord(value)) {\n\t\tthrow new MaestroAppServerPolicyControlError(-32602, \"Invalid session\");\n\t}\n\tconst id = optionalNonEmptyString(value.id, \"session.id\");\n\tif (requireId && !id) {\n\t\tthrow new MaestroAppServerPolicyControlError(-32602, \"Invalid session.id\");\n\t}\n\tif (value.startedAt === undefined || value.startedAt === null) {\n\t\tthrow new MaestroAppServerPolicyControlError(\n\t\t\t-32602,\n\t\t\t\"Invalid session.startedAt\",\n\t\t);\n\t}\n\tconst startedAt =\n\t\tvalue.startedAt instanceof Date\n\t\t\t? new Date(value.startedAt.getTime())\n\t\t\t: new Date(\n\t\t\t\t\toptionalNonEmptyString(value.startedAt, \"session.startedAt\") ?? \"\",\n\t\t\t\t);\n\tif (!Number.isFinite(startedAt.getTime())) {\n\t\tthrow new MaestroAppServerPolicyControlError(\n\t\t\t-32602,\n\t\t\t\"Invalid session.startedAt\",\n\t\t);\n\t}\n\treturn { id: id ?? \"app-server-policy-check\", startedAt };\n}\n\nfunction parseActionContext(\n\tvalue: unknown,\n\tfallbackSession?: ActionApprovalContext[\"session\"],\n): ActionApprovalContext | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (!isRecord(value)) {\n\t\tthrow new MaestroAppServerPolicyControlError(-32602, \"Invalid action\");\n\t}\n\tconst toolName = optionalNonEmptyString(value.toolName, \"action.toolName\");\n\tif (!toolName) {\n\t\tthrow new MaestroAppServerPolicyControlError(\n\t\t\t-32602,\n\t\t\t\"Invalid action.toolName\",\n\t\t);\n\t}\n\tconst actionSession =\n\t\tvalue.session === undefined || value.session === null\n\t\t\t? fallbackSession\n\t\t\t: parseSession(value.session, false);\n\treturn {\n\t\ttoolName,\n\t\targs: hasOwnKey(value, \"args\") ? value.args : {},\n\t\tmetadata: isRecord(value.metadata)\n\t\t\t? (value.metadata as ActionApprovalContext[\"metadata\"])\n\t\t\t: undefined,\n\t\tuser: parseUser(value.user),\n\t\tsession: actionSession,\n\t\tuserIntent: optionalNonEmptyString(value.userIntent, \"action.userIntent\"),\n\t};\n}\n\nfunction parseUsage(\n\tvalue: unknown,\n): { tokenCount?: number; activeSessionCount?: number } | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (!isRecord(value)) {\n\t\tthrow new MaestroAppServerPolicyControlError(-32602, \"Invalid usage\");\n\t}\n\tconst usage: { tokenCount?: number; activeSessionCount?: number } = {};\n\tfor (const key of [\"tokenCount\", \"activeSessionCount\"] as const) {\n\t\tif (value[key] === undefined || value[key] === null) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\ttypeof value[key] !== \"number\" ||\n\t\t\t!Number.isFinite(value[key]) ||\n\t\t\tvalue[key] < 0\n\t\t) {\n\t\t\tthrow new MaestroAppServerPolicyControlError(\n\t\t\t\t-32602,\n\t\t\t\t`Invalid usage.${key}`,\n\t\t\t);\n\t\t}\n\t\tusage[key] = value[key];\n\t}\n\treturn usage;\n}\n\nfunction firstReason(\n\tchecks: MaestroAppServerPolicyCheckItem[],\n): string | undefined {\n\treturn checks.find((check) => !check.allowed)?.reason;\n}\n\nexport function createMaestroAppServerPolicyControl(): MaestroAppServerPolicyControl {\n\treturn {\n\t\treadPolicy() {\n\t\t\tconst policy = readCurrentPolicy();\n\t\t\treturn {\n\t\t\t\tloaded: policy !== null,\n\t\t\t\tpolicy: clonePolicySnapshot(policy),\n\t\t\t};\n\t\t},\n\n\t\tasync checkPolicy(params = {}) {\n\t\t\tif (!isRecord(params)) {\n\t\t\t\tthrow new MaestroAppServerPolicyControlError(-32602, \"Invalid params\");\n\t\t\t}\n\t\t\tconst checks: MaestroAppServerPolicyCheckItem[] = [];\n\t\t\tconst session = parseSession(params.session, false);\n\t\t\tconst action = parseActionContext(params.action, session);\n\t\t\tconst sessionForLimits = action?.session ?? session;\n\t\t\tif (action) {\n\t\t\t\tconst result = await checkPolicy(action);\n\t\t\t\tchecks.push({\n\t\t\t\t\tkind: \"action\",\n\t\t\t\t\tallowed: result.allowed,\n\t\t\t\t\t...(result.reason ? { reason: result.reason } : {}),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst modelId = optionalNonEmptyString(params.modelId, \"modelId\");\n\t\t\tif (modelId) {\n\t\t\t\tconst result = checkModelPolicy(modelId);\n\t\t\t\tchecks.push({\n\t\t\t\t\tkind: \"model\",\n\t\t\t\t\tallowed: result.allowed,\n\t\t\t\t\t...(result.reason ? { reason: result.reason } : {}),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (sessionForLimits) {\n\t\t\t\tconst result = checkSessionLimits(\n\t\t\t\t\tsessionForLimits,\n\t\t\t\t\tparseUsage(params.usage),\n\t\t\t\t);\n\t\t\t\tchecks.push({\n\t\t\t\t\tkind: \"session\",\n\t\t\t\t\tallowed: result.allowed,\n\t\t\t\t\t...(result.reason ? { reason: result.reason } : {}),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (checks.length === 0) {\n\t\t\t\tthrow new MaestroAppServerPolicyControlError(\n\t\t\t\t\t-32602,\n\t\t\t\t\t\"Missing policy check target\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst reason = firstReason(checks);\n\t\t\treturn {\n\t\t\t\tallowed: checks.every((check) => check.allowed),\n\t\t\t\t...(reason ? { reason } : {}),\n\t\t\t\tchecks,\n\t\t\t};\n\t\t},\n\n\t\tlistRequirements() {\n\t\t\tconst policy = readCurrentPolicy();\n\t\t\tconst requiredSkills = deepFreezeSnapshot([\n\t\t\t\t...(policy?.skills?.required ?? []),\n\t\t\t]);\n\t\t\treturn {\n\t\t\t\trequirements: requiredSkills.map((id) => ({\n\t\t\t\t\tkind: \"skill\",\n\t\t\t\t\tid,\n\t\t\t\t\trequired: true,\n\t\t\t\t})),\n\t\t\t\trequiredSkills,\n\t\t\t};\n\t\t},\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"policy-control-api.js","sourceRoot":"","sources":["../../src/app-server/policy-control-api.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tMaestroAppServerPolicyCheckItem,\n\tMaestroAppServerPolicyCheckResult,\n\tMaestroAppServerPolicyReadResult,\n\tMaestroAppServerRequirementsListResult,\n} from \"@evalops/contracts\";\nimport type { ActionApprovalContext } from \"../agent/action-approval.js\";\nimport {\n\ttype EnterprisePolicy,\n\tcheckModelPolicy,\n\tcheckPolicy,\n\tcheckSessionLimits,\n\tloadPolicy,\n} from \"../safety/policy.js\";\nimport { isRecord } from \"../utils/json.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport class MaestroAppServerPolicyControlError extends Error {\n\tconstructor(\n\t\treadonly code: number,\n\t\tmessage: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"MaestroAppServerPolicyControlError\";\n\t}\n}\n\nexport interface MaestroAppServerPolicyControl {\n\treadPolicy(): MaestroAppServerPolicyReadResult;\n\tcheckPolicy(\n\t\tparams?: UnknownRecord,\n\t): Promise<MaestroAppServerPolicyCheckResult>;\n\tlistRequirements(): MaestroAppServerRequirementsListResult;\n}\n\nfunction readCurrentPolicy() {\n\ttry {\n\t\treturn loadPolicy();\n\t} catch (error) {\n\t\tthrow new MaestroAppServerPolicyControlError(\n\t\t\t-32000,\n\t\t\t`Failed to load managed policy: ${error instanceof Error ? error.message : \"unknown error\"}`,\n\t\t);\n\t}\n}\n\nfunction deepFreezeSnapshot<T>(value: T): T {\n\tif (typeof value !== \"object\" || value === null) {\n\t\treturn value;\n\t}\n\tfor (const key of Object.getOwnPropertyNames(value)) {\n\t\tdeepFreezeSnapshot((value as Record<string, unknown>)[key]);\n\t}\n\treturn Object.freeze(value);\n}\n\nfunction clonePolicySnapshot(\n\tpolicy: EnterprisePolicy | null,\n): MaestroAppServerPolicyReadResult[\"policy\"] {\n\tif (policy === null) {\n\t\treturn null;\n\t}\n\treturn deepFreezeSnapshot(structuredClone(policy));\n}\n\nfunction hasOwnKey(value: object, key: PropertyKey): boolean {\n\treturn Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction optionalNonEmptyString(\n\tvalue: unknown,\n\tfield: string,\n): string | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (typeof value !== \"string\" || value.trim().length === 0) {\n\t\tthrow new MaestroAppServerPolicyControlError(-32602, `Invalid ${field}`);\n\t}\n\treturn value.trim();\n}\n\nfunction parseUser(value: unknown): ActionApprovalContext[\"user\"] | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (!isRecord(value)) {\n\t\tthrow new MaestroAppServerPolicyControlError(-32602, \"Invalid user\");\n\t}\n\tconst id = optionalNonEmptyString(value.id, \"user.id\");\n\tconst orgId = optionalNonEmptyString(value.orgId, \"user.orgId\");\n\tif (!id || !orgId) {\n\t\tthrow new MaestroAppServerPolicyControlError(-32602, \"Invalid user\");\n\t}\n\treturn { id, orgId };\n}\n\nfunction parseSession(\n\tvalue: unknown,\n\trequireId: boolean,\n): ActionApprovalContext[\"session\"] {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (!isRecord(value)) {\n\t\tthrow new MaestroAppServerPolicyControlError(-32602, \"Invalid session\");\n\t}\n\tconst id = optionalNonEmptyString(value.id, \"session.id\");\n\tif (requireId && !id) {\n\t\tthrow new MaestroAppServerPolicyControlError(-32602, \"Invalid session.id\");\n\t}\n\tif (value.startedAt === undefined || value.startedAt === null) {\n\t\tthrow new MaestroAppServerPolicyControlError(\n\t\t\t-32602,\n\t\t\t\"Invalid session.startedAt\",\n\t\t);\n\t}\n\tconst startedAt =\n\t\tvalue.startedAt instanceof Date\n\t\t\t? new Date(value.startedAt.getTime())\n\t\t\t: new Date(\n\t\t\t\t\toptionalNonEmptyString(value.startedAt, \"session.startedAt\") ?? \"\",\n\t\t\t\t);\n\tif (!Number.isFinite(startedAt.getTime())) {\n\t\tthrow new MaestroAppServerPolicyControlError(\n\t\t\t-32602,\n\t\t\t\"Invalid session.startedAt\",\n\t\t);\n\t}\n\treturn { id: id ?? \"app-server-policy-check\", startedAt };\n}\n\nfunction parseActionContext(\n\tvalue: unknown,\n\tfallbackSession?: ActionApprovalContext[\"session\"],\n): ActionApprovalContext | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (!isRecord(value)) {\n\t\tthrow new MaestroAppServerPolicyControlError(-32602, \"Invalid action\");\n\t}\n\tconst toolName = optionalNonEmptyString(value.toolName, \"action.toolName\");\n\tif (!toolName) {\n\t\tthrow new MaestroAppServerPolicyControlError(\n\t\t\t-32602,\n\t\t\t\"Invalid action.toolName\",\n\t\t);\n\t}\n\tconst actionSession =\n\t\tvalue.session === undefined || value.session === null\n\t\t\t? fallbackSession\n\t\t\t: parseSession(value.session, false);\n\treturn {\n\t\ttoolName,\n\t\targs: hasOwnKey(value, \"args\") ? value.args : {},\n\t\tmetadata: isRecord(value.metadata)\n\t\t\t? (value.metadata as ActionApprovalContext[\"metadata\"])\n\t\t\t: undefined,\n\t\tuser: parseUser(value.user),\n\t\tsession: actionSession,\n\t\tuserIntent: optionalNonEmptyString(value.userIntent, \"action.userIntent\"),\n\t};\n}\n\nfunction parseUsage(\n\tvalue: unknown,\n): { tokenCount?: number; activeSessionCount?: number } | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (!isRecord(value)) {\n\t\tthrow new MaestroAppServerPolicyControlError(-32602, \"Invalid usage\");\n\t}\n\tconst usage: { tokenCount?: number; activeSessionCount?: number } = {};\n\tfor (const key of [\"tokenCount\", \"activeSessionCount\"] as const) {\n\t\tif (value[key] === undefined || value[key] === null) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\ttypeof value[key] !== \"number\" ||\n\t\t\t!Number.isFinite(value[key]) ||\n\t\t\tvalue[key] < 0\n\t\t) {\n\t\t\tthrow new MaestroAppServerPolicyControlError(\n\t\t\t\t-32602,\n\t\t\t\t`Invalid usage.${key}`,\n\t\t\t);\n\t\t}\n\t\tusage[key] = value[key];\n\t}\n\treturn usage;\n}\n\nfunction firstReason(\n\tchecks: MaestroAppServerPolicyCheckItem[],\n): string | undefined {\n\treturn checks.find((check) => !check.allowed)?.reason;\n}\n\nexport function createMaestroAppServerPolicyControl(): MaestroAppServerPolicyControl {\n\treturn {\n\t\treadPolicy() {\n\t\t\tconst policy = readCurrentPolicy();\n\t\t\treturn {\n\t\t\t\tloaded: policy !== null,\n\t\t\t\tpolicy: clonePolicySnapshot(policy),\n\t\t\t};\n\t\t},\n\n\t\tasync checkPolicy(params = {}) {\n\t\t\tif (!isRecord(params)) {\n\t\t\t\tthrow new MaestroAppServerPolicyControlError(-32602, \"Invalid params\");\n\t\t\t}\n\t\t\tconst checks: MaestroAppServerPolicyCheckItem[] = [];\n\t\t\tconst session = parseSession(params.session, false);\n\t\t\tconst action = parseActionContext(params.action, session);\n\t\t\tconst sessionForLimits = action?.session ?? session;\n\t\t\tif (action) {\n\t\t\t\tconst result = await checkPolicy(action);\n\t\t\t\tchecks.push({\n\t\t\t\t\tkind: \"action\",\n\t\t\t\t\tallowed: result.allowed,\n\t\t\t\t\t...(result.reason ? { reason: result.reason } : {}),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst modelId = optionalNonEmptyString(params.modelId, \"modelId\");\n\t\t\tif (modelId) {\n\t\t\t\tconst result = checkModelPolicy(modelId);\n\t\t\t\tchecks.push({\n\t\t\t\t\tkind: \"model\",\n\t\t\t\t\tallowed: result.allowed,\n\t\t\t\t\t...(result.reason ? { reason: result.reason } : {}),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (sessionForLimits) {\n\t\t\t\tconst result = checkSessionLimits(\n\t\t\t\t\tsessionForLimits,\n\t\t\t\t\tparseUsage(params.usage),\n\t\t\t\t);\n\t\t\t\tchecks.push({\n\t\t\t\t\tkind: \"session\",\n\t\t\t\t\tallowed: result.allowed,\n\t\t\t\t\t...(result.reason ? { reason: result.reason } : {}),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (checks.length === 0) {\n\t\t\t\tthrow new MaestroAppServerPolicyControlError(\n\t\t\t\t\t-32602,\n\t\t\t\t\t\"Missing policy check target\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst reason = firstReason(checks);\n\t\t\treturn {\n\t\t\t\tallowed: checks.every((check) => check.allowed),\n\t\t\t\t...(reason ? { reason } : {}),\n\t\t\t\tchecks,\n\t\t\t};\n\t\t},\n\n\t\tlistRequirements() {\n\t\t\tconst policy = readCurrentPolicy();\n\t\t\tconst requiredSkills = deepFreezeSnapshot([\n\t\t\t\t...(policy?.skills?.required ?? []),\n\t\t\t]);\n\t\t\treturn {\n\t\t\t\trequirements: requiredSkills.map((id) => ({\n\t\t\t\t\tkind: \"skill\",\n\t\t\t\t\tid,\n\t\t\t\t\trequired: true,\n\t\t\t\t})),\n\t\t\t\trequiredSkills,\n\t\t\t};\n\t\t},\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol-modes-api.d.ts","sourceRoot":"","sources":["../../src/app-server/protocol-modes-api.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,4BAA4B,EAEjC,KAAK,8BAA8B,EACnC,KAAK,sCAAsC,EAC3C,KAAK,qCAAqC,EAI1C,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"protocol-modes-api.d.ts","sourceRoot":"","sources":["../../src/app-server/protocol-modes-api.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,4BAA4B,EAEjC,KAAK,8BAA8B,EACnC,KAAK,sCAAsC,EAC3C,KAAK,qCAAqC,EAI1C,MAAM,oBAAoB,CAAC;AAG5B,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAgC7C,qBAAa,kCAAmC,SAAQ,KAAK;IAE3D,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAKhB;AAED,MAAM,WAAW,oCAAoC;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,6BAA6B;IAC7C,SAAS,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,sCAAsC,CAAC;IAC1E,OAAO,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,qCAAqC,CAAC;IACvE,WAAW,CACV,MAAM,EAAE,4BAA4B,EACpC,MAAM,CAAC,EAAE,aAAa,GACpB,oCAAoC,CAAC;IACxC,UAAU,IAAI,8BAA8B,CAAC;CAC7C;AAED,MAAM,WAAW,oCAAoC;IACpD,WAAW,CAAC,EAAE,8BAA8B,CAAC;IAC7C,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAqGD,wBAAgB,mCAAmC,CAClD,OAAO,GAAE,oCAAyC,GAChD,6BAA6B,CAgD/B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { maestroAppServerClientMethods, maestroAppServerProtocolModeIds, maestroAppServerServerMethods, } from "@evalops/contracts";
|
|
2
|
+
import { isRecord } from "../utils/json.js";
|
|
2
3
|
const DEFAULT_MODE = "standard";
|
|
3
4
|
const REVIEW_BLOCKED_METHODS = new Set([
|
|
4
5
|
"protocol/mode/set",
|
|
@@ -46,9 +47,6 @@ function normalizeMode(value) {
|
|
|
46
47
|
}
|
|
47
48
|
throw new MaestroAppServerProtocolModesError(-32602, "Invalid mode");
|
|
48
49
|
}
|
|
49
|
-
function isRecord(value) {
|
|
50
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
51
|
-
}
|
|
52
50
|
function paramsRecord(params) {
|
|
53
51
|
if (params === undefined) {
|
|
54
52
|
return {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol-modes-api.js","sourceRoot":"","sources":["../../src/app-server/protocol-modes-api.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype MaestroAppServerClientMethod,\n\ttype MaestroAppServerProtocolMode,\n\ttype MaestroAppServerProtocolModeId,\n\ttype MaestroAppServerProtocolModeListResult,\n\ttype MaestroAppServerProtocolModeSetResult,\n\tmaestroAppServerClientMethods,\n\tmaestroAppServerProtocolModeIds,\n\tmaestroAppServerServerMethods,\n} from \"@evalops/contracts\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nconst DEFAULT_MODE: MaestroAppServerProtocolModeId = \"standard\";\n\nconst REVIEW_BLOCKED_METHODS = new Set<MaestroAppServerClientMethod>([\n\t\"protocol/mode/set\",\n\t\"network/fetch\",\n\t\"sandbox/check/run\",\n\t\"externalAgent/import\",\n\t\"pluginBundle/install\",\n\t\"pluginBundle/remove\",\n\t\"remoteControl/lease/heartbeat\",\n\t\"remoteControl/drain\",\n\t\"command/exec\",\n\t\"command/exec/write\",\n\t\"command/exec/terminate\",\n\t\"fs/writeFile\",\n\t\"fs/createDirectory\",\n\t\"fs/remove\",\n\t\"fs/copy\",\n\t\"fs/watch\",\n\t\"thread/metadata/update\",\n\t\"thread/name/set\",\n\t\"thread/goal/set\",\n\t\"thread/goal/clear\",\n\t\"thread/start\",\n\t\"thread/fork\",\n\t\"thread/archive\",\n\t\"thread/unarchive\",\n\t\"thread/delete\",\n]);\n\nexport class MaestroAppServerProtocolModesError extends Error {\n\tconstructor(\n\t\treadonly code: number,\n\t\tmessage: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"MaestroAppServerProtocolModesError\";\n\t}\n}\n\nexport interface MaestroAppServerProtocolModeDecision {\n\tallowed: boolean;\n\treason?: string;\n}\n\nexport interface MaestroAppServerProtocolModes {\n\tlistModes(params?: UnknownRecord): MaestroAppServerProtocolModeListResult;\n\tsetMode(params?: UnknownRecord): MaestroAppServerProtocolModeSetResult;\n\tcheckMethod(\n\t\tmethod: MaestroAppServerClientMethod,\n\t\tparams?: UnknownRecord,\n\t): MaestroAppServerProtocolModeDecision;\n\tactiveMode(): MaestroAppServerProtocolModeId;\n}\n\nexport interface MaestroAppServerProtocolModesOptions {\n\tinitialMode?: MaestroAppServerProtocolModeId;\n\treviewModeEscapeToken?: string;\n}\n\nfunction normalizeMode(value: unknown): MaestroAppServerProtocolModeId {\n\tif (value === undefined || value === null) {\n\t\tthrow new MaestroAppServerProtocolModesError(-32602, \"Missing mode\");\n\t}\n\tif (typeof value !== \"string\") {\n\t\tthrow new MaestroAppServerProtocolModesError(-32602, \"Invalid mode\");\n\t}\n\tif (\n\t\tmaestroAppServerProtocolModeIds.includes(\n\t\t\tvalue as MaestroAppServerProtocolModeId,\n\t\t)\n\t) {\n\t\treturn value as MaestroAppServerProtocolModeId;\n\t}\n\tthrow new MaestroAppServerProtocolModesError(-32602, \"Invalid mode\");\n}\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction paramsRecord(params: unknown): UnknownRecord {\n\tif (params === undefined) {\n\t\treturn {};\n\t}\n\tif (isRecord(params)) {\n\t\treturn params;\n\t}\n\tthrow new MaestroAppServerProtocolModesError(-32602, \"Invalid params\");\n}\n\nfunction normalizeEscapeToken(value: unknown): string | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (typeof value !== \"string\" || value.trim().length === 0) {\n\t\tthrow new MaestroAppServerProtocolModesError(\n\t\t\t-32602,\n\t\t\t\"Invalid review mode escape token\",\n\t\t);\n\t}\n\treturn value;\n}\n\nfunction modeLabel(mode: MaestroAppServerProtocolModeId): string {\n\tswitch (mode) {\n\t\tcase \"review\":\n\t\t\treturn \"Review\";\n\t\tcase \"realtime\":\n\t\t\treturn \"Realtime\";\n\t\tcase \"standard\":\n\t\t\treturn \"Standard\";\n\t}\n}\n\nfunction isMethodAllowedInMode(\n\tmode: MaestroAppServerProtocolModeId,\n\tmethod: MaestroAppServerClientMethod,\n): boolean {\n\tif (mode !== \"review\") {\n\t\treturn true;\n\t}\n\treturn !REVIEW_BLOCKED_METHODS.has(method);\n}\n\nfunction isAuthorizedReviewModeEscape(\n\tparams: unknown,\n\treviewModeEscapeToken: string | undefined,\n): boolean {\n\tif (!reviewModeEscapeToken || !isRecord(params)) {\n\t\treturn false;\n\t}\n\tconst targetMode = params.mode;\n\treturn (\n\t\ttargetMode !== \"review\" &&\n\t\tmaestroAppServerProtocolModeIds.includes(\n\t\t\ttargetMode as MaestroAppServerProtocolModeId,\n\t\t) &&\n\t\tparams.reviewModeEscapeToken === reviewModeEscapeToken\n\t);\n}\n\nfunction describeMode(\n\tmode: MaestroAppServerProtocolModeId,\n): MaestroAppServerProtocolMode {\n\tconst allowedMethods = maestroAppServerClientMethods.filter((method) =>\n\t\tisMethodAllowedInMode(mode, method),\n\t);\n\tconst blockedMethods = maestroAppServerClientMethods.filter(\n\t\t(method) => !isMethodAllowedInMode(mode, method),\n\t);\n\treturn {\n\t\tid: mode,\n\t\tlabel: modeLabel(mode),\n\t\treadOnly: mode === \"review\",\n\t\trealtime: mode === \"realtime\",\n\t\tallowedMethods: [...allowedMethods],\n\t\tblockedMethods: [...blockedMethods],\n\t\tserverNotifications:\n\t\t\tmode === \"realtime\" ? [...maestroAppServerServerMethods] : [],\n\t};\n}\n\nexport function createMaestroAppServerProtocolModes(\n\toptions: MaestroAppServerProtocolModesOptions = {},\n): MaestroAppServerProtocolModes {\n\tlet activeMode =\n\t\toptions.initialMode === undefined\n\t\t\t? DEFAULT_MODE\n\t\t\t: normalizeMode(options.initialMode);\n\tconst reviewModeEscapeToken = normalizeEscapeToken(\n\t\toptions.reviewModeEscapeToken,\n\t);\n\treturn {\n\t\tlistModes(params) {\n\t\t\tparamsRecord(params);\n\t\t\treturn {\n\t\t\t\tactiveMode,\n\t\t\t\tdefaultMode: DEFAULT_MODE,\n\t\t\t\tmodes: maestroAppServerProtocolModeIds.map(describeMode),\n\t\t\t};\n\t\t},\n\n\t\tsetMode(params) {\n\t\t\tconst normalizedParams = paramsRecord(params);\n\t\t\tactiveMode = normalizeMode(normalizedParams.mode);\n\t\t\treturn {\n\t\t\t\tactiveMode,\n\t\t\t\tmode: describeMode(activeMode),\n\t\t\t};\n\t\t},\n\n\t\tcheckMethod(method, params) {\n\t\t\tif (\n\t\t\t\tactiveMode === \"review\" &&\n\t\t\t\tmethod === \"protocol/mode/set\" &&\n\t\t\t\tisAuthorizedReviewModeEscape(params, reviewModeEscapeToken)\n\t\t\t) {\n\t\t\t\treturn { allowed: true };\n\t\t\t}\n\t\t\tif (isMethodAllowedInMode(activeMode, method)) {\n\t\t\t\treturn { allowed: true };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tallowed: false,\n\t\t\t\treason: `${method} is blocked while protocol mode is ${activeMode}`,\n\t\t\t};\n\t\t},\n\n\t\tactiveMode() {\n\t\t\treturn activeMode;\n\t\t},\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"protocol-modes-api.js","sourceRoot":"","sources":["../../src/app-server/protocol-modes-api.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype MaestroAppServerClientMethod,\n\ttype MaestroAppServerProtocolMode,\n\ttype MaestroAppServerProtocolModeId,\n\ttype MaestroAppServerProtocolModeListResult,\n\ttype MaestroAppServerProtocolModeSetResult,\n\tmaestroAppServerClientMethods,\n\tmaestroAppServerProtocolModeIds,\n\tmaestroAppServerServerMethods,\n} from \"@evalops/contracts\";\nimport { isRecord } from \"../utils/json.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nconst DEFAULT_MODE: MaestroAppServerProtocolModeId = \"standard\";\n\nconst REVIEW_BLOCKED_METHODS = new Set<MaestroAppServerClientMethod>([\n\t\"protocol/mode/set\",\n\t\"network/fetch\",\n\t\"sandbox/check/run\",\n\t\"externalAgent/import\",\n\t\"pluginBundle/install\",\n\t\"pluginBundle/remove\",\n\t\"remoteControl/lease/heartbeat\",\n\t\"remoteControl/drain\",\n\t\"command/exec\",\n\t\"command/exec/write\",\n\t\"command/exec/terminate\",\n\t\"fs/writeFile\",\n\t\"fs/createDirectory\",\n\t\"fs/remove\",\n\t\"fs/copy\",\n\t\"fs/watch\",\n\t\"thread/metadata/update\",\n\t\"thread/name/set\",\n\t\"thread/goal/set\",\n\t\"thread/goal/clear\",\n\t\"thread/start\",\n\t\"thread/fork\",\n\t\"thread/archive\",\n\t\"thread/unarchive\",\n\t\"thread/delete\",\n]);\n\nexport class MaestroAppServerProtocolModesError extends Error {\n\tconstructor(\n\t\treadonly code: number,\n\t\tmessage: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"MaestroAppServerProtocolModesError\";\n\t}\n}\n\nexport interface MaestroAppServerProtocolModeDecision {\n\tallowed: boolean;\n\treason?: string;\n}\n\nexport interface MaestroAppServerProtocolModes {\n\tlistModes(params?: UnknownRecord): MaestroAppServerProtocolModeListResult;\n\tsetMode(params?: UnknownRecord): MaestroAppServerProtocolModeSetResult;\n\tcheckMethod(\n\t\tmethod: MaestroAppServerClientMethod,\n\t\tparams?: UnknownRecord,\n\t): MaestroAppServerProtocolModeDecision;\n\tactiveMode(): MaestroAppServerProtocolModeId;\n}\n\nexport interface MaestroAppServerProtocolModesOptions {\n\tinitialMode?: MaestroAppServerProtocolModeId;\n\treviewModeEscapeToken?: string;\n}\n\nfunction normalizeMode(value: unknown): MaestroAppServerProtocolModeId {\n\tif (value === undefined || value === null) {\n\t\tthrow new MaestroAppServerProtocolModesError(-32602, \"Missing mode\");\n\t}\n\tif (typeof value !== \"string\") {\n\t\tthrow new MaestroAppServerProtocolModesError(-32602, \"Invalid mode\");\n\t}\n\tif (\n\t\tmaestroAppServerProtocolModeIds.includes(\n\t\t\tvalue as MaestroAppServerProtocolModeId,\n\t\t)\n\t) {\n\t\treturn value as MaestroAppServerProtocolModeId;\n\t}\n\tthrow new MaestroAppServerProtocolModesError(-32602, \"Invalid mode\");\n}\n\nfunction paramsRecord(params: unknown): UnknownRecord {\n\tif (params === undefined) {\n\t\treturn {};\n\t}\n\tif (isRecord(params)) {\n\t\treturn params;\n\t}\n\tthrow new MaestroAppServerProtocolModesError(-32602, \"Invalid params\");\n}\n\nfunction normalizeEscapeToken(value: unknown): string | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (typeof value !== \"string\" || value.trim().length === 0) {\n\t\tthrow new MaestroAppServerProtocolModesError(\n\t\t\t-32602,\n\t\t\t\"Invalid review mode escape token\",\n\t\t);\n\t}\n\treturn value;\n}\n\nfunction modeLabel(mode: MaestroAppServerProtocolModeId): string {\n\tswitch (mode) {\n\t\tcase \"review\":\n\t\t\treturn \"Review\";\n\t\tcase \"realtime\":\n\t\t\treturn \"Realtime\";\n\t\tcase \"standard\":\n\t\t\treturn \"Standard\";\n\t}\n}\n\nfunction isMethodAllowedInMode(\n\tmode: MaestroAppServerProtocolModeId,\n\tmethod: MaestroAppServerClientMethod,\n): boolean {\n\tif (mode !== \"review\") {\n\t\treturn true;\n\t}\n\treturn !REVIEW_BLOCKED_METHODS.has(method);\n}\n\nfunction isAuthorizedReviewModeEscape(\n\tparams: unknown,\n\treviewModeEscapeToken: string | undefined,\n): boolean {\n\tif (!reviewModeEscapeToken || !isRecord(params)) {\n\t\treturn false;\n\t}\n\tconst targetMode = params.mode;\n\treturn (\n\t\ttargetMode !== \"review\" &&\n\t\tmaestroAppServerProtocolModeIds.includes(\n\t\t\ttargetMode as MaestroAppServerProtocolModeId,\n\t\t) &&\n\t\tparams.reviewModeEscapeToken === reviewModeEscapeToken\n\t);\n}\n\nfunction describeMode(\n\tmode: MaestroAppServerProtocolModeId,\n): MaestroAppServerProtocolMode {\n\tconst allowedMethods = maestroAppServerClientMethods.filter((method) =>\n\t\tisMethodAllowedInMode(mode, method),\n\t);\n\tconst blockedMethods = maestroAppServerClientMethods.filter(\n\t\t(method) => !isMethodAllowedInMode(mode, method),\n\t);\n\treturn {\n\t\tid: mode,\n\t\tlabel: modeLabel(mode),\n\t\treadOnly: mode === \"review\",\n\t\trealtime: mode === \"realtime\",\n\t\tallowedMethods: [...allowedMethods],\n\t\tblockedMethods: [...blockedMethods],\n\t\tserverNotifications:\n\t\t\tmode === \"realtime\" ? [...maestroAppServerServerMethods] : [],\n\t};\n}\n\nexport function createMaestroAppServerProtocolModes(\n\toptions: MaestroAppServerProtocolModesOptions = {},\n): MaestroAppServerProtocolModes {\n\tlet activeMode =\n\t\toptions.initialMode === undefined\n\t\t\t? DEFAULT_MODE\n\t\t\t: normalizeMode(options.initialMode);\n\tconst reviewModeEscapeToken = normalizeEscapeToken(\n\t\toptions.reviewModeEscapeToken,\n\t);\n\treturn {\n\t\tlistModes(params) {\n\t\t\tparamsRecord(params);\n\t\t\treturn {\n\t\t\t\tactiveMode,\n\t\t\t\tdefaultMode: DEFAULT_MODE,\n\t\t\t\tmodes: maestroAppServerProtocolModeIds.map(describeMode),\n\t\t\t};\n\t\t},\n\n\t\tsetMode(params) {\n\t\t\tconst normalizedParams = paramsRecord(params);\n\t\t\tactiveMode = normalizeMode(normalizedParams.mode);\n\t\t\treturn {\n\t\t\t\tactiveMode,\n\t\t\t\tmode: describeMode(activeMode),\n\t\t\t};\n\t\t},\n\n\t\tcheckMethod(method, params) {\n\t\t\tif (\n\t\t\t\tactiveMode === \"review\" &&\n\t\t\t\tmethod === \"protocol/mode/set\" &&\n\t\t\t\tisAuthorizedReviewModeEscape(params, reviewModeEscapeToken)\n\t\t\t) {\n\t\t\t\treturn { allowed: true };\n\t\t\t}\n\t\t\tif (isMethodAllowedInMode(activeMode, method)) {\n\t\t\t\treturn { allowed: true };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tallowed: false,\n\t\t\t\treason: `${method} is blocked while protocol mode is ${activeMode}`,\n\t\t\t};\n\t\t},\n\n\t\tactiveMode() {\n\t\t\treturn activeMode;\n\t\t},\n\t};\n}\n"]}
|
package/dist/cli/args.d.ts
CHANGED
|
@@ -51,7 +51,9 @@ export interface Args {
|
|
|
51
51
|
/** Agent profile to activate on startup */
|
|
52
52
|
composer?: string;
|
|
53
53
|
exportFormat?: string;
|
|
54
|
+
outputDir?: string;
|
|
54
55
|
redactSecrets?: boolean;
|
|
56
|
+
valueWrite?: boolean;
|
|
55
57
|
junitPath?: string;
|
|
56
58
|
/** Open a real agent session backed by a scripted replay scenario. */
|
|
57
59
|
replayScenarioPath?: string;
|
package/dist/cli/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,CAAC;AAExD,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,wDAAwD;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,CAAC;AAExD,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,wDAAwD;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAoID,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAoR9C"}
|
package/dist/cli/args.js
CHANGED
|
@@ -6,6 +6,8 @@ const COMMANDS = new Set([
|
|
|
6
6
|
"models",
|
|
7
7
|
"cost",
|
|
8
8
|
"stats",
|
|
9
|
+
"value",
|
|
10
|
+
"mission",
|
|
9
11
|
"status",
|
|
10
12
|
"update",
|
|
11
13
|
"run",
|
|
@@ -36,6 +38,8 @@ const SUBCOMMAND_COMMANDS = new Set([
|
|
|
36
38
|
"models",
|
|
37
39
|
"cost",
|
|
38
40
|
"stats",
|
|
41
|
+
"value",
|
|
42
|
+
"mission",
|
|
39
43
|
"run",
|
|
40
44
|
"sessions",
|
|
41
45
|
"agents",
|
|
@@ -71,6 +75,7 @@ const FLAGS_WITH_VALUES = new Set([
|
|
|
71
75
|
"--tools",
|
|
72
76
|
"--composer",
|
|
73
77
|
"--format",
|
|
78
|
+
"--output-dir",
|
|
74
79
|
"--profile",
|
|
75
80
|
"--config",
|
|
76
81
|
"--junit",
|
|
@@ -295,9 +300,15 @@ export function parseArgs(args) {
|
|
|
295
300
|
else if (arg === "--format" && i + 1 < args.length) {
|
|
296
301
|
result.exportFormat = args[++i];
|
|
297
302
|
}
|
|
303
|
+
else if (arg === "--output-dir" && i + 1 < args.length) {
|
|
304
|
+
result.outputDir = args[++i];
|
|
305
|
+
}
|
|
298
306
|
else if (arg === "--redact-secrets") {
|
|
299
307
|
result.redactSecrets = true;
|
|
300
308
|
}
|
|
309
|
+
else if (arg === "--write" && result.command === "value") {
|
|
310
|
+
result.valueWrite = true;
|
|
311
|
+
}
|
|
301
312
|
else if (arg === "--junit" && i + 1 < args.length) {
|
|
302
313
|
result.junitPath = args[++i];
|
|
303
314
|
}
|
|
@@ -367,6 +378,10 @@ export function parseArgs(args) {
|
|
|
367
378
|
result.subcommand = nextArg;
|
|
368
379
|
i++;
|
|
369
380
|
}
|
|
381
|
+
if (arg === "agents" && result.subcommand === "profile") {
|
|
382
|
+
result.commandArgs = args.slice(i + 1);
|
|
383
|
+
break;
|
|
384
|
+
}
|
|
370
385
|
if (arg === "remote" ||
|
|
371
386
|
arg === "a2a" ||
|
|
372
387
|
arg === "operating-plane" ||
|