crewly 1.0.7 → 1.0.10
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/LICENSE +1 -1
- package/README.md +50 -3
- package/config/constants.ts +59 -0
- package/config/index.ts +2 -0
- package/config/roles/architect/prompt.md +17 -5
- package/config/roles/backend-developer/prompt.md +35 -5
- package/config/roles/designer/prompt.md +17 -5
- package/config/roles/developer/prompt.md +43 -9
- package/config/roles/frontend-developer/prompt.md +35 -5
- package/config/roles/fullstack-dev/prompt.md +35 -5
- package/config/roles/generalist/prompt.md +18 -5
- package/config/roles/orchestrator/prompt.md +126 -3
- package/config/roles/product-manager/prompt.md +24 -9
- package/config/roles/qa/prompt.md +35 -5
- package/config/roles/qa-engineer/prompt.md +35 -5
- package/config/roles/sales/prompt.md +17 -5
- package/config/roles/support/prompt.md +17 -5
- package/config/roles/tpm/prompt.md +17 -5
- package/config/skills/agent/_common/lib.sh +4 -0
- package/config/skills/agent/core/accept-task/execute.sh +21 -0
- package/config/skills/agent/core/accept-task/instructions.md +20 -0
- package/config/skills/agent/core/accept-task/skill.json +20 -0
- package/config/skills/agent/core/block-task/execute.sh +26 -0
- package/config/skills/agent/core/block-task/instructions.md +22 -0
- package/config/skills/agent/core/block-task/skill.json +20 -0
- package/config/skills/agent/core/check-quality-gates/execute.sh +20 -0
- package/config/skills/agent/core/check-quality-gates/instructions.md +23 -0
- package/config/skills/agent/core/check-quality-gates/skill.json +20 -0
- package/config/skills/agent/core/complete-task/execute.sh +29 -0
- package/config/skills/agent/core/complete-task/instructions.md +53 -0
- package/config/skills/agent/core/complete-task/skill.json +20 -0
- package/config/skills/agent/core/get-my-context/execute.sh +23 -0
- package/config/skills/agent/core/get-my-context/instructions.md +21 -0
- package/config/skills/agent/core/get-my-context/skill.json +20 -0
- package/config/skills/agent/core/get-sops/execute.sh +24 -0
- package/config/skills/agent/core/get-sops/instructions.md +21 -0
- package/config/skills/agent/core/get-sops/skill.json +20 -0
- package/config/skills/agent/core/get-team-status/execute.sh +8 -0
- package/config/skills/agent/core/get-team-status/instructions.md +17 -0
- package/config/skills/agent/core/get-team-status/skill.json +20 -0
- package/config/skills/agent/core/heartbeat/execute.sh +22 -0
- package/config/skills/agent/core/heartbeat/instructions.md +23 -0
- package/config/skills/agent/core/heartbeat/skill.json +20 -0
- package/config/skills/agent/core/manage-knowledge/execute.sh +60 -0
- package/config/skills/agent/core/manage-knowledge/instructions.md +46 -0
- package/config/skills/agent/core/marketplace-search/execute.sh +77 -0
- package/config/skills/agent/core/marketplace-search/instructions.md +59 -0
- package/config/skills/agent/core/marketplace-search/skill.json +20 -0
- package/config/skills/agent/core/query-knowledge/execute.sh +30 -0
- package/config/skills/agent/core/query-knowledge/instructions.md +47 -0
- package/config/skills/agent/core/query-knowledge/skill.json +20 -0
- package/config/skills/agent/core/read-task/execute.sh +15 -0
- package/config/skills/agent/core/read-task/instructions.md +19 -0
- package/config/skills/agent/core/read-task/skill.json +20 -0
- package/config/skills/agent/core/recall/execute.sh +24 -0
- package/config/skills/agent/core/recall/instructions.md +23 -0
- package/config/skills/agent/core/recall/skill.json +20 -0
- package/config/skills/agent/core/record-learning/execute.sh +29 -0
- package/config/skills/agent/core/record-learning/instructions.md +24 -0
- package/config/skills/agent/core/record-learning/skill.json +20 -0
- package/config/skills/agent/core/register-self/execute.sh +28 -0
- package/config/skills/agent/core/register-self/instructions.md +18 -0
- package/config/skills/agent/core/register-self/skill.json +20 -0
- package/config/skills/agent/core/remember/execute.sh +29 -0
- package/config/skills/agent/core/remember/instructions.md +24 -0
- package/config/skills/agent/core/remember/skill.json +20 -0
- package/config/skills/agent/core/report-progress/execute.sh +28 -0
- package/config/skills/agent/core/report-progress/instructions.md +25 -0
- package/config/skills/agent/core/report-progress/skill.json +20 -0
- package/config/skills/agent/core/report-status/execute.sh +35 -0
- package/config/skills/agent/core/report-status/instructions.md +36 -0
- package/config/skills/agent/core/report-status/skill.json +20 -0
- package/config/skills/agent/core/send-chat-response/execute.sh +26 -0
- package/config/skills/agent/core/send-chat-response/instructions.md +22 -0
- package/config/skills/agent/core/send-chat-response/skill.json +20 -0
- package/config/skills/agent/core/send-message/execute.sh +17 -0
- package/config/skills/agent/core/send-message/instructions.md +20 -0
- package/config/skills/agent/core/send-message/skill.json +20 -0
- package/config/skills/orchestrator/complete-task/execute.sh +1 -0
- package/config/skills/orchestrator/delegate-task/execute.sh +1 -1
- package/config/skills/registry.json +850 -0
- package/config/templates/agent-claude-md.md +16 -0
- package/config/templates/research-team.json +22 -0
- package/config/templates/startup-team.json +22 -0
- package/config/templates/web-dev-team.json +22 -0
- package/dist/backend/backend/src/constants.d.ts +127 -1
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +119 -8
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/index.d.ts +1 -1
- package/dist/backend/backend/src/controllers/marketplace/index.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/index.js +1 -1
- package/dist/backend/backend/src/controllers/marketplace/index.js.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts +64 -8
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js +194 -96
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js +7 -2
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +7 -0
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +174 -4
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +34 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/modules/task-management.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/modules/task-management.routes.js +2 -0
- package/dist/backend/backend/src/routes/modules/task-management.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +8 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +89 -17
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts +265 -0
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.js +811 -0
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.js +11 -4
- package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.d.ts +11 -0
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.js +18 -0
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +12 -0
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +51 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.d.ts +6 -0
- package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.d.ts.map +1 -1
- package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.js +10 -0
- package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.js.map +1 -1
- package/dist/backend/backend/src/services/index.d.ts +3 -0
- package/dist/backend/backend/src/services/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/index.js +5 -0
- package/dist/backend/backend/src/services/index.js.map +1 -1
- package/dist/backend/backend/src/services/marketplace/index.d.ts +1 -0
- package/dist/backend/backend/src/services/marketplace/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/marketplace/index.js +2 -0
- package/dist/backend/backend/src/services/marketplace/index.js.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts +10 -9
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js +262 -73
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace-submission.service.d.ts +71 -0
- package/dist/backend/backend/src/services/marketplace/marketplace-submission.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/marketplace/marketplace-submission.service.js +339 -0
- package/dist/backend/backend/src/services/marketplace/marketplace-submission.service.js.map +1 -0
- package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts +4 -15
- package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace.service.js +172 -27
- package/dist/backend/backend/src/services/marketplace/marketplace.service.js.map +1 -1
- package/dist/backend/backend/src/services/mcp-client.d.ts +233 -0
- package/dist/backend/backend/src/services/mcp-client.d.ts.map +1 -0
- package/dist/backend/backend/src/services/mcp-client.js +297 -0
- package/dist/backend/backend/src/services/mcp-client.js.map +1 -0
- package/dist/backend/backend/src/services/mcp-server.d.ts +167 -0
- package/dist/backend/backend/src/services/mcp-server.d.ts.map +1 -0
- package/dist/backend/backend/src/services/mcp-server.js +586 -0
- package/dist/backend/backend/src/services/mcp-server.js.map +1 -0
- package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts +32 -2
- package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/message-queue.service.js +85 -4
- package/dist/backend/backend/src/services/messaging/message-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +10 -0
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js +129 -41
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +31 -0
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
- package/dist/backend/backend/src/services/quality/index.d.ts +1 -0
- package/dist/backend/backend/src/services/quality/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/quality/index.js +1 -0
- package/dist/backend/backend/src/services/quality/index.js.map +1 -1
- package/dist/backend/backend/src/services/quality/task-output-validator.service.d.ts +84 -0
- package/dist/backend/backend/src/services/quality/task-output-validator.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/quality/task-output-validator.service.js +163 -0
- package/dist/backend/backend/src/services/quality/task-output-validator.service.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-adapter.d.ts +254 -0
- package/dist/backend/backend/src/services/runtime-adapter.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-adapter.js +201 -0
- package/dist/backend/backend/src/services/runtime-adapter.js.map +1 -0
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts +19 -0
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +31 -2
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-backend.interface.d.ts +14 -0
- package/dist/backend/backend/src/services/session/session-backend.interface.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-backend.interface.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts +9 -0
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.js +24 -1
- package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts +7 -13
- package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-catalog.service.js +38 -47
- package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -1
- package/dist/backend/backend/src/services/skill/skill.service.d.ts +3 -0
- package/dist/backend/backend/src/services/skill/skill.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/skill/skill.service.js +17 -0
- package/dist/backend/backend/src/services/skill/skill.service.js.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.d.ts +2 -2
- package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.js +2 -0
- package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
- package/dist/backend/backend/src/types/index.d.ts +1 -0
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/index.js +2 -0
- package/dist/backend/backend/src/types/index.js.map +1 -1
- package/dist/backend/backend/src/types/marketplace.types.d.ts +37 -0
- package/dist/backend/backend/src/types/marketplace.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/messaging.types.d.ts +9 -6
- package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/messaging.types.js +10 -3
- package/dist/backend/backend/src/types/messaging.types.js.map +1 -1
- package/dist/backend/backend/src/types/task-output.types.d.ts +78 -0
- package/dist/backend/backend/src/types/task-output.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/task-output.types.js +27 -0
- package/dist/backend/backend/src/types/task-output.types.js.map +1 -0
- package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +13 -0
- package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
- package/dist/backend/backend/src/websocket/terminal.gateway.js +12 -0
- package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
- package/dist/backend/config/constants.d.ts +41 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +57 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/backend/config/index.d.ts +2 -2
- package/dist/backend/config/index.d.ts.map +1 -1
- package/dist/backend/config/index.js +2 -2
- package/dist/backend/config/index.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +817 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -0
- package/dist/cli/backend/src/constants.js +603 -0
- package/dist/cli/backend/src/constants.js.map +1 -0
- package/dist/cli/backend/src/models/Project.d.ts +18 -0
- package/dist/cli/backend/src/models/Project.d.ts.map +1 -0
- package/dist/cli/backend/src/models/Project.js +70 -0
- package/dist/cli/backend/src/models/Project.js.map +1 -0
- package/dist/cli/backend/src/models/ScheduledMessage.d.ts +27 -0
- package/dist/cli/backend/src/models/ScheduledMessage.d.ts.map +1 -0
- package/dist/cli/backend/src/models/ScheduledMessage.js +50 -0
- package/dist/cli/backend/src/models/ScheduledMessage.js.map +1 -0
- package/dist/cli/backend/src/models/Team.d.ts +20 -0
- package/dist/cli/backend/src/models/Team.d.ts.map +1 -0
- package/dist/cli/backend/src/models/Team.js +120 -0
- package/dist/cli/backend/src/models/Team.js.map +1 -0
- package/dist/cli/backend/src/models/Ticket.d.ts +24 -0
- package/dist/cli/backend/src/models/Ticket.d.ts.map +1 -0
- package/dist/cli/backend/src/models/Ticket.js +102 -0
- package/dist/cli/backend/src/models/Ticket.js.map +1 -0
- package/dist/cli/backend/src/models/index.d.ts +5 -0
- package/dist/cli/backend/src/models/index.d.ts.map +1 -0
- package/dist/cli/backend/src/models/index.js +5 -0
- package/dist/cli/backend/src/models/index.js.map +1 -0
- package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.d.ts +40 -0
- package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.d.ts.map +1 -0
- package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.js +74 -0
- package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.js.map +1 -0
- package/dist/cli/backend/src/services/core/config.service.d.ts +91 -0
- package/dist/cli/backend/src/services/core/config.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/core/config.service.js +246 -0
- package/dist/cli/backend/src/services/core/config.service.js.map +1 -0
- package/dist/cli/backend/src/services/core/logger.service.d.ts +70 -0
- package/dist/cli/backend/src/services/core/logger.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/core/logger.service.js +350 -0
- package/dist/cli/backend/src/services/core/logger.service.js.map +1 -0
- package/dist/cli/backend/src/services/core/storage.service.d.ts +269 -0
- package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/core/storage.service.js +1406 -0
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -0
- package/dist/cli/backend/src/services/core/teams-backup.service.d.ts +92 -0
- package/dist/cli/backend/src/services/core/teams-backup.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/core/teams-backup.service.js +120 -0
- package/dist/cli/backend/src/services/core/teams-backup.service.js.map +1 -0
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +125 -0
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +247 -0
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +1 -0
- package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts +153 -0
- package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/knowledge/knowledge.service.js +409 -0
- package/dist/cli/backend/src/services/knowledge/knowledge.service.js.map +1 -0
- package/dist/cli/backend/src/services/mcp-server.d.ts +167 -0
- package/dist/cli/backend/src/services/mcp-server.d.ts.map +1 -0
- package/dist/cli/backend/src/services/mcp-server.js +586 -0
- package/dist/cli/backend/src/services/mcp-server.js.map +1 -0
- package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts +259 -0
- package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/agent-memory.service.js +539 -0
- package/dist/cli/backend/src/services/memory/agent-memory.service.js.map +1 -0
- package/dist/cli/backend/src/services/memory/memory.service.d.ts +306 -0
- package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/memory.service.js +517 -0
- package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -0
- package/dist/cli/backend/src/services/memory/project-memory.service.d.ts +252 -0
- package/dist/cli/backend/src/services/memory/project-memory.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/project-memory.service.js +600 -0
- package/dist/cli/backend/src/services/memory/project-memory.service.js.map +1 -0
- package/dist/cli/backend/src/types/auto-assign.types.d.ts +271 -0
- package/dist/cli/backend/src/types/auto-assign.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/auto-assign.types.js +136 -0
- package/dist/cli/backend/src/types/auto-assign.types.js.map +1 -0
- package/dist/cli/backend/src/types/budget.types.d.ts +217 -0
- package/dist/cli/backend/src/types/budget.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/budget.types.js +82 -0
- package/dist/cli/backend/src/types/budget.types.js.map +1 -0
- package/dist/cli/backend/src/types/chat.types.d.ts +550 -0
- package/dist/cli/backend/src/types/chat.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/chat.types.js +743 -0
- package/dist/cli/backend/src/types/chat.types.js.map +1 -0
- package/dist/cli/backend/src/types/continuation.types.d.ts +237 -0
- package/dist/cli/backend/src/types/continuation.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/continuation.types.js +10 -0
- package/dist/cli/backend/src/types/continuation.types.js.map +1 -0
- package/dist/cli/backend/src/types/index.d.ts +164 -0
- package/dist/cli/backend/src/types/index.d.ts.map +1 -0
- package/dist/cli/backend/src/types/index.js +25 -0
- package/dist/cli/backend/src/types/index.js.map +1 -0
- package/dist/cli/backend/src/types/knowledge.types.d.ts +195 -0
- package/dist/cli/backend/src/types/knowledge.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/knowledge.types.js +38 -0
- package/dist/cli/backend/src/types/knowledge.types.js.map +1 -0
- package/dist/cli/backend/src/types/memory.types.d.ts +587 -0
- package/dist/cli/backend/src/types/memory.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/memory.types.js +47 -0
- package/dist/cli/backend/src/types/memory.types.js.map +1 -0
- package/dist/cli/backend/src/types/quality-gate.types.d.ts +171 -0
- package/dist/cli/backend/src/types/quality-gate.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/quality-gate.types.js +42 -0
- package/dist/cli/backend/src/types/quality-gate.types.js.map +1 -0
- package/dist/cli/backend/src/types/role.types.d.ts +260 -0
- package/dist/cli/backend/src/types/role.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/role.types.js +238 -0
- package/dist/cli/backend/src/types/role.types.js.map +1 -0
- package/dist/cli/backend/src/types/scheduler.types.d.ts +254 -0
- package/dist/cli/backend/src/types/scheduler.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/scheduler.types.js +32 -0
- package/dist/cli/backend/src/types/scheduler.types.js.map +1 -0
- package/dist/cli/backend/src/types/settings.types.d.ts +178 -0
- package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/settings.types.js +206 -0
- package/dist/cli/backend/src/types/settings.types.js.map +1 -0
- package/dist/cli/backend/src/types/skill.types.d.ts +515 -0
- package/dist/cli/backend/src/types/skill.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/skill.types.js +481 -0
- package/dist/cli/backend/src/types/skill.types.js.map +1 -0
- package/dist/cli/backend/src/types/sop.types.d.ts +224 -0
- package/dist/cli/backend/src/types/sop.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/sop.types.js +85 -0
- package/dist/cli/backend/src/types/sop.types.js.map +1 -0
- package/dist/cli/backend/src/types/task-output.types.d.ts +78 -0
- package/dist/cli/backend/src/types/task-output.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/task-output.types.js +27 -0
- package/dist/cli/backend/src/types/task-output.types.js.map +1 -0
- package/dist/cli/backend/src/utils/file-io.utils.d.ts +102 -0
- package/dist/cli/backend/src/utils/file-io.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/file-io.utils.js +214 -0
- package/dist/cli/backend/src/utils/file-io.utils.js.map +1 -0
- package/dist/cli/backend/src/utils/terminal-output.utils.d.ts +54 -0
- package/dist/cli/backend/src/utils/terminal-output.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/terminal-output.utils.js +97 -0
- package/dist/cli/backend/src/utils/terminal-output.utils.js.map +1 -0
- package/dist/cli/cli/src/commands/mcp-server.d.ts +38 -0
- package/dist/cli/cli/src/commands/mcp-server.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/mcp-server.js +49 -0
- package/dist/cli/cli/src/commands/mcp-server.js.map +1 -0
- package/dist/cli/cli/src/commands/onboard.d.ts +72 -8
- package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/onboard.js +306 -33
- package/dist/cli/cli/src/commands/onboard.js.map +1 -1
- package/dist/cli/cli/src/commands/publish.d.ts +35 -0
- package/dist/cli/cli/src/commands/publish.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/publish.js +93 -0
- package/dist/cli/cli/src/commands/publish.js.map +1 -0
- package/dist/cli/cli/src/commands/seed-marketplace.d.ts +28 -0
- package/dist/cli/cli/src/commands/seed-marketplace.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/seed-marketplace.js +148 -0
- package/dist/cli/cli/src/commands/seed-marketplace.js.map +1 -0
- package/dist/cli/cli/src/index.js +23 -0
- package/dist/cli/cli/src/index.js.map +1 -1
- package/dist/cli/cli/src/utils/archive-creator.d.ts +82 -0
- package/dist/cli/cli/src/utils/archive-creator.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/archive-creator.js +105 -0
- package/dist/cli/cli/src/utils/archive-creator.js.map +1 -0
- package/dist/cli/cli/src/utils/marketplace.d.ts +17 -4
- package/dist/cli/cli/src/utils/marketplace.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/marketplace.js +172 -58
- package/dist/cli/cli/src/utils/marketplace.js.map +1 -1
- package/dist/cli/cli/src/utils/package-validator.d.ts +62 -0
- package/dist/cli/cli/src/utils/package-validator.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/package-validator.js +122 -0
- package/dist/cli/cli/src/utils/package-validator.js.map +1 -0
- package/dist/cli/cli/src/utils/templates.d.ts +71 -0
- package/dist/cli/cli/src/utils/templates.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/templates.js +91 -0
- package/dist/cli/cli/src/utils/templates.js.map +1 -0
- package/dist/cli/config/constants.d.ts +41 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +57 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/dist/cli/config/index.d.ts +2 -2
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/config/index.js +2 -2
- package/dist/cli/config/index.js.map +1 -1
- package/frontend/dist/assets/{index-523c7fce.js → index-0a245b0d.js} +247 -247
- package/frontend/dist/assets/{index-4c050f52.css → index-6972eeee.css} +1 -1
- package/frontend/dist/assets/nunito-cyrillic-400-normal-e44e669f.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-400-normal-ff8e8bdd.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-500-normal-2159679b.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-500-normal-61a3b80e.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-600-normal-ac046097.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-600-normal-e61eb97b.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-700-normal-8fcefcc9.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-700-normal-b9684104.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-800-normal-40253beb.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-800-normal-d80292de.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-400-normal-20d73ae7.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-400-normal-d48c37c9.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-500-normal-16197abd.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-500-normal-9dcfe9b5.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-600-normal-d53e9851.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-600-normal-e3d0201f.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-700-normal-5936f6ac.woff2 +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-700-normal-c8c02775.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-800-normal-217b8f51.woff +0 -0
- package/frontend/dist/assets/nunito-cyrillic-ext-800-normal-796cf7bd.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-400-normal-a5906e15.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-400-normal-b51e7635.woff +0 -0
- package/frontend/dist/assets/nunito-latin-500-normal-23ae3083.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-500-normal-be14dbc6.woff +0 -0
- package/frontend/dist/assets/nunito-latin-600-normal-06a9c8b3.woff +0 -0
- package/frontend/dist/assets/nunito-latin-600-normal-45f437de.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-700-normal-ce9107dc.woff +0 -0
- package/frontend/dist/assets/nunito-latin-700-normal-fa89300b.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-800-normal-0ca02785.woff +0 -0
- package/frontend/dist/assets/nunito-latin-800-normal-2363d3ed.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-ext-400-normal-67250a41.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-ext-400-normal-d7e2415e.woff +0 -0
- package/frontend/dist/assets/nunito-latin-ext-500-normal-06f35d1c.woff +0 -0
- package/frontend/dist/assets/nunito-latin-ext-500-normal-343e7adc.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-ext-600-normal-5a8efd17.woff +0 -0
- package/frontend/dist/assets/nunito-latin-ext-600-normal-a7ba5f4f.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-ext-700-normal-0a4e4a02.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-ext-700-normal-0c607961.woff +0 -0
- package/frontend/dist/assets/nunito-latin-ext-800-normal-39f54b55.woff2 +0 -0
- package/frontend/dist/assets/nunito-latin-ext-800-normal-466d0211.woff +0 -0
- package/frontend/dist/assets/nunito-vietnamese-400-normal-2a755616.woff2 +0 -0
- package/frontend/dist/assets/nunito-vietnamese-400-normal-9c01ea9f.woff +0 -0
- package/frontend/dist/assets/nunito-vietnamese-500-normal-452e5e08.woff +0 -0
- package/frontend/dist/assets/nunito-vietnamese-500-normal-dc98d965.woff2 +0 -0
- package/frontend/dist/assets/nunito-vietnamese-600-normal-2ffbb85f.woff +0 -0
- package/frontend/dist/assets/nunito-vietnamese-600-normal-cf95b95d.woff2 +0 -0
- package/frontend/dist/assets/nunito-vietnamese-700-normal-0e29c28c.woff2 +0 -0
- package/frontend/dist/assets/nunito-vietnamese-700-normal-7793b75e.woff +0 -0
- package/frontend/dist/assets/nunito-vietnamese-800-normal-5baf507e.woff +0 -0
- package/frontend/dist/assets/nunito-vietnamese-800-normal-fac6740e.woff2 +0 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +16 -6
- package/config/skills/chrome-browser/instructions.md +0 -42
- package/config/skills/chrome-browser/skill.json +0 -39
- package/config/skills/nano-banana-image/generate.sh +0 -73
- package/config/skills/nano-banana-image/instructions.md +0 -50
- package/config/skills/nano-banana-image/skill.json +0 -39
- package/config/skills/playwright-chrome-browser/instructions.md +0 -95
- package/config/skills/playwright-chrome-browser/skill.json +0 -44
|
@@ -0,0 +1,539 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Memory Service
|
|
3
|
+
*
|
|
4
|
+
* Manages agent-level persistent memory stored in ~/.crewly/agents/{agentId}/
|
|
5
|
+
* Provides storage for role knowledge, preferences, and performance metrics.
|
|
6
|
+
*
|
|
7
|
+
* @module services/memory/agent-memory.service
|
|
8
|
+
*/
|
|
9
|
+
import * as fs from 'fs/promises';
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import { existsSync, mkdirSync } from 'fs';
|
|
12
|
+
import * as os from 'os';
|
|
13
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
14
|
+
import { atomicWriteJson, safeReadJson } from '../../utils/file-io.utils.js';
|
|
15
|
+
import { DEFAULT_AGENT_MEMORY, } from '../../types/memory.types.js';
|
|
16
|
+
import { MEMORY_CONSTANTS, CREWLY_CONSTANTS } from '../../constants.js';
|
|
17
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
18
|
+
/**
|
|
19
|
+
* Service for managing agent-level persistent memory
|
|
20
|
+
*
|
|
21
|
+
* Follows singleton pattern for consistent state management.
|
|
22
|
+
* Uses atomic file writes to prevent data corruption.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const memoryService = AgentMemoryService.getInstance();
|
|
27
|
+
* await memoryService.initializeAgent('dev-001', 'developer');
|
|
28
|
+
* await memoryService.addRoleKnowledge('dev-001', {
|
|
29
|
+
* category: 'best-practice',
|
|
30
|
+
* content: 'Always run tests before committing',
|
|
31
|
+
* confidence: 0.5
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export class AgentMemoryService {
|
|
36
|
+
static instance = null;
|
|
37
|
+
static instanceHome = null;
|
|
38
|
+
basePath;
|
|
39
|
+
logger = LoggerService.getInstance().createComponentLogger('AgentMemoryService');
|
|
40
|
+
// In-memory cache for frequently accessed data
|
|
41
|
+
memoryCache = new Map();
|
|
42
|
+
CACHE_TTL_MS = 30000; // 30 second cache
|
|
43
|
+
/**
|
|
44
|
+
* Creates a new AgentMemoryService instance
|
|
45
|
+
*
|
|
46
|
+
* @param crewlyHome - Optional custom path for crewly home directory
|
|
47
|
+
*/
|
|
48
|
+
constructor(crewlyHome) {
|
|
49
|
+
const homeDir = crewlyHome || path.join(os.homedir(), CREWLY_CONSTANTS.PATHS.CREWLY_HOME);
|
|
50
|
+
this.basePath = path.join(homeDir, MEMORY_CONSTANTS.PATHS.AGENTS_DIR);
|
|
51
|
+
this.ensureBaseDirectory();
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Gets the singleton instance of AgentMemoryService
|
|
55
|
+
*
|
|
56
|
+
* @param crewlyHome - Optional custom path for crewly home directory
|
|
57
|
+
* @returns The singleton AgentMemoryService instance
|
|
58
|
+
*/
|
|
59
|
+
static getInstance(crewlyHome) {
|
|
60
|
+
const homeDir = crewlyHome || path.join(os.homedir(), CREWLY_CONSTANTS.PATHS.CREWLY_HOME);
|
|
61
|
+
if (AgentMemoryService.instance && AgentMemoryService.instanceHome === homeDir) {
|
|
62
|
+
return AgentMemoryService.instance;
|
|
63
|
+
}
|
|
64
|
+
AgentMemoryService.instance = new AgentMemoryService(homeDir);
|
|
65
|
+
AgentMemoryService.instanceHome = homeDir;
|
|
66
|
+
return AgentMemoryService.instance;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Clears the singleton instance (useful for testing)
|
|
70
|
+
*/
|
|
71
|
+
static clearInstance() {
|
|
72
|
+
AgentMemoryService.instance = null;
|
|
73
|
+
AgentMemoryService.instanceHome = null;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Ensures the base agents directory exists
|
|
77
|
+
*/
|
|
78
|
+
ensureBaseDirectory() {
|
|
79
|
+
if (!existsSync(this.basePath)) {
|
|
80
|
+
mkdirSync(this.basePath, { recursive: true });
|
|
81
|
+
this.logger.debug('Created agents memory directory', { path: this.basePath });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Gets the path to an agent's memory directory
|
|
86
|
+
*
|
|
87
|
+
* @param agentId - The agent's unique identifier
|
|
88
|
+
* @returns Absolute path to the agent's memory directory
|
|
89
|
+
*/
|
|
90
|
+
getAgentPath(agentId) {
|
|
91
|
+
return path.join(this.basePath, agentId);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Gets the path to a specific memory file for an agent
|
|
95
|
+
*
|
|
96
|
+
* @param agentId - The agent's unique identifier
|
|
97
|
+
* @param fileName - The memory file name
|
|
98
|
+
* @returns Absolute path to the memory file
|
|
99
|
+
*/
|
|
100
|
+
getFilePath(agentId, fileName) {
|
|
101
|
+
return path.join(this.getAgentPath(agentId), fileName);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Ensures an agent's directory structure exists
|
|
105
|
+
*
|
|
106
|
+
* @param agentId - The agent's unique identifier
|
|
107
|
+
*/
|
|
108
|
+
async ensureAgentDirectory(agentId) {
|
|
109
|
+
const agentPath = this.getAgentPath(agentId);
|
|
110
|
+
await fs.mkdir(agentPath, { recursive: true });
|
|
111
|
+
await fs.mkdir(path.join(agentPath, MEMORY_CONSTANTS.AGENT_FILES.SOP_CUSTOM_DIR), { recursive: true });
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Invalidates the cache for an agent
|
|
115
|
+
*
|
|
116
|
+
* @param agentId - The agent's unique identifier
|
|
117
|
+
*/
|
|
118
|
+
invalidateCache(agentId) {
|
|
119
|
+
this.memoryCache.delete(agentId);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Gets cached agent memory or loads from disk
|
|
123
|
+
*
|
|
124
|
+
* @param agentId - The agent's unique identifier
|
|
125
|
+
* @returns Agent memory or null if not found
|
|
126
|
+
*/
|
|
127
|
+
async getCachedMemory(agentId) {
|
|
128
|
+
const cached = this.memoryCache.get(agentId);
|
|
129
|
+
if (cached && Date.now() - cached.timestamp < this.CACHE_TTL_MS) {
|
|
130
|
+
return cached.data;
|
|
131
|
+
}
|
|
132
|
+
const memory = await this.loadAgentMemory(agentId);
|
|
133
|
+
if (memory) {
|
|
134
|
+
this.memoryCache.set(agentId, { data: memory, timestamp: Date.now() });
|
|
135
|
+
}
|
|
136
|
+
return memory;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Loads agent memory from disk
|
|
140
|
+
*
|
|
141
|
+
* @param agentId - The agent's unique identifier
|
|
142
|
+
* @returns Agent memory or null if not initialized
|
|
143
|
+
*/
|
|
144
|
+
async loadAgentMemory(agentId) {
|
|
145
|
+
const memoryPath = this.getFilePath(agentId, MEMORY_CONSTANTS.AGENT_FILES.MEMORY);
|
|
146
|
+
return safeReadJson(memoryPath, null, this.logger);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Saves agent memory to disk
|
|
150
|
+
*
|
|
151
|
+
* @param agentId - The agent's unique identifier
|
|
152
|
+
* @param memory - Memory data to save
|
|
153
|
+
*/
|
|
154
|
+
async saveAgentMemory(agentId, memory) {
|
|
155
|
+
memory.updatedAt = new Date().toISOString();
|
|
156
|
+
const memoryPath = this.getFilePath(agentId, MEMORY_CONSTANTS.AGENT_FILES.MEMORY);
|
|
157
|
+
await atomicWriteJson(memoryPath, memory);
|
|
158
|
+
this.invalidateCache(agentId);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Finds a similar existing knowledge entry to avoid duplicates
|
|
162
|
+
*
|
|
163
|
+
* @param knowledge - Existing knowledge entries
|
|
164
|
+
* @param content - Content to check for similarity
|
|
165
|
+
* @returns Matching entry or undefined
|
|
166
|
+
*/
|
|
167
|
+
findSimilarEntry(knowledge, content) {
|
|
168
|
+
const normalizedContent = content.toLowerCase().trim();
|
|
169
|
+
return knowledge.find(entry => {
|
|
170
|
+
const normalizedEntry = entry.content.toLowerCase().trim();
|
|
171
|
+
// Simple similarity check - exact match or high substring overlap
|
|
172
|
+
return normalizedEntry === normalizedContent ||
|
|
173
|
+
(normalizedContent.length > 20 &&
|
|
174
|
+
(normalizedEntry.includes(normalizedContent) || normalizedContent.includes(normalizedEntry)));
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Formats agent preferences for context output
|
|
179
|
+
*
|
|
180
|
+
* @param preferences - Agent preferences to format
|
|
181
|
+
* @returns Formatted string
|
|
182
|
+
*/
|
|
183
|
+
formatPreferences(preferences) {
|
|
184
|
+
const lines = [];
|
|
185
|
+
if (preferences.codingStyle) {
|
|
186
|
+
if (preferences.codingStyle.language) {
|
|
187
|
+
lines.push(`- Preferred language: ${preferences.codingStyle.language}`);
|
|
188
|
+
}
|
|
189
|
+
if (preferences.codingStyle.testingFramework) {
|
|
190
|
+
lines.push(`- Testing framework: ${preferences.codingStyle.testingFramework}`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (preferences.communicationStyle) {
|
|
194
|
+
lines.push(`- Communication: ${preferences.communicationStyle.verbosity}`);
|
|
195
|
+
if (preferences.communicationStyle.askBeforeAction) {
|
|
196
|
+
lines.push(`- Ask before taking major actions`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (preferences.workPatterns) {
|
|
200
|
+
if (preferences.workPatterns.breakdownSize) {
|
|
201
|
+
lines.push(`- Task breakdown: ${preferences.workPatterns.breakdownSize} chunks`);
|
|
202
|
+
}
|
|
203
|
+
if (preferences.workPatterns.commitFrequency) {
|
|
204
|
+
lines.push(`- Commit frequency: ${preferences.workPatterns.commitFrequency}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return lines.length > 0 ? lines.join('\n') : 'No specific preferences set';
|
|
208
|
+
}
|
|
209
|
+
// ========================= PUBLIC INTERFACE =========================
|
|
210
|
+
/**
|
|
211
|
+
* Initializes memory storage for a new agent
|
|
212
|
+
*
|
|
213
|
+
* @param agentId - Unique identifier for the agent
|
|
214
|
+
* @param role - Agent's role (e.g., 'developer', 'qa', 'pm')
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* ```typescript
|
|
218
|
+
* await memoryService.initializeAgent('frontend-dev-001', 'frontend-developer');
|
|
219
|
+
* ```
|
|
220
|
+
*/
|
|
221
|
+
async initializeAgent(agentId, role) {
|
|
222
|
+
await this.ensureAgentDirectory(agentId);
|
|
223
|
+
const existingMemory = await this.loadAgentMemory(agentId);
|
|
224
|
+
if (existingMemory) {
|
|
225
|
+
this.logger.debug('Agent already initialized', { agentId });
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
const now = new Date().toISOString();
|
|
229
|
+
const memory = {
|
|
230
|
+
agentId,
|
|
231
|
+
role,
|
|
232
|
+
createdAt: now,
|
|
233
|
+
updatedAt: now,
|
|
234
|
+
...DEFAULT_AGENT_MEMORY,
|
|
235
|
+
};
|
|
236
|
+
await this.saveAgentMemory(agentId, memory);
|
|
237
|
+
this.logger.info('Initialized agent memory', { agentId, role });
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Adds a new role knowledge entry
|
|
241
|
+
*
|
|
242
|
+
* If similar content already exists, reinforces the existing entry instead.
|
|
243
|
+
*
|
|
244
|
+
* @param agentId - Agent's unique identifier
|
|
245
|
+
* @param entry - Knowledge entry (without id and createdAt)
|
|
246
|
+
* @returns ID of the created or reinforced entry
|
|
247
|
+
*
|
|
248
|
+
* @example
|
|
249
|
+
* ```typescript
|
|
250
|
+
* const entryId = await memoryService.addRoleKnowledge('dev-001', {
|
|
251
|
+
* category: 'best-practice',
|
|
252
|
+
* content: 'Always validate user input before processing',
|
|
253
|
+
* confidence: 0.6,
|
|
254
|
+
* learnedFrom: 'TICKET-456'
|
|
255
|
+
* });
|
|
256
|
+
* ```
|
|
257
|
+
*/
|
|
258
|
+
async addRoleKnowledge(agentId, entry) {
|
|
259
|
+
const memory = await this.getCachedMemory(agentId);
|
|
260
|
+
if (!memory) {
|
|
261
|
+
throw new Error(`Agent ${agentId} not initialized`);
|
|
262
|
+
}
|
|
263
|
+
// Check for similar existing entry
|
|
264
|
+
const existing = this.findSimilarEntry(memory.roleKnowledge, entry.content);
|
|
265
|
+
if (existing) {
|
|
266
|
+
await this.reinforceKnowledge(agentId, existing.id);
|
|
267
|
+
this.logger.debug('Reinforced existing knowledge entry', { agentId, entryId: existing.id });
|
|
268
|
+
return existing.id;
|
|
269
|
+
}
|
|
270
|
+
// Enforce storage limits
|
|
271
|
+
if (memory.roleKnowledge.length >= MEMORY_CONSTANTS.LIMITS.MAX_ROLE_KNOWLEDGE_ENTRIES) {
|
|
272
|
+
// Remove lowest confidence entries
|
|
273
|
+
memory.roleKnowledge.sort((a, b) => a.confidence - b.confidence);
|
|
274
|
+
memory.roleKnowledge.shift();
|
|
275
|
+
this.logger.debug('Removed lowest confidence entry to stay within limits', { agentId });
|
|
276
|
+
}
|
|
277
|
+
const newEntry = {
|
|
278
|
+
...entry,
|
|
279
|
+
id: uuidv4(),
|
|
280
|
+
createdAt: new Date().toISOString(),
|
|
281
|
+
confidence: entry.confidence ?? MEMORY_CONSTANTS.DEFAULTS.INITIAL_CONFIDENCE,
|
|
282
|
+
};
|
|
283
|
+
memory.roleKnowledge.push(newEntry);
|
|
284
|
+
await this.saveAgentMemory(agentId, memory);
|
|
285
|
+
this.logger.info('Added role knowledge entry', { agentId, entryId: newEntry.id, category: newEntry.category });
|
|
286
|
+
return newEntry.id;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Gets role knowledge entries, optionally filtered by category
|
|
290
|
+
*
|
|
291
|
+
* @param agentId - Agent's unique identifier
|
|
292
|
+
* @param category - Optional category filter
|
|
293
|
+
* @returns Array of knowledge entries sorted by confidence (descending)
|
|
294
|
+
*/
|
|
295
|
+
async getRoleKnowledge(agentId, category) {
|
|
296
|
+
const memory = await this.getCachedMemory(agentId);
|
|
297
|
+
if (!memory) {
|
|
298
|
+
return [];
|
|
299
|
+
}
|
|
300
|
+
let entries = memory.roleKnowledge;
|
|
301
|
+
if (category) {
|
|
302
|
+
entries = entries.filter(e => e.category === category);
|
|
303
|
+
}
|
|
304
|
+
return entries.sort((a, b) => b.confidence - a.confidence);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Reinforces a knowledge entry by increasing its confidence
|
|
308
|
+
*
|
|
309
|
+
* @param agentId - Agent's unique identifier
|
|
310
|
+
* @param entryId - ID of the entry to reinforce
|
|
311
|
+
*/
|
|
312
|
+
async reinforceKnowledge(agentId, entryId) {
|
|
313
|
+
const memory = await this.getCachedMemory(agentId);
|
|
314
|
+
if (!memory) {
|
|
315
|
+
throw new Error(`Agent ${agentId} not initialized`);
|
|
316
|
+
}
|
|
317
|
+
const entry = memory.roleKnowledge.find(e => e.id === entryId);
|
|
318
|
+
if (!entry) {
|
|
319
|
+
this.logger.warn('Knowledge entry not found for reinforcement', { agentId, entryId });
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
entry.confidence = Math.min(entry.confidence + MEMORY_CONSTANTS.DEFAULTS.CONFIDENCE_REINFORCEMENT, MEMORY_CONSTANTS.DEFAULTS.MAX_CONFIDENCE);
|
|
323
|
+
entry.lastUsed = new Date().toISOString();
|
|
324
|
+
await this.saveAgentMemory(agentId, memory);
|
|
325
|
+
this.logger.debug('Reinforced knowledge entry', { agentId, entryId, newConfidence: entry.confidence });
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Updates agent preferences (partial update supported)
|
|
329
|
+
*
|
|
330
|
+
* @param agentId - Agent's unique identifier
|
|
331
|
+
* @param preferences - Partial preferences to update
|
|
332
|
+
*/
|
|
333
|
+
async updatePreferences(agentId, preferences) {
|
|
334
|
+
const memory = await this.getCachedMemory(agentId);
|
|
335
|
+
if (!memory) {
|
|
336
|
+
throw new Error(`Agent ${agentId} not initialized`);
|
|
337
|
+
}
|
|
338
|
+
// Deep merge preferences - only include defined properties
|
|
339
|
+
if (preferences.codingStyle) {
|
|
340
|
+
memory.preferences.codingStyle = {
|
|
341
|
+
...memory.preferences.codingStyle,
|
|
342
|
+
...preferences.codingStyle,
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
if (preferences.communicationStyle) {
|
|
346
|
+
memory.preferences.communicationStyle = {
|
|
347
|
+
...memory.preferences.communicationStyle,
|
|
348
|
+
...preferences.communicationStyle,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
if (preferences.workPatterns) {
|
|
352
|
+
memory.preferences.workPatterns = {
|
|
353
|
+
...memory.preferences.workPatterns,
|
|
354
|
+
...preferences.workPatterns,
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
if (preferences.custom) {
|
|
358
|
+
memory.preferences.custom = {
|
|
359
|
+
...memory.preferences.custom,
|
|
360
|
+
...preferences.custom,
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
await this.saveAgentMemory(agentId, memory);
|
|
364
|
+
this.logger.info('Updated agent preferences', { agentId });
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Gets the current agent preferences
|
|
368
|
+
*
|
|
369
|
+
* @param agentId - Agent's unique identifier
|
|
370
|
+
* @returns Agent preferences or defaults
|
|
371
|
+
*/
|
|
372
|
+
async getPreferences(agentId) {
|
|
373
|
+
const memory = await this.getCachedMemory(agentId);
|
|
374
|
+
return memory?.preferences ?? DEFAULT_AGENT_MEMORY.preferences;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Records a task completion and updates performance metrics
|
|
378
|
+
*
|
|
379
|
+
* @param agentId - Agent's unique identifier
|
|
380
|
+
* @param metrics - Task completion metrics
|
|
381
|
+
*/
|
|
382
|
+
async recordTaskCompletion(agentId, metrics) {
|
|
383
|
+
const memory = await this.getCachedMemory(agentId);
|
|
384
|
+
if (!memory) {
|
|
385
|
+
throw new Error(`Agent ${agentId} not initialized`);
|
|
386
|
+
}
|
|
387
|
+
const perf = memory.performance;
|
|
388
|
+
const totalTasks = perf.tasksCompleted + 1;
|
|
389
|
+
// Update running averages
|
|
390
|
+
perf.averageIterations = ((perf.averageIterations * perf.tasksCompleted) + metrics.iterations) / totalTasks;
|
|
391
|
+
perf.qualityGatePassRate = ((perf.qualityGatePassRate * perf.tasksCompleted) + (metrics.qualityGatePassed ? 1 : 0)) / totalTasks;
|
|
392
|
+
perf.tasksCompleted = totalTasks;
|
|
393
|
+
if (metrics.completionTimeMinutes !== undefined) {
|
|
394
|
+
const currentAvg = perf.averageCompletionTime ?? 0;
|
|
395
|
+
perf.averageCompletionTime = ((currentAvg * (totalTasks - 1)) + metrics.completionTimeMinutes) / totalTasks;
|
|
396
|
+
}
|
|
397
|
+
// Track task type success rates
|
|
398
|
+
if (metrics.taskType) {
|
|
399
|
+
perf.taskTypeSuccessRates = perf.taskTypeSuccessRates ?? {};
|
|
400
|
+
const currentRate = perf.taskTypeSuccessRates[metrics.taskType] ?? 0;
|
|
401
|
+
const typeCount = Object.keys(perf.taskTypeSuccessRates).filter(t => t === metrics.taskType).length || 1;
|
|
402
|
+
perf.taskTypeSuccessRates[metrics.taskType] = ((currentRate * typeCount) + (metrics.qualityGatePassed ? 1 : 0)) / (typeCount + 1);
|
|
403
|
+
}
|
|
404
|
+
await this.saveAgentMemory(agentId, memory);
|
|
405
|
+
this.logger.info('Recorded task completion', { agentId, totalTasks, metrics });
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Records an error pattern encountered by the agent
|
|
409
|
+
*
|
|
410
|
+
* @param agentId - Agent's unique identifier
|
|
411
|
+
* @param errorPattern - Description of the error pattern
|
|
412
|
+
* @param resolution - Optional known resolution
|
|
413
|
+
*/
|
|
414
|
+
async recordError(agentId, errorPattern, resolution) {
|
|
415
|
+
const memory = await this.getCachedMemory(agentId);
|
|
416
|
+
if (!memory) {
|
|
417
|
+
throw new Error(`Agent ${agentId} not initialized`);
|
|
418
|
+
}
|
|
419
|
+
const existing = memory.performance.commonErrors.find(e => e.pattern.toLowerCase() === errorPattern.toLowerCase());
|
|
420
|
+
if (existing) {
|
|
421
|
+
existing.occurrences++;
|
|
422
|
+
existing.lastOccurred = new Date().toISOString();
|
|
423
|
+
if (resolution) {
|
|
424
|
+
existing.resolution = resolution;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
else {
|
|
428
|
+
memory.performance.commonErrors.push({
|
|
429
|
+
pattern: errorPattern,
|
|
430
|
+
occurrences: 1,
|
|
431
|
+
lastOccurred: new Date().toISOString(),
|
|
432
|
+
resolution,
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
// Keep only top 20 most frequent errors
|
|
436
|
+
memory.performance.commonErrors.sort((a, b) => b.occurrences - a.occurrences);
|
|
437
|
+
memory.performance.commonErrors = memory.performance.commonErrors.slice(0, 20);
|
|
438
|
+
await this.saveAgentMemory(agentId, memory);
|
|
439
|
+
this.logger.debug('Recorded error pattern', { agentId, errorPattern });
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Gets the current performance metrics for an agent
|
|
443
|
+
*
|
|
444
|
+
* @param agentId - Agent's unique identifier
|
|
445
|
+
* @returns Performance metrics
|
|
446
|
+
*/
|
|
447
|
+
async getPerformanceMetrics(agentId) {
|
|
448
|
+
const memory = await this.getCachedMemory(agentId);
|
|
449
|
+
return memory?.performance ?? DEFAULT_AGENT_MEMORY.performance;
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Generates a context string for prompt injection
|
|
453
|
+
*
|
|
454
|
+
* Compiles relevant agent memories, preferences, and performance data
|
|
455
|
+
* into a formatted string suitable for inclusion in agent prompts.
|
|
456
|
+
*
|
|
457
|
+
* @param agentId - Agent's unique identifier
|
|
458
|
+
* @returns Formatted context string
|
|
459
|
+
*/
|
|
460
|
+
async generateAgentContext(agentId) {
|
|
461
|
+
const memory = await this.getCachedMemory(agentId);
|
|
462
|
+
if (!memory) {
|
|
463
|
+
return '';
|
|
464
|
+
}
|
|
465
|
+
const { roleKnowledge, preferences, performance } = memory;
|
|
466
|
+
// Filter to high-confidence knowledge
|
|
467
|
+
const relevantKnowledge = roleKnowledge
|
|
468
|
+
.filter(k => k.confidence >= 0.6)
|
|
469
|
+
.sort((a, b) => b.confidence - a.confidence)
|
|
470
|
+
.slice(0, 20);
|
|
471
|
+
const knowledgeSection = relevantKnowledge.length > 0
|
|
472
|
+
? `## Your Role Knowledge
|
|
473
|
+
|
|
474
|
+
${relevantKnowledge.map(k => `- [${k.category}] ${k.content}`).join('\n')}`
|
|
475
|
+
: '';
|
|
476
|
+
const preferencesSection = `## Your Preferences
|
|
477
|
+
|
|
478
|
+
${this.formatPreferences(preferences)}`;
|
|
479
|
+
const performanceSection = `## Your Performance
|
|
480
|
+
|
|
481
|
+
- Tasks completed: ${performance.tasksCompleted}
|
|
482
|
+
- Average iterations: ${performance.averageIterations.toFixed(1)}
|
|
483
|
+
- Quality gate pass rate: ${(performance.qualityGatePassRate * 100).toFixed(0)}%`;
|
|
484
|
+
const errorsSection = performance.commonErrors.length > 0
|
|
485
|
+
? `
|
|
486
|
+
### Common Errors to Avoid
|
|
487
|
+
${performance.commonErrors.slice(0, 5).map(e => `- ${e.pattern} → ${e.resolution || 'No resolution recorded'}`).join('\n')}`
|
|
488
|
+
: '';
|
|
489
|
+
return [knowledgeSection, preferencesSection, performanceSection + errorsSection]
|
|
490
|
+
.filter(s => s.trim())
|
|
491
|
+
.join('\n\n')
|
|
492
|
+
.trim();
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Prunes stale entries older than specified days
|
|
496
|
+
*
|
|
497
|
+
* Removes low-confidence entries that haven't been used recently.
|
|
498
|
+
*
|
|
499
|
+
* @param agentId - Agent's unique identifier
|
|
500
|
+
* @param olderThanDays - Number of days threshold
|
|
501
|
+
* @returns Number of entries removed
|
|
502
|
+
*/
|
|
503
|
+
async pruneStaleEntries(agentId, olderThanDays) {
|
|
504
|
+
const memory = await this.getCachedMemory(agentId);
|
|
505
|
+
if (!memory) {
|
|
506
|
+
return 0;
|
|
507
|
+
}
|
|
508
|
+
const cutoffDate = new Date();
|
|
509
|
+
cutoffDate.setDate(cutoffDate.getDate() - olderThanDays);
|
|
510
|
+
const cutoffIso = cutoffDate.toISOString();
|
|
511
|
+
const originalCount = memory.roleKnowledge.length;
|
|
512
|
+
// Remove entries that are:
|
|
513
|
+
// 1. Below minimum confidence threshold
|
|
514
|
+
// 2. Haven't been used recently (or never used)
|
|
515
|
+
// 3. Created before the cutoff date
|
|
516
|
+
memory.roleKnowledge = memory.roleKnowledge.filter(entry => {
|
|
517
|
+
const isHighConfidence = entry.confidence >= MEMORY_CONSTANTS.LIMITS.MIN_CONFIDENCE_THRESHOLD;
|
|
518
|
+
const lastUsedDate = entry.lastUsed || entry.createdAt;
|
|
519
|
+
const isRecent = lastUsedDate >= cutoffIso;
|
|
520
|
+
return isHighConfidence || isRecent;
|
|
521
|
+
});
|
|
522
|
+
const removedCount = originalCount - memory.roleKnowledge.length;
|
|
523
|
+
if (removedCount > 0) {
|
|
524
|
+
await this.saveAgentMemory(agentId, memory);
|
|
525
|
+
this.logger.info('Pruned stale knowledge entries', { agentId, removedCount });
|
|
526
|
+
}
|
|
527
|
+
return removedCount;
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Gets the complete agent memory object
|
|
531
|
+
*
|
|
532
|
+
* @param agentId - Agent's unique identifier
|
|
533
|
+
* @returns Full agent memory or null if not initialized
|
|
534
|
+
*/
|
|
535
|
+
async getAgentMemory(agentId) {
|
|
536
|
+
return this.getCachedMemory(agentId);
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
//# sourceMappingURL=agent-memory.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-memory.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/memory/agent-memory.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAML,oBAAoB,GAGrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAkC1D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,kBAAkB;IACrB,MAAM,CAAC,QAAQ,GAA8B,IAAI,CAAC;IAClD,MAAM,CAAC,YAAY,GAAkB,IAAI,CAAC;IAEjC,QAAQ,CAAS;IACjB,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;IAElG,+CAA+C;IAC9B,WAAW,GAA0D,IAAI,GAAG,EAAE,CAAC;IAC/E,YAAY,GAAG,KAAK,CAAC,CAAC,kBAAkB;IAEzD;;;;OAIG;IACH,YAAY,UAAmB;QAC7B,MAAM,OAAO,GAAG,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1F,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACtE,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAC,UAAmB;QAC3C,MAAM,OAAO,GAAG,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAE1F,IAAI,kBAAkB,CAAC,QAAQ,IAAI,kBAAkB,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;YAC/E,OAAO,kBAAkB,CAAC,QAAQ,CAAC;QACrC,CAAC;QAED,kBAAkB,CAAC,QAAQ,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC9D,kBAAkB,CAAC,YAAY,GAAG,OAAO,CAAC;QAE1C,OAAO,kBAAkB,CAAC,QAAQ,CAAC;IACrC,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,aAAa;QACzB,kBAAkB,CAAC,QAAQ,GAAG,IAAI,CAAC;QACnC,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,mBAAmB;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,YAAY,CAAC,OAAe;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;OAMG;IACK,WAAW,CAAC,OAAe,EAAE,QAAgB;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,oBAAoB,CAAC,OAAe;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzG,CAAC;IAED;;;;OAIG;IACK,eAAe,CAAC,OAAe;QACrC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,eAAe,CAAC,OAAe;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAChE,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,eAAe,CAAC,OAAe;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClF,OAAO,YAAY,CAAqB,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACzE,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,eAAe,CAAC,OAAe,EAAE,MAAmB;QAChE,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClF,MAAM,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;;;;;OAMG;IACK,gBAAgB,CAAC,SAA+B,EAAE,OAAe;QACvE,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QACvD,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC5B,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;YAC3D,kEAAkE;YAClE,OAAO,eAAe,KAAK,iBAAiB;gBAC1C,CAAC,iBAAiB,CAAC,MAAM,GAAG,EAAE;oBAC5B,CAAC,eAAe,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACpG,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACK,iBAAiB,CAAC,WAA6B;QACrD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;YAC5B,IAAI,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;gBACrC,KAAK,CAAC,IAAI,CAAC,yBAAyB,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,WAAW,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,wBAAwB,WAAW,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QAED,IAAI,WAAW,CAAC,kBAAkB,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,oBAAoB,WAAW,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAC;YAC3E,IAAI,WAAW,CAAC,kBAAkB,CAAC,eAAe,EAAE,CAAC;gBACnD,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;YAC7B,IAAI,WAAW,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;gBAC3C,KAAK,CAAC,IAAI,CAAC,qBAAqB,WAAW,CAAC,YAAY,CAAC,aAAa,SAAS,CAAC,CAAC;YACnF,CAAC;YACD,IAAI,WAAW,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,uBAAuB,WAAW,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC;IAC7E,CAAC;IAED,uEAAuE;IAEvE;;;;;;;;;;OAUG;IACI,KAAK,CAAC,eAAe,CAAC,OAAe,EAAE,IAAY;QACxD,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAEzC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,MAAM,GAAgB;YAC1B,OAAO;YACP,IAAI;YACJ,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;YACd,GAAG,oBAAoB;SACxB,CAAC;QAEF,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACI,KAAK,CAAC,gBAAgB,CAC3B,OAAe,EACf,KAAmD;QAEnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,kBAAkB,CAAC,CAAC;QACtD,CAAC;QAED,mCAAmC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5E,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5F,OAAO,QAAQ,CAAC,EAAE,CAAC;QACrB,CAAC;QAED,yBAAyB;QACzB,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC;YACtF,mCAAmC;YACnC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;YACjE,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uDAAuD,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,QAAQ,GAAuB;YACnC,GAAG,KAAK;YACR,EAAE,EAAE,MAAM,EAAE;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,gBAAgB,CAAC,QAAQ,CAAC,kBAAkB;SAC7E,CAAC;QAEF,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE/G,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,gBAAgB,CAAC,OAAe,EAAE,QAAgC;QAC7E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;QACnC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,kBAAkB,CAAC,OAAe,EAAE,OAAe;QAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,kBAAkB,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YACtF,OAAO;QACT,CAAC;QAED,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,KAAK,CAAC,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,wBAAwB,EACrE,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CACzC,CAAC;QACF,KAAK,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE1C,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IACzG,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,iBAAiB,CAAC,OAAe,EAAE,WAAsC;QACpF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,kBAAkB,CAAC,CAAC;QACtD,CAAC;QAED,2DAA2D;QAC3D,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;YAC5B,MAAM,CAAC,WAAW,CAAC,WAAW,GAAG;gBAC/B,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW;gBACjC,GAAG,WAAW,CAAC,WAAW;aAC3B,CAAC;QACJ,CAAC;QACD,IAAI,WAAW,CAAC,kBAAkB,EAAE,CAAC;YACnC,MAAM,CAAC,WAAW,CAAC,kBAAkB,GAAG;gBACtC,GAAG,MAAM,CAAC,WAAW,CAAC,kBAAkB;gBACxC,GAAG,WAAW,CAAC,kBAAkB;aACc,CAAC;QACpD,CAAC;QACD,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;YAC7B,MAAM,CAAC,WAAW,CAAC,YAAY,GAAG;gBAChC,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY;gBAClC,GAAG,WAAW,CAAC,YAAY;aAC5B,CAAC;QACJ,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG;gBAC1B,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM;gBAC5B,GAAG,WAAW,CAAC,MAAM;aACtB,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,cAAc,CAAC,OAAe;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,MAAM,EAAE,WAAW,IAAI,oBAAoB,CAAC,WAAW,CAAC;IACjE,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,oBAAoB,CAAC,OAAe,EAAE,OAA8B;QAC/E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,kBAAkB,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAE3C,0BAA0B;QAC1B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;QAC5G,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;QACjI,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;QAEjC,IAAI,OAAO,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;YAChD,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC,GAAG,UAAU,CAAC;QAC9G,CAAC;QAED,gCAAgC;QAChC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC;YAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YACzG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QACpI,CAAC;QAED,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,YAAoB,EAAE,UAAmB;QACjF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,kBAAkB,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CACnD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,CAC5D,CAAC;QAEF,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,WAAW,EAAE,CAAC;YACvB,QAAQ,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACjD,IAAI,UAAU,EAAE,CAAC;gBACf,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;YACnC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC;gBACnC,OAAO,EAAE,YAAY;gBACrB,WAAW,EAAE,CAAC;gBACd,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACtC,UAAU;aACX,CAAC,CAAC;QACL,CAAC;QAED,wCAAwC;QACxC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;QAC9E,MAAM,CAAC,WAAW,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE/E,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;IACzE,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,qBAAqB,CAAC,OAAe;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,MAAM,EAAE,WAAW,IAAI,oBAAoB,CAAC,WAAW,CAAC;IACjE,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,oBAAoB,CAAC,OAAe;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;QAE3D,sCAAsC;QACtC,MAAM,iBAAiB,GAAG,aAAa;aACpC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC;aAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;aAC3C,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEhB,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC;YACnD,CAAC,CAAC;;EAEN,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACrE,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,kBAAkB,GAAG;;EAE7B,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QAEpC,MAAM,kBAAkB,GAAG;;qBAEV,WAAW,CAAC,cAAc;wBACvB,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;4BACpC,CAAC,WAAW,CAAC,mBAAmB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QAE9E,MAAM,aAAa,GAAG,WAAW,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACvD,CAAC,CAAC;;EAEN,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,UAAU,IAAI,wBAAwB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACtH,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,GAAG,aAAa,CAAC;aAC9E,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACrB,IAAI,CAAC,MAAM,CAAC;aACZ,IAAI,EAAE,CAAC;IACZ,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,iBAAiB,CAAC,OAAe,EAAE,aAAqB;QACnE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;QAC9B,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QAE3C,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;QAElD,2BAA2B;QAC3B,wCAAwC;QACxC,gDAAgD;QAChD,oCAAoC;QACpC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACzD,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,IAAI,gBAAgB,CAAC,MAAM,CAAC,wBAAwB,CAAC;YAC9F,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC;YACvD,MAAM,QAAQ,GAAG,YAAY,IAAI,SAAS,CAAC;YAE3C,OAAO,gBAAgB,IAAI,QAAQ,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;QAEjE,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,cAAc,CAAC,OAAe;QACzC,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC"}
|