@resolveio/server-lib 22.3.140 → 22.3.142
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/.nodemon.json +5 -0
- package/.vscode/settings.json +21 -0
- package/AGENTS.md +195 -0
- package/README.md +22 -0
- package/build_package.sh +5 -0
- package/compileDTS.pl +64 -0
- package/docs/ai-assistant-nightly-eval.md +65 -0
- package/docs/ai-assistant-preflight-checklist.md +23 -0
- package/docs/ai-assistant-report-builder-bridge-playbook.md +115 -0
- package/eslint-plugin-custom/index.js +7 -0
- package/eslint-plugin-custom/rules/no-filter-zero-index.js +44 -0
- package/eslint.config.js +103 -0
- package/gulpfile.js +216 -0
- package/methodAndPublicationListGenerator.py +375 -0
- package/mongodbensurers.js +2 -0
- package/mongostop.js +3 -0
- package/package.json +1 -1
- package/scripts/cleanup-bypassed-callmethod-logs.js +616 -0
- package/settings.development.json +25 -0
- package/settings.development.redacted.json +25 -0
- package/src/.env +12 -0
- package/src/ai/assistant-core-heuristics.ts +379 -0
- package/src/ai/resolveio-platform-intelligence-memory-corpus.ts +185 -0
- package/src/ai/resolveio-platform-intelligence-memory.ts +325 -0
- package/{ai/resolveio-platform-intelligence-types.d.ts → src/ai/resolveio-platform-intelligence-types.ts} +20 -15
- package/src/ai/resolveio-platform-intelligence.ts +462 -0
- package/src/client-server-app.ts +12 -0
- package/src/collections/ai-run.collection.ts +117 -0
- package/src/collections/ai-terminal-conversation.collection.ts +91 -0
- package/src/collections/ai-terminal-issue-report.collection.ts +99 -0
- package/src/collections/ai-terminal-message.collection.ts +77 -0
- package/src/collections/app-setting.collection.ts +104 -0
- package/src/collections/app-status.collection.ts +58 -0
- package/src/collections/communication-metric.collection.ts +84 -0
- package/src/collections/counter.collection.ts +56 -0
- package/src/collections/cron-job-history.collection.ts +94 -0
- package/src/collections/cron-job.collection.ts +92 -0
- package/src/collections/customer-notification.collection.ts +131 -0
- package/src/collections/customer-portal-password.collection.ts +76 -0
- package/src/collections/email-history.collection.ts +134 -0
- package/src/collections/email-verified.collection.ts +62 -0
- package/src/collections/file.collection.ts +74 -0
- package/src/collections/flag-update.collection.ts +57 -0
- package/src/collections/flag.collection.ts +57 -0
- package/src/collections/log-method-latency.collection.ts +77 -0
- package/src/collections/log-subscription.collection.ts +80 -0
- package/src/collections/log.collection.ts +93 -0
- package/src/collections/logged-in-users.collection.ts +67 -0
- package/src/collections/monitor-cpu.collection.ts +65 -0
- package/src/collections/monitor-function.collection.ts +74 -0
- package/src/collections/monitor-memory.collection.ts +77 -0
- package/src/collections/monitor-mongo.collection.ts +71 -0
- package/src/collections/notification.collection.ts +57 -0
- package/src/collections/openai-usage-ledger.collection.ts +77 -0
- package/src/collections/report-builder-dashboard-builder.collection.ts +109 -0
- package/src/collections/report-builder-library.collection.ts +89 -0
- package/src/collections/report-builder-report.collection.ts +184 -0
- package/src/collections/user-group.collection.ts +89 -0
- package/src/collections/user-guide.collection.ts +57 -0
- package/src/collections/user.collection.ts +181 -0
- package/src/cron/cron.ts +117 -0
- package/src/fixtures/cron-jobs.ts +95 -0
- package/src/fixtures/init.ts +35 -0
- package/src/http/auth.ts +818 -0
- package/src/http/health.ts +7 -0
- package/src/http/home.ts +90 -0
- package/src/http/slow-query-publication.ts +49 -0
- package/src/index.ts +1 -0
- package/src/managers/ai-assistant-codex-manager.manager.ts +1131 -0
- package/src/managers/ai-run-evidence.manager.ts +264 -0
- package/src/managers/communication-metric.manager.ts +82 -0
- package/src/managers/cron.manager.ts +333 -0
- package/src/managers/customer-notification-content.manager.ts +236 -0
- package/src/managers/diagnostic-manager-bootstrap.ts +165 -0
- package/src/managers/error-auto-fix.manager.ts +2767 -0
- package/src/managers/local-log.manager.ts +113 -0
- package/src/managers/method.manager.ts +1857 -0
- package/src/managers/mongo.manager.ts +4575 -0
- package/src/managers/monitor.manager.ts +507 -0
- package/src/managers/openai-usage-ledger.manager.ts +57 -0
- package/src/managers/slow-query-verifier.manager.ts +3590 -0
- package/src/managers/slow-query.manager.ts +519 -0
- package/src/managers/subscription.manager.ts +3128 -0
- package/src/managers/websocket.manager.ts +746 -0
- package/src/managers/worker-dispatcher.manager.ts +1360 -0
- package/src/managers/worker-server.manager.ts +536 -0
- package/src/methods/accounts.ts +532 -0
- package/src/methods/ai-terminal.ts +23497 -0
- package/src/methods/app-settings.ts +114 -0
- package/src/methods/aws.ts +649 -0
- package/src/methods/collections.ts +641 -0
- package/src/methods/counters.ts +69 -0
- package/src/methods/cron-jobs.ts +2614 -0
- package/src/methods/customer-notifications.ts +458 -0
- package/src/methods/diagnostics.ts +616 -0
- package/src/methods/flag-updates.ts +7 -0
- package/src/methods/flags.ts +7 -0
- package/src/methods/logs.ts +657 -0
- package/src/methods/mongo-explorer.ts +1880 -0
- package/src/methods/monitor.ts +540 -0
- package/src/methods/pdf.ts +1236 -0
- package/src/methods/publications.ts +129 -0
- package/src/methods/report-builder.ts +3300 -0
- package/src/methods/support.ts +335 -0
- package/src/models/ai-run.model.ts +27 -0
- package/src/models/ai-terminal-conversation.model.ts +19 -0
- package/src/models/ai-terminal-issue-report.model.ts +21 -0
- package/src/models/ai-terminal-message.model.ts +24 -0
- package/src/models/app-setting.model.ts +17 -0
- package/{models/app-status.model.d.ts → src/models/app-status.model.ts} +3 -2
- package/{models/billing-logged-in-users.model.d.ts → src/models/billing-logged-in-users.model.ts} +5 -4
- package/src/models/collection-document.model.ts +24 -0
- package/src/models/communication-metric.model.ts +23 -0
- package/{models/counter.model.d.ts → src/models/counter.model.ts} +4 -3
- package/src/models/cron-job-history.model.ts +16 -0
- package/src/models/cron-job.model.ts +15 -0
- package/src/models/customer-notification.model.ts +28 -0
- package/src/models/customer-portal-password.model.ts +12 -0
- package/src/models/dialog.model.ts +25 -0
- package/{models/email-history.model.js → src/models/email-history.model.ts} +36 -4
- package/{models/email-verified.model.d.ts → src/models/email-verified.model.ts} +6 -5
- package/{models/file.model.d.ts → src/models/file.model.ts} +8 -7
- package/{models/flag-update.model.d.ts → src/models/flag-update.model.ts} +4 -3
- package/{models/flag.model.d.ts → src/models/flag.model.ts} +4 -3
- package/src/models/log-method-latency.model.ts +11 -0
- package/{models/log-subscription.model.d.ts → src/models/log-subscription.model.ts} +11 -9
- package/src/models/log.model.ts +19 -0
- package/{models/logged-in-users.model.d.ts → src/models/logged-in-users.model.ts} +6 -5
- package/{models/method-response.model.d.ts → src/models/method-response.model.ts} +7 -6
- package/src/models/method.model.ts +25 -0
- package/{models/monitor-cpu.model.d.ts → src/models/monitor-cpu.model.ts} +9 -7
- package/src/models/monitor-function.model.ts +16 -0
- package/src/models/monitor-memory.model.ts +17 -0
- package/src/models/monitor-mongo.model.ts +15 -0
- package/{models/notification.model.d.ts → src/models/notification.model.ts} +6 -4
- package/src/models/openai-usage-ledger.model.ts +16 -0
- package/src/models/pagination.model.ts +35 -0
- package/src/models/permission.model.ts +14 -0
- package/src/models/report-builder-dashboard-builder.model.ts +29 -0
- package/src/models/report-builder-library.model.ts +20 -0
- package/src/models/report-builder-report.model.ts +136 -0
- package/src/models/report-builder.model.ts +68 -0
- package/src/models/select-data-label.model.ts +9 -0
- package/src/models/server-message.model.ts +31 -0
- package/src/models/slow-query-report.model.ts +23 -0
- package/src/models/subscription.model.ts +73 -0
- package/src/models/support-ticket.model.ts +104 -0
- package/src/models/user-group.model.ts +24 -0
- package/{models/user-guide.model.d.ts → src/models/user-guide.model.ts} +5 -4
- package/src/models/user.model.ts +96 -0
- package/src/private/images/ResolveIO.png +0 -0
- package/src/publications/ai-terminal.ts +73 -0
- package/src/publications/app-settings.ts +25 -0
- package/src/publications/app-status.ts +13 -0
- package/src/publications/cron-jobs.ts +40 -0
- package/src/publications/customer-notifications.ts +101 -0
- package/src/publications/files.ts +33 -0
- package/src/publications/flags-update.ts +19 -0
- package/src/publications/flags.ts +19 -0
- package/src/publications/logs.ts +163 -0
- package/src/publications/notifications.ts +13 -0
- package/src/publications/report-builder-dashboard-builders.ts +39 -0
- package/src/publications/report-builder-libraries.ts +41 -0
- package/src/publications/report-builder-reports.ts +47 -0
- package/src/publications/super-admin.ts +13 -0
- package/src/publications/user-groups.ts +12 -0
- package/src/publications/user-guides.ts +12 -0
- package/src/resolveio-server-app.ts +617 -0
- package/src/server-app.ts +3354 -0
- package/src/services/codex-client.ts +1231 -0
- package/src/services/openai-client.ts +265 -0
- package/src/types/error-report.ts +26 -0
- package/src/types/js-tiktoken.d.ts +11 -0
- package/src/types/slow-query-report.ts +28 -0
- package/src/util/ai-qa-policy.ts +925 -0
- package/src/util/ai-run-evidence-adapters.ts +677 -0
- package/src/util/ai-run-evidence-dashboard.ts +271 -0
- package/src/util/ai-run-evidence-eval.ts +885 -0
- package/src/util/ai-run-evidence.ts +964 -0
- package/src/util/ai-runner-artifacts.ts +586 -0
- package/src/util/ai-runner-manager-autopilot.ts +380 -0
- package/src/util/ai-runner-manager-policy.ts +1740 -0
- package/src/util/ai-runner-qa-auth.ts +821 -0
- package/src/util/ai-runner-qa-tools.ts +3045 -0
- package/src/util/aicoder-runner-v6.ts +875 -0
- package/src/util/common.ts +649 -0
- package/src/util/customer-portal-password.ts +183 -0
- package/src/util/error-reporter.ts +332 -0
- package/src/util/error-tracking.ts +79 -0
- package/src/util/openai-usage-cost.ts +114 -0
- package/src/util/report-builder-unwinds.ts +180 -0
- package/src/util/runner-process-janitor.ts +219 -0
- package/src/util/schema-report-builder.ts +448 -0
- package/src/util/slow-query-reporter.ts +216 -0
- package/src/util/subscription-dependency-context.ts +1096 -0
- package/src/util/support-runner-v5.ts +2065 -0
- package/src/util/tokenizer.ts +38 -0
- package/src/workers/codex-runner.worker.ts +142 -0
- package/start_server.sh +5 -0
- package/tests/ai-assistant-corpus-build.ts +484 -0
- package/tests/ai-assistant-corpus-replay-e2e.ts +774 -0
- package/tests/ai-assistant-data-parity-e2e.ts +1989 -0
- package/tests/ai-assistant-eval-triage.ts +831 -0
- package/tests/ai-assistant-openai-e2e.ts +1061 -0
- package/tests/ai-assistant-openai-git-e2e.ts +155 -0
- package/tests/ai-assistant-preflight-matrix.ts +215 -0
- package/tests/ai-assistant-routing-eval.test.ts +560 -0
- package/tests/ai-assistant-snf-live-eval.ts +975 -0
- package/tests/ai-assistant-utils.test.ts +2968 -0
- package/tests/ai-manager-autopilot-snapshot.test.ts +172 -0
- package/tests/ai-manager-recovery-checkpoint.test.ts +323 -0
- package/tests/ai-run-eval.test.ts +88 -0
- package/tests/ai-run-evidence.test.ts +305 -0
- package/tests/ai-runner-contract.test.ts +488 -0
- package/tests/aicoder-runner-v6.test.ts +268 -0
- package/tests/error-reporter.test.ts +145 -0
- package/tests/method-publication-generator.test.ts +46 -0
- package/tests/report-builder-linking.test.ts +79 -0
- package/tests/resolveio-platform-intelligence.test.ts +352 -0
- package/tests/server-app-cron-owner.test.ts +127 -0
- package/tests/subscription-connect-race.test.ts +158 -0
- package/tests/subscription-dependency-context.test.ts +324 -0
- package/tests/subscription-manager-collection-tracking.test.ts +86 -0
- package/tests/subscription-manager-invalidation.test.ts +86 -0
- package/tests/support-runner-v5.test.ts +417 -0
- package/tsconfig.json +34 -0
- package/ai/assistant-core-heuristics.d.ts +0 -11
- package/ai/assistant-core-heuristics.js +0 -356
- package/ai/assistant-core-heuristics.js.map +0 -1
- package/ai/resolveio-platform-intelligence-memory-corpus.d.ts +0 -3
- package/ai/resolveio-platform-intelligence-memory-corpus.js +0 -214
- package/ai/resolveio-platform-intelligence-memory-corpus.js.map +0 -1
- package/ai/resolveio-platform-intelligence-memory.d.ts +0 -20
- package/ai/resolveio-platform-intelligence-memory.js +0 -341
- package/ai/resolveio-platform-intelligence-memory.js.map +0 -1
- package/ai/resolveio-platform-intelligence-types.js +0 -4
- package/ai/resolveio-platform-intelligence-types.js.map +0 -1
- package/ai/resolveio-platform-intelligence.d.ts +0 -6
- package/ai/resolveio-platform-intelligence.js +0 -463
- package/ai/resolveio-platform-intelligence.js.map +0 -1
- package/client-server-app.d.ts +0 -1
- package/client-server-app.js +0 -68
- package/client-server-app.js.map +0 -1
- package/collections/ai-run.collection.d.ts +0 -3
- package/collections/ai-run.collection.js +0 -170
- package/collections/ai-run.collection.js.map +0 -1
- package/collections/ai-terminal-conversation.collection.d.ts +0 -2
- package/collections/ai-terminal-conversation.collection.js +0 -140
- package/collections/ai-terminal-conversation.collection.js.map +0 -1
- package/collections/ai-terminal-issue-report.collection.d.ts +0 -2
- package/collections/ai-terminal-issue-report.collection.js +0 -148
- package/collections/ai-terminal-issue-report.collection.js.map +0 -1
- package/collections/ai-terminal-message.collection.d.ts +0 -2
- package/collections/ai-terminal-message.collection.js +0 -121
- package/collections/ai-terminal-message.collection.js.map +0 -1
- package/collections/app-setting.collection.d.ts +0 -3
- package/collections/app-setting.collection.js +0 -103
- package/collections/app-setting.collection.js.map +0 -1
- package/collections/app-status.collection.d.ts +0 -3
- package/collections/app-status.collection.js +0 -57
- package/collections/app-status.collection.js.map +0 -1
- package/collections/communication-metric.collection.d.ts +0 -2
- package/collections/communication-metric.collection.js +0 -133
- package/collections/communication-metric.collection.js.map +0 -1
- package/collections/counter.collection.d.ts +0 -3
- package/collections/counter.collection.js +0 -56
- package/collections/counter.collection.js.map +0 -1
- package/collections/cron-job-history.collection.d.ts +0 -3
- package/collections/cron-job-history.collection.js +0 -137
- package/collections/cron-job-history.collection.js.map +0 -1
- package/collections/cron-job.collection.d.ts +0 -3
- package/collections/cron-job.collection.js +0 -92
- package/collections/cron-job.collection.js.map +0 -1
- package/collections/customer-notification.collection.d.ts +0 -3
- package/collections/customer-notification.collection.js +0 -130
- package/collections/customer-notification.collection.js.map +0 -1
- package/collections/customer-portal-password.collection.d.ts +0 -3
- package/collections/customer-portal-password.collection.js +0 -75
- package/collections/customer-portal-password.collection.js.map +0 -1
- package/collections/email-history.collection.d.ts +0 -3
- package/collections/email-history.collection.js +0 -134
- package/collections/email-history.collection.js.map +0 -1
- package/collections/email-verified.collection.d.ts +0 -3
- package/collections/email-verified.collection.js +0 -62
- package/collections/email-verified.collection.js.map +0 -1
- package/collections/file.collection.d.ts +0 -3
- package/collections/file.collection.js +0 -74
- package/collections/file.collection.js.map +0 -1
- package/collections/flag-update.collection.d.ts +0 -3
- package/collections/flag-update.collection.js +0 -57
- package/collections/flag-update.collection.js.map +0 -1
- package/collections/flag.collection.d.ts +0 -3
- package/collections/flag.collection.js +0 -57
- package/collections/flag.collection.js.map +0 -1
- package/collections/log-method-latency.collection.d.ts +0 -3
- package/collections/log-method-latency.collection.js +0 -77
- package/collections/log-method-latency.collection.js.map +0 -1
- package/collections/log-subscription.collection.d.ts +0 -3
- package/collections/log-subscription.collection.js +0 -80
- package/collections/log-subscription.collection.js.map +0 -1
- package/collections/log.collection.d.ts +0 -3
- package/collections/log.collection.js +0 -93
- package/collections/log.collection.js.map +0 -1
- package/collections/logged-in-users.collection.d.ts +0 -3
- package/collections/logged-in-users.collection.js +0 -67
- package/collections/logged-in-users.collection.js.map +0 -1
- package/collections/monitor-cpu.collection.d.ts +0 -3
- package/collections/monitor-cpu.collection.js +0 -65
- package/collections/monitor-cpu.collection.js.map +0 -1
- package/collections/monitor-function.collection.d.ts +0 -3
- package/collections/monitor-function.collection.js +0 -74
- package/collections/monitor-function.collection.js.map +0 -1
- package/collections/monitor-memory.collection.d.ts +0 -3
- package/collections/monitor-memory.collection.js +0 -77
- package/collections/monitor-memory.collection.js.map +0 -1
- package/collections/monitor-mongo.collection.d.ts +0 -3
- package/collections/monitor-mongo.collection.js +0 -71
- package/collections/monitor-mongo.collection.js.map +0 -1
- package/collections/notification.collection.d.ts +0 -3
- package/collections/notification.collection.js +0 -57
- package/collections/notification.collection.js.map +0 -1
- package/collections/openai-usage-ledger.collection.d.ts +0 -2
- package/collections/openai-usage-ledger.collection.js +0 -124
- package/collections/openai-usage-ledger.collection.js.map +0 -1
- package/collections/report-builder-dashboard-builder.collection.d.ts +0 -3
- package/collections/report-builder-dashboard-builder.collection.js +0 -109
- package/collections/report-builder-dashboard-builder.collection.js.map +0 -1
- package/collections/report-builder-library.collection.d.ts +0 -3
- package/collections/report-builder-library.collection.js +0 -87
- package/collections/report-builder-library.collection.js.map +0 -1
- package/collections/report-builder-report.collection.d.ts +0 -4
- package/collections/report-builder-report.collection.js +0 -184
- package/collections/report-builder-report.collection.js.map +0 -1
- package/collections/user-group.collection.d.ts +0 -4
- package/collections/user-group.collection.js +0 -89
- package/collections/user-group.collection.js.map +0 -1
- package/collections/user-guide.collection.d.ts +0 -3
- package/collections/user-guide.collection.js +0 -57
- package/collections/user-guide.collection.js.map +0 -1
- package/collections/user.collection.d.ts +0 -4
- package/collections/user.collection.js +0 -180
- package/collections/user.collection.js.map +0 -1
- package/cron/cron.d.ts +0 -14
- package/cron/cron.js +0 -216
- package/cron/cron.js.map +0 -1
- package/fixtures/cron-jobs.d.ts +0 -1
- package/fixtures/cron-jobs.js +0 -150
- package/fixtures/cron-jobs.js.map +0 -1
- package/fixtures/init.d.ts +0 -1
- package/fixtures/init.js +0 -91
- package/fixtures/init.js.map +0 -1
- package/http/auth.d.ts +0 -2
- package/http/auth.js +0 -951
- package/http/auth.js.map +0 -1
- package/http/health.d.ts +0 -1
- package/http/health.js +0 -11
- package/http/health.js.map +0 -1
- package/http/home.d.ts +0 -1
- package/http/home.js +0 -134
- package/http/home.js.map +0 -1
- package/http/slow-query-publication.d.ts +0 -2
- package/http/slow-query-publication.js +0 -99
- package/http/slow-query-publication.js.map +0 -1
- package/index.d.ts +0 -1
- package/index.js +0 -19
- package/index.js.map +0 -1
- package/managers/ai-assistant-codex-manager.manager.d.ts +0 -67
- package/managers/ai-assistant-codex-manager.manager.js +0 -1113
- package/managers/ai-assistant-codex-manager.manager.js.map +0 -1
- package/managers/ai-run-evidence.manager.d.ts +0 -36
- package/managers/ai-run-evidence.manager.js +0 -377
- package/managers/ai-run-evidence.manager.js.map +0 -1
- package/managers/communication-metric.manager.d.ts +0 -16
- package/managers/communication-metric.manager.js +0 -134
- package/managers/communication-metric.manager.js.map +0 -1
- package/managers/cron.manager.d.ts +0 -20
- package/managers/cron.manager.js +0 -534
- package/managers/cron.manager.js.map +0 -1
- package/managers/customer-notification-content.manager.d.ts +0 -55
- package/managers/customer-notification-content.manager.js +0 -158
- package/managers/customer-notification-content.manager.js.map +0 -1
- package/managers/diagnostic-manager-bootstrap.d.ts +0 -9
- package/managers/diagnostic-manager-bootstrap.js +0 -260
- package/managers/diagnostic-manager-bootstrap.js.map +0 -1
- package/managers/error-auto-fix.manager.d.ts +0 -149
- package/managers/error-auto-fix.manager.js +0 -3064
- package/managers/error-auto-fix.manager.js.map +0 -1
- package/managers/local-log.manager.d.ts +0 -18
- package/managers/local-log.manager.js +0 -88
- package/managers/local-log.manager.js.map +0 -1
- package/managers/method.manager.d.ts +0 -84
- package/managers/method.manager.js +0 -1964
- package/managers/method.manager.js.map +0 -1
- package/managers/mongo.manager.d.ts +0 -224
- package/managers/mongo.manager.js +0 -5000
- package/managers/mongo.manager.js.map +0 -1
- package/managers/monitor.manager.d.ts +0 -70
- package/managers/monitor.manager.js +0 -550
- package/managers/monitor.manager.js.map +0 -1
- package/managers/openai-usage-ledger.manager.d.ts +0 -16
- package/managers/openai-usage-ledger.manager.js +0 -93
- package/managers/openai-usage-ledger.manager.js.map +0 -1
- package/managers/slow-query-verifier.manager.d.ts +0 -144
- package/managers/slow-query-verifier.manager.js +0 -3857
- package/managers/slow-query-verifier.manager.js.map +0 -1
- package/managers/slow-query.manager.d.ts +0 -28
- package/managers/slow-query.manager.js +0 -468
- package/managers/slow-query.manager.js.map +0 -1
- package/managers/subscription.manager.d.ts +0 -169
- package/managers/subscription.manager.js +0 -3434
- package/managers/subscription.manager.js.map +0 -1
- package/managers/websocket.manager.d.ts +0 -73
- package/managers/websocket.manager.js +0 -673
- package/managers/websocket.manager.js.map +0 -1
- package/managers/worker-dispatcher.manager.d.ts +0 -120
- package/managers/worker-dispatcher.manager.js +0 -1266
- package/managers/worker-dispatcher.manager.js.map +0 -1
- package/managers/worker-server.manager.d.ts +0 -35
- package/managers/worker-server.manager.js +0 -582
- package/managers/worker-server.manager.js.map +0 -1
- package/methods/accounts.d.ts +0 -2
- package/methods/accounts.js +0 -624
- package/methods/accounts.js.map +0 -1
- package/methods/ai-terminal.d.ts +0 -337
- package/methods/ai-terminal.js +0 -23166
- package/methods/ai-terminal.js.map +0 -1
- package/methods/app-settings.d.ts +0 -2
- package/methods/app-settings.js +0 -169
- package/methods/app-settings.js.map +0 -1
- package/methods/aws.d.ts +0 -2
- package/methods/aws.js +0 -877
- package/methods/aws.js.map +0 -1
- package/methods/collections.d.ts +0 -2
- package/methods/collections.js +0 -719
- package/methods/collections.js.map +0 -1
- package/methods/counters.d.ts +0 -2
- package/methods/counters.js +0 -113
- package/methods/counters.js.map +0 -1
- package/methods/cron-jobs.d.ts +0 -2
- package/methods/cron-jobs.js +0 -2475
- package/methods/cron-jobs.js.map +0 -1
- package/methods/customer-notifications.d.ts +0 -2
- package/methods/customer-notifications.js +0 -528
- package/methods/customer-notifications.js.map +0 -1
- package/methods/diagnostics.d.ts +0 -2
- package/methods/diagnostics.js +0 -703
- package/methods/diagnostics.js.map +0 -1
- package/methods/flag-updates.d.ts +0 -2
- package/methods/flag-updates.js +0 -8
- package/methods/flag-updates.js.map +0 -1
- package/methods/flags.d.ts +0 -2
- package/methods/flags.js +0 -8
- package/methods/flags.js.map +0 -1
- package/methods/logs.d.ts +0 -2
- package/methods/logs.js +0 -751
- package/methods/logs.js.map +0 -1
- package/methods/mongo-explorer.d.ts +0 -2
- package/methods/mongo-explorer.js +0 -1808
- package/methods/mongo-explorer.js.map +0 -1
- package/methods/monitor.d.ts +0 -2
- package/methods/monitor.js +0 -543
- package/methods/monitor.js.map +0 -1
- package/methods/pdf.d.ts +0 -2
- package/methods/pdf.js +0 -1216
- package/methods/pdf.js.map +0 -1
- package/methods/publications.d.ts +0 -1
- package/methods/publications.js +0 -183
- package/methods/publications.js.map +0 -1
- package/methods/report-builder.d.ts +0 -2
- package/methods/report-builder.js +0 -3094
- package/methods/report-builder.js.map +0 -1
- package/methods/support.d.ts +0 -2
- package/methods/support.js +0 -430
- package/methods/support.js.map +0 -1
- package/models/ai-run.model.d.ts +0 -19
- package/models/ai-run.model.js +0 -4
- package/models/ai-run.model.js.map +0 -1
- package/models/ai-terminal-conversation.model.d.ts +0 -17
- package/models/ai-terminal-conversation.model.js +0 -4
- package/models/ai-terminal-conversation.model.js.map +0 -1
- package/models/ai-terminal-issue-report.model.d.ts +0 -19
- package/models/ai-terminal-issue-report.model.js +0 -4
- package/models/ai-terminal-issue-report.model.js.map +0 -1
- package/models/ai-terminal-message.model.d.ts +0 -22
- package/models/ai-terminal-message.model.js +0 -4
- package/models/ai-terminal-message.model.js.map +0 -1
- package/models/app-setting.model.d.ts +0 -16
- package/models/app-setting.model.js +0 -4
- package/models/app-setting.model.js.map +0 -1
- package/models/app-status.model.js +0 -4
- package/models/app-status.model.js.map +0 -1
- package/models/billing-logged-in-users.model.js +0 -4
- package/models/billing-logged-in-users.model.js.map +0 -1
- package/models/collection-document.model.d.ts +0 -21
- package/models/collection-document.model.js +0 -4
- package/models/collection-document.model.js.map +0 -1
- package/models/communication-metric.model.d.ts +0 -20
- package/models/communication-metric.model.js +0 -4
- package/models/communication-metric.model.js.map +0 -1
- package/models/counter.model.js +0 -4
- package/models/counter.model.js.map +0 -1
- package/models/cron-job-history.model.d.ts +0 -15
- package/models/cron-job-history.model.js +0 -4
- package/models/cron-job-history.model.js.map +0 -1
- package/models/cron-job.model.d.ts +0 -14
- package/models/cron-job.model.js +0 -4
- package/models/cron-job.model.js.map +0 -1
- package/models/customer-notification.model.d.ts +0 -26
- package/models/customer-notification.model.js +0 -4
- package/models/customer-notification.model.js.map +0 -1
- package/models/customer-portal-password.model.d.ts +0 -11
- package/models/customer-portal-password.model.js +0 -4
- package/models/customer-portal-password.model.js.map +0 -1
- package/models/dialog.model.d.ts +0 -23
- package/models/dialog.model.js +0 -4
- package/models/dialog.model.js.map +0 -1
- package/models/email-history.model.d.ts +0 -32
- package/models/email-history.model.js.map +0 -1
- package/models/email-verified.model.js +0 -4
- package/models/email-verified.model.js.map +0 -1
- package/models/file.model.js +0 -4
- package/models/file.model.js.map +0 -1
- package/models/flag-update.model.js +0 -4
- package/models/flag-update.model.js.map +0 -1
- package/models/flag.model.js +0 -4
- package/models/flag.model.js.map +0 -1
- package/models/log-method-latency.model.d.ts +0 -10
- package/models/log-method-latency.model.js +0 -4
- package/models/log-method-latency.model.js.map +0 -1
- package/models/log-subscription.model.js +0 -4
- package/models/log-subscription.model.js.map +0 -1
- package/models/log.model.d.ts +0 -17
- package/models/log.model.js +0 -4
- package/models/log.model.js.map +0 -1
- package/models/logged-in-users.model.js +0 -4
- package/models/logged-in-users.model.js.map +0 -1
- package/models/method-response.model.js +0 -4
- package/models/method-response.model.js.map +0 -1
- package/models/method.model.d.ts +0 -26
- package/models/method.model.js +0 -4
- package/models/method.model.js.map +0 -1
- package/models/monitor-cpu.model.js +0 -4
- package/models/monitor-cpu.model.js.map +0 -1
- package/models/monitor-function.model.d.ts +0 -14
- package/models/monitor-function.model.js +0 -4
- package/models/monitor-function.model.js.map +0 -1
- package/models/monitor-memory.model.d.ts +0 -15
- package/models/monitor-memory.model.js +0 -4
- package/models/monitor-memory.model.js.map +0 -1
- package/models/monitor-mongo.model.d.ts +0 -13
- package/models/monitor-mongo.model.js +0 -4
- package/models/monitor-mongo.model.js.map +0 -1
- package/models/notification.model.js +0 -4
- package/models/notification.model.js.map +0 -1
- package/models/openai-usage-ledger.model.d.ts +0 -15
- package/models/openai-usage-ledger.model.js +0 -4
- package/models/openai-usage-ledger.model.js.map +0 -1
- package/models/pagination.model.d.ts +0 -11
- package/models/pagination.model.js +0 -28
- package/models/pagination.model.js.map +0 -1
- package/models/permission.model.d.ts +0 -12
- package/models/permission.model.js +0 -4
- package/models/permission.model.js.map +0 -1
- package/models/report-builder-dashboard-builder.model.d.ts +0 -25
- package/models/report-builder-dashboard-builder.model.js +0 -4
- package/models/report-builder-dashboard-builder.model.js.map +0 -1
- package/models/report-builder-library.model.d.ts +0 -17
- package/models/report-builder-library.model.js +0 -4
- package/models/report-builder-library.model.js.map +0 -1
- package/models/report-builder-report.model.d.ts +0 -121
- package/models/report-builder-report.model.js +0 -4
- package/models/report-builder-report.model.js.map +0 -1
- package/models/report-builder.model.d.ts +0 -61
- package/models/report-builder.model.js +0 -4
- package/models/report-builder.model.js.map +0 -1
- package/models/select-data-label.model.d.ts +0 -9
- package/models/select-data-label.model.js +0 -4
- package/models/select-data-label.model.js.map +0 -1
- package/models/server-message.model.d.ts +0 -32
- package/models/server-message.model.js +0 -4
- package/models/server-message.model.js.map +0 -1
- package/models/slow-query-report.model.d.ts +0 -23
- package/models/slow-query-report.model.js +0 -4
- package/models/slow-query-report.model.js.map +0 -1
- package/models/subscription.model.d.ts +0 -31
- package/models/subscription.model.js +0 -4
- package/models/subscription.model.js.map +0 -1
- package/models/support-ticket.model.d.ts +0 -87
- package/models/support-ticket.model.js +0 -4
- package/models/support-ticket.model.js.map +0 -1
- package/models/user-group.model.d.ts +0 -20
- package/models/user-group.model.js +0 -4
- package/models/user-group.model.js.map +0 -1
- package/models/user-guide.model.js +0 -4
- package/models/user-guide.model.js.map +0 -1
- package/models/user.model.d.ts +0 -84
- package/models/user.model.js +0 -4
- package/models/user.model.js.map +0 -1
- package/private/images/ResolveIO.png +0 -0
- package/public_api.js +0 -127
- package/public_api.js.map +0 -1
- package/publications/ai-terminal.d.ts +0 -1
- package/publications/ai-terminal.js +0 -122
- package/publications/ai-terminal.js.map +0 -1
- package/publications/app-settings.d.ts +0 -2
- package/publications/app-settings.js +0 -28
- package/publications/app-settings.js.map +0 -1
- package/publications/app-status.d.ts +0 -2
- package/publications/app-status.js +0 -16
- package/publications/app-status.js.map +0 -1
- package/publications/cron-jobs.d.ts +0 -2
- package/publications/cron-jobs.js +0 -88
- package/publications/cron-jobs.js.map +0 -1
- package/publications/customer-notifications.d.ts +0 -2
- package/publications/customer-notifications.js +0 -161
- package/publications/customer-notifications.js.map +0 -1
- package/publications/files.d.ts +0 -2
- package/publications/files.js +0 -36
- package/publications/files.js.map +0 -1
- package/publications/flags-update.d.ts +0 -2
- package/publications/flags-update.js +0 -22
- package/publications/flags-update.js.map +0 -1
- package/publications/flags.d.ts +0 -2
- package/publications/flags.js +0 -22
- package/publications/flags.js.map +0 -1
- package/publications/logs.d.ts +0 -2
- package/publications/logs.js +0 -164
- package/publications/logs.js.map +0 -1
- package/publications/notifications.d.ts +0 -2
- package/publications/notifications.js +0 -16
- package/publications/notifications.js.map +0 -1
- package/publications/report-builder-dashboard-builders.d.ts +0 -2
- package/publications/report-builder-dashboard-builders.js +0 -42
- package/publications/report-builder-dashboard-builders.js.map +0 -1
- package/publications/report-builder-libraries.d.ts +0 -2
- package/publications/report-builder-libraries.js +0 -90
- package/publications/report-builder-libraries.js.map +0 -1
- package/publications/report-builder-reports.d.ts +0 -2
- package/publications/report-builder-reports.js +0 -50
- package/publications/report-builder-reports.js.map +0 -1
- package/publications/super-admin.d.ts +0 -2
- package/publications/super-admin.js +0 -16
- package/publications/super-admin.js.map +0 -1
- package/publications/user-groups.d.ts +0 -1
- package/publications/user-groups.js +0 -16
- package/publications/user-groups.js.map +0 -1
- package/publications/user-guides.d.ts +0 -1
- package/publications/user-guides.js +0 -16
- package/publications/user-guides.js.map +0 -1
- package/resolveio-server-app.d.ts +0 -70
- package/resolveio-server-app.js +0 -801
- package/resolveio-server-app.js.map +0 -1
- package/server-app.d.ts +0 -228
- package/server-app.js +0 -3566
- package/server-app.js.map +0 -1
- package/services/codex-client.d.ts +0 -128
- package/services/codex-client.js +0 -1629
- package/services/codex-client.js.map +0 -1
- package/services/openai-client.d.ts +0 -46
- package/services/openai-client.js +0 -318
- package/services/openai-client.js.map +0 -1
- package/types/error-report.d.ts +0 -25
- package/types/error-report.js +0 -4
- package/types/error-report.js.map +0 -1
- package/types/slow-query-report.d.ts +0 -27
- package/types/slow-query-report.js +0 -6
- package/types/slow-query-report.js.map +0 -1
- package/util/ai-qa-policy.d.ts +0 -124
- package/util/ai-qa-policy.js +0 -736
- package/util/ai-qa-policy.js.map +0 -1
- package/util/ai-run-evidence-adapters.d.ts +0 -33
- package/util/ai-run-evidence-adapters.js +0 -831
- package/util/ai-run-evidence-adapters.js.map +0 -1
- package/util/ai-run-evidence-dashboard.d.ts +0 -67
- package/util/ai-run-evidence-dashboard.js +0 -309
- package/util/ai-run-evidence-dashboard.js.map +0 -1
- package/util/ai-run-evidence-eval.d.ts +0 -86
- package/util/ai-run-evidence-eval.js +0 -854
- package/util/ai-run-evidence-eval.js.map +0 -1
- package/util/ai-run-evidence.d.ts +0 -212
- package/util/ai-run-evidence.js +0 -649
- package/util/ai-run-evidence.js.map +0 -1
- package/util/ai-runner-artifacts.d.ts +0 -82
- package/util/ai-runner-artifacts.js +0 -713
- package/util/ai-runner-artifacts.js.map +0 -1
- package/util/ai-runner-manager-autopilot.d.ts +0 -92
- package/util/ai-runner-manager-autopilot.js +0 -281
- package/util/ai-runner-manager-autopilot.js.map +0 -1
- package/util/ai-runner-manager-policy.d.ts +0 -282
- package/util/ai-runner-manager-policy.js +0 -997
- package/util/ai-runner-manager-policy.js.map +0 -1
- package/util/ai-runner-qa-auth.d.ts +0 -5
- package/util/ai-runner-qa-auth.js +0 -822
- package/util/ai-runner-qa-auth.js.map +0 -1
- package/util/ai-runner-qa-tools.d.ts +0 -26
- package/util/ai-runner-qa-tools.js +0 -3029
- package/util/ai-runner-qa-tools.js.map +0 -1
- package/util/aicoder-runner-v6.d.ts +0 -212
- package/util/aicoder-runner-v6.js +0 -502
- package/util/aicoder-runner-v6.js.map +0 -1
- package/util/common.d.ts +0 -31
- package/util/common.js +0 -683
- package/util/common.js.map +0 -1
- package/util/customer-portal-password.d.ts +0 -13
- package/util/customer-portal-password.js +0 -209
- package/util/customer-portal-password.js.map +0 -1
- package/util/error-reporter.d.ts +0 -52
- package/util/error-reporter.js +0 -326
- package/util/error-reporter.js.map +0 -1
- package/util/error-tracking.d.ts +0 -13
- package/util/error-tracking.js +0 -120
- package/util/error-tracking.js.map +0 -1
- package/util/openai-usage-cost.d.ts +0 -6
- package/util/openai-usage-cost.js +0 -103
- package/util/openai-usage-cost.js.map +0 -1
- package/util/report-builder-unwinds.d.ts +0 -15
- package/util/report-builder-unwinds.js +0 -156
- package/util/report-builder-unwinds.js.map +0 -1
- package/util/runner-process-janitor.d.ts +0 -27
- package/util/runner-process-janitor.js +0 -208
- package/util/runner-process-janitor.js.map +0 -1
- package/util/schema-report-builder.d.ts +0 -6
- package/util/schema-report-builder.js +0 -481
- package/util/schema-report-builder.js.map +0 -1
- package/util/slow-query-reporter.d.ts +0 -28
- package/util/slow-query-reporter.js +0 -226
- package/util/slow-query-reporter.js.map +0 -1
- package/util/subscription-dependency-context.d.ts +0 -34
- package/util/subscription-dependency-context.js +0 -1283
- package/util/subscription-dependency-context.js.map +0 -1
- package/util/support-runner-v5.d.ts +0 -413
- package/util/support-runner-v5.js +0 -1420
- package/util/support-runner-v5.js.map +0 -1
- package/util/tokenizer.d.ts +0 -5
- package/util/tokenizer.js +0 -41
- package/util/tokenizer.js.map +0 -1
- package/workers/codex-runner.worker.d.ts +0 -1
- package/workers/codex-runner.worker.js +0 -192
- package/workers/codex-runner.worker.js.map +0 -1
- /package/{private → src/private}/email-templates/enrollment.html +0 -0
- /package/{private → src/private}/email-templates/forgot-password.html +0 -0
- /package/{private → src/private}/email-templates/support-ticket-deleted.html +0 -0
- /package/{private → src/private}/email-templates/support-ticket-modified.html +0 -0
- /package/{private → src/private}/email-templates/support-ticket.html +0 -0
- /package/{public_api.d.ts → src/public_api.ts} +0 -0
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import {
|
|
2
|
+
buildResolveIOPlatformIntelligenceSystemPrompt,
|
|
3
|
+
getResolveIOPlatformDurableMemoryEntries,
|
|
4
|
+
getResolveIOPlatformIntelligenceRuleLines,
|
|
5
|
+
getResolveIOPlatformIntelligenceRuleSections
|
|
6
|
+
} from '../src/ai/resolveio-platform-intelligence';
|
|
7
|
+
import {
|
|
8
|
+
buildResolveIOPlatformIntelligenceSystemPromptWithSharedMemory,
|
|
9
|
+
hydrateResolveIOPlatformIntelligenceRuleOptions,
|
|
10
|
+
inferResolveIOPlatformIntelligenceMemoryFamilies,
|
|
11
|
+
listResolveIOPlatformIntelligenceMemoryEntries
|
|
12
|
+
} from '../src/ai/resolveio-platform-intelligence-memory';
|
|
13
|
+
|
|
14
|
+
function assert(condition: boolean, message: string) {
|
|
15
|
+
if (!condition) {
|
|
16
|
+
throw new Error(message);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function testCommonRulesIncludeResolveIOContracts() {
|
|
21
|
+
const rules = getResolveIOPlatformIntelligenceRuleLines({ mode: 'builder' });
|
|
22
|
+
assert(
|
|
23
|
+
rules.some((rule) => rule.includes('`_id` as a string')),
|
|
24
|
+
'Expected rules to preserve the ResolveIO string `_id` contract'
|
|
25
|
+
);
|
|
26
|
+
assert(
|
|
27
|
+
rules.some((rule) => rule.includes('`rio-select`')),
|
|
28
|
+
'Expected rules to prefer `rio-select`'
|
|
29
|
+
);
|
|
30
|
+
assert(
|
|
31
|
+
rules.some((rule) => rule.includes('`rio-chart`')),
|
|
32
|
+
'Expected rules to prefer `rio-chart`'
|
|
33
|
+
);
|
|
34
|
+
assert(
|
|
35
|
+
rules.some((rule) => rule.includes('`rio-date-picker`')),
|
|
36
|
+
'Expected rules to prefer `rio-date-picker`'
|
|
37
|
+
);
|
|
38
|
+
assert(
|
|
39
|
+
rules.some((rule) => rule.includes('Do not hand-edit generated Angular socket files')),
|
|
40
|
+
'Expected rules to protect generated methods/publications files'
|
|
41
|
+
);
|
|
42
|
+
assert(
|
|
43
|
+
rules.some((rule) => rule.includes('Never use Mongoose')),
|
|
44
|
+
'Expected rules to reject Mongoose in ResolveIO platform code'
|
|
45
|
+
);
|
|
46
|
+
assert(
|
|
47
|
+
rules.some((rule) => rule.includes('Never use Meteor')),
|
|
48
|
+
'Expected rules to reject Meteor in ResolveIO platform code'
|
|
49
|
+
);
|
|
50
|
+
assert(
|
|
51
|
+
rules.some((rule) => rule.includes('ResolveIO `round` helper')),
|
|
52
|
+
'Expected rules to prefer ResolveIO round helper over Math.round'
|
|
53
|
+
);
|
|
54
|
+
assert(
|
|
55
|
+
rules.some((rule) => rule.includes('Every cited file, symbol, route, collection, workflow, and scoped target must be verified')),
|
|
56
|
+
'Expected rules to require real path and scope verification'
|
|
57
|
+
);
|
|
58
|
+
assert(
|
|
59
|
+
rules.some((rule) => rule.includes('Do not use placeholder or fuzzy path language')),
|
|
60
|
+
'Expected rules to reject placeholder path language'
|
|
61
|
+
);
|
|
62
|
+
assert(
|
|
63
|
+
rules.some((rule) => rule.includes('Map non-technical user wording to internal collections')),
|
|
64
|
+
'Expected rules to require internal collection/workflow inference from user wording'
|
|
65
|
+
);
|
|
66
|
+
assert(
|
|
67
|
+
rules.some((rule) => rule.includes('Do not use `*.versions` collections for ordinary requests')),
|
|
68
|
+
'Expected rules to avoid version collections for ordinary requests'
|
|
69
|
+
);
|
|
70
|
+
assert(
|
|
71
|
+
rules.some((rule) => rule.includes('Company Secrets')),
|
|
72
|
+
'Expected rules to require Company Secrets for external keys and config'
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function testRioSelectRulesPreferOptionsMode() {
|
|
77
|
+
const rules = getResolveIOPlatformIntelligenceRuleLines({ mode: 'support' });
|
|
78
|
+
assert(
|
|
79
|
+
rules.some((rule) => rule.includes('`[options]` pipeline')),
|
|
80
|
+
'Expected rio-select rules to prefer the `[options]` pipeline'
|
|
81
|
+
);
|
|
82
|
+
assert(
|
|
83
|
+
rules.some((rule) => rule.includes('Do not mix `[options]` and projected `<rio-option>`')),
|
|
84
|
+
'Expected rio-select rules to reject mixed mode'
|
|
85
|
+
);
|
|
86
|
+
assert(
|
|
87
|
+
rules.some((rule) => rule.includes('large option sets')),
|
|
88
|
+
'Expected rio-select rules to mention large-option performance guidance'
|
|
89
|
+
);
|
|
90
|
+
assert(
|
|
91
|
+
rules.some((rule) => rule.includes('distinct-backed options')),
|
|
92
|
+
'Expected filter rules to prefer distinct-backed dropdown options'
|
|
93
|
+
);
|
|
94
|
+
assert(
|
|
95
|
+
rules.some((rule) => rule.includes('Do not apply Bootstrap `form-control` directly to `rio-select`')),
|
|
96
|
+
'Expected styling rules to reject form-control on rio-select'
|
|
97
|
+
);
|
|
98
|
+
assert(
|
|
99
|
+
rules.some((rule) => rule.includes('`rio-calendar`')),
|
|
100
|
+
'Expected rules to prefer rio-calendar for scheduling surfaces'
|
|
101
|
+
);
|
|
102
|
+
assert(
|
|
103
|
+
rules.some((rule) => rule.includes('`rio-pagination`')),
|
|
104
|
+
'Expected rules to prefer rio-pagination for paginated navigation'
|
|
105
|
+
);
|
|
106
|
+
assert(
|
|
107
|
+
rules.some((rule) => rule.includes('keep them distinct: fix the failing path first')),
|
|
108
|
+
'Expected rules to keep failing and comparator paths distinct'
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function testBuilderRulesPromoteAppGenerationDiscipline() {
|
|
113
|
+
const rules = getResolveIOPlatformIntelligenceRuleLines({ mode: 'builder' });
|
|
114
|
+
assert(
|
|
115
|
+
rules.some((rule) => rule.includes('standard ResolveIO build flow in order')),
|
|
116
|
+
'Expected builder rules to encode the standard ResolveIO build flow'
|
|
117
|
+
);
|
|
118
|
+
assert(
|
|
119
|
+
rules.some((rule) => rule.includes('Feature modules should normally include module, routing, permission, service')),
|
|
120
|
+
'Expected builder rules to encode expected feature module structure'
|
|
121
|
+
);
|
|
122
|
+
assert(
|
|
123
|
+
rules.some((rule) => rule.includes('operator command center')),
|
|
124
|
+
'Expected builder rules to require a tailored dashboard hub'
|
|
125
|
+
);
|
|
126
|
+
assert(
|
|
127
|
+
rules.some((rule) => rule.includes('assistant-heuristics.json')),
|
|
128
|
+
'Expected builder rules to keep app-level assistant heuristics in sync'
|
|
129
|
+
);
|
|
130
|
+
assert(
|
|
131
|
+
rules.some((rule) => rule.includes('single sign-in entry')),
|
|
132
|
+
'Expected builder rules to preserve default staff login UX'
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function testAssistantDataRulesPromoteSafeReportBuilderUsage() {
|
|
137
|
+
const rules = getResolveIOPlatformIntelligenceRuleLines({ mode: 'assistant' });
|
|
138
|
+
assert(
|
|
139
|
+
rules.some((rule) => rule.includes('read-only ResolveIO data bridge (`REPORT_BUILDER_READ` / `REPORT_BUILDER_AGG`)')),
|
|
140
|
+
'Expected rules to prefer the report-builder data bridge for live data'
|
|
141
|
+
);
|
|
142
|
+
assert(
|
|
143
|
+
rules.some((rule) => rule.includes('Always include a verified `permissionView`')),
|
|
144
|
+
'Expected rules to require verified permissionView for live data queries'
|
|
145
|
+
);
|
|
146
|
+
assert(
|
|
147
|
+
rules.some((rule) => rule.includes('run the smallest safe probe you can')),
|
|
148
|
+
'Expected rules to require probe validation before concluding no data'
|
|
149
|
+
);
|
|
150
|
+
assert(
|
|
151
|
+
rules.some((rule) => rule.includes('summarize first, then show a clean markdown table')),
|
|
152
|
+
'Expected rules to require summary-first table output for live data'
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function testDurableMemoryDefaultsAndFiltering() {
|
|
157
|
+
const defaultEntries = getResolveIOPlatformDurableMemoryEntries({ mode: 'support' });
|
|
158
|
+
assert(
|
|
159
|
+
defaultEntries.some((entry) => entry.family === 'rio-select' && entry.kind === 'accepted_pattern'),
|
|
160
|
+
'Expected default durable memory to include rio-select accepted patterns'
|
|
161
|
+
);
|
|
162
|
+
assert(
|
|
163
|
+
defaultEntries.some((entry) => entry.family === 'shared-library-ownership' && entry.kind === 'rejected_fix_shape'),
|
|
164
|
+
'Expected default durable memory to include shared-library rejected fix shapes'
|
|
165
|
+
);
|
|
166
|
+
assert(
|
|
167
|
+
defaultEntries.some((entry) => entry.family === 'dashboard-hub' && entry.kind === 'contract_violation'),
|
|
168
|
+
'Expected default durable memory to include dashboard-hub contract violations'
|
|
169
|
+
);
|
|
170
|
+
const filteredEntries = getResolveIOPlatformDurableMemoryEntries({
|
|
171
|
+
mode: 'support',
|
|
172
|
+
memoryFamilies: ['rio-select']
|
|
173
|
+
});
|
|
174
|
+
assert(filteredEntries.length > 0, 'Expected filtered durable memory to retain rio-select entries');
|
|
175
|
+
assert(
|
|
176
|
+
filteredEntries.every((entry) => entry.family === 'rio-select' || (entry.tags || []).includes('rio-select')),
|
|
177
|
+
'Expected filtered durable memory to stay scoped to the requested family'
|
|
178
|
+
);
|
|
179
|
+
assert(
|
|
180
|
+
!filteredEntries.some((entry) => entry.family === 'dashboard-hub'),
|
|
181
|
+
'Expected unrelated durable memory families to be excluded by filtering'
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function testPromptCanMergeCustomDurableMemory() {
|
|
186
|
+
const prompt = buildResolveIOPlatformIntelligenceSystemPrompt({
|
|
187
|
+
mode: 'builder',
|
|
188
|
+
outputStyle: 'markdown',
|
|
189
|
+
memoryFamilies: ['rio-select', 'report-builder'],
|
|
190
|
+
durableMemoryEntries: [
|
|
191
|
+
{
|
|
192
|
+
family: 'report-builder',
|
|
193
|
+
kind: 'accepted_pattern',
|
|
194
|
+
summary: 'Prefer verified lookup-aware aggregates when grouped metrics span related collections.'
|
|
195
|
+
}
|
|
196
|
+
]
|
|
197
|
+
});
|
|
198
|
+
assert(prompt.includes('Durable Memory: Accepted Patterns:'), 'Expected durable memory accepted section');
|
|
199
|
+
assert(prompt.includes('rio-select: Accepted pattern:'), 'Expected prompt to include filtered rio-select durable memory');
|
|
200
|
+
assert(
|
|
201
|
+
prompt.includes('report-builder: Accepted pattern: Prefer verified lookup-aware aggregates when grouped metrics span related collections.'),
|
|
202
|
+
'Expected prompt to include caller-supplied durable memory'
|
|
203
|
+
);
|
|
204
|
+
assert(
|
|
205
|
+
!prompt.includes('dashboard-hub: Contract violation:'),
|
|
206
|
+
'Expected family filtering to keep unrelated durable memory out of the prompt'
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function testSharedMemorySelectionInfersRelevantFamiliesFromContext() {
|
|
211
|
+
const families = inferResolveIOPlatformIntelligenceMemoryFamilies('support', [
|
|
212
|
+
'The rio-select uses [options] with optionLabelFn and is showing a stale selected label after current_location changes.',
|
|
213
|
+
'This may belong in resolveio-client-lib rather than the app repo.'
|
|
214
|
+
]);
|
|
215
|
+
assert(families.includes('rio-select'), 'Expected rio-select family to be inferred from context');
|
|
216
|
+
assert(
|
|
217
|
+
families.includes('shared-library-ownership'),
|
|
218
|
+
'Expected shared-library ownership family to be inferred from library-root-cause context'
|
|
219
|
+
);
|
|
220
|
+
const entries = listResolveIOPlatformIntelligenceMemoryEntries({
|
|
221
|
+
mode: 'support',
|
|
222
|
+
contextText: [
|
|
223
|
+
'The rio-select uses [options] with optionLabelFn and is showing a stale selected label after current_location changes.',
|
|
224
|
+
'This may belong in resolveio-client-lib rather than the app repo.'
|
|
225
|
+
],
|
|
226
|
+
limit: 4
|
|
227
|
+
});
|
|
228
|
+
assert(entries.length > 0, 'Expected shared memory selection to return relevant entries');
|
|
229
|
+
assert(
|
|
230
|
+
entries.some((entry) => entry.family === 'rio-select'),
|
|
231
|
+
'Expected shared memory selection to include rio-select entries'
|
|
232
|
+
);
|
|
233
|
+
assert(
|
|
234
|
+
entries.some((entry) => entry.family === 'shared-library-ownership'),
|
|
235
|
+
'Expected shared memory selection to include shared-library ownership entries'
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
function testHydrateRuleOptionsUsesRelevantSharedMemoryInsteadOfWholeCorpus() {
|
|
240
|
+
const hydrated = hydrateResolveIOPlatformIntelligenceRuleOptions(
|
|
241
|
+
{
|
|
242
|
+
mode: 'assistant'
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
contextText: [
|
|
246
|
+
'The issue mentions ObjectId assumptions for _id and a direct edit to angular/app/methods.ts.',
|
|
247
|
+
'We need to keep _id as a string and regenerate generated socket files.'
|
|
248
|
+
],
|
|
249
|
+
limit: 5
|
|
250
|
+
}
|
|
251
|
+
);
|
|
252
|
+
assert(hydrated.includeDefaultDurableMemory === false, 'Expected hydrated options to disable full-corpus default injection');
|
|
253
|
+
const entries = hydrated.durableMemoryEntries || [];
|
|
254
|
+
assert(
|
|
255
|
+
entries.some((entry) => entry.family === 'identifier-contract'),
|
|
256
|
+
'Expected hydrated options to include identifier-contract memory'
|
|
257
|
+
);
|
|
258
|
+
assert(
|
|
259
|
+
entries.some((entry) => entry.family === 'generated-method-publication'),
|
|
260
|
+
'Expected hydrated options to include generated-method-publication memory'
|
|
261
|
+
);
|
|
262
|
+
assert(
|
|
263
|
+
!entries.some((entry) => entry.family === 'dashboard-hub'),
|
|
264
|
+
'Expected unrelated memory families to stay out of the hydrated options'
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
function testSharedPromptBuilderRendersRelevantCodeBackedMemory() {
|
|
269
|
+
const prompt = buildResolveIOPlatformIntelligenceSystemPromptWithSharedMemory(
|
|
270
|
+
{
|
|
271
|
+
mode: 'builder',
|
|
272
|
+
outputStyle: 'markdown'
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
contextText: [
|
|
276
|
+
'This new app feature needs a real dashboard hub and full feature module wiring.',
|
|
277
|
+
'Do not leave placeholder quick actions or dead links in the hub.'
|
|
278
|
+
],
|
|
279
|
+
limit: 4
|
|
280
|
+
}
|
|
281
|
+
);
|
|
282
|
+
assert(prompt.includes('dashboard-hub: Contract violation:'), 'Expected prompt to include relevant dashboard-hub memory');
|
|
283
|
+
assert(
|
|
284
|
+
prompt.includes('feature-module-generation: Accepted pattern:'),
|
|
285
|
+
'Expected prompt to include relevant feature-module-generation memory'
|
|
286
|
+
);
|
|
287
|
+
assert(
|
|
288
|
+
!prompt.includes('rio-select: Accepted pattern:'),
|
|
289
|
+
'Expected unrelated rio-select memory to stay out of the shared-memory prompt'
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
function testPromptBuildsSectionedVerifyFirstGuidance() {
|
|
294
|
+
const prompt = buildResolveIOPlatformIntelligenceSystemPrompt({
|
|
295
|
+
mode: 'assistant',
|
|
296
|
+
outputStyle: 'markdown',
|
|
297
|
+
extraRules: ['Always verify the claimed fix with the most relevant local test or reproduction path before finalizing.']
|
|
298
|
+
});
|
|
299
|
+
assert(prompt.includes('Investigation Loop:'), 'Expected sectioned investigation loop guidance');
|
|
300
|
+
assert(prompt.includes('Data And ID Contracts:'), 'Expected sectioned data contract guidance');
|
|
301
|
+
assert(prompt.includes('Generated Files:'), 'Expected generated file guidance section');
|
|
302
|
+
assert(prompt.includes('Path Grounding And Scope:'), 'Expected path grounding guidance section');
|
|
303
|
+
assert(prompt.includes('Collection And Workflow Inference:'), 'Expected collection inference guidance section');
|
|
304
|
+
assert(prompt.includes('Platform Architecture:'), 'Expected architecture guidance section');
|
|
305
|
+
assert(prompt.includes('Server Implementation:'), 'Expected server implementation guidance section');
|
|
306
|
+
assert(prompt.includes('ResolveIO UI Libraries:'), 'Expected sectioned UI library guidance');
|
|
307
|
+
assert(prompt.includes('App Generation And UX:'), 'Expected app generation guidance section');
|
|
308
|
+
assert(prompt.includes('Auth And Shell:'), 'Expected auth and shell guidance section');
|
|
309
|
+
assert(prompt.includes('Shared Library Ownership:'), 'Expected sectioned shared-library guidance');
|
|
310
|
+
assert(prompt.includes('Live Data And Report Builder:'), 'Expected report builder guidance section');
|
|
311
|
+
assert(prompt.includes('Durable Memory: Accepted Patterns:'), 'Expected durable memory accepted section');
|
|
312
|
+
assert(prompt.includes('Durable Memory: Rejected Fix Shapes:'), 'Expected durable memory rejected section');
|
|
313
|
+
assert(prompt.includes('Durable Memory: Contract Violations:'), 'Expected durable memory contract-violation section');
|
|
314
|
+
assert(prompt.includes('Build an evidence-to-fix chain:'), 'Expected evidence-to-fix guidance to be rendered');
|
|
315
|
+
assert(prompt.includes('Always verify the claimed fix with the most relevant local test or reproduction path before finalizing.'), 'Expected extra rules to be appended');
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
function testSectionsStayDedupedAndModeAware() {
|
|
319
|
+
const sections = getResolveIOPlatformIntelligenceRuleSections({
|
|
320
|
+
mode: 'app_terminal',
|
|
321
|
+
outputStyle: 'plain_english',
|
|
322
|
+
extraRules: ['Respond with the final user-facing outcome clearly.']
|
|
323
|
+
});
|
|
324
|
+
const titles = sections.map((section) => section.title);
|
|
325
|
+
assert(titles.includes('Mode Rules'), 'Expected mode rules section');
|
|
326
|
+
assert(titles.includes('Output Style'), 'Expected output style section');
|
|
327
|
+
assert(
|
|
328
|
+
sections.some((section) => section.title === 'Mode Rules' && section.rules.some((rule) => rule.includes('plain English'))),
|
|
329
|
+
'Expected app terminal mode rules to remain present'
|
|
330
|
+
);
|
|
331
|
+
assert(
|
|
332
|
+
sections.some((section) => section.title === 'Extra Rules' && section.rules.includes('Respond with the final user-facing outcome clearly.')),
|
|
333
|
+
'Expected extra rules section to contain caller-supplied rules'
|
|
334
|
+
);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
function run() {
|
|
338
|
+
testCommonRulesIncludeResolveIOContracts();
|
|
339
|
+
testRioSelectRulesPreferOptionsMode();
|
|
340
|
+
testBuilderRulesPromoteAppGenerationDiscipline();
|
|
341
|
+
testAssistantDataRulesPromoteSafeReportBuilderUsage();
|
|
342
|
+
testDurableMemoryDefaultsAndFiltering();
|
|
343
|
+
testPromptCanMergeCustomDurableMemory();
|
|
344
|
+
testSharedMemorySelectionInfersRelevantFamiliesFromContext();
|
|
345
|
+
testHydrateRuleOptionsUsesRelevantSharedMemoryInsteadOfWholeCorpus();
|
|
346
|
+
testSharedPromptBuilderRendersRelevantCodeBackedMemory();
|
|
347
|
+
testPromptBuildsSectionedVerifyFirstGuidance();
|
|
348
|
+
testSectionsStayDedupedAndModeAware();
|
|
349
|
+
console.log('resolveio platform intelligence tests passed');
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
run();
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { ResolveIOMainServer } from '../src/server-app';
|
|
2
|
+
|
|
3
|
+
function assert(condition: boolean, message: string) {
|
|
4
|
+
if (!condition) {
|
|
5
|
+
throw new Error(message);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const ENV_KEYS = [
|
|
10
|
+
'WORKER_INDEX',
|
|
11
|
+
'NODE_APP_INSTANCE',
|
|
12
|
+
'SERVER_MANAGER_WORKER_INDEX',
|
|
13
|
+
'SERVER_MANAGER_WORKER_INSTANCE',
|
|
14
|
+
'SERVER_MANAGER_NODE_APP_INSTANCE'
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
function withEnv(env: Record<string, string | undefined>, test: () => void) {
|
|
18
|
+
const previous: Record<string, string | undefined> = {};
|
|
19
|
+
for (const key of ENV_KEYS) {
|
|
20
|
+
previous[key] = process.env[key];
|
|
21
|
+
delete process.env[key];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
for (const [key, value] of Object.entries(env)) {
|
|
25
|
+
if (value !== undefined) {
|
|
26
|
+
process.env[key] = value;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
try {
|
|
31
|
+
test();
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
for (const key of ENV_KEYS) {
|
|
35
|
+
delete process.env[key];
|
|
36
|
+
if (previous[key] !== undefined) {
|
|
37
|
+
process.env[key] = previous[key];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function shouldStartCron(): boolean {
|
|
44
|
+
const server = new ResolveIOMainServer() as any;
|
|
45
|
+
return server.shouldStartCronManagerForWorker();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async function testStandaloneNodeReaperAlertsAreThrottled() {
|
|
49
|
+
const server = new ResolveIOMainServer() as any;
|
|
50
|
+
const proc = {
|
|
51
|
+
pid: 12345,
|
|
52
|
+
ppid: 1,
|
|
53
|
+
ageSeconds: 600,
|
|
54
|
+
cpuPct: 99,
|
|
55
|
+
rssKb: 512 * 1024,
|
|
56
|
+
command: 'node',
|
|
57
|
+
args: 'node -e while(true){}'
|
|
58
|
+
};
|
|
59
|
+
const reports: any[] = [];
|
|
60
|
+
|
|
61
|
+
server._standaloneNodeReaperAlertWindowMs = 60 * 60 * 1000;
|
|
62
|
+
server.resolveProcessCwd = () => '/tmp/resolveio-reaper-test';
|
|
63
|
+
server.reportServerError = async (...args: any[]) => {
|
|
64
|
+
reports.push(args);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
await server.reportStandaloneNodeReaperAction(proc, 'orphan_high_cpu_for_2_scans', 'dry-run');
|
|
68
|
+
await server.reportStandaloneNodeReaperAction(proc, 'orphan_high_cpu_for_2_scans', 'dry-run');
|
|
69
|
+
assert(reports.length === 1, 'Expected duplicate dry-run reaper alert to be throttled');
|
|
70
|
+
|
|
71
|
+
await server.reportStandaloneNodeReaperAction(proc, 'orphan_high_cpu_for_2_scans', 'terminated');
|
|
72
|
+
assert(reports.length === 2, 'Expected different reaper action to report independently');
|
|
73
|
+
|
|
74
|
+
const alertKey = `dry-run|${server.resolveStandaloneNodeProcessSignature(proc)}`;
|
|
75
|
+
server._standaloneNodeReaperAlertTimes.set(alertKey, Date.now() - server._standaloneNodeReaperAlertWindowMs - 1);
|
|
76
|
+
await server.reportStandaloneNodeReaperAction(proc, 'orphan_high_cpu_for_2_scans', 'dry-run');
|
|
77
|
+
assert(reports.length === 3, 'Expected reaper alert to report again after throttle window');
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async function run() {
|
|
81
|
+
withEnv({ WORKER_INDEX: '0', NODE_APP_INSTANCE: '0' }, () => {
|
|
82
|
+
assert(shouldStartCron() === true, 'Expected default worker 0 to start cron');
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
withEnv({ WORKER_INDEX: '1', NODE_APP_INSTANCE: '0' }, () => {
|
|
86
|
+
assert(shouldStartCron() === false, 'Expected default non-zero worker to skip cron');
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
withEnv({
|
|
90
|
+
WORKER_INDEX: '0',
|
|
91
|
+
NODE_APP_INSTANCE: '0',
|
|
92
|
+
SERVER_MANAGER_WORKER_INDEX: '0',
|
|
93
|
+
SERVER_MANAGER_WORKER_INSTANCE: '1'
|
|
94
|
+
}, () => {
|
|
95
|
+
assert(shouldStartCron() === false, 'Expected publication worker to skip ResolveIO server-manager cron');
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
withEnv({
|
|
99
|
+
WORKER_INDEX: '0',
|
|
100
|
+
NODE_APP_INSTANCE: '1',
|
|
101
|
+
SERVER_MANAGER_WORKER_INDEX: '0',
|
|
102
|
+
SERVER_MANAGER_WORKER_INSTANCE: '1'
|
|
103
|
+
}, () => {
|
|
104
|
+
assert(shouldStartCron() === true, 'Expected ResolveIO server-manager worker to start cron');
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
withEnv({
|
|
108
|
+
WORKER_INDEX: '0',
|
|
109
|
+
NODE_APP_INSTANCE: '0',
|
|
110
|
+
SERVER_MANAGER_WORKER_INDEX: '0',
|
|
111
|
+
SERVER_MANAGER_WORKER_INSTANCE: '0'
|
|
112
|
+
}, () => {
|
|
113
|
+
assert(shouldStartCron() === true, 'Expected explicit default server-manager owner to preserve cron behavior');
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
await testStandaloneNodeReaperAlertsAreThrottled();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
run()
|
|
120
|
+
.then(() => {
|
|
121
|
+
console.log('server-app-cron-owner.test.ts passed');
|
|
122
|
+
process.exit(0);
|
|
123
|
+
})
|
|
124
|
+
.catch(error => {
|
|
125
|
+
console.error(error);
|
|
126
|
+
process.exit(1);
|
|
127
|
+
});
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { ResolveIOMainServer } from '../src/server-app';
|
|
2
|
+
|
|
3
|
+
function assert(condition: boolean, message: string) {
|
|
4
|
+
if (!condition) {
|
|
5
|
+
throw new Error(message);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function sleep(ms: number) {
|
|
10
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
class FakeWebSocket {
|
|
14
|
+
public readyState = 1;
|
|
15
|
+
public closed = false;
|
|
16
|
+
public sent: any[] = [];
|
|
17
|
+
private _handlers = new Map<string, Function>();
|
|
18
|
+
|
|
19
|
+
on(event: string, handler: Function) {
|
|
20
|
+
this._handlers.set(event, handler);
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
send(data: any, cb?: (error?: Error) => void) {
|
|
25
|
+
this.sent.push(data);
|
|
26
|
+
if (cb) {
|
|
27
|
+
cb();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
ping() {
|
|
32
|
+
// noop
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
close() {
|
|
36
|
+
this.closed = true;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
getHandler(event: string): Function | undefined {
|
|
40
|
+
return this._handlers.get(event);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async function testConnectionHandlerDoesNotBlockOnLoggedInUserInsert() {
|
|
45
|
+
const server = new ResolveIOMainServer();
|
|
46
|
+
const serverAny = server as any;
|
|
47
|
+
|
|
48
|
+
let connectionHandler: ((ws: FakeWebSocket, req: any) => Promise<void>) | null = null;
|
|
49
|
+
let createLoggedInUserCalled = false;
|
|
50
|
+
|
|
51
|
+
let resolveCreateLoggedInUser: () => void = null;
|
|
52
|
+
const createLoggedInUserPromise = new Promise<void>(resolve => {
|
|
53
|
+
resolveCreateLoggedInUser = resolve;
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
serverAny._portHTTP = 8080;
|
|
57
|
+
serverAny._clientHeartbeatInitialDelayMs = 1;
|
|
58
|
+
serverAny._methodManager = {
|
|
59
|
+
getEnableDebug: () => false,
|
|
60
|
+
_methods: {}
|
|
61
|
+
};
|
|
62
|
+
serverAny._subscriptionManager = {
|
|
63
|
+
createLoggedInUser: () => {
|
|
64
|
+
createLoggedInUserCalled = true;
|
|
65
|
+
return createLoggedInUserPromise;
|
|
66
|
+
},
|
|
67
|
+
loggedInLatency: () => {},
|
|
68
|
+
unsubscribeAll: async () => {},
|
|
69
|
+
subscribe: async () => {},
|
|
70
|
+
unsubscribe: () => {}
|
|
71
|
+
};
|
|
72
|
+
serverAny._websocketManager = {
|
|
73
|
+
addWebSocket: () => {},
|
|
74
|
+
getWebSocket: () => null,
|
|
75
|
+
send: () => {}
|
|
76
|
+
};
|
|
77
|
+
serverAny._workerDispatcherManager = {
|
|
78
|
+
addWorker: () => {},
|
|
79
|
+
disconnectWorker: () => {},
|
|
80
|
+
sendWorkerPayload: () => {},
|
|
81
|
+
handleWorkerMessage: () => {}
|
|
82
|
+
};
|
|
83
|
+
serverAny._clientRoutes = [];
|
|
84
|
+
serverAny.publicProgram = false;
|
|
85
|
+
serverAny.LOGGER = 'ERROR';
|
|
86
|
+
serverAny.triggerClientHeartbeat = async () => {};
|
|
87
|
+
serverAny.unsubscribeWS = async () => {};
|
|
88
|
+
serverAny._serverHTTP = {
|
|
89
|
+
listen: (_port: number, _host: string, cb: () => void) => cb()
|
|
90
|
+
};
|
|
91
|
+
serverAny._serverWSS = {
|
|
92
|
+
clients: new Set(),
|
|
93
|
+
on: (event: string, handler: any) => {
|
|
94
|
+
if (event === 'connection') {
|
|
95
|
+
connectionHandler = handler;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const originalSetInterval = global.setInterval;
|
|
101
|
+
(global as any).setInterval = (() => 0) as any;
|
|
102
|
+
|
|
103
|
+
try {
|
|
104
|
+
serverAny.listen();
|
|
105
|
+
|
|
106
|
+
assert(typeof connectionHandler === 'function', 'Expected WS connection handler registration');
|
|
107
|
+
|
|
108
|
+
const ws = new FakeWebSocket();
|
|
109
|
+
const req = {
|
|
110
|
+
url: '/',
|
|
111
|
+
id_user: 'user-1',
|
|
112
|
+
user: 'Test User',
|
|
113
|
+
user_readonly: false,
|
|
114
|
+
doc_user: {
|
|
115
|
+
roles: {
|
|
116
|
+
groups: [],
|
|
117
|
+
super_admin: true
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
socket: {
|
|
121
|
+
remoteAddress: '127.0.0.1'
|
|
122
|
+
},
|
|
123
|
+
headers: {
|
|
124
|
+
origin: 'http://localhost:4200'
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const connectionResult = await Promise.race([
|
|
129
|
+
connectionHandler(ws, req).then(() => 'resolved'),
|
|
130
|
+
sleep(100).then(() => 'timed_out')
|
|
131
|
+
]);
|
|
132
|
+
|
|
133
|
+
assert(connectionResult === 'resolved', 'Connection handler blocked on createLoggedInUser');
|
|
134
|
+
await sleep(0);
|
|
135
|
+
assert(createLoggedInUserCalled, 'Expected createLoggedInUser to be called');
|
|
136
|
+
assert(typeof ws.getHandler('message') === 'function', 'Expected message handler registered immediately');
|
|
137
|
+
|
|
138
|
+
const messageHandler = ws.getHandler('message') as (message: any) => Promise<void>;
|
|
139
|
+
await messageHandler('ping');
|
|
140
|
+
assert(ws.sent.includes('pong'), 'Expected ping message to be handled immediately after connection');
|
|
141
|
+
|
|
142
|
+
resolveCreateLoggedInUser();
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
global.setInterval = originalSetInterval;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
async function run() {
|
|
150
|
+
await testConnectionHandlerDoesNotBlockOnLoggedInUserInsert();
|
|
151
|
+
console.log('subscription-connect-race tests completed');
|
|
152
|
+
process.exit(0);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
run().catch(error => {
|
|
156
|
+
console.error(error);
|
|
157
|
+
process.exit(1);
|
|
158
|
+
});
|