@evalops/maestro 0.10.22 → 0.10.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/agent/agent.d.ts +2 -2
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +1 -1
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/keys.d.ts +2 -5
- package/dist/agent/keys.d.ts.map +1 -1
- package/dist/agent/keys.js +4 -5
- package/dist/agent/keys.js.map +1 -1
- package/dist/agent/modes.d.ts +2 -2
- package/dist/agent/modes.d.ts.map +1 -1
- package/dist/agent/modes.js +6 -7
- package/dist/agent/modes.js.map +1 -1
- package/dist/agent/providers/anthropic.d.ts.map +1 -1
- package/dist/agent/providers/anthropic.js +4 -4
- package/dist/agent/providers/anthropic.js.map +1 -1
- package/dist/agent/providers/google.js +1 -1
- package/dist/agent/swarm/executor.d.ts +2 -0
- package/dist/agent/swarm/executor.d.ts.map +1 -1
- package/dist/agent/swarm/executor.js +208 -35
- package/dist/agent/swarm/executor.js.map +1 -1
- package/dist/agent/swarm/types.d.ts +2 -0
- package/dist/agent/swarm/types.d.ts.map +1 -1
- package/dist/agent/swarm/types.js.map +1 -1
- package/dist/agent/tool-capability-types.d.ts +36 -0
- package/dist/agent/tool-capability-types.d.ts.map +1 -0
- package/dist/agent/tool-capability-types.js +2 -0
- package/dist/agent/tool-capability-types.js.map +1 -0
- package/dist/agent/transport/tool-execution-bridge.d.ts +13 -0
- package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
- package/dist/agent/transport/tool-execution-bridge.js +28 -15
- package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
- package/dist/agent/transport/transport-utils.d.ts.map +1 -1
- package/dist/agent/transport/transport-utils.js +2 -3
- package/dist/agent/transport/transport-utils.js.map +1 -1
- package/dist/agent/transport.js +1 -1
- package/dist/agent/transport.js.map +1 -1
- package/dist/agent/type-guards.d.ts +1 -1
- package/dist/agent/type-guards.js +1 -1
- package/dist/agent/type-guards.js.map +1 -1
- package/dist/agent/types.d.ts +5 -3
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js +2 -2
- package/dist/agent/types.js.map +1 -1
- package/dist/app-server/daemon-lifecycle-api.d.ts +31 -0
- package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -0
- package/dist/app-server/daemon-lifecycle-api.js +259 -0
- package/dist/app-server/daemon-lifecycle-api.js.map +1 -0
- package/dist/app-server/external-agent-import-api.d.ts +30 -0
- package/dist/app-server/external-agent-import-api.d.ts.map +1 -0
- package/dist/app-server/external-agent-import-api.js +553 -0
- package/dist/app-server/external-agent-import-api.js.map +1 -0
- package/dist/app-server/host-control-api.d.ts +30 -0
- package/dist/app-server/host-control-api.d.ts.map +1 -0
- package/dist/app-server/host-control-api.js +343 -0
- package/dist/app-server/host-control-api.js.map +1 -0
- package/dist/app-server/in-process-client.d.ts +2 -2
- package/dist/app-server/in-process-client.d.ts.map +1 -1
- package/dist/app-server/in-process-client.js.map +1 -1
- package/dist/app-server/network-governance-api.d.ts +26 -0
- package/dist/app-server/network-governance-api.d.ts.map +1 -0
- package/dist/app-server/network-governance-api.js +476 -0
- package/dist/app-server/network-governance-api.js.map +1 -0
- package/dist/app-server/plugin-bundle-api.d.ts +17 -0
- package/dist/app-server/plugin-bundle-api.d.ts.map +1 -0
- package/dist/app-server/plugin-bundle-api.js +219 -0
- package/dist/app-server/plugin-bundle-api.js.map +1 -0
- package/dist/app-server/policy-control-api.d.ts +14 -0
- package/dist/app-server/policy-control-api.d.ts.map +1 -0
- package/dist/app-server/policy-control-api.js +200 -0
- package/dist/app-server/policy-control-api.js.map +1 -0
- package/dist/app-server/protocol-modes-api.d.ts +22 -0
- package/dist/app-server/protocol-modes-api.d.ts.map +1 -0
- package/dist/app-server/protocol-modes-api.js +124 -0
- package/dist/app-server/protocol-modes-api.js.map +1 -0
- package/dist/app-server/sandbox-proof-api.d.ts +21 -0
- package/dist/app-server/sandbox-proof-api.d.ts.map +1 -0
- package/dist/app-server/sandbox-proof-api.js +127 -0
- package/dist/app-server/sandbox-proof-api.js.map +1 -0
- package/dist/app-server/session-api.d.ts +93 -3
- package/dist/app-server/session-api.d.ts.map +1 -1
- package/dist/app-server/session-api.js +706 -18
- package/dist/app-server/session-api.js.map +1 -1
- package/dist/audit/logger.d.ts +1 -1
- package/dist/bootstrap/auth-setup.d.ts.map +1 -1
- package/dist/bootstrap/auth-setup.js +17 -2
- package/dist/bootstrap/auth-setup.js.map +1 -1
- package/dist/bootstrap/model-resolution-setup.d.ts.map +1 -1
- package/dist/bootstrap/model-resolution-setup.js +19 -4
- package/dist/bootstrap/model-resolution-setup.js.map +1 -1
- package/dist/cli/args.d.ts +2 -2
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +2 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/a2a.d.ts.map +1 -1
- package/dist/cli/commands/a2a.js +226 -14
- package/dist/cli/commands/a2a.js.map +1 -1
- package/dist/cli/commands/anthropic.d.ts +1 -1
- package/dist/cli/commands/anthropic.d.ts.map +1 -1
- package/dist/cli/commands/anthropic.js +3 -68
- package/dist/cli/commands/anthropic.js.map +1 -1
- package/dist/cli/commands/modes.js +1 -1
- package/dist/cli/commands/modes.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +5 -7
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/rpc-mode.d.ts +1 -1
- package/dist/cli/rpc-mode.js +1 -1
- package/dist/cli/rpc-mode.js.map +1 -1
- package/dist/cli/session.js +1 -1
- package/dist/cli/session.js.map +1 -1
- package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
- package/dist/cli-tui/commands/command-catalog.js +7 -12
- package/dist/cli-tui/commands/command-catalog.js.map +1 -1
- package/dist/cli-tui/commands/subcommands/auth-commands.d.ts +1 -1
- package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +1 -1
- package/dist/cli-tui/commands/subcommands/auth-commands.js +4 -12
- package/dist/cli-tui/commands/subcommands/auth-commands.js.map +1 -1
- package/dist/cli-tui/custom-editor.d.ts +1 -1
- package/dist/cli-tui/custom-editor.js +2 -2
- package/dist/cli-tui/custom-editor.js.map +1 -1
- package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +1 -1
- package/dist/cli-tui/oauth/oauth-flow-controller.js +19 -23
- package/dist/cli-tui/oauth/oauth-flow-controller.js.map +1 -1
- package/dist/cli-tui/selectors/model-selector.d.ts.map +1 -1
- package/dist/cli-tui/selectors/model-selector.js +0 -1
- package/dist/cli-tui/selectors/model-selector.js.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector-view.d.ts +2 -2
- package/dist/cli-tui/selectors/oauth-selector-view.d.ts.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector-view.js.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector.d.ts +2 -2
- package/dist/cli-tui/selectors/oauth-selector.d.ts.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector.js +3 -4
- package/dist/cli-tui/selectors/oauth-selector.js.map +1 -1
- package/dist/cli-tui/tui-renderer/mcp-events-setup.js +1 -1
- package/dist/cli-tui/tui-renderer/mcp-events-setup.js.map +1 -1
- package/dist/cli-tui/tui-renderer.js +2 -2
- package/dist/cli-tui/tui-renderer.js.map +1 -1
- package/dist/cli-tui/utils/footer-utils.d.ts +1 -1
- package/dist/cli-tui/utils/footer-utils.js +1 -1
- package/dist/cli-tui/utils/footer-utils.js.map +1 -1
- package/dist/cli.js +15171 -14298
- package/dist/commands/prompts.d.ts +1 -1
- package/dist/commands/prompts.js +1 -1
- package/dist/commands/prompts.js.map +1 -1
- package/dist/config/constants.d.ts +2 -2
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +2 -2
- package/dist/config/constants.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/toml-config.js +3 -3
- package/dist/config/toml-config.js.map +1 -1
- package/dist/db/client.d.ts +2 -2
- package/dist/db/client.js +2 -2
- package/dist/db/client.js.map +1 -1
- package/dist/db/migrate.d.ts +1 -1
- package/dist/db/migrate.js +1 -1
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/schema.d.ts +2 -2
- package/dist/db/schema.js +1 -1
- package/dist/db/schema.js.map +1 -1
- package/dist/errors/index.d.ts +2 -2
- package/dist/errors/index.js +2 -2
- package/dist/errors/index.js.map +1 -1
- package/dist/main.d.ts +4 -5
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +17 -14
- package/dist/main.js.map +1 -1
- package/dist/mcp/config.d.ts +15 -2
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/mcp/config.js +50 -26
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/fathom-cua.d.ts.map +1 -1
- package/dist/mcp/fathom-cua.js +10 -0
- package/dist/mcp/fathom-cua.js.map +1 -1
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +32 -1
- package/dist/mcp/manager.js.map +1 -1
- package/dist/mcp/tool-bridge.d.ts.map +1 -1
- package/dist/mcp/tool-bridge.js +12 -3
- package/dist/mcp/tool-bridge.js.map +1 -1
- package/dist/mcp/tool-capabilities.d.ts +5 -0
- package/dist/mcp/tool-capabilities.d.ts.map +1 -0
- package/dist/mcp/tool-capabilities.js +271 -0
- package/dist/mcp/tool-capabilities.js.map +1 -0
- package/dist/mcp/types.d.ts +6 -1
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/mcp/types.js.map +1 -1
- package/dist/models/config-loader.d.ts +1 -1
- package/dist/models/factory-integration.d.ts +1 -1
- package/dist/models/factory-integration.js +1 -1
- package/dist/models/factory-integration.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/artifacts.d.ts +58 -0
- package/dist/node_modules/@evalops/contracts/dist/artifacts.d.ts.map +1 -0
- package/dist/node_modules/@evalops/contracts/dist/artifacts.js +191 -0
- package/dist/node_modules/@evalops/contracts/dist/artifacts.js.map +1 -0
- package/dist/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +10 -10
- package/dist/node_modules/@evalops/contracts/dist/index.d.ts +4 -3
- package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/index.js +3 -2
- package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +1182 -14
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js +450 -1
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +1 -1
- package/dist/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +3 -3
- 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 +2 -2
- package/dist/oauth/connectors.d.ts.map +1 -1
- package/dist/oauth/connectors.js +3 -5
- package/dist/oauth/connectors.js.map +1 -1
- package/dist/oauth/github-copilot.d.ts +1 -1
- package/dist/oauth/github-copilot.js +1 -1
- package/dist/oauth/github-copilot.js.map +1 -1
- package/dist/oauth/index.d.ts +10 -8
- package/dist/oauth/index.d.ts.map +1 -1
- package/dist/oauth/index.js +54 -31
- package/dist/oauth/index.js.map +1 -1
- package/dist/oauth/openai.d.ts +1 -1
- package/dist/oauth/openai.js +2 -2
- package/dist/oauth/openai.js.map +1 -1
- package/dist/platform/a2a-completion-audit.d.ts +41 -0
- package/dist/platform/a2a-completion-audit.d.ts.map +1 -0
- package/dist/platform/a2a-completion-audit.js +177 -0
- package/dist/platform/a2a-completion-audit.js.map +1 -0
- package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
- package/dist/platform/a2a-task-ledger.js +17 -0
- package/dist/platform/a2a-task-ledger.js.map +1 -1
- package/dist/platform/a2a-telemetry-inspect.d.ts +58 -0
- package/dist/platform/a2a-telemetry-inspect.d.ts.map +1 -0
- package/dist/platform/a2a-telemetry-inspect.js +224 -0
- package/dist/platform/a2a-telemetry-inspect.js.map +1 -0
- package/dist/platform/agent-registry-client.d.ts +8 -0
- package/dist/platform/agent-registry-client.d.ts.map +1 -1
- package/dist/platform/agent-registry-client.js +9 -1
- package/dist/platform/agent-registry-client.js.map +1 -1
- package/dist/providers/api-keys.d.ts +2 -2
- package/dist/providers/api-keys.js +2 -2
- package/dist/providers/api-keys.js.map +1 -1
- package/dist/providers/auth.d.ts +3 -6
- package/dist/providers/auth.d.ts.map +1 -1
- package/dist/providers/auth.js +1 -40
- package/dist/providers/auth.js.map +1 -1
- package/dist/rpc/index.d.ts +2 -2
- package/dist/rpc/index.js +2 -2
- package/dist/rpc/index.js.map +1 -1
- package/dist/rpc/rpc-types.d.ts +1 -1
- package/dist/rpc/rpc-types.js +1 -1
- package/dist/rpc/rpc-types.js.map +1 -1
- package/dist/safety/nested-agent-guard.js +1 -1
- package/dist/safety/nested-agent-guard.js.map +1 -1
- package/dist/safety/policy.d.ts +2 -2
- package/dist/safety/policy.js +2 -2
- package/dist/safety/policy.js.map +1 -1
- package/dist/safety/validators/network-policy-validator.d.ts +8 -0
- package/dist/safety/validators/network-policy-validator.d.ts.map +1 -1
- package/dist/safety/validators/network-policy-validator.js +29 -4
- package/dist/safety/validators/network-policy-validator.js.map +1 -1
- package/dist/sandbox/local-sandbox.d.ts +1 -1
- package/dist/sandbox/local-sandbox.js +1 -1
- package/dist/sandbox/local-sandbox.js.map +1 -1
- package/dist/server/app-context.d.ts +2 -0
- package/dist/server/app-context.d.ts.map +1 -1
- package/dist/server/app-context.js.map +1 -1
- package/dist/server/handlers/attachments.d.ts.map +1 -1
- package/dist/server/handlers/attachments.js +1 -0
- package/dist/server/handlers/attachments.js.map +1 -1
- package/dist/server/handlers/models.d.ts.map +1 -1
- package/dist/server/handlers/models.js +3 -1
- package/dist/server/handlers/models.js.map +1 -1
- package/dist/server/handlers/session-artifacts.d.ts.map +1 -1
- package/dist/server/handlers/session-artifacts.js +13 -74
- package/dist/server/handlers/session-artifacts.js.map +1 -1
- package/dist/server/handlers/session-attachments.d.ts.map +1 -1
- package/dist/server/handlers/session-attachments.js +2 -0
- package/dist/server/handlers/session-attachments.js.map +1 -1
- package/dist/server/handlers/sessions.js +1 -1
- package/dist/server/handlers/sessions.js.map +1 -1
- package/dist/server/handlers/status.d.ts +2 -0
- package/dist/server/handlers/status.d.ts.map +1 -1
- package/dist/server/handlers/status.js +3 -2
- package/dist/server/handlers/status.js.map +1 -1
- package/dist/server/headless-runtime-service.d.ts.map +1 -1
- package/dist/server/headless-runtime-service.js +32 -3
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/server/hosted-session-manager.d.ts +2 -0
- package/dist/server/hosted-session-manager.d.ts.map +1 -1
- package/dist/server/hosted-session-manager.js +9 -0
- package/dist/server/hosted-session-manager.js.map +1 -1
- package/dist/server/model-selection.d.ts.map +1 -1
- package/dist/server/model-selection.js +9 -1
- package/dist/server/model-selection.js.map +1 -1
- package/dist/server/rate-limiter.d.ts +1 -1
- package/dist/server/rate-limiter.js +1 -1
- package/dist/server/rate-limiter.js.map +1 -1
- package/dist/server/router.d.ts +2 -2
- package/dist/server/router.js.map +1 -1
- package/dist/server/session-serialization.d.ts +9 -9
- package/dist/server/session-serialization.js +15 -15
- package/dist/server/session-serialization.js.map +1 -1
- package/dist/session/manager.d.ts +5 -0
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +56 -8
- package/dist/session/manager.js.map +1 -1
- package/dist/session/session-catalog.d.ts +2 -0
- package/dist/session/session-catalog.d.ts.map +1 -1
- package/dist/session/session-catalog.js +6 -0
- package/dist/session/session-catalog.js.map +1 -1
- package/dist/session/session-context.d.ts +2 -0
- package/dist/session/session-context.d.ts.map +1 -1
- package/dist/session/session-context.js +15 -0
- package/dist/session/session-context.js.map +1 -1
- package/dist/session/types.d.ts +7 -0
- package/dist/session/types.d.ts.map +1 -1
- package/dist/session/types.js.map +1 -1
- package/dist/session/wire-format.generated.d.ts +1 -0
- package/dist/session/wire-format.generated.d.ts.map +1 -1
- package/dist/session/wire-format.generated.js +1 -0
- package/dist/session/wire-format.generated.js.map +1 -1
- package/dist/shared-memory/contract.d.ts +4 -4
- package/dist/shared-memory/contract.js +2 -2
- package/dist/shared-memory/contract.js.map +1 -1
- package/dist/telemetry/index.d.ts +2 -2
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +2 -2
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/maestro-event-bus.d.ts +57 -0
- package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-bus.js +59 -1
- package/dist/telemetry/maestro-event-bus.js.map +1 -1
- package/dist/telemetry/maestro-event-catalog.d.ts +17 -1
- package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-catalog.js +24 -0
- package/dist/telemetry/maestro-event-catalog.js.map +1 -1
- package/dist/telemetry/mcp-beacon.d.ts +2 -0
- package/dist/telemetry/mcp-beacon.d.ts.map +1 -1
- package/dist/telemetry/mcp-beacon.js +15 -0
- package/dist/telemetry/mcp-beacon.js.map +1 -1
- package/dist/telemetry/metrics.d.ts +62 -0
- package/dist/telemetry/metrics.d.ts.map +1 -1
- package/dist/telemetry/metrics.js +84 -0
- package/dist/telemetry/metrics.js.map +1 -1
- package/dist/telemetry.d.ts +44 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +84 -2
- package/dist/telemetry.js.map +1 -1
- package/dist/theme/theme-loader.js +2 -2
- package/dist/theme/theme-loader.js.map +1 -1
- package/dist/theme/theme-schema.json +2 -2
- package/dist/theme/theme.d.ts +1 -1
- package/dist/theme/theme.js.map +1 -1
- package/dist/tools/background/task-types.d.ts +1 -1
- package/dist/tools/extract-document.d.ts +1 -0
- package/dist/tools/extract-document.d.ts.map +1 -1
- package/dist/tools/extract-document.js +2 -1
- package/dist/tools/extract-document.js.map +1 -1
- package/dist/tools/index.d.ts +55 -55
- package/dist/tools/index.js +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/tool-dsl.d.ts +1 -1
- package/dist/tools/tool-dsl.js +1 -1
- package/dist/tools/tool-dsl.js.map +1 -1
- package/dist/utils/document-extractor.d.ts +1 -0
- package/dist/utils/document-extractor.d.ts.map +1 -1
- package/dist/utils/document-extractor.js +320 -40
- package/dist/utils/document-extractor.js.map +1 -1
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/version.json +2 -2
- package/dist/web-server.d.ts +1 -1
- package/dist/web-server.d.ts.map +1 -1
- package/dist/web-server.js +12 -8
- package/dist/web-server.js.map +1 -1
- package/package.json +4 -2
- package/dist/oauth/anthropic.d.ts +0 -17
- package/dist/oauth/anthropic.d.ts.map +0 -1
- package/dist/oauth/anthropic.js +0 -81
- package/dist/oauth/anthropic.js.map +0 -1
- package/dist/providers/anthropic-auth.d.ts +0 -75
- package/dist/providers/anthropic-auth.d.ts.map +0 -1
- package/dist/providers/anthropic-auth.js +0 -221
- package/dist/providers/anthropic-auth.js.map +0 -1
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - ~/.maestro/prompts/*.md (user prompts)
|
|
6
6
|
* - .maestro/prompts/*.md (project prompts)
|
|
7
7
|
*
|
|
8
|
-
* Additionally,
|
|
8
|
+
* Additionally, Maestro treats Markdown files in `.maestro/commands/*.md` and
|
|
9
9
|
* `~/.maestro/commands/*.md` as prompts. This lets teams colocate "prompt-like"
|
|
10
10
|
* commands alongside other command templates.
|
|
11
11
|
*
|
package/dist/commands/prompts.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - ~/.maestro/prompts/*.md (user prompts)
|
|
6
6
|
* - .maestro/prompts/*.md (project prompts)
|
|
7
7
|
*
|
|
8
|
-
* Additionally,
|
|
8
|
+
* Additionally, Maestro treats Markdown files in `.maestro/commands/*.md` and
|
|
9
9
|
* `~/.maestro/commands/*.md` as prompts. This lets teams colocate "prompt-like"
|
|
10
10
|
* commands alongside other command templates.
|
|
11
11
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/commands/prompts.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Custom Prompts System - User-definable slash commands from Markdown files.\n *\n * Inspired by OpenAI Codex's prompts system. Prompts are discovered from:\n * - ~/.maestro/prompts/*.md (user prompts)\n * - .maestro/prompts/*.md (project prompts)\n *\n * Additionally, Composer treats Markdown files in `.maestro/commands/*.md` and\n * `~/.maestro/commands/*.md` as prompts. This lets teams colocate \"prompt-like\"\n * commands alongside other command templates.\n *\n * Each prompt is a Markdown file with optional YAML frontmatter:\n *\n * ```markdown\n * ---\n * description: Request a concise git diff review\n * argument-hint: FILE=<path> [FOCUS=<section>]\n * ---\n *\n * Review the code in $FILE. Pay special attention to $FOCUS.\n * ```\n *\n * Placeholders:\n * - Positional: $1, $2, ..., $9 (from space-separated args)\n * - $ARGUMENTS: All positional arguments joined by space\n * - Named: $FILE, $TICKET_ID (from KEY=value pairs)\n * - Escape: $$ produces a literal $\n */\n\nimport { existsSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { basename, join } from \"node:path\";\nimport { PATHS } from \"../config/constants.js\";\nimport { loadConfiguredPackageResources } from \"../packages/runtime.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport { buildDirectoriesFingerprint } from \"./filesystem-catalog-cache.js\";\n\nconst logger = createLogger(\"commands:prompts\");\nconst promptCatalogCache = new Map<\n\tstring,\n\t{ signature: string; prompts: PromptDefinition[] }\n>();\n\n/**\n * Prompt definition from YAML frontmatter.\n */\nexport interface PromptDefinition {\n\t/** Unique prompt name (derived from filename) */\n\tname: string;\n\t/** Short description shown in slash popup */\n\tdescription?: string;\n\t/** Alternative names for this prompt */\n\taliases?: string[];\n\t/** Hint for expected arguments */\n\targumentHint?: string;\n\t/** Full markdown body (content after frontmatter) */\n\tbody: string;\n\t/** Source file path */\n\tsourcePath: string;\n\t/** Source type: 'user' or 'project' */\n\tsourceType: \"user\" | \"project\";\n\t/** Named placeholders found in the body */\n\tnamedPlaceholders: string[];\n\t/** Whether body uses positional placeholders */\n\thasPositionalPlaceholders: boolean;\n}\n\n/**\n * Result of parsing prompt arguments.\n */\nexport interface ParsedPromptArgs {\n\t/** Positional arguments ($1, $2, etc.) */\n\tpositional: string[];\n\t/** Named arguments (KEY=value) */\n\tnamed: Record<string, string>;\n}\n\n/**\n * Parse YAML frontmatter from markdown content.\n */\nfunction parseFrontmatter(content: string): {\n\tfrontmatter: Record<string, unknown>;\n\tbody: string;\n} {\n\tconst frontmatterRegex = /^---\\s*\\n([\\s\\S]*?)\\n---\\s*\\n?([\\s\\S]*)$/;\n\tconst match = content.match(frontmatterRegex);\n\n\tif (!match) {\n\t\treturn { frontmatter: {}, body: content };\n\t}\n\n\tconst [, yamlContent, body = \"\"] = match;\n\tconst frontmatter: Record<string, unknown> = {};\n\n\t// Simple YAML parser for common patterns (key: value and arrays)\n\tconst lines = yamlContent!.split(\"\\n\");\n\tlet currentKey: string | null = null;\n\tlet currentArray: string[] | null = null;\n\n\tfor (const line of lines) {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed || trimmed.startsWith(\"#\")) continue;\n\n\t\t// Array item\n\t\tif (trimmed.startsWith(\"- \") && currentKey && currentArray) {\n\t\t\tcurrentArray.push(trimmed.slice(2).trim());\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Save previous array\n\t\tif (currentKey && currentArray) {\n\t\t\tfrontmatter[currentKey] = currentArray;\n\t\t\tcurrentKey = null;\n\t\t\tcurrentArray = null;\n\t\t}\n\n\t\tconst colonIndex = trimmed.indexOf(\":\");\n\t\tif (colonIndex <= 0) continue;\n\t\tconst key = trimmed.slice(0, colonIndex).trim();\n\t\tlet value = trimmed.slice(colonIndex + 1).trim();\n\n\t\tif (value === \"\") {\n\t\t\tcurrentKey = key;\n\t\t\tcurrentArray = [];\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Remove surrounding quotes if present\n\t\tif (\n\t\t\t(value.startsWith('\"') && value.endsWith('\"')) ||\n\t\t\t(value.startsWith(\"'\") && value.endsWith(\"'\"))\n\t\t) {\n\t\t\tvalue = value.slice(1, -1);\n\t\t}\n\n\t\tfrontmatter[key] = value;\n\t}\n\n\t// Save trailing array\n\tif (currentKey && currentArray) {\n\t\tfrontmatter[currentKey] = currentArray;\n\t}\n\n\treturn { frontmatter, body };\n}\n\nfunction isValidPromptName(value: string): boolean {\n\treturn /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(value);\n}\n\nfunction parseAliases(raw: unknown): string[] | undefined {\n\tconst values: string[] = [];\n\n\tif (Array.isArray(raw)) {\n\t\tfor (const item of raw) {\n\t\t\tif (typeof item === \"string\") values.push(item);\n\t\t}\n\t} else if (typeof raw === \"string\") {\n\t\t// Accept simple comma-separated strings as well.\n\t\tvalues.push(\n\t\t\t...raw\n\t\t\t\t.split(\",\")\n\t\t\t\t.map((part) => part.trim())\n\t\t\t\t.filter(Boolean),\n\t\t);\n\t}\n\n\tconst normalized = new Set<string>();\n\tconst cleaned: string[] = [];\n\tfor (const value of values) {\n\t\tif (!isValidPromptName(value)) continue;\n\t\tconst key = value.toLowerCase();\n\t\tif (normalized.has(key)) continue;\n\t\tnormalized.add(key);\n\t\tcleaned.push(value);\n\t}\n\n\treturn cleaned.length > 0 ? cleaned : undefined;\n}\n\n/**\n * Extract named placeholders from prompt body.\n * Named placeholders are $UPPERCASE_IDENTIFIERS (not $1-$9 or $$).\n */\nfunction extractNamedPlaceholders(body: string): string[] {\n\tconst pattern = /\\$([A-Z][A-Z0-9_]*)/g;\n\tconst placeholders = new Set<string>();\n\n\tfor (const match of body.matchAll(pattern)) {\n\t\tconst name = match[1]!;\n\t\t// Skip special placeholders\n\t\tif (name === \"ARGUMENTS\") continue;\n\t\tplaceholders.add(name);\n\t}\n\n\treturn Array.from(placeholders).sort();\n}\n\n/**\n * Check if body uses positional placeholders ($1-$9 or $ARGUMENTS).\n */\nfunction hasPositionalPlaceholders(body: string): boolean {\n\treturn /\\$[1-9]|\\$ARGUMENTS/.test(body);\n}\n\n/**\n * Load a single prompt from a markdown file.\n */\nfunction loadPromptFromFile(\n\tfilePath: string,\n\tsourceType: \"user\" | \"project\",\n): PromptDefinition | null {\n\ttry {\n\t\tconst content = readFileSync(filePath, \"utf-8\");\n\t\tconst { frontmatter, body } = parseFrontmatter(content);\n\n\t\t// Derive name from filename (without .md extension), but allow override.\n\t\tconst fileName = basename(filePath, \".md\");\n\t\tconst frontmatterName =\n\t\t\ttypeof frontmatter.name === \"string\" ? frontmatter.name.trim() : \"\";\n\t\tconst nameCandidate = frontmatterName || fileName;\n\t\tconst name = isValidPromptName(nameCandidate) ? nameCandidate : fileName;\n\n\t\tif (!name || name.startsWith(\".\")) {\n\t\t\tlogger.debug(\"Skipping hidden or invalid prompt file\", { filePath });\n\t\t\treturn null;\n\t\t}\n\n\t\tconst aliases = parseAliases(frontmatter.aliases);\n\t\tconst filteredAliases = aliases?.filter(\n\t\t\t(alias) => alias.toLowerCase() !== name.toLowerCase(),\n\t\t);\n\n\t\tconst prompt: PromptDefinition = {\n\t\t\tname,\n\t\t\tdescription:\n\t\t\t\ttypeof frontmatter.description === \"string\"\n\t\t\t\t\t? frontmatter.description\n\t\t\t\t\t: undefined,\n\t\t\taliases: filteredAliases?.length ? filteredAliases : undefined,\n\t\t\targumentHint:\n\t\t\t\ttypeof frontmatter[\"argument-hint\"] === \"string\"\n\t\t\t\t\t? frontmatter[\"argument-hint\"]\n\t\t\t\t\t: typeof frontmatter.argument_hint === \"string\"\n\t\t\t\t\t\t? frontmatter.argument_hint\n\t\t\t\t\t\t: undefined,\n\t\t\tbody: body.trim(),\n\t\t\tsourcePath: filePath,\n\t\t\tsourceType,\n\t\t\tnamedPlaceholders: extractNamedPlaceholders(body),\n\t\t\thasPositionalPlaceholders: hasPositionalPlaceholders(body),\n\t\t};\n\n\t\tlogger.debug(\"Loaded prompt\", {\n\t\t\tname: prompt.name,\n\t\t\tsourceType,\n\t\t\tnamedPlaceholders: prompt.namedPlaceholders,\n\t\t});\n\n\t\treturn prompt;\n\t} catch (err) {\n\t\tlogger.warn(\"Error loading prompt\", {\n\t\t\tfilePath,\n\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t});\n\t\treturn null;\n\t}\n}\n\n/**\n * Scan a directory for prompt markdown files.\n */\nfunction scanPromptsDirectory(\n\tdir: string,\n\tsourceType: \"user\" | \"project\",\n): PromptDefinition[] {\n\tif (!existsSync(dir)) {\n\t\treturn [];\n\t}\n\n\tconst prompts: PromptDefinition[] = [];\n\n\ttry {\n\t\tconst entries = readdirSync(dir);\n\t\tfor (const entry of entries) {\n\t\t\tif (!entry.endsWith(\".md\")) continue;\n\n\t\t\tconst entryPath = join(dir, entry);\n\t\t\ttry {\n\t\t\t\tconst stat = statSync(entryPath);\n\t\t\t\tif (!stat.isFile() && !stat.isSymbolicLink()) continue;\n\n\t\t\t\tconst prompt = loadPromptFromFile(entryPath, sourceType);\n\t\t\t\tif (prompt) {\n\t\t\t\t\tprompts.push(prompt);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Skip inaccessible files\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\tlogger.warn(\"Error scanning prompts directory\", {\n\t\t\tdir,\n\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t});\n\t}\n\n\treturn prompts;\n}\n\n/**\n * Load all available prompts from user and project directories.\n *\n * @param workspaceDir - The current workspace/project directory\n * @returns Array of loaded prompts (project prompts override user prompts by name)\n */\nexport function loadPrompts(workspaceDir: string): PromptDefinition[] {\n\tconst packageResources = loadConfiguredPackageResources(workspaceDir);\n\tconst userPromptsDir = join(PATHS.MAESTRO_HOME, \"prompts\");\n\tconst userCommandsDir = join(PATHS.MAESTRO_HOME, \"commands\");\n\tconst projectPromptsDir = join(workspaceDir, \".maestro\", \"prompts\");\n\tconst projectCommandsDir = join(workspaceDir, \".maestro\", \"commands\");\n\tconst userPackagePromptDirs = packageResources.prompts.user;\n\tconst projectPackagePromptDirs = packageResources.prompts.project;\n\tconst signature = buildDirectoriesFingerprint(\n\t\t[\n\t\t\t...userPackagePromptDirs,\n\t\t\tuserCommandsDir,\n\t\t\tuserPromptsDir,\n\t\t\t...projectPackagePromptDirs,\n\t\t\tprojectCommandsDir,\n\t\t\tprojectPromptsDir,\n\t\t],\n\t\t(entry) => entry.endsWith(\".md\"),\n\t);\n\n\tlogger.debug(\"Scanning for prompts\", {\n\t\tuserPromptsDir,\n\t\tprojectPromptsDir,\n\t\tuserCommandsDir,\n\t\tprojectCommandsDir,\n\t\tuserPackagePromptDirs,\n\t\tprojectPackagePromptDirs,\n\t});\n\n\tconst cached = promptCatalogCache.get(workspaceDir);\n\tif (cached?.signature === signature) {\n\t\tlogger.debug(\"Returning cached prompts\", {\n\t\t\tworkspaceDir,\n\t\t\ttotal: cached.prompts.length,\n\t\t});\n\t\treturn cached.prompts;\n\t}\n\n\t// Commands dir first, prompts dir second (prompts override commands by name).\n\tconst userPrompts = [\n\t\t...userPackagePromptDirs.flatMap((dir) =>\n\t\t\tscanPromptsDirectory(dir, \"user\"),\n\t\t),\n\t\t...scanPromptsDirectory(userCommandsDir, \"user\"),\n\t\t...scanPromptsDirectory(userPromptsDir, \"user\"),\n\t];\n\tconst projectPrompts = [\n\t\t...projectPackagePromptDirs.flatMap((dir) =>\n\t\t\tscanPromptsDirectory(dir, \"project\"),\n\t\t),\n\t\t...scanPromptsDirectory(projectCommandsDir, \"project\"),\n\t\t...scanPromptsDirectory(projectPromptsDir, \"project\"),\n\t];\n\n\t// Project prompts override user prompts by name\n\tconst promptMap = new Map<string, PromptDefinition>();\n\n\tfor (const prompt of userPrompts) {\n\t\tpromptMap.set(prompt.name.toLowerCase(), prompt);\n\t}\n\n\tfor (const prompt of projectPrompts) {\n\t\tconst existing = promptMap.get(prompt.name.toLowerCase());\n\t\tif (existing) {\n\t\t\tlogger.debug(\"Project prompt overrides user prompt\", {\n\t\t\t\tname: prompt.name,\n\t\t\t});\n\t\t}\n\t\tpromptMap.set(prompt.name.toLowerCase(), prompt);\n\t}\n\n\tconst allPrompts = Array.from(promptMap.values());\n\n\t// Sort by name for consistent ordering\n\tallPrompts.sort((a, b) => a.name.localeCompare(b.name));\n\n\tlogger.info(\"Finished loading prompts\", {\n\t\ttotal: allPrompts.length,\n\t\tuser: userPrompts.length,\n\t\tproject: projectPrompts.length,\n\t});\n\tpromptCatalogCache.set(workspaceDir, {\n\t\tsignature,\n\t\tprompts: allPrompts,\n\t});\n\n\treturn allPrompts;\n}\n\n/**\n * Find a prompt by name (case-insensitive).\n */\nexport function findPrompt(\n\tprompts: PromptDefinition[],\n\tname: string,\n): PromptDefinition | undefined {\n\tconst normalizedName = name.toLowerCase();\n\treturn prompts.find((p) => {\n\t\tif (p.name.toLowerCase() === normalizedName) return true;\n\t\treturn p.aliases?.some((alias) => alias.toLowerCase() === normalizedName);\n\t});\n}\n\n/**\n * Parse arguments from a command invocation.\n *\n * Supports:\n * - Positional args: separated by whitespace\n * - Named args: KEY=value or KEY=\"value with spaces\"\n *\n * @param argString - The argument string after the command name\n * @returns Parsed positional and named arguments\n */\nexport function parsePromptArgs(argString: string): ParsedPromptArgs {\n\tconst positional: string[] = [];\n\tconst named: Record<string, string> = {};\n\n\tif (!argString.trim()) {\n\t\treturn { positional, named };\n\t}\n\n\t// Tokenize respecting quoted strings\n\tconst tokens: string[] = [];\n\tlet current = \"\";\n\tlet inQuotes = false;\n\tlet quoteChar = \"\";\n\n\tfor (let i = 0; i < argString.length; i++) {\n\t\tconst char = argString[i]!;\n\n\t\tif (!inQuotes && (char === '\"' || char === \"'\")) {\n\t\t\tinQuotes = true;\n\t\t\tquoteChar = char;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (inQuotes && char === quoteChar) {\n\t\t\tinQuotes = false;\n\t\t\tquoteChar = \"\";\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!inQuotes && /\\s/.test(char)) {\n\t\t\tif (current) {\n\t\t\t\ttokens.push(current);\n\t\t\t\tcurrent = \"\";\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcurrent += char;\n\t}\n\n\tif (current) {\n\t\ttokens.push(current);\n\t}\n\n\t// Separate named and positional arguments\n\tfor (const token of tokens) {\n\t\tconst eqIndex = token.indexOf(\"=\");\n\t\tif (eqIndex > 0 && /^[A-Z][A-Z0-9_]*$/.test(token.slice(0, eqIndex))) {\n\t\t\t// Named argument (KEY=value)\n\t\t\tconst key = token.slice(0, eqIndex);\n\t\t\tconst value = token.slice(eqIndex + 1);\n\t\t\tnamed[key] = value;\n\t\t} else {\n\t\t\t// Positional argument\n\t\t\tpositional.push(token);\n\t\t}\n\t}\n\n\treturn { positional, named };\n}\n\n/**\n * Validate that all required named placeholders are provided.\n *\n * @returns Error message if validation fails, null if valid\n */\nexport function validatePromptArgs(\n\tprompt: PromptDefinition,\n\targs: ParsedPromptArgs,\n): string | null {\n\tconst missing: string[] = [];\n\n\tfor (const placeholder of prompt.namedPlaceholders) {\n\t\tif (!(placeholder in args.named)) {\n\t\t\tmissing.push(placeholder);\n\t\t}\n\t}\n\n\tif (missing.length > 0) {\n\t\treturn `Missing required arguments: ${missing.join(\", \")}`;\n\t}\n\n\treturn null;\n}\n\n/**\n * Render a prompt with the given arguments.\n *\n * Substitutes:\n * - $1, $2, ..., $9 with positional arguments\n * - $ARGUMENTS with all positional arguments joined by space\n * - $NAME with named argument values\n * - $$ with a literal $\n */\nexport function renderPrompt(\n\tprompt: PromptDefinition,\n\targs: ParsedPromptArgs,\n): string {\n\tlet result = prompt.body;\n\n\t// First, escape $$ to a placeholder\n\tconst escapeMarker = \"\\x00DOLLAR\\x00\";\n\tresult = result.replace(/\\$\\$/g, escapeMarker);\n\n\t// Substitute positional arguments $1-$9\n\tfor (let i = 1; i <= 9; i++) {\n\t\tconst pattern = new RegExp(`\\\\$${i}`, \"g\");\n\t\tconst value = args.positional[i - 1] ?? \"\";\n\t\tresult = result.replace(pattern, value);\n\t}\n\n\t// Substitute $ARGUMENTS after positional replacement to avoid\n\t// rewriting $1-like substrings inside the expanded arguments.\n\tresult = result.replace(/\\$ARGUMENTS/g, args.positional.join(\" \"));\n\n\t// Substitute named arguments\n\tfor (const [key, value] of Object.entries(args.named)) {\n\t\tconst pattern = new RegExp(`\\\\$${key}`, \"g\");\n\t\tresult = result.replace(pattern, value);\n\t}\n\n\t// Restore escaped dollars\n\tresult = result.replace(new RegExp(escapeMarker, \"g\"), \"$\");\n\n\treturn result;\n}\n\n/**\n * Format prompt for display in a list.\n */\nexport function formatPromptListItem(prompt: PromptDefinition): string {\n\tconst source = prompt.sourceType === \"user\" ? \"(user)\" : \"(project)\";\n\tconst desc = prompt.description ?? \"(no description)\";\n\tconst aliases = prompt.aliases?.length\n\t\t? ` (aliases: ${prompt.aliases.join(\", \")})`\n\t\t: \"\";\n\treturn `${prompt.name}${aliases} ${source} - ${desc}`;\n}\n\n/**\n * Get usage hint for a prompt.\n */\nexport function getPromptUsageHint(prompt: PromptDefinition): string {\n\tconst parts: string[] = [`/prompts:${prompt.name}`];\n\n\tif (prompt.argumentHint) {\n\t\tparts.push(prompt.argumentHint);\n\t} else if (prompt.namedPlaceholders.length > 0) {\n\t\tparts.push(prompt.namedPlaceholders.map((p) => `${p}=<value>`).join(\" \"));\n\t} else if (prompt.hasPositionalPlaceholders) {\n\t\tparts.push(\"<args...>\");\n\t}\n\n\treturn parts.join(\" \");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/commands/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;AAChD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAG/B,CAAC;AAoCJ;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAe;IAIxC,MAAM,gBAAgB,GAAG,0CAA0C,CAAC;IACpE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAE9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;IACzC,MAAM,WAAW,GAA4B,EAAE,CAAC;IAEhD,iEAAiE;IACjE,MAAM,KAAK,GAAG,WAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,IAAI,YAAY,GAAoB,IAAI,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAElD,aAAa;QACb,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;YAC5D,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3C,SAAS;QACV,CAAC;QAED,sBAAsB;QACtB,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;YAChC,WAAW,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC;YACvC,UAAU,GAAG,IAAI,CAAC;YAClB,YAAY,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,UAAU,IAAI,CAAC;YAAE,SAAS;QAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEjD,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YAClB,UAAU,GAAG,GAAG,CAAC;YACjB,YAAY,GAAG,EAAE,CAAC;YAClB,SAAS;QACV,CAAC;QAED,uCAAuC;QACvC,IACC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAC7C,CAAC;YACF,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;QAED,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,sBAAsB;IACtB,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;QAChC,WAAW,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC;IACxC,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACvC,OAAO,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IACjC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;YACxB,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;SAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,iDAAiD;QACjD,MAAM,CAAC,IAAI,CACV,GAAG,GAAG;aACJ,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,MAAM,CAAC,OAAO,CAAC,CACjB,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;YAAE,SAAS;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAClC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAAC,IAAY;IAC7C,MAAM,OAAO,GAAG,sBAAsB,CAAC;IACvC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEvC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,4BAA4B;QAC5B,IAAI,IAAI,KAAK,WAAW;YAAE,SAAS;QACnC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,IAAY;IAC9C,OAAO,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAC1B,QAAgB,EAChB,UAA8B;IAE9B,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAExD,yEAAyE;QACzE,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,eAAe,GACpB,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,MAAM,aAAa,GAAG,eAAe,IAAI,QAAQ,CAAC;QAClD,MAAM,IAAI,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC;QAEzE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,eAAe,GAAG,OAAO,EAAE,MAAM,CACtC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CACrD,CAAC;QAEF,MAAM,MAAM,GAAqB;YAChC,IAAI;YACJ,WAAW,EACV,OAAO,WAAW,CAAC,WAAW,KAAK,QAAQ;gBAC1C,CAAC,CAAC,WAAW,CAAC,WAAW;gBACzB,CAAC,CAAC,SAAS;YACb,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;YAC9D,YAAY,EACX,OAAO,WAAW,CAAC,eAAe,CAAC,KAAK,QAAQ;gBAC/C,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC;gBAC9B,CAAC,CAAC,OAAO,WAAW,CAAC,aAAa,KAAK,QAAQ;oBAC9C,CAAC,CAAC,WAAW,CAAC,aAAa;oBAC3B,CAAC,CAAC,SAAS;YACd,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YACjB,UAAU,EAAE,QAAQ;YACpB,UAAU;YACV,iBAAiB,EAAE,wBAAwB,CAAC,IAAI,CAAC;YACjD,yBAAyB,EAAE,yBAAyB,CAAC,IAAI,CAAC;SAC1D,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE;YAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU;YACV,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;SAC3C,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;YACnC,QAAQ;YACR,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACvD,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAC5B,GAAW,EACX,UAA8B;IAE9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YAErC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC;gBACJ,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;oBAAE,SAAS;gBAEvD,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACzD,IAAI,MAAM,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtB,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,0BAA0B;YAC3B,CAAC;QACF,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE;YAC/C,GAAG;YACH,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACvD,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,YAAoB;IAC/C,MAAM,gBAAgB,GAAG,8BAA8B,CAAC,YAAY,CAAC,CAAC;IACtE,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAC7D,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACpE,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACtE,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5D,MAAM,wBAAwB,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC;IAClE,MAAM,SAAS,GAAG,2BAA2B,CAC5C;QACC,GAAG,qBAAqB;QACxB,eAAe;QACf,cAAc;QACd,GAAG,wBAAwB;QAC3B,kBAAkB;QAClB,iBAAiB;KACjB,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAChC,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;QACpC,cAAc;QACd,iBAAiB;QACjB,eAAe;QACf,kBAAkB;QAClB,qBAAqB;QACrB,wBAAwB;KACxB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACpD,IAAI,MAAM,EAAE,SAAS,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE;YACxC,YAAY;YACZ,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;SAC5B,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,8EAA8E;IAC9E,MAAM,WAAW,GAAG;QACnB,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACxC,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,CACjC;QACD,GAAG,oBAAoB,CAAC,eAAe,EAAE,MAAM,CAAC;QAChD,GAAG,oBAAoB,CAAC,cAAc,EAAE,MAAM,CAAC;KAC/C,CAAC;IACF,MAAM,cAAc,GAAG;QACtB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAC3C,oBAAoB,CAAC,GAAG,EAAE,SAAS,CAAC,CACpC;QACD,GAAG,oBAAoB,CAAC,kBAAkB,EAAE,SAAS,CAAC;QACtD,GAAG,oBAAoB,CAAC,iBAAiB,EAAE,SAAS,CAAC;KACrD,CAAC;IAEF,gDAAgD;IAChD,MAAM,SAAS,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEtD,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QAClC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1D,IAAI,QAAQ,EAAE,CAAC;YACd,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE;gBACpD,IAAI,EAAE,MAAM,CAAC,IAAI;aACjB,CAAC,CAAC;QACJ,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAElD,uCAAuC;IACvC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAExD,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;QACvC,KAAK,EAAE,UAAU,CAAC,MAAM;QACxB,IAAI,EAAE,WAAW,CAAC,MAAM;QACxB,OAAO,EAAE,cAAc,CAAC,MAAM;KAC9B,CAAC,CAAC;IACH,kBAAkB,CAAC,GAAG,CAAC,YAAY,EAAE;QACpC,SAAS;QACT,OAAO,EAAE,UAAU;KACnB,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACzB,OAA2B,EAC3B,IAAY;IAEZ,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC1C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QACzB,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,cAAc;YAAE,OAAO,IAAI,CAAC;QACzD,OAAO,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB;IAChD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAA2B,EAAE,CAAC;IAEzC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;QACvB,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,qCAAqC;IACrC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,SAAS,GAAG,EAAE,CAAC;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;QAE3B,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACjD,QAAQ,GAAG,IAAI,CAAC;YAChB,SAAS,GAAG,IAAI,CAAC;YACjB,SAAS;QACV,CAAC;QAED,IAAI,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACpC,QAAQ,GAAG,KAAK,CAAC;YACjB,SAAS,GAAG,EAAE,CAAC;YACf,SAAS;QACV,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,IAAI,OAAO,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrB,OAAO,GAAG,EAAE,CAAC;YACd,CAAC;YACD,SAAS;QACV,CAAC;QAED,OAAO,IAAI,IAAI,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,0CAA0C;IAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,OAAO,GAAG,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;YACtE,6BAA6B;YAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YACvC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACpB,CAAC;aAAM,CAAC;YACP,sBAAsB;YACtB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACF,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CACjC,MAAwB,EACxB,IAAsB;IAEtB,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACpD,IAAI,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3B,CAAC;IACF,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,+BAA+B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAC3B,MAAwB,EACxB,IAAsB;IAEtB,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;IAEzB,oCAAoC;IACpC,MAAM,YAAY,GAAG,gBAAgB,CAAC;IACtC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAE/C,wCAAwC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,8DAA8D;IAC9D,8DAA8D;IAC9D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAEnE,6BAA6B;IAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,0BAA0B;IAC1B,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAE5D,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAwB;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;IACrE,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,IAAI,kBAAkB,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM;QACrC,CAAC,CAAC,cAAc,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAC5C,CAAC,CAAC,EAAE,CAAC;IACN,OAAO,GAAG,MAAM,CAAC,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,EAAE,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAwB;IAC1D,MAAM,KAAK,GAAa,CAAC,YAAY,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAEpD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3E,CAAC;SAAM,IAAI,MAAM,CAAC,yBAAyB,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC","sourcesContent":["/**\n * Custom Prompts System - User-definable slash commands from Markdown files.\n *\n * Inspired by OpenAI Codex's prompts system. Prompts are discovered from:\n * - ~/.maestro/prompts/*.md (user prompts)\n * - .maestro/prompts/*.md (project prompts)\n *\n * Additionally, Maestro treats Markdown files in `.maestro/commands/*.md` and\n * `~/.maestro/commands/*.md` as prompts. This lets teams colocate \"prompt-like\"\n * commands alongside other command templates.\n *\n * Each prompt is a Markdown file with optional YAML frontmatter:\n *\n * ```markdown\n * ---\n * description: Request a concise git diff review\n * argument-hint: FILE=<path> [FOCUS=<section>]\n * ---\n *\n * Review the code in $FILE. Pay special attention to $FOCUS.\n * ```\n *\n * Placeholders:\n * - Positional: $1, $2, ..., $9 (from space-separated args)\n * - $ARGUMENTS: All positional arguments joined by space\n * - Named: $FILE, $TICKET_ID (from KEY=value pairs)\n * - Escape: $$ produces a literal $\n */\n\nimport { existsSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { basename, join } from \"node:path\";\nimport { PATHS } from \"../config/constants.js\";\nimport { loadConfiguredPackageResources } from \"../packages/runtime.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport { buildDirectoriesFingerprint } from \"./filesystem-catalog-cache.js\";\n\nconst logger = createLogger(\"commands:prompts\");\nconst promptCatalogCache = new Map<\n\tstring,\n\t{ signature: string; prompts: PromptDefinition[] }\n>();\n\n/**\n * Prompt definition from YAML frontmatter.\n */\nexport interface PromptDefinition {\n\t/** Unique prompt name (derived from filename) */\n\tname: string;\n\t/** Short description shown in slash popup */\n\tdescription?: string;\n\t/** Alternative names for this prompt */\n\taliases?: string[];\n\t/** Hint for expected arguments */\n\targumentHint?: string;\n\t/** Full markdown body (content after frontmatter) */\n\tbody: string;\n\t/** Source file path */\n\tsourcePath: string;\n\t/** Source type: 'user' or 'project' */\n\tsourceType: \"user\" | \"project\";\n\t/** Named placeholders found in the body */\n\tnamedPlaceholders: string[];\n\t/** Whether body uses positional placeholders */\n\thasPositionalPlaceholders: boolean;\n}\n\n/**\n * Result of parsing prompt arguments.\n */\nexport interface ParsedPromptArgs {\n\t/** Positional arguments ($1, $2, etc.) */\n\tpositional: string[];\n\t/** Named arguments (KEY=value) */\n\tnamed: Record<string, string>;\n}\n\n/**\n * Parse YAML frontmatter from markdown content.\n */\nfunction parseFrontmatter(content: string): {\n\tfrontmatter: Record<string, unknown>;\n\tbody: string;\n} {\n\tconst frontmatterRegex = /^---\\s*\\n([\\s\\S]*?)\\n---\\s*\\n?([\\s\\S]*)$/;\n\tconst match = content.match(frontmatterRegex);\n\n\tif (!match) {\n\t\treturn { frontmatter: {}, body: content };\n\t}\n\n\tconst [, yamlContent, body = \"\"] = match;\n\tconst frontmatter: Record<string, unknown> = {};\n\n\t// Simple YAML parser for common patterns (key: value and arrays)\n\tconst lines = yamlContent!.split(\"\\n\");\n\tlet currentKey: string | null = null;\n\tlet currentArray: string[] | null = null;\n\n\tfor (const line of lines) {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed || trimmed.startsWith(\"#\")) continue;\n\n\t\t// Array item\n\t\tif (trimmed.startsWith(\"- \") && currentKey && currentArray) {\n\t\t\tcurrentArray.push(trimmed.slice(2).trim());\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Save previous array\n\t\tif (currentKey && currentArray) {\n\t\t\tfrontmatter[currentKey] = currentArray;\n\t\t\tcurrentKey = null;\n\t\t\tcurrentArray = null;\n\t\t}\n\n\t\tconst colonIndex = trimmed.indexOf(\":\");\n\t\tif (colonIndex <= 0) continue;\n\t\tconst key = trimmed.slice(0, colonIndex).trim();\n\t\tlet value = trimmed.slice(colonIndex + 1).trim();\n\n\t\tif (value === \"\") {\n\t\t\tcurrentKey = key;\n\t\t\tcurrentArray = [];\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Remove surrounding quotes if present\n\t\tif (\n\t\t\t(value.startsWith('\"') && value.endsWith('\"')) ||\n\t\t\t(value.startsWith(\"'\") && value.endsWith(\"'\"))\n\t\t) {\n\t\t\tvalue = value.slice(1, -1);\n\t\t}\n\n\t\tfrontmatter[key] = value;\n\t}\n\n\t// Save trailing array\n\tif (currentKey && currentArray) {\n\t\tfrontmatter[currentKey] = currentArray;\n\t}\n\n\treturn { frontmatter, body };\n}\n\nfunction isValidPromptName(value: string): boolean {\n\treturn /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(value);\n}\n\nfunction parseAliases(raw: unknown): string[] | undefined {\n\tconst values: string[] = [];\n\n\tif (Array.isArray(raw)) {\n\t\tfor (const item of raw) {\n\t\t\tif (typeof item === \"string\") values.push(item);\n\t\t}\n\t} else if (typeof raw === \"string\") {\n\t\t// Accept simple comma-separated strings as well.\n\t\tvalues.push(\n\t\t\t...raw\n\t\t\t\t.split(\",\")\n\t\t\t\t.map((part) => part.trim())\n\t\t\t\t.filter(Boolean),\n\t\t);\n\t}\n\n\tconst normalized = new Set<string>();\n\tconst cleaned: string[] = [];\n\tfor (const value of values) {\n\t\tif (!isValidPromptName(value)) continue;\n\t\tconst key = value.toLowerCase();\n\t\tif (normalized.has(key)) continue;\n\t\tnormalized.add(key);\n\t\tcleaned.push(value);\n\t}\n\n\treturn cleaned.length > 0 ? cleaned : undefined;\n}\n\n/**\n * Extract named placeholders from prompt body.\n * Named placeholders are $UPPERCASE_IDENTIFIERS (not $1-$9 or $$).\n */\nfunction extractNamedPlaceholders(body: string): string[] {\n\tconst pattern = /\\$([A-Z][A-Z0-9_]*)/g;\n\tconst placeholders = new Set<string>();\n\n\tfor (const match of body.matchAll(pattern)) {\n\t\tconst name = match[1]!;\n\t\t// Skip special placeholders\n\t\tif (name === \"ARGUMENTS\") continue;\n\t\tplaceholders.add(name);\n\t}\n\n\treturn Array.from(placeholders).sort();\n}\n\n/**\n * Check if body uses positional placeholders ($1-$9 or $ARGUMENTS).\n */\nfunction hasPositionalPlaceholders(body: string): boolean {\n\treturn /\\$[1-9]|\\$ARGUMENTS/.test(body);\n}\n\n/**\n * Load a single prompt from a markdown file.\n */\nfunction loadPromptFromFile(\n\tfilePath: string,\n\tsourceType: \"user\" | \"project\",\n): PromptDefinition | null {\n\ttry {\n\t\tconst content = readFileSync(filePath, \"utf-8\");\n\t\tconst { frontmatter, body } = parseFrontmatter(content);\n\n\t\t// Derive name from filename (without .md extension), but allow override.\n\t\tconst fileName = basename(filePath, \".md\");\n\t\tconst frontmatterName =\n\t\t\ttypeof frontmatter.name === \"string\" ? frontmatter.name.trim() : \"\";\n\t\tconst nameCandidate = frontmatterName || fileName;\n\t\tconst name = isValidPromptName(nameCandidate) ? nameCandidate : fileName;\n\n\t\tif (!name || name.startsWith(\".\")) {\n\t\t\tlogger.debug(\"Skipping hidden or invalid prompt file\", { filePath });\n\t\t\treturn null;\n\t\t}\n\n\t\tconst aliases = parseAliases(frontmatter.aliases);\n\t\tconst filteredAliases = aliases?.filter(\n\t\t\t(alias) => alias.toLowerCase() !== name.toLowerCase(),\n\t\t);\n\n\t\tconst prompt: PromptDefinition = {\n\t\t\tname,\n\t\t\tdescription:\n\t\t\t\ttypeof frontmatter.description === \"string\"\n\t\t\t\t\t? frontmatter.description\n\t\t\t\t\t: undefined,\n\t\t\taliases: filteredAliases?.length ? filteredAliases : undefined,\n\t\t\targumentHint:\n\t\t\t\ttypeof frontmatter[\"argument-hint\"] === \"string\"\n\t\t\t\t\t? frontmatter[\"argument-hint\"]\n\t\t\t\t\t: typeof frontmatter.argument_hint === \"string\"\n\t\t\t\t\t\t? frontmatter.argument_hint\n\t\t\t\t\t\t: undefined,\n\t\t\tbody: body.trim(),\n\t\t\tsourcePath: filePath,\n\t\t\tsourceType,\n\t\t\tnamedPlaceholders: extractNamedPlaceholders(body),\n\t\t\thasPositionalPlaceholders: hasPositionalPlaceholders(body),\n\t\t};\n\n\t\tlogger.debug(\"Loaded prompt\", {\n\t\t\tname: prompt.name,\n\t\t\tsourceType,\n\t\t\tnamedPlaceholders: prompt.namedPlaceholders,\n\t\t});\n\n\t\treturn prompt;\n\t} catch (err) {\n\t\tlogger.warn(\"Error loading prompt\", {\n\t\t\tfilePath,\n\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t});\n\t\treturn null;\n\t}\n}\n\n/**\n * Scan a directory for prompt markdown files.\n */\nfunction scanPromptsDirectory(\n\tdir: string,\n\tsourceType: \"user\" | \"project\",\n): PromptDefinition[] {\n\tif (!existsSync(dir)) {\n\t\treturn [];\n\t}\n\n\tconst prompts: PromptDefinition[] = [];\n\n\ttry {\n\t\tconst entries = readdirSync(dir);\n\t\tfor (const entry of entries) {\n\t\t\tif (!entry.endsWith(\".md\")) continue;\n\n\t\t\tconst entryPath = join(dir, entry);\n\t\t\ttry {\n\t\t\t\tconst stat = statSync(entryPath);\n\t\t\t\tif (!stat.isFile() && !stat.isSymbolicLink()) continue;\n\n\t\t\t\tconst prompt = loadPromptFromFile(entryPath, sourceType);\n\t\t\t\tif (prompt) {\n\t\t\t\t\tprompts.push(prompt);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Skip inaccessible files\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\tlogger.warn(\"Error scanning prompts directory\", {\n\t\t\tdir,\n\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t});\n\t}\n\n\treturn prompts;\n}\n\n/**\n * Load all available prompts from user and project directories.\n *\n * @param workspaceDir - The current workspace/project directory\n * @returns Array of loaded prompts (project prompts override user prompts by name)\n */\nexport function loadPrompts(workspaceDir: string): PromptDefinition[] {\n\tconst packageResources = loadConfiguredPackageResources(workspaceDir);\n\tconst userPromptsDir = join(PATHS.MAESTRO_HOME, \"prompts\");\n\tconst userCommandsDir = join(PATHS.MAESTRO_HOME, \"commands\");\n\tconst projectPromptsDir = join(workspaceDir, \".maestro\", \"prompts\");\n\tconst projectCommandsDir = join(workspaceDir, \".maestro\", \"commands\");\n\tconst userPackagePromptDirs = packageResources.prompts.user;\n\tconst projectPackagePromptDirs = packageResources.prompts.project;\n\tconst signature = buildDirectoriesFingerprint(\n\t\t[\n\t\t\t...userPackagePromptDirs,\n\t\t\tuserCommandsDir,\n\t\t\tuserPromptsDir,\n\t\t\t...projectPackagePromptDirs,\n\t\t\tprojectCommandsDir,\n\t\t\tprojectPromptsDir,\n\t\t],\n\t\t(entry) => entry.endsWith(\".md\"),\n\t);\n\n\tlogger.debug(\"Scanning for prompts\", {\n\t\tuserPromptsDir,\n\t\tprojectPromptsDir,\n\t\tuserCommandsDir,\n\t\tprojectCommandsDir,\n\t\tuserPackagePromptDirs,\n\t\tprojectPackagePromptDirs,\n\t});\n\n\tconst cached = promptCatalogCache.get(workspaceDir);\n\tif (cached?.signature === signature) {\n\t\tlogger.debug(\"Returning cached prompts\", {\n\t\t\tworkspaceDir,\n\t\t\ttotal: cached.prompts.length,\n\t\t});\n\t\treturn cached.prompts;\n\t}\n\n\t// Commands dir first, prompts dir second (prompts override commands by name).\n\tconst userPrompts = [\n\t\t...userPackagePromptDirs.flatMap((dir) =>\n\t\t\tscanPromptsDirectory(dir, \"user\"),\n\t\t),\n\t\t...scanPromptsDirectory(userCommandsDir, \"user\"),\n\t\t...scanPromptsDirectory(userPromptsDir, \"user\"),\n\t];\n\tconst projectPrompts = [\n\t\t...projectPackagePromptDirs.flatMap((dir) =>\n\t\t\tscanPromptsDirectory(dir, \"project\"),\n\t\t),\n\t\t...scanPromptsDirectory(projectCommandsDir, \"project\"),\n\t\t...scanPromptsDirectory(projectPromptsDir, \"project\"),\n\t];\n\n\t// Project prompts override user prompts by name\n\tconst promptMap = new Map<string, PromptDefinition>();\n\n\tfor (const prompt of userPrompts) {\n\t\tpromptMap.set(prompt.name.toLowerCase(), prompt);\n\t}\n\n\tfor (const prompt of projectPrompts) {\n\t\tconst existing = promptMap.get(prompt.name.toLowerCase());\n\t\tif (existing) {\n\t\t\tlogger.debug(\"Project prompt overrides user prompt\", {\n\t\t\t\tname: prompt.name,\n\t\t\t});\n\t\t}\n\t\tpromptMap.set(prompt.name.toLowerCase(), prompt);\n\t}\n\n\tconst allPrompts = Array.from(promptMap.values());\n\n\t// Sort by name for consistent ordering\n\tallPrompts.sort((a, b) => a.name.localeCompare(b.name));\n\n\tlogger.info(\"Finished loading prompts\", {\n\t\ttotal: allPrompts.length,\n\t\tuser: userPrompts.length,\n\t\tproject: projectPrompts.length,\n\t});\n\tpromptCatalogCache.set(workspaceDir, {\n\t\tsignature,\n\t\tprompts: allPrompts,\n\t});\n\n\treturn allPrompts;\n}\n\n/**\n * Find a prompt by name (case-insensitive).\n */\nexport function findPrompt(\n\tprompts: PromptDefinition[],\n\tname: string,\n): PromptDefinition | undefined {\n\tconst normalizedName = name.toLowerCase();\n\treturn prompts.find((p) => {\n\t\tif (p.name.toLowerCase() === normalizedName) return true;\n\t\treturn p.aliases?.some((alias) => alias.toLowerCase() === normalizedName);\n\t});\n}\n\n/**\n * Parse arguments from a command invocation.\n *\n * Supports:\n * - Positional args: separated by whitespace\n * - Named args: KEY=value or KEY=\"value with spaces\"\n *\n * @param argString - The argument string after the command name\n * @returns Parsed positional and named arguments\n */\nexport function parsePromptArgs(argString: string): ParsedPromptArgs {\n\tconst positional: string[] = [];\n\tconst named: Record<string, string> = {};\n\n\tif (!argString.trim()) {\n\t\treturn { positional, named };\n\t}\n\n\t// Tokenize respecting quoted strings\n\tconst tokens: string[] = [];\n\tlet current = \"\";\n\tlet inQuotes = false;\n\tlet quoteChar = \"\";\n\n\tfor (let i = 0; i < argString.length; i++) {\n\t\tconst char = argString[i]!;\n\n\t\tif (!inQuotes && (char === '\"' || char === \"'\")) {\n\t\t\tinQuotes = true;\n\t\t\tquoteChar = char;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (inQuotes && char === quoteChar) {\n\t\t\tinQuotes = false;\n\t\t\tquoteChar = \"\";\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!inQuotes && /\\s/.test(char)) {\n\t\t\tif (current) {\n\t\t\t\ttokens.push(current);\n\t\t\t\tcurrent = \"\";\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcurrent += char;\n\t}\n\n\tif (current) {\n\t\ttokens.push(current);\n\t}\n\n\t// Separate named and positional arguments\n\tfor (const token of tokens) {\n\t\tconst eqIndex = token.indexOf(\"=\");\n\t\tif (eqIndex > 0 && /^[A-Z][A-Z0-9_]*$/.test(token.slice(0, eqIndex))) {\n\t\t\t// Named argument (KEY=value)\n\t\t\tconst key = token.slice(0, eqIndex);\n\t\t\tconst value = token.slice(eqIndex + 1);\n\t\t\tnamed[key] = value;\n\t\t} else {\n\t\t\t// Positional argument\n\t\t\tpositional.push(token);\n\t\t}\n\t}\n\n\treturn { positional, named };\n}\n\n/**\n * Validate that all required named placeholders are provided.\n *\n * @returns Error message if validation fails, null if valid\n */\nexport function validatePromptArgs(\n\tprompt: PromptDefinition,\n\targs: ParsedPromptArgs,\n): string | null {\n\tconst missing: string[] = [];\n\n\tfor (const placeholder of prompt.namedPlaceholders) {\n\t\tif (!(placeholder in args.named)) {\n\t\t\tmissing.push(placeholder);\n\t\t}\n\t}\n\n\tif (missing.length > 0) {\n\t\treturn `Missing required arguments: ${missing.join(\", \")}`;\n\t}\n\n\treturn null;\n}\n\n/**\n * Render a prompt with the given arguments.\n *\n * Substitutes:\n * - $1, $2, ..., $9 with positional arguments\n * - $ARGUMENTS with all positional arguments joined by space\n * - $NAME with named argument values\n * - $$ with a literal $\n */\nexport function renderPrompt(\n\tprompt: PromptDefinition,\n\targs: ParsedPromptArgs,\n): string {\n\tlet result = prompt.body;\n\n\t// First, escape $$ to a placeholder\n\tconst escapeMarker = \"\\x00DOLLAR\\x00\";\n\tresult = result.replace(/\\$\\$/g, escapeMarker);\n\n\t// Substitute positional arguments $1-$9\n\tfor (let i = 1; i <= 9; i++) {\n\t\tconst pattern = new RegExp(`\\\\$${i}`, \"g\");\n\t\tconst value = args.positional[i - 1] ?? \"\";\n\t\tresult = result.replace(pattern, value);\n\t}\n\n\t// Substitute $ARGUMENTS after positional replacement to avoid\n\t// rewriting $1-like substrings inside the expanded arguments.\n\tresult = result.replace(/\\$ARGUMENTS/g, args.positional.join(\" \"));\n\n\t// Substitute named arguments\n\tfor (const [key, value] of Object.entries(args.named)) {\n\t\tconst pattern = new RegExp(`\\\\$${key}`, \"g\");\n\t\tresult = result.replace(pattern, value);\n\t}\n\n\t// Restore escaped dollars\n\tresult = result.replace(new RegExp(escapeMarker, \"g\"), \"$\");\n\n\treturn result;\n}\n\n/**\n * Format prompt for display in a list.\n */\nexport function formatPromptListItem(prompt: PromptDefinition): string {\n\tconst source = prompt.sourceType === \"user\" ? \"(user)\" : \"(project)\";\n\tconst desc = prompt.description ?? \"(no description)\";\n\tconst aliases = prompt.aliases?.length\n\t\t? ` (aliases: ${prompt.aliases.join(\", \")})`\n\t\t: \"\";\n\treturn `${prompt.name}${aliases} ${source} - ${desc}`;\n}\n\n/**\n * Get usage hint for a prompt.\n */\nexport function getPromptUsageHint(prompt: PromptDefinition): string {\n\tconst parts: string[] = [`/prompts:${prompt.name}`];\n\n\tif (prompt.argumentHint) {\n\t\tparts.push(prompt.argumentHint);\n\t} else if (prompt.namedPlaceholders.length > 0) {\n\t\tparts.push(prompt.namedPlaceholders.map((p) => `${p}=<value>`).join(\" \"));\n\t} else if (prompt.hasPositionalPlaceholders) {\n\t\tparts.push(\"<args...>\");\n\t}\n\n\treturn parts.join(\" \");\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Centralized configuration constants for
|
|
2
|
+
* Centralized configuration constants for Maestro CLI.
|
|
3
3
|
*
|
|
4
4
|
* This module consolidates magic numbers, default values, and paths
|
|
5
5
|
* to improve maintainability and allow environment-based overrides.
|
|
@@ -34,7 +34,7 @@ export declare const TOOL_CONFIG: {
|
|
|
34
34
|
* Storage paths configuration
|
|
35
35
|
*/
|
|
36
36
|
export declare const PATHS: {
|
|
37
|
-
/**
|
|
37
|
+
/** Maestro home directory */
|
|
38
38
|
readonly MAESTRO_HOME: string;
|
|
39
39
|
/** Todo store file path */
|
|
40
40
|
readonly TODO_STORE: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,eAAO,MAAM,eAAe,QAAO,MACwC,CAAC;AAE5E,eAAO,MAAM,WAAW,QAAO,MAM9B,CAAC;AASF;;GAEG;AACH,eAAO,MAAM,cAAc;IAC1B,0DAA0D;;IAK1D,qCAAqC;0BAClB,MAAM;IAMzB,iFAAiF;;IAEjF,uDAAuD;;CAK9C,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;IACvB,0DAA0D;;IAK1D,sCAAsC;;IAEtC,+CAA+C;;CAEtC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,KAAK;IACjB,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,eAAO,MAAM,eAAe,QAAO,MACwC,CAAC;AAE5E,eAAO,MAAM,WAAW,QAAO,MAM9B,CAAC;AASF;;GAEG;AACH,eAAO,MAAM,cAAc;IAC1B,0DAA0D;;IAK1D,qCAAqC;0BAClB,MAAM;IAMzB,iFAAiF;;IAEjF,uDAAuD;;CAK9C,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;IACvB,0DAA0D;;IAK1D,sCAAsC;;IAEtC,+CAA+C;;CAEtC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,KAAK;IACjB,6BAA6B;2BACT,MAAM;IAG1B,2BAA2B;yBACT,MAAM;IAMxB,+BAA+B;yBACb,MAAM;IAMxB,8BAA8B;4BACT,MAAM;IAM3B,iCAAiC;+BACT,MAAM;IAG9B,qCAAqC;yCACH,MAAM;IAMxC,mDAAmD;uCACnB,MAAM;IAMtC,+BAA+B;sCACA,MAAM;IAMrC,+BAA+B;mCACH,MAAM;IAMlC,oCAAoC;sCACL,MAAM;IAGrC,yBAAyB;4BACJ,MAAM;IAM3B,8BAA8B;iCACJ,MAAM;IAMhC,gCAAgC;mCACJ,MAAM;IAMlC,6BAA6B;gCACJ,MAAM;IAM/B,+BAA+B;kCACJ,MAAM;IAMjC,6BAA6B;gCACJ,MAAM;IAM/B,8BAA8B;wBACb,MAAM;IAGvB,8BAA8B;gCACL,MAAM;IAM/B,kCAAkC;sBACnB,MAAM;IAMrB,0BAA0B;;CAWjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU;IACtB,0DAA0D;;IAK1D,oCAAoC;;CAI3B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,MAAM;IAClB,2CAA2C;;IAK3C,uCAAuC;;IAKvC,iDAAiD;;IAEjD,kCAAkC;;CAEzB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,QAAQ;IACpB,wDAAwD;;IAExD,2DAA2D;;IAE3D,uBAAuB;;IAEvB,6BAA6B;;IAE7B,6BAA6B;;IAE7B,0CAA0C;;CAEjC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU;IACtB,kDAAkD;;CAuBzC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,MAAM;;;;;;;CAOT,CAAC"}
|
package/dist/config/constants.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Centralized configuration constants for
|
|
2
|
+
* Centralized configuration constants for Maestro CLI.
|
|
3
3
|
*
|
|
4
4
|
* This module consolidates magic numbers, default values, and paths
|
|
5
5
|
* to improve maintainability and allow environment-based overrides.
|
|
@@ -51,7 +51,7 @@ export const TOOL_CONFIG = {
|
|
|
51
51
|
* Storage paths configuration
|
|
52
52
|
*/
|
|
53
53
|
export const PATHS = {
|
|
54
|
-
/**
|
|
54
|
+
/** Maestro home directory */
|
|
55
55
|
get MAESTRO_HOME() {
|
|
56
56
|
return getComposerHome();
|
|
57
57
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAExE,MAAM,CAAC,MAAM,eAAe,GAAG,GAAW,EAAE,CAC3C,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,UAAU,CAAC,CAAC;AAE5E,MAAM,CAAC,MAAM,WAAW,GAAG,GAAW,EAAE;IACvC,MAAM,WAAW,GAChB,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAC7C,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAChD,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9C,OAAO,WAAW,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC,CAAC;AAEF,6EAA6E;AAC7E,SAAS,MAAM,CAAC,GAAuB,EAAE,QAAgB;IACxD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACvC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,0DAA0D;IAC1D,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAChC,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,IAAI,EAC9C,EAAE,CACF;IACD,qCAAqC;IACrC,IAAI,WAAW;QACd,OAAO,CACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;YAC/C,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,CAC/B,CAAC;IACH,CAAC;IACD,iFAAiF;IACjF,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;IACxE,uDAAuD;IACvD,oBAAoB,EAAE,IAAI,CAAC,GAAG,CAC7B,CAAC,EACD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,EAAE,CAAC,CACpD;CACQ,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IAC1B,0DAA0D;IAC1D,uBAAuB,EAAE,MAAM,CAAC,QAAQ,CACvC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,OAAO,EAC9C,EAAE,CACF;IACD,sCAAsC;IACtC,kBAAkB,EAAE,IAAI;IACxB,+CAA+C;IAC/C,wBAAwB,EAAE,CAAC;CAClB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACpB,8BAA8B;IAC9B,IAAI,YAAY;QACf,OAAO,eAAe,EAAE,CAAC;IAC1B,CAAC;IACD,2BAA2B;IAC3B,IAAI,UAAU;QACb,OAAO,CACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAC7C,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,CAAC,CACrC,CAAC;IACH,CAAC;IACD,+BAA+B;IAC/B,IAAI,UAAU;QACb,OAAO,CACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAC9C,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,CAAC,CACrC,CAAC;IACH,CAAC;IACD,8BAA8B;IAC9B,IAAI,aAAa;QAChB,OAAO,CACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;YAClD,IAAI,CAAC,eAAe,EAAE,EAAE,eAAe,CAAC,CACxC,CAAC;IACH,CAAC;IACD,iCAAiC;IACjC,IAAI,gBAAgB;QACnB,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,mBAAmB,CAAC,CAAC;IACrD,CAAC;IACD,qCAAqC;IACrC,IAAI,0BAA0B;QAC7B,OAAO,CACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC;YAC9D,IAAI,CAAC,eAAe,EAAE,EAAE,4BAA4B,CAAC,CACrD,CAAC;IACH,CAAC;IACD,mDAAmD;IACnD,IAAI,wBAAwB;QAC3B,OAAO,CACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;YAC5D,IAAI,CAAC,eAAe,EAAE,EAAE,0BAA0B,CAAC,CACnD,CAAC;IACH,CAAC;IACD,+BAA+B;IAC/B,IAAI,uBAAuB;QAC1B,OAAO,CACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC;YAC3D,IAAI,CAAC,eAAe,EAAE,EAAE,yBAAyB,CAAC,CAClD,CAAC;IACH,CAAC;IACD,+BAA+B;IAC/B,IAAI,oBAAoB;QACvB,OAAO,CACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;YACpD,IAAI,CAAC,eAAe,EAAE,EAAE,kBAAkB,CAAC,CAC3C,CAAC;IACH,CAAC;IACD,oCAAoC;IACpC,IAAI,uBAAuB;QAC1B,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,kBAAkB,CAAC,CAAC;IACpD,CAAC;IACD,yBAAyB;IACzB,IAAI,aAAa;QAChB,OAAO,CACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAC5C,OAAO,CAAC,WAAW,EAAE,EAAE,eAAe,CAAC,CACvC,CAAC;IACH,CAAC;IACD,8BAA8B;IAC9B,IAAI,kBAAkB;QACrB,OAAO,CACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;YACjD,OAAO,CAAC,WAAW,EAAE,EAAE,oBAAoB,CAAC,CAC5C,CAAC;IACH,CAAC;IACD,gCAAgC;IAChC,IAAI,oBAAoB;QACvB,OAAO,CACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;YACxD,IAAI,CAAC,eAAe,EAAE,EAAE,mBAAmB,CAAC,CAC5C,CAAC;IACH,CAAC;IACD,6BAA6B;IAC7B,IAAI,iBAAiB;QACpB,OAAO,CACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;YAChD,IAAI,CAAC,eAAe,EAAE,EAAE,mBAAmB,CAAC,CAC5C,CAAC;IACH,CAAC;IACD,+BAA+B;IAC/B,IAAI,mBAAmB;QACtB,OAAO,CACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;YACvD,IAAI,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CACnD,CAAC;IACH,CAAC;IACD,6BAA6B;IAC7B,IAAI,iBAAiB;QACpB,OAAO,CACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;YACrD,IAAI,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CACjD,CAAC;IACH,CAAC;IACD,8BAA8B;IAC9B,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,8BAA8B;IAC9B,IAAI,iBAAiB;QACpB,OAAO,CACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;YACrD,IAAI,CAAC,eAAe,EAAE,EAAE,UAAU,CAAC,CACnC,CAAC;IACH,CAAC;IACD,kCAAkC;IAClC,IAAI,OAAO;QACV,OAAO,CACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YAC3C,IAAI,CAAC,eAAe,EAAE,EAAE,UAAU,CAAC,CACnC,CAAC;IACH,CAAC;IACD,0BAA0B;IAC1B,mBAAmB,EAAE;QACpB,oBAAoB;QACpB,WAAW;QACX,WAAW;QACX,WAAW;QACX,UAAU;QACV,UAAU;QACV,UAAU;QACV,WAAW;KACF;CACD,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,0DAA0D;IAC1D,kBAAkB,EAAE,MAAM,CAAC,QAAQ,CAClC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,QAAQ,EAC9C,EAAE,CACF;IACD,oCAAoC;IACpC,qBAAqB,EAAE,MAAM,CAAC,UAAU,CACvC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,KAAK,CAC7C;CACQ,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACrB,2CAA2C;IAC3C,mBAAmB,EAAE,MAAM,CAAC,QAAQ,CACnC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,UAAU,EAAE,OAAO;IACxD,EAAE,CACF;IACD,uCAAuC;IACvC,kBAAkB,EAAE,MAAM,CAAC,QAAQ,CAClC,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,MAAM,EAChD,EAAE,CACF;IACD,iDAAiD;IACjD,kBAAkB,EAAE,MAAM;IAC1B,kCAAkC;IAClC,eAAe,EAAE,MAAM;CACd,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACvB,wDAAwD;IACxD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,GAAG;IAChD,2DAA2D;IAC3D,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,GAAG;IAChD,uBAAuB;IACvB,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM;IAC3D,6BAA6B;IAC7B,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B;IAC1D,6BAA6B;IAC7B,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,GAAG;IACpD,0CAA0C;IAC1C,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG;CAC/C,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,kDAAkD;IAClD,oBAAoB,EAAE,IAAI,GAAG,CAAC;QAC7B,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,OAAO;QACP,KAAK;QACL,MAAM;QACN,MAAM;QACN,OAAO;QACP,OAAO;QACP,MAAM;QACN,OAAO;QACP,MAAM;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,OAAO;QACP,IAAI;QACJ,MAAM;QACN,IAAI;KACJ,CAAC;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACrB,oBAAoB,EAAE,8BAA8B;IACpD,mBAAmB,EAAE,6BAA6B;IAClD,YAAY,EAAE,0BAA0B;IACxC,YAAY,EAAE,6BAA6B;IAC3C,cAAc,EAAE,yCAAyC;IACzD,cAAc,EAAE,0BAA0B;CACjC,CAAC","sourcesContent":["/**\n * Centralized configuration constants for Composer CLI.\n *\n * This module consolidates magic numbers, default values, and paths\n * to improve maintainability and allow environment-based overrides.\n */\n\nimport { join, resolve } from \"node:path\";\nimport { getHomeDir, resolveEnvPath } from \"../utils/path-expansion.js\";\n\nexport const getComposerHome = (): string =>\n\tresolveEnvPath(process.env.MAESTRO_HOME) ?? join(getHomeDir(), \".maestro\");\n\nexport const getAgentDir = (): string => {\n\tconst envAgentDir =\n\t\tresolveEnvPath(process.env.MAESTRO_AGENT_DIR) ??\n\t\tresolveEnvPath(process.env.PLAYWRIGHT_AGENT_DIR) ??\n\t\tresolveEnvPath(process.env.CODING_AGENT_DIR);\n\treturn envAgentDir || join(getComposerHome(), \"agent\");\n};\n\n/** Parse an int env var, returning `fallback` only when the value is NaN. */\nfunction intEnv(raw: string | undefined, fallback: number): number {\n\tif (raw === undefined) return fallback;\n\tconst n = Number.parseInt(raw, 10);\n\treturn Number.isNaN(n) ? fallback : n;\n}\n\n/**\n * Session management configuration\n */\nexport const SESSION_CONFIG = {\n\t/** Number of entries to buffer before flushing to disk */\n\tWRITE_BATCH_SIZE: Number.parseInt(\n\t\tprocess.env.MAESTRO_SESSION_BATCH_SIZE ?? \"25\",\n\t\t10,\n\t),\n\t/** Default session directory path */\n\tget DEFAULT_DIR(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_SESSION_DIR) ??\n\t\t\tjoin(getAgentDir(), \"sessions\")\n\t\t);\n\t},\n\t/** Maximum number of sessions to retain per working directory (0 = unlimited) */\n\tMAX_SESSIONS: Math.max(0, intEnv(process.env.MAESTRO_MAX_SESSIONS, 100)),\n\t/** Maximum age for sessions in days (0 = unlimited) */\n\tMAX_SESSION_AGE_DAYS: Math.max(\n\t\t0,\n\t\tintEnv(process.env.MAESTRO_MAX_SESSION_AGE_DAYS, 90),\n\t),\n} as const;\n\n/**\n * Tool execution configuration\n */\nexport const TOOL_CONFIG = {\n\t/** Default timeout for bash commands (in milliseconds) */\n\tBASH_DEFAULT_TIMEOUT_MS: Number.parseInt(\n\t\tprocess.env.MAESTRO_BASH_TIMEOUT_MS ?? \"90000\",\n\t\t10,\n\t),\n\t/** Default file read limit (lines) */\n\tREAD_DEFAULT_LIMIT: 2400,\n\t/** Maximum context lines for search results */\n\tSEARCH_MAX_CONTEXT_LINES: 5,\n} as const;\n\n/**\n * Storage paths configuration\n */\nexport const PATHS = {\n\t/** Composer home directory */\n\tget MAESTRO_HOME(): string {\n\t\treturn getComposerHome();\n\t},\n\t/** Todo store file path */\n\tget TODO_STORE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_TODO_FILE) ??\n\t\t\tjoin(getComposerHome(), \"todos.json\")\n\t\t);\n\t},\n\t/** Usage tracking file path */\n\tget USAGE_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_USAGE_FILE) ??\n\t\t\tjoin(getComposerHome(), \"usage.json\")\n\t\t);\n\t},\n\t/** Telemetry log file path */\n\tget TELEMETRY_LOG(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_TELEMETRY_FILE) ??\n\t\t\tjoin(getComposerHome(), \"telemetry.log\")\n\t\t);\n\t},\n\t/** Tool failure log file path */\n\tget TOOL_FAILURE_LOG(): string {\n\t\treturn join(getComposerHome(), \"tool-failures.log\");\n\t},\n\t/** Project MCP approval decisions */\n\tget MCP_PROJECT_APPROVALS_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_MCP_PROJECT_APPROVALS_FILE) ??\n\t\t\tjoin(getComposerHome(), \"mcp-project-approvals.json\")\n\t\t);\n\t},\n\t/** Per-workspace MCP invocation trust decisions */\n\tget MCP_WORKSPACE_TRUST_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_MCP_WORKSPACE_TRUST_FILE) ??\n\t\t\tjoin(getComposerHome(), \"mcp-workspace-trust.json\")\n\t\t);\n\t},\n\t/** Project onboarding state */\n\tget PROJECT_ONBOARDING_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_PROJECT_ONBOARDING_FILE) ??\n\t\t\tjoin(getComposerHome(), \"project-onboarding.json\")\n\t\t);\n\t},\n\t/** TUI keybinding overrides */\n\tget TUI_KEYBINDINGS_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_KEYBINDINGS_FILE) ??\n\t\t\tjoin(getComposerHome(), \"keybindings.json\")\n\t\t);\n\t},\n\t/** Background task log directory */\n\tget BACKGROUND_TASK_LOG_DIR(): string {\n\t\treturn join(getComposerHome(), \"background-tasks\");\n\t},\n\t/** UI state file path */\n\tget UI_STATE_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_UI_STATE) ??\n\t\t\tresolve(getAgentDir(), \"ui-state.json\")\n\t\t);\n\t},\n\t/** Command prefs file path */\n\tget COMMAND_PREFS_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_COMMAND_PREFS) ??\n\t\t\tresolve(getAgentDir(), \"command-prefs.json\")\n\t\t);\n\t},\n\t/** TUI tip history file path */\n\tget TUI_TIP_HISTORY_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_TUI_TIP_HISTORY_FILE) ??\n\t\t\tjoin(getComposerHome(), \"tips-history.json\")\n\t\t);\n\t},\n\t/** Bash history file path */\n\tget BASH_HISTORY_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_BASH_HISTORY) ??\n\t\t\tjoin(getComposerHome(), \"bash-history.json\")\n\t\t);\n\t},\n\t/** Prompt history file path */\n\tget PROMPT_HISTORY_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_PROMPT_HISTORY_FILE) ??\n\t\t\tjoin(getComposerHome(), \"history\", \"prompts.jsonl\")\n\t\t);\n\t},\n\t/** Tool history file path */\n\tget TOOL_HISTORY_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_TOOL_HISTORY_FILE) ??\n\t\t\tjoin(getComposerHome(), \"history\", \"tools.jsonl\")\n\t\t);\n\t},\n\t/** Tools install directory */\n\tget TOOLS_DIR(): string {\n\t\treturn join(getComposerHome(), \"tools\");\n\t},\n\t/** Package cache directory */\n\tget PACKAGE_CACHE_DIR(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_PACKAGE_CACHE_DIR) ??\n\t\t\tjoin(getComposerHome(), \"packages\")\n\t\t);\n\t},\n\t/** Cost tracking database path */\n\tget COST_DB(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_COST_DB) ??\n\t\t\tjoin(getComposerHome(), \"costs.db\")\n\t\t);\n\t},\n\t/** Agent context files */\n\tAGENT_CONTEXT_FILES: [\n\t\t\"AGENTS.override.md\",\n\t\t\"AGENTS.md\",\n\t\t\"Agents.md\",\n\t\t\"agents.md\",\n\t\t\"AGENT.md\",\n\t\t\"Agent.md\",\n\t\t\"agent.md\",\n\t\t\"CLAUDE.md\",\n\t] as const,\n} as const;\n\n/**\n * API and network configuration\n */\nexport const API_CONFIG = {\n\t/** Request timeout for LLM API calls (in milliseconds) */\n\tREQUEST_TIMEOUT_MS: Number.parseInt(\n\t\tprocess.env.MAESTRO_API_TIMEOUT_MS ?? \"120000\",\n\t\t10,\n\t),\n\t/** Telemetry sampling rate (0-1) */\n\tTELEMETRY_SAMPLE_RATE: Number.parseFloat(\n\t\tprocess.env.MAESTRO_TELEMETRY_SAMPLE ?? \"1.0\",\n\t),\n} as const;\n\n/**\n * Performance and limits configuration\n */\nexport const LIMITS = {\n\t/** Maximum file size to read (in bytes) */\n\tMAX_FILE_SIZE_BYTES: Number.parseInt(\n\t\tprocess.env.MAESTRO_MAX_FILE_SIZE ?? \"10485760\", // 10MB\n\t\t10,\n\t),\n\t/** Maximum number of search results */\n\tMAX_SEARCH_RESULTS: Number.parseInt(\n\t\tprocess.env.MAESTRO_MAX_SEARCH_RESULTS ?? \"1000\",\n\t\t10,\n\t),\n\t/** Maximum command output length (characters) */\n\tMAX_COMMAND_OUTPUT: 40_000,\n\t/** Test timeout (milliseconds) */\n\tTEST_TIMEOUT_MS: 30_000,\n} as const;\n\n/**\n * Feature flags and mode toggles\n */\nexport const FEATURES = {\n\t/** Enable safe mode (requires plan before mutations) */\n\tSAFE_MODE: process.env.MAESTRO_SAFE_MODE === \"1\",\n\t/** Enable plan mode (ask before mutations via approval) */\n\tPLAN_MODE: process.env.MAESTRO_PLAN_MODE === \"1\",\n\t/** Enable telemetry */\n\tTELEMETRY_ENABLED: process.env.MAESTRO_TELEMETRY === \"true\",\n\t/** Telemetry endpoint URL */\n\tTELEMETRY_ENDPOINT: process.env.MAESTRO_TELEMETRY_ENDPOINT,\n\t/** Enable LSP integration */\n\tLSP_ENABLED: process.env.MAESTRO_LSP_ENABLED !== \"0\",\n\t/** Auto-start LSP servers when enabled */\n\tLSP_AUTOSTART: process.env.MAESTRO_LSP_AUTOSTART === \"1\",\n} as const;\n\n/**\n * Validation helpers\n */\nexport const VALIDATION = {\n\t/** File extensions considered safe for reading */\n\tSAFE_FILE_EXTENSIONS: new Set([\n\t\t\".ts\",\n\t\t\".js\",\n\t\t\".tsx\",\n\t\t\".jsx\",\n\t\t\".json\",\n\t\t\".md\",\n\t\t\".txt\",\n\t\t\".yml\",\n\t\t\".yaml\",\n\t\t\".toml\",\n\t\t\".xml\",\n\t\t\".html\",\n\t\t\".css\",\n\t\t\".py\",\n\t\t\".go\",\n\t\t\".rs\",\n\t\t\".java\",\n\t\t\".c\",\n\t\t\".cpp\",\n\t\t\".h\",\n\t]),\n} as const;\n\n/**\n * Error messages\n */\nexport const ERRORS = {\n\tSESSION_WRITE_FAILED: \"Failed to write session data\",\n\tSESSION_READ_FAILED: \"Failed to read session file\",\n\tTOOL_TIMEOUT: \"Tool execution timed out\",\n\tINVALID_PATH: \"Invalid or unsafe file path\",\n\tFILE_TOO_LARGE: \"File size exceeds maximum allowed limit\",\n\tTOOL_NOT_FOUND: \"Requested tool not found\",\n} as const;\n"]}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Centralized configuration constants for Maestro CLI.\n *\n * This module consolidates magic numbers, default values, and paths\n * to improve maintainability and allow environment-based overrides.\n */\n\nimport { join, resolve } from \"node:path\";\nimport { getHomeDir, resolveEnvPath } from \"../utils/path-expansion.js\";\n\nexport const getComposerHome = (): string =>\n\tresolveEnvPath(process.env.MAESTRO_HOME) ?? join(getHomeDir(), \".maestro\");\n\nexport const getAgentDir = (): string => {\n\tconst envAgentDir =\n\t\tresolveEnvPath(process.env.MAESTRO_AGENT_DIR) ??\n\t\tresolveEnvPath(process.env.PLAYWRIGHT_AGENT_DIR) ??\n\t\tresolveEnvPath(process.env.CODING_AGENT_DIR);\n\treturn envAgentDir || join(getComposerHome(), \"agent\");\n};\n\n/** Parse an int env var, returning `fallback` only when the value is NaN. */\nfunction intEnv(raw: string | undefined, fallback: number): number {\n\tif (raw === undefined) return fallback;\n\tconst n = Number.parseInt(raw, 10);\n\treturn Number.isNaN(n) ? fallback : n;\n}\n\n/**\n * Session management configuration\n */\nexport const SESSION_CONFIG = {\n\t/** Number of entries to buffer before flushing to disk */\n\tWRITE_BATCH_SIZE: Number.parseInt(\n\t\tprocess.env.MAESTRO_SESSION_BATCH_SIZE ?? \"25\",\n\t\t10,\n\t),\n\t/** Default session directory path */\n\tget DEFAULT_DIR(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_SESSION_DIR) ??\n\t\t\tjoin(getAgentDir(), \"sessions\")\n\t\t);\n\t},\n\t/** Maximum number of sessions to retain per working directory (0 = unlimited) */\n\tMAX_SESSIONS: Math.max(0, intEnv(process.env.MAESTRO_MAX_SESSIONS, 100)),\n\t/** Maximum age for sessions in days (0 = unlimited) */\n\tMAX_SESSION_AGE_DAYS: Math.max(\n\t\t0,\n\t\tintEnv(process.env.MAESTRO_MAX_SESSION_AGE_DAYS, 90),\n\t),\n} as const;\n\n/**\n * Tool execution configuration\n */\nexport const TOOL_CONFIG = {\n\t/** Default timeout for bash commands (in milliseconds) */\n\tBASH_DEFAULT_TIMEOUT_MS: Number.parseInt(\n\t\tprocess.env.MAESTRO_BASH_TIMEOUT_MS ?? \"90000\",\n\t\t10,\n\t),\n\t/** Default file read limit (lines) */\n\tREAD_DEFAULT_LIMIT: 2400,\n\t/** Maximum context lines for search results */\n\tSEARCH_MAX_CONTEXT_LINES: 5,\n} as const;\n\n/**\n * Storage paths configuration\n */\nexport const PATHS = {\n\t/** Maestro home directory */\n\tget MAESTRO_HOME(): string {\n\t\treturn getComposerHome();\n\t},\n\t/** Todo store file path */\n\tget TODO_STORE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_TODO_FILE) ??\n\t\t\tjoin(getComposerHome(), \"todos.json\")\n\t\t);\n\t},\n\t/** Usage tracking file path */\n\tget USAGE_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_USAGE_FILE) ??\n\t\t\tjoin(getComposerHome(), \"usage.json\")\n\t\t);\n\t},\n\t/** Telemetry log file path */\n\tget TELEMETRY_LOG(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_TELEMETRY_FILE) ??\n\t\t\tjoin(getComposerHome(), \"telemetry.log\")\n\t\t);\n\t},\n\t/** Tool failure log file path */\n\tget TOOL_FAILURE_LOG(): string {\n\t\treturn join(getComposerHome(), \"tool-failures.log\");\n\t},\n\t/** Project MCP approval decisions */\n\tget MCP_PROJECT_APPROVALS_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_MCP_PROJECT_APPROVALS_FILE) ??\n\t\t\tjoin(getComposerHome(), \"mcp-project-approvals.json\")\n\t\t);\n\t},\n\t/** Per-workspace MCP invocation trust decisions */\n\tget MCP_WORKSPACE_TRUST_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_MCP_WORKSPACE_TRUST_FILE) ??\n\t\t\tjoin(getComposerHome(), \"mcp-workspace-trust.json\")\n\t\t);\n\t},\n\t/** Project onboarding state */\n\tget PROJECT_ONBOARDING_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_PROJECT_ONBOARDING_FILE) ??\n\t\t\tjoin(getComposerHome(), \"project-onboarding.json\")\n\t\t);\n\t},\n\t/** TUI keybinding overrides */\n\tget TUI_KEYBINDINGS_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_KEYBINDINGS_FILE) ??\n\t\t\tjoin(getComposerHome(), \"keybindings.json\")\n\t\t);\n\t},\n\t/** Background task log directory */\n\tget BACKGROUND_TASK_LOG_DIR(): string {\n\t\treturn join(getComposerHome(), \"background-tasks\");\n\t},\n\t/** UI state file path */\n\tget UI_STATE_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_UI_STATE) ??\n\t\t\tresolve(getAgentDir(), \"ui-state.json\")\n\t\t);\n\t},\n\t/** Command prefs file path */\n\tget COMMAND_PREFS_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_COMMAND_PREFS) ??\n\t\t\tresolve(getAgentDir(), \"command-prefs.json\")\n\t\t);\n\t},\n\t/** TUI tip history file path */\n\tget TUI_TIP_HISTORY_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_TUI_TIP_HISTORY_FILE) ??\n\t\t\tjoin(getComposerHome(), \"tips-history.json\")\n\t\t);\n\t},\n\t/** Bash history file path */\n\tget BASH_HISTORY_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_BASH_HISTORY) ??\n\t\t\tjoin(getComposerHome(), \"bash-history.json\")\n\t\t);\n\t},\n\t/** Prompt history file path */\n\tget PROMPT_HISTORY_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_PROMPT_HISTORY_FILE) ??\n\t\t\tjoin(getComposerHome(), \"history\", \"prompts.jsonl\")\n\t\t);\n\t},\n\t/** Tool history file path */\n\tget TOOL_HISTORY_FILE(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_TOOL_HISTORY_FILE) ??\n\t\t\tjoin(getComposerHome(), \"history\", \"tools.jsonl\")\n\t\t);\n\t},\n\t/** Tools install directory */\n\tget TOOLS_DIR(): string {\n\t\treturn join(getComposerHome(), \"tools\");\n\t},\n\t/** Package cache directory */\n\tget PACKAGE_CACHE_DIR(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_PACKAGE_CACHE_DIR) ??\n\t\t\tjoin(getComposerHome(), \"packages\")\n\t\t);\n\t},\n\t/** Cost tracking database path */\n\tget COST_DB(): string {\n\t\treturn (\n\t\t\tresolveEnvPath(process.env.MAESTRO_COST_DB) ??\n\t\t\tjoin(getComposerHome(), \"costs.db\")\n\t\t);\n\t},\n\t/** Agent context files */\n\tAGENT_CONTEXT_FILES: [\n\t\t\"AGENTS.override.md\",\n\t\t\"AGENTS.md\",\n\t\t\"Agents.md\",\n\t\t\"agents.md\",\n\t\t\"AGENT.md\",\n\t\t\"Agent.md\",\n\t\t\"agent.md\",\n\t\t\"CLAUDE.md\",\n\t] as const,\n} as const;\n\n/**\n * API and network configuration\n */\nexport const API_CONFIG = {\n\t/** Request timeout for LLM API calls (in milliseconds) */\n\tREQUEST_TIMEOUT_MS: Number.parseInt(\n\t\tprocess.env.MAESTRO_API_TIMEOUT_MS ?? \"120000\",\n\t\t10,\n\t),\n\t/** Telemetry sampling rate (0-1) */\n\tTELEMETRY_SAMPLE_RATE: Number.parseFloat(\n\t\tprocess.env.MAESTRO_TELEMETRY_SAMPLE ?? \"1.0\",\n\t),\n} as const;\n\n/**\n * Performance and limits configuration\n */\nexport const LIMITS = {\n\t/** Maximum file size to read (in bytes) */\n\tMAX_FILE_SIZE_BYTES: Number.parseInt(\n\t\tprocess.env.MAESTRO_MAX_FILE_SIZE ?? \"10485760\", // 10MB\n\t\t10,\n\t),\n\t/** Maximum number of search results */\n\tMAX_SEARCH_RESULTS: Number.parseInt(\n\t\tprocess.env.MAESTRO_MAX_SEARCH_RESULTS ?? \"1000\",\n\t\t10,\n\t),\n\t/** Maximum command output length (characters) */\n\tMAX_COMMAND_OUTPUT: 40_000,\n\t/** Test timeout (milliseconds) */\n\tTEST_TIMEOUT_MS: 30_000,\n} as const;\n\n/**\n * Feature flags and mode toggles\n */\nexport const FEATURES = {\n\t/** Enable safe mode (requires plan before mutations) */\n\tSAFE_MODE: process.env.MAESTRO_SAFE_MODE === \"1\",\n\t/** Enable plan mode (ask before mutations via approval) */\n\tPLAN_MODE: process.env.MAESTRO_PLAN_MODE === \"1\",\n\t/** Enable telemetry */\n\tTELEMETRY_ENABLED: process.env.MAESTRO_TELEMETRY === \"true\",\n\t/** Telemetry endpoint URL */\n\tTELEMETRY_ENDPOINT: process.env.MAESTRO_TELEMETRY_ENDPOINT,\n\t/** Enable LSP integration */\n\tLSP_ENABLED: process.env.MAESTRO_LSP_ENABLED !== \"0\",\n\t/** Auto-start LSP servers when enabled */\n\tLSP_AUTOSTART: process.env.MAESTRO_LSP_AUTOSTART === \"1\",\n} as const;\n\n/**\n * Validation helpers\n */\nexport const VALIDATION = {\n\t/** File extensions considered safe for reading */\n\tSAFE_FILE_EXTENSIONS: new Set([\n\t\t\".ts\",\n\t\t\".js\",\n\t\t\".tsx\",\n\t\t\".jsx\",\n\t\t\".json\",\n\t\t\".md\",\n\t\t\".txt\",\n\t\t\".yml\",\n\t\t\".yaml\",\n\t\t\".toml\",\n\t\t\".xml\",\n\t\t\".html\",\n\t\t\".css\",\n\t\t\".py\",\n\t\t\".go\",\n\t\t\".rs\",\n\t\t\".java\",\n\t\t\".c\",\n\t\t\".cpp\",\n\t\t\".h\",\n\t]),\n} as const;\n\n/**\n * Error messages\n */\nexport const ERRORS = {\n\tSESSION_WRITE_FAILED: \"Failed to write session data\",\n\tSESSION_READ_FAILED: \"Failed to read session file\",\n\tTOOL_TIMEOUT: \"Tool execution timed out\",\n\tINVALID_PATH: \"Invalid or unsafe file path\",\n\tFILE_TOO_LARGE: \"File size exceeds maximum allowed limit\",\n\tTOOL_NOT_FOUND: \"Requested tool not found\",\n} as const;\n"]}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Configuration Module
|
|
3
3
|
*
|
|
4
|
-
* Unified configuration access for
|
|
4
|
+
* Unified configuration access for Maestro. Combines multiple configuration
|
|
5
5
|
* sources with a clear precedence order:
|
|
6
6
|
*
|
|
7
7
|
* 1. CLI flags (--model, --config key=value, --profile)
|
package/dist/config/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Configuration Module
|
|
3
3
|
*
|
|
4
|
-
* Unified configuration access for
|
|
4
|
+
* Unified configuration access for Maestro. Combines multiple configuration
|
|
5
5
|
* sources with a clear precedence order:
|
|
6
6
|
*
|
|
7
7
|
* 1. CLI flags (--model, --config key=value, --profile)
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACN,gCAAgC,EAChC,qCAAqC,EACrC,4BAA4B,EAC5B,UAAU,EACV,0BAA0B,EAC1B,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,4BAA4B,EAC5B,mCAAmC,EACnC,mCAAmC,EACnC,kCAAkC,EAClC,kCAAkC,GAqBlC,MAAM,kBAAkB,CAAC","sourcesContent":["/**\n * Configuration Module\n *\n * Unified configuration access for
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACN,gCAAgC,EAChC,qCAAqC,EACrC,4BAA4B,EAC5B,UAAU,EACV,0BAA0B,EAC1B,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,4BAA4B,EAC5B,mCAAmC,EACnC,mCAAmC,EACnC,kCAAkC,EAClC,kCAAkC,GAqBlC,MAAM,kBAAkB,CAAC","sourcesContent":["/**\n * Configuration Module\n *\n * Unified configuration access for Maestro. Combines multiple configuration\n * sources with a clear precedence order:\n *\n * 1. CLI flags (--model, --config key=value, --profile)\n * 2. Environment variables (MAESTRO_*)\n * 3. Active TOML profile settings\n * 4. Project config.toml (.maestro/config.toml)\n * 5. Global config.toml (~/.maestro/config.toml)\n * 6. Built-in defaults\n */\n\nexport {\n\taddConfiguredPackageSpecToConfig,\n\tremoveConfiguredPackageSpecFromConfig,\n\tgetWritablePackageConfigPath,\n\tloadConfig,\n\tloadConfiguredPackageSpecs,\n\tclearConfigCache,\n\tgetAvailableProfiles,\n\tgetConfigSummary,\n\tparseCliOverride,\n\tapplyCliOverride,\n\tDEFAULT_CONFIG,\n\tloadPromptProjectDocManifest,\n\tresolveLoadedAppendSystemPromptPath,\n\tresolveProjectDocCandidateFilenames,\n\tresolveProjectDocGlobalDirectories,\n\tresolvePromptLoadedProjectDocPaths,\n\ttype ComposerConfig,\n\ttype ConfiguredPackageSpec,\n\ttype WritablePackageScope,\n\ttype ApprovalPolicy,\n\ttype SandboxMode,\n\ttype ReasoningEffort,\n\ttype ModelProviderConfig,\n\ttype McpServerConfig,\n\ttype FeaturesConfig,\n\ttype ToolsConfig,\n\ttype OtelConfig,\n\ttype HistoryConfig,\n\ttype TuiConfig,\n\ttype ShellEnvironmentPolicy,\n\ttype SandboxWorkspaceWriteConfig,\n\ttype ProfileConfig,\n\ttype PromptProjectDocManifest,\n\ttype PromptProjectDocManifestEntry,\n\ttype PromptProjectDocDiagnostic,\n\ttype PromptProjectDocSourceKind,\n} from \"./toml-config.js\";\n"]}
|
|
@@ -215,8 +215,8 @@ const validateConfig = compileTypeboxSchema(ComposerConfigSchema);
|
|
|
215
215
|
// Default Configuration
|
|
216
216
|
// ─────────────────────────────────────────────────────────────
|
|
217
217
|
export const DEFAULT_CONFIG = {
|
|
218
|
-
model: "
|
|
219
|
-
model_provider: "
|
|
218
|
+
model: "gpt-5.5",
|
|
219
|
+
model_provider: "openai-codex",
|
|
220
220
|
approval_policy: "untrusted",
|
|
221
221
|
sandbox_mode: "workspace-write",
|
|
222
222
|
model_reasoning_effort: "medium",
|
|
@@ -860,7 +860,7 @@ export function getConfigSummary(workspaceDir) {
|
|
|
860
860
|
lines.push("Current Configuration");
|
|
861
861
|
lines.push("─".repeat(40));
|
|
862
862
|
lines.push(`Model: ${config.model ?? "default"}`);
|
|
863
|
-
lines.push(`Provider: ${config.model_provider ?? "
|
|
863
|
+
lines.push(`Provider: ${config.model_provider ?? "openai-codex"}`);
|
|
864
864
|
lines.push(`Approval Policy: ${config.approval_policy ?? "untrusted"}`);
|
|
865
865
|
lines.push(`Sandbox Mode: ${config.sandbox_mode ?? "workspace-write"}`);
|
|
866
866
|
if (config.profile) {
|