@n-dx/web 0.1.0
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 +96 -0
- package/README.md +5 -0
- package/build.js +243 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.js +50 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/landing/index.html +325 -0
- package/dist/landing/landing.d.ts +38 -0
- package/dist/landing/landing.js +299 -0
- package/dist/landing/landing.js.map +1 -0
- package/dist/public.d.ts +55 -0
- package/dist/public.js +51 -0
- package/dist/public.js.map +1 -0
- package/dist/schema/features.d.ts +28 -0
- package/dist/schema/features.js +9 -0
- package/dist/schema/features.js.map +1 -0
- package/dist/schema/v1.d.ts +317 -0
- package/dist/schema/v1.js +3 -0
- package/dist/schema/v1.js.map +1 -0
- package/dist/server/aggregation-cache.d.ts +105 -0
- package/dist/server/aggregation-cache.js +163 -0
- package/dist/server/aggregation-cache.js.map +1 -0
- package/dist/server/concurrent-execution-metrics.d.ts +103 -0
- package/dist/server/concurrent-execution-metrics.js +253 -0
- package/dist/server/concurrent-execution-metrics.js.map +1 -0
- package/dist/server/domain-gateway.d.ts +18 -0
- package/dist/server/domain-gateway.js +19 -0
- package/dist/server/domain-gateway.js.map +1 -0
- package/dist/server/incremental-task-usage.d.ts +92 -0
- package/dist/server/incremental-task-usage.js +251 -0
- package/dist/server/incremental-task-usage.js.map +1 -0
- package/dist/server/index.d.ts +39 -0
- package/dist/server/index.js +36 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/port.d.ts +96 -0
- package/dist/server/port.js +134 -0
- package/dist/server/port.js.map +1 -0
- package/dist/server/pr-markdown-refresh-diagnostics.d.ts +59 -0
- package/dist/server/pr-markdown-refresh-diagnostics.js +429 -0
- package/dist/server/pr-markdown-refresh-diagnostics.js.map +1 -0
- package/dist/server/prd-io.d.ts +40 -0
- package/dist/server/prd-io.js +66 -0
- package/dist/server/prd-io.js.map +1 -0
- package/dist/server/process-memory-tracker.d.ts +79 -0
- package/dist/server/process-memory-tracker.js +194 -0
- package/dist/server/process-memory-tracker.js.map +1 -0
- package/dist/server/register-scheduler.d.ts +53 -0
- package/dist/server/register-scheduler.js +36 -0
- package/dist/server/register-scheduler.js.map +1 -0
- package/dist/server/rex-gateway.d.ts +39 -0
- package/dist/server/rex-gateway.js +47 -0
- package/dist/server/rex-gateway.js.map +1 -0
- package/dist/server/routes-adaptive.d.ts +21 -0
- package/dist/server/routes-adaptive.js +659 -0
- package/dist/server/routes-adaptive.js.map +1 -0
- package/dist/server/routes-config.d.ts +47 -0
- package/dist/server/routes-config.js +222 -0
- package/dist/server/routes-config.js.map +1 -0
- package/dist/server/routes-data.d.ts +14 -0
- package/dist/server/routes-data.js +129 -0
- package/dist/server/routes-data.js.map +1 -0
- package/dist/server/routes-features.d.ts +14 -0
- package/dist/server/routes-features.js +245 -0
- package/dist/server/routes-features.js.map +1 -0
- package/dist/server/routes-hench.d.ts +116 -0
- package/dist/server/routes-hench.js +2016 -0
- package/dist/server/routes-hench.js.map +1 -0
- package/dist/server/routes-integrations.d.ts +23 -0
- package/dist/server/routes-integrations.js +277 -0
- package/dist/server/routes-integrations.js.map +1 -0
- package/dist/server/routes-mcp.d.ts +31 -0
- package/dist/server/routes-mcp.js +175 -0
- package/dist/server/routes-mcp.js.map +1 -0
- package/dist/server/routes-notion.d.ts +23 -0
- package/dist/server/routes-notion.js +723 -0
- package/dist/server/routes-notion.js.map +1 -0
- package/dist/server/routes-project.d.ts +47 -0
- package/dist/server/routes-project.js +128 -0
- package/dist/server/routes-project.js.map +1 -0
- package/dist/server/routes-rex/analysis.d.ts +11 -0
- package/dist/server/routes-rex/analysis.js +583 -0
- package/dist/server/routes-rex/analysis.js.map +1 -0
- package/dist/server/routes-rex/execution.d.ts +37 -0
- package/dist/server/routes-rex/execution.js +355 -0
- package/dist/server/routes-rex/execution.js.map +1 -0
- package/dist/server/routes-rex/health.d.ts +8 -0
- package/dist/server/routes-rex/health.js +136 -0
- package/dist/server/routes-rex/health.js.map +1 -0
- package/dist/server/routes-rex/index.d.ts +35 -0
- package/dist/server/routes-rex/index.js +72 -0
- package/dist/server/routes-rex/index.js.map +1 -0
- package/dist/server/routes-rex/items.d.ts +8 -0
- package/dist/server/routes-rex/items.js +359 -0
- package/dist/server/routes-rex/items.js.map +1 -0
- package/dist/server/routes-rex/prune.d.ts +11 -0
- package/dist/server/routes-rex/prune.js +379 -0
- package/dist/server/routes-rex/prune.js.map +1 -0
- package/dist/server/routes-rex/reads.d.ts +9 -0
- package/dist/server/routes-rex/reads.js +119 -0
- package/dist/server/routes-rex/reads.js.map +1 -0
- package/dist/server/routes-rex/requirements.d.ts +10 -0
- package/dist/server/routes-rex/requirements.js +408 -0
- package/dist/server/routes-rex/requirements.js.map +1 -0
- package/dist/server/routes-rex/shared.d.ts +37 -0
- package/dist/server/routes-rex/shared.js +73 -0
- package/dist/server/routes-rex/shared.js.map +1 -0
- package/dist/server/routes-search.d.ts +26 -0
- package/dist/server/routes-search.js +82 -0
- package/dist/server/routes-search.js.map +1 -0
- package/dist/server/routes-sourcevision.d.ts +18 -0
- package/dist/server/routes-sourcevision.js +444 -0
- package/dist/server/routes-sourcevision.js.map +1 -0
- package/dist/server/routes-static.d.ts +20 -0
- package/dist/server/routes-static.js +168 -0
- package/dist/server/routes-static.js.map +1 -0
- package/dist/server/routes-status.d.ts +58 -0
- package/dist/server/routes-status.js +191 -0
- package/dist/server/routes-status.js.map +1 -0
- package/dist/server/routes-token-usage.d.ts +63 -0
- package/dist/server/routes-token-usage.js +720 -0
- package/dist/server/routes-token-usage.js.map +1 -0
- package/dist/server/routes-validation.d.ts +10 -0
- package/dist/server/routes-validation.js +365 -0
- package/dist/server/routes-validation.js.map +1 -0
- package/dist/server/routes-workflow.d.ts +15 -0
- package/dist/server/routes-workflow.js +498 -0
- package/dist/server/routes-workflow.js.map +1 -0
- package/dist/server/search-index.d.ts +111 -0
- package/dist/server/search-index.js +348 -0
- package/dist/server/search-index.js.map +1 -0
- package/dist/server/shared-types.d.ts +65 -0
- package/dist/server/shared-types.js +31 -0
- package/dist/server/shared-types.js.map +1 -0
- package/dist/server/start.d.ts +68 -0
- package/dist/server/start.js +568 -0
- package/dist/server/start.js.map +1 -0
- package/dist/server/task-usage.d.ts +17 -0
- package/dist/server/task-usage.js +20 -0
- package/dist/server/task-usage.js.map +1 -0
- package/dist/server/types.d.ts +27 -0
- package/dist/server/types.js +26 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/usage-cleanup-scheduler.d.ts +107 -0
- package/dist/server/usage-cleanup-scheduler.js +232 -0
- package/dist/server/usage-cleanup-scheduler.js.map +1 -0
- package/dist/server/websocket.d.ts +131 -0
- package/dist/server/websocket.js +512 -0
- package/dist/server/websocket.js.map +1 -0
- package/dist/shared/data-files.d.ts +17 -0
- package/dist/shared/data-files.js +18 -0
- package/dist/shared/data-files.js.map +1 -0
- package/dist/shared/index.d.ts +9 -0
- package/dist/shared/index.js +9 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/view-id.d.ts +8 -0
- package/dist/shared/view-id.js +9 -0
- package/dist/shared/view-id.js.map +1 -0
- package/dist/viewer/Hench-F.png +0 -0
- package/dist/viewer/Rex-F.png +0 -0
- package/dist/viewer/SourceVision-F.png +0 -0
- package/dist/viewer/SourceVision.png +0 -0
- package/dist/viewer/api.d.ts +19 -0
- package/dist/viewer/api.js +17 -0
- package/dist/viewer/api.js.map +1 -0
- package/dist/viewer/bootstrap.d.ts +13 -0
- package/dist/viewer/bootstrap.js +40 -0
- package/dist/viewer/bootstrap.js.map +1 -0
- package/dist/viewer/components/active-tasks-panel.d.ts +36 -0
- package/dist/viewer/components/active-tasks-panel.js +183 -0
- package/dist/viewer/components/active-tasks-panel.js.map +1 -0
- package/dist/viewer/components/breadcrumb.d.ts +21 -0
- package/dist/viewer/components/breadcrumb.js +117 -0
- package/dist/viewer/components/breadcrumb.js.map +1 -0
- package/dist/viewer/components/concurrency-panel.d.ts +18 -0
- package/dist/viewer/components/concurrency-panel.js +175 -0
- package/dist/viewer/components/concurrency-panel.js.map +1 -0
- package/dist/viewer/components/config-footer.d.ts +11 -0
- package/dist/viewer/components/config-footer.js +132 -0
- package/dist/viewer/components/config-footer.js.map +1 -0
- package/dist/viewer/components/constants.d.ts +10 -0
- package/dist/viewer/components/constants.js +11 -0
- package/dist/viewer/components/constants.js.map +1 -0
- package/dist/viewer/components/copy-link-button.d.ts +30 -0
- package/dist/viewer/components/copy-link-button.js +74 -0
- package/dist/viewer/components/copy-link-button.js.map +1 -0
- package/dist/viewer/components/crash-recovery-banner.d.ts +28 -0
- package/dist/viewer/components/crash-recovery-banner.js +47 -0
- package/dist/viewer/components/crash-recovery-banner.js.map +1 -0
- package/dist/viewer/components/data-display/collapsible-section.d.ts +14 -0
- package/dist/viewer/components/data-display/collapsible-section.js +66 -0
- package/dist/viewer/components/data-display/collapsible-section.js.map +1 -0
- package/dist/viewer/components/data-display/findings-list.d.ts +13 -0
- package/dist/viewer/components/data-display/findings-list.js +136 -0
- package/dist/viewer/components/data-display/findings-list.js.map +1 -0
- package/dist/viewer/components/data-display/health-gauge.d.ts +37 -0
- package/dist/viewer/components/data-display/health-gauge.js +62 -0
- package/dist/viewer/components/data-display/health-gauge.js.map +1 -0
- package/dist/viewer/components/data-display/mini-charts.d.ts +36 -0
- package/dist/viewer/components/data-display/mini-charts.js +124 -0
- package/dist/viewer/components/data-display/mini-charts.js.map +1 -0
- package/dist/viewer/components/data-display/tree-view.d.ts +18 -0
- package/dist/viewer/components/data-display/tree-view.js +107 -0
- package/dist/viewer/components/data-display/tree-view.js.map +1 -0
- package/dist/viewer/components/data-display/zone-map.d.ts +28 -0
- package/dist/viewer/components/data-display/zone-map.js +197 -0
- package/dist/viewer/components/data-display/zone-map.js.map +1 -0
- package/dist/viewer/components/degradation-banner.d.ts +28 -0
- package/dist/viewer/components/degradation-banner.js +47 -0
- package/dist/viewer/components/degradation-banner.js.map +1 -0
- package/dist/viewer/components/detail-panel.d.ts +12 -0
- package/dist/viewer/components/detail-panel.js +166 -0
- package/dist/viewer/components/detail-panel.js.map +1 -0
- package/dist/viewer/components/elapsed-time.d.ts +38 -0
- package/dist/viewer/components/elapsed-time.js +35 -0
- package/dist/viewer/components/elapsed-time.js.map +1 -0
- package/dist/viewer/components/faq.d.ts +12 -0
- package/dist/viewer/components/faq.js +237 -0
- package/dist/viewer/components/faq.js.map +1 -0
- package/dist/viewer/components/favicon.d.ts +30 -0
- package/dist/viewer/components/favicon.js +90 -0
- package/dist/viewer/components/favicon.js.map +1 -0
- package/dist/viewer/components/guide.d.ts +5 -0
- package/dist/viewer/components/guide.js +116 -0
- package/dist/viewer/components/guide.js.map +1 -0
- package/dist/viewer/components/index.d.ts +37 -0
- package/dist/viewer/components/index.js +46 -0
- package/dist/viewer/components/index.js.map +1 -0
- package/dist/viewer/components/logos.d.ts +42 -0
- package/dist/viewer/components/logos.js +46 -0
- package/dist/viewer/components/logos.js.map +1 -0
- package/dist/viewer/components/memory-panel.d.ts +19 -0
- package/dist/viewer/components/memory-panel.js +181 -0
- package/dist/viewer/components/memory-panel.js.map +1 -0
- package/dist/viewer/components/memory-warning.d.ts +23 -0
- package/dist/viewer/components/memory-warning.js +42 -0
- package/dist/viewer/components/memory-warning.js.map +1 -0
- package/dist/viewer/components/notion-schema-wizard.d.ts +16 -0
- package/dist/viewer/components/notion-schema-wizard.js +263 -0
- package/dist/viewer/components/notion-schema-wizard.js.map +1 -0
- package/dist/viewer/components/polling-suspension-indicator.d.ts +24 -0
- package/dist/viewer/components/polling-suspension-indicator.js +31 -0
- package/dist/viewer/components/polling-suspension-indicator.js.map +1 -0
- package/dist/viewer/components/prd-tree/add-item-form.d.ts +31 -0
- package/dist/viewer/components/prd-tree/add-item-form.js +231 -0
- package/dist/viewer/components/prd-tree/add-item-form.js.map +1 -0
- package/dist/viewer/components/prd-tree/analyze-panel.d.ts +13 -0
- package/dist/viewer/components/prd-tree/analyze-panel.js +245 -0
- package/dist/viewer/components/prd-tree/analyze-panel.js.map +1 -0
- package/dist/viewer/components/prd-tree/batch-import-panel.d.ts +34 -0
- package/dist/viewer/components/prd-tree/batch-import-panel.js +415 -0
- package/dist/viewer/components/prd-tree/batch-import-panel.js.map +1 -0
- package/dist/viewer/components/prd-tree/bulk-actions.d.ts +19 -0
- package/dist/viewer/components/prd-tree/bulk-actions.js +90 -0
- package/dist/viewer/components/prd-tree/bulk-actions.js.map +1 -0
- package/dist/viewer/components/prd-tree/compute.d.ts +32 -0
- package/dist/viewer/components/prd-tree/compute.js +129 -0
- package/dist/viewer/components/prd-tree/compute.js.map +1 -0
- package/dist/viewer/components/prd-tree/delete-confirmation.d.ts +23 -0
- package/dist/viewer/components/prd-tree/delete-confirmation.js +83 -0
- package/dist/viewer/components/prd-tree/delete-confirmation.js.map +1 -0
- package/dist/viewer/components/prd-tree/execution-panel.d.ts +14 -0
- package/dist/viewer/components/prd-tree/execution-panel.js +291 -0
- package/dist/viewer/components/prd-tree/execution-panel.js.map +1 -0
- package/dist/viewer/components/prd-tree/facet-filter.d.ts +40 -0
- package/dist/viewer/components/prd-tree/facet-filter.js +188 -0
- package/dist/viewer/components/prd-tree/facet-filter.js.map +1 -0
- package/dist/viewer/components/prd-tree/index.d.ts +24 -0
- package/dist/viewer/components/prd-tree/index.js +16 -0
- package/dist/viewer/components/prd-tree/index.js.map +1 -0
- package/dist/viewer/components/prd-tree/inline-add-form.d.ts +32 -0
- package/dist/viewer/components/prd-tree/inline-add-form.js +175 -0
- package/dist/viewer/components/prd-tree/inline-add-form.js.map +1 -0
- package/dist/viewer/components/prd-tree/inline-status-picker.d.ts +31 -0
- package/dist/viewer/components/prd-tree/inline-status-picker.js +110 -0
- package/dist/viewer/components/prd-tree/inline-status-picker.js.map +1 -0
- package/dist/viewer/components/prd-tree/lazy-children.d.ts +40 -0
- package/dist/viewer/components/prd-tree/lazy-children.js +73 -0
- package/dist/viewer/components/prd-tree/lazy-children.js.map +1 -0
- package/dist/viewer/components/prd-tree/levels.d.ts +31 -0
- package/dist/viewer/components/prd-tree/levels.js +72 -0
- package/dist/viewer/components/prd-tree/levels.js.map +1 -0
- package/dist/viewer/components/prd-tree/listener-lifecycle.d.ts +105 -0
- package/dist/viewer/components/prd-tree/listener-lifecycle.js +173 -0
- package/dist/viewer/components/prd-tree/listener-lifecycle.js.map +1 -0
- package/dist/viewer/components/prd-tree/merge-preview.d.ts +25 -0
- package/dist/viewer/components/prd-tree/merge-preview.js +181 -0
- package/dist/viewer/components/prd-tree/merge-preview.js.map +1 -0
- package/dist/viewer/components/prd-tree/prd-tree.d.ts +91 -0
- package/dist/viewer/components/prd-tree/prd-tree.js +565 -0
- package/dist/viewer/components/prd-tree/prd-tree.js.map +1 -0
- package/dist/viewer/components/prd-tree/proposal-editor.d.ts +44 -0
- package/dist/viewer/components/prd-tree/proposal-editor.js +438 -0
- package/dist/viewer/components/prd-tree/proposal-editor.js.map +1 -0
- package/dist/viewer/components/prd-tree/prune-confirmation.d.ts +25 -0
- package/dist/viewer/components/prd-tree/prune-confirmation.js +336 -0
- package/dist/viewer/components/prd-tree/prune-confirmation.js.map +1 -0
- package/dist/viewer/components/prd-tree/prune-diff-tree.d.ts +39 -0
- package/dist/viewer/components/prd-tree/prune-diff-tree.js +319 -0
- package/dist/viewer/components/prd-tree/prune-diff-tree.js.map +1 -0
- package/dist/viewer/components/prd-tree/reorganize-panel.d.ts +16 -0
- package/dist/viewer/components/prd-tree/reorganize-panel.js +213 -0
- package/dist/viewer/components/prd-tree/reorganize-panel.js.map +1 -0
- package/dist/viewer/components/prd-tree/smart-add-input.d.ts +19 -0
- package/dist/viewer/components/prd-tree/smart-add-input.js +383 -0
- package/dist/viewer/components/prd-tree/smart-add-input.js.map +1 -0
- package/dist/viewer/components/prd-tree/status-filter.d.ts +40 -0
- package/dist/viewer/components/prd-tree/status-filter.js +131 -0
- package/dist/viewer/components/prd-tree/status-filter.js.map +1 -0
- package/dist/viewer/components/prd-tree/task-detail.d.ts +41 -0
- package/dist/viewer/components/prd-tree/task-detail.js +1205 -0
- package/dist/viewer/components/prd-tree/task-detail.js.map +1 -0
- package/dist/viewer/components/prd-tree/task-utilization.d.ts +7 -0
- package/dist/viewer/components/prd-tree/task-utilization.js +25 -0
- package/dist/viewer/components/prd-tree/task-utilization.js.map +1 -0
- package/dist/viewer/components/prd-tree/tree-differ.d.ts +59 -0
- package/dist/viewer/components/prd-tree/tree-differ.js +200 -0
- package/dist/viewer/components/prd-tree/tree-differ.js.map +1 -0
- package/dist/viewer/components/prd-tree/tree-event-delegate.d.ts +70 -0
- package/dist/viewer/components/prd-tree/tree-event-delegate.js +176 -0
- package/dist/viewer/components/prd-tree/tree-event-delegate.js.map +1 -0
- package/dist/viewer/components/prd-tree/tree-search.d.ts +65 -0
- package/dist/viewer/components/prd-tree/tree-search.js +178 -0
- package/dist/viewer/components/prd-tree/tree-search.js.map +1 -0
- package/dist/viewer/components/prd-tree/tree-utils.d.ts +38 -0
- package/dist/viewer/components/prd-tree/tree-utils.js +107 -0
- package/dist/viewer/components/prd-tree/tree-utils.js.map +1 -0
- package/dist/viewer/components/prd-tree/types.d.ts +93 -0
- package/dist/viewer/components/prd-tree/types.js +16 -0
- package/dist/viewer/components/prd-tree/types.js.map +1 -0
- package/dist/viewer/components/prd-tree/virtual-scroll.d.ts +119 -0
- package/dist/viewer/components/prd-tree/virtual-scroll.js +169 -0
- package/dist/viewer/components/prd-tree/virtual-scroll.js.map +1 -0
- package/dist/viewer/components/progressive-loader.d.ts +114 -0
- package/dist/viewer/components/progressive-loader.js +225 -0
- package/dist/viewer/components/progressive-loader.js.map +1 -0
- package/dist/viewer/components/refresh-queue-status.d.ts +20 -0
- package/dist/viewer/components/refresh-queue-status.js +65 -0
- package/dist/viewer/components/refresh-queue-status.js.map +1 -0
- package/dist/viewer/components/rex-task-link.d.ts +50 -0
- package/dist/viewer/components/rex-task-link.js +218 -0
- package/dist/viewer/components/rex-task-link.js.map +1 -0
- package/dist/viewer/components/search-filter.d.ts +20 -0
- package/dist/viewer/components/search-filter.js +28 -0
- package/dist/viewer/components/search-filter.js.map +1 -0
- package/dist/viewer/components/search-overlay.d.ts +31 -0
- package/dist/viewer/components/search-overlay.js +472 -0
- package/dist/viewer/components/search-overlay.js.map +1 -0
- package/dist/viewer/components/sidebar.d.ts +18 -0
- package/dist/viewer/components/sidebar.js +357 -0
- package/dist/viewer/components/sidebar.js.map +1 -0
- package/dist/viewer/components/status-indicators.d.ts +63 -0
- package/dist/viewer/components/status-indicators.js +136 -0
- package/dist/viewer/components/status-indicators.js.map +1 -0
- package/dist/viewer/components/theme-toggle.d.ts +8 -0
- package/dist/viewer/components/theme-toggle.js +28 -0
- package/dist/viewer/components/theme-toggle.js.map +1 -0
- package/dist/viewer/components/throttle-controls.d.ts +18 -0
- package/dist/viewer/components/throttle-controls.js +304 -0
- package/dist/viewer/components/throttle-controls.js.map +1 -0
- package/dist/viewer/components/ws-health-panel.d.ts +18 -0
- package/dist/viewer/components/ws-health-panel.js +250 -0
- package/dist/viewer/components/ws-health-panel.js.map +1 -0
- package/dist/viewer/components/zone-slideout.d.ts +17 -0
- package/dist/viewer/components/zone-slideout.js +162 -0
- package/dist/viewer/components/zone-slideout.js.map +1 -0
- package/dist/viewer/crash/crash-detector.d.ts +69 -0
- package/dist/viewer/crash/crash-detector.js +239 -0
- package/dist/viewer/crash/crash-detector.js.map +1 -0
- package/dist/viewer/crash/index.d.ts +7 -0
- package/dist/viewer/crash/index.js +8 -0
- package/dist/viewer/crash/index.js.map +1 -0
- package/dist/viewer/deployed-mode.d.ts +37 -0
- package/dist/viewer/deployed-mode.js +94 -0
- package/dist/viewer/deployed-mode.js.map +1 -0
- package/dist/viewer/external.d.ts +17 -0
- package/dist/viewer/external.js +17 -0
- package/dist/viewer/external.js.map +1 -0
- package/dist/viewer/graph/index.d.ts +9 -0
- package/dist/viewer/graph/index.js +12 -0
- package/dist/viewer/graph/index.js.map +1 -0
- package/dist/viewer/graph/physics.d.ts +96 -0
- package/dist/viewer/graph/physics.js +366 -0
- package/dist/viewer/graph/physics.js.map +1 -0
- package/dist/viewer/graph/renderer.d.ts +184 -0
- package/dist/viewer/graph/renderer.js +1438 -0
- package/dist/viewer/graph/renderer.js.map +1 -0
- package/dist/viewer/hooks/index.d.ts +27 -0
- package/dist/viewer/hooks/index.js +28 -0
- package/dist/viewer/hooks/index.js.map +1 -0
- package/dist/viewer/hooks/use-app-data.d.ts +31 -0
- package/dist/viewer/hooks/use-app-data.js +152 -0
- package/dist/viewer/hooks/use-app-data.js.map +1 -0
- package/dist/viewer/hooks/use-crash-recovery.d.ts +50 -0
- package/dist/viewer/hooks/use-crash-recovery.js +76 -0
- package/dist/viewer/hooks/use-crash-recovery.js.map +1 -0
- package/dist/viewer/hooks/use-delete-actions.d.ts +48 -0
- package/dist/viewer/hooks/use-delete-actions.js +103 -0
- package/dist/viewer/hooks/use-delete-actions.js.map +1 -0
- package/dist/viewer/hooks/use-dom-performance-monitor.d.ts +68 -0
- package/dist/viewer/hooks/use-dom-performance-monitor.js +71 -0
- package/dist/viewer/hooks/use-dom-performance-monitor.js.map +1 -0
- package/dist/viewer/hooks/use-facet-state.d.ts +32 -0
- package/dist/viewer/hooks/use-facet-state.js +119 -0
- package/dist/viewer/hooks/use-facet-state.js.map +1 -0
- package/dist/viewer/hooks/use-feature-toggle.d.ts +18 -0
- package/dist/viewer/hooks/use-feature-toggle.js +57 -0
- package/dist/viewer/hooks/use-feature-toggle.js.map +1 -0
- package/dist/viewer/hooks/use-file-edges.d.ts +23 -0
- package/dist/viewer/hooks/use-file-edges.js +221 -0
- package/dist/viewer/hooks/use-file-edges.js.map +1 -0
- package/dist/viewer/hooks/use-graceful-degradation.d.ts +30 -0
- package/dist/viewer/hooks/use-graceful-degradation.js +45 -0
- package/dist/viewer/hooks/use-graceful-degradation.js.map +1 -0
- package/dist/viewer/hooks/use-item-selection.d.ts +49 -0
- package/dist/viewer/hooks/use-item-selection.js +117 -0
- package/dist/viewer/hooks/use-item-selection.js.map +1 -0
- package/dist/viewer/hooks/use-memory-monitor.d.ts +39 -0
- package/dist/viewer/hooks/use-memory-monitor.js +73 -0
- package/dist/viewer/hooks/use-memory-monitor.js.map +1 -0
- package/dist/viewer/hooks/use-pan-zoom.d.ts +33 -0
- package/dist/viewer/hooks/use-pan-zoom.js +110 -0
- package/dist/viewer/hooks/use-pan-zoom.js.map +1 -0
- package/dist/viewer/hooks/use-persistent-filter.d.ts +24 -0
- package/dist/viewer/hooks/use-persistent-filter.js +37 -0
- package/dist/viewer/hooks/use-persistent-filter.js.map +1 -0
- package/dist/viewer/hooks/use-polling-suspension.d.ts +32 -0
- package/dist/viewer/hooks/use-polling-suspension.js +41 -0
- package/dist/viewer/hooks/use-polling-suspension.js.map +1 -0
- package/dist/viewer/hooks/use-polling.d.ts +39 -0
- package/dist/viewer/hooks/use-polling.js +55 -0
- package/dist/viewer/hooks/use-polling.js.map +1 -0
- package/dist/viewer/hooks/use-prd-actions.d.ts +126 -0
- package/dist/viewer/hooks/use-prd-actions.js +250 -0
- package/dist/viewer/hooks/use-prd-actions.js.map +1 -0
- package/dist/viewer/hooks/use-prd-data.d.ts +45 -0
- package/dist/viewer/hooks/use-prd-data.js +159 -0
- package/dist/viewer/hooks/use-prd-data.js.map +1 -0
- package/dist/viewer/hooks/use-prd-deep-link.d.ts +45 -0
- package/dist/viewer/hooks/use-prd-deep-link.js +60 -0
- package/dist/viewer/hooks/use-prd-deep-link.js.map +1 -0
- package/dist/viewer/hooks/use-prd-websocket.d.ts +47 -0
- package/dist/viewer/hooks/use-prd-websocket.js +139 -0
- package/dist/viewer/hooks/use-prd-websocket.js.map +1 -0
- package/dist/viewer/hooks/use-project-metadata.d.ts +25 -0
- package/dist/viewer/hooks/use-project-metadata.js +55 -0
- package/dist/viewer/hooks/use-project-metadata.js.map +1 -0
- package/dist/viewer/hooks/use-project-status.d.ts +60 -0
- package/dist/viewer/hooks/use-project-status.js +133 -0
- package/dist/viewer/hooks/use-project-status.js.map +1 -0
- package/dist/viewer/hooks/use-refresh-throttle.d.ts +45 -0
- package/dist/viewer/hooks/use-refresh-throttle.js +52 -0
- package/dist/viewer/hooks/use-refresh-throttle.js.map +1 -0
- package/dist/viewer/hooks/use-route-state.d.ts +18 -0
- package/dist/viewer/hooks/use-route-state.js +115 -0
- package/dist/viewer/hooks/use-route-state.js.map +1 -0
- package/dist/viewer/hooks/use-subzone-edges.d.ts +21 -0
- package/dist/viewer/hooks/use-subzone-edges.js +147 -0
- package/dist/viewer/hooks/use-subzone-edges.js.map +1 -0
- package/dist/viewer/hooks/use-tab-visibility.d.ts +31 -0
- package/dist/viewer/hooks/use-tab-visibility.js +43 -0
- package/dist/viewer/hooks/use-tab-visibility.js.map +1 -0
- package/dist/viewer/hooks/use-tick.d.ts +43 -0
- package/dist/viewer/hooks/use-tick.js +76 -0
- package/dist/viewer/hooks/use-tick.js.map +1 -0
- package/dist/viewer/hooks/use-toast.d.ts +24 -0
- package/dist/viewer/hooks/use-toast.js +26 -0
- package/dist/viewer/hooks/use-toast.js.map +1 -0
- package/dist/viewer/hooks/use-zone-drag.d.ts +30 -0
- package/dist/viewer/hooks/use-zone-drag.js +60 -0
- package/dist/viewer/hooks/use-zone-drag.js.map +1 -0
- package/dist/viewer/index.html +36 -0
- package/dist/viewer/loader.d.ts +33 -0
- package/dist/viewer/loader.js +195 -0
- package/dist/viewer/loader.js.map +1 -0
- package/dist/viewer/main.d.ts +1 -0
- package/dist/viewer/main.js +121 -0
- package/dist/viewer/main.js.map +1 -0
- package/dist/viewer/messaging/call-rate-limiter.d.ts +50 -0
- package/dist/viewer/messaging/call-rate-limiter.js +103 -0
- package/dist/viewer/messaging/call-rate-limiter.js.map +1 -0
- package/dist/viewer/messaging/fetch-pipeline.d.ts +58 -0
- package/dist/viewer/messaging/fetch-pipeline.js +58 -0
- package/dist/viewer/messaging/fetch-pipeline.js.map +1 -0
- package/dist/viewer/messaging/index.d.ts +43 -0
- package/dist/viewer/messaging/index.js +46 -0
- package/dist/viewer/messaging/index.js.map +1 -0
- package/dist/viewer/messaging/message-coalescer.d.ts +96 -0
- package/dist/viewer/messaging/message-coalescer.js +121 -0
- package/dist/viewer/messaging/message-coalescer.js.map +1 -0
- package/dist/viewer/messaging/message-throttle.d.ts +95 -0
- package/dist/viewer/messaging/message-throttle.js +147 -0
- package/dist/viewer/messaging/message-throttle.js.map +1 -0
- package/dist/viewer/messaging/request-dedup.d.ts +43 -0
- package/dist/viewer/messaging/request-dedup.js +55 -0
- package/dist/viewer/messaging/request-dedup.js.map +1 -0
- package/dist/viewer/messaging/ws-pipeline.d.ts +85 -0
- package/dist/viewer/messaging/ws-pipeline.js +68 -0
- package/dist/viewer/messaging/ws-pipeline.js.map +1 -0
- package/dist/viewer/n-dx.png +0 -0
- package/dist/viewer/performance/dom-performance-monitor.d.ts +157 -0
- package/dist/viewer/performance/dom-performance-monitor.js +341 -0
- package/dist/viewer/performance/dom-performance-monitor.js.map +1 -0
- package/dist/viewer/performance/dom-update-gate.d.ts +122 -0
- package/dist/viewer/performance/dom-update-gate.js +229 -0
- package/dist/viewer/performance/dom-update-gate.js.map +1 -0
- package/dist/viewer/performance/graceful-degradation.d.ts +73 -0
- package/dist/viewer/performance/graceful-degradation.js +152 -0
- package/dist/viewer/performance/graceful-degradation.js.map +1 -0
- package/dist/viewer/performance/index.d.ts +14 -0
- package/dist/viewer/performance/index.js +20 -0
- package/dist/viewer/performance/index.js.map +1 -0
- package/dist/viewer/performance/memory-monitor.d.ts +78 -0
- package/dist/viewer/performance/memory-monitor.js +218 -0
- package/dist/viewer/performance/memory-monitor.js.map +1 -0
- package/dist/viewer/performance/refresh-throttle.d.ts +90 -0
- package/dist/viewer/performance/refresh-throttle.js +266 -0
- package/dist/viewer/performance/refresh-throttle.js.map +1 -0
- package/dist/viewer/performance/response-buffer-gate.d.ts +108 -0
- package/dist/viewer/performance/response-buffer-gate.js +170 -0
- package/dist/viewer/performance/response-buffer-gate.js.map +1 -0
- package/dist/viewer/performance/update-batcher.d.ts +79 -0
- package/dist/viewer/performance/update-batcher.js +119 -0
- package/dist/viewer/performance/update-batcher.js.map +1 -0
- package/dist/viewer/polling/batched-tick-dispatcher.d.ts +83 -0
- package/dist/viewer/polling/batched-tick-dispatcher.js +183 -0
- package/dist/viewer/polling/batched-tick-dispatcher.js.map +1 -0
- package/dist/viewer/polling/index.d.ts +13 -0
- package/dist/viewer/polling/index.js +16 -0
- package/dist/viewer/polling/index.js.map +1 -0
- package/dist/viewer/polling/polling-manager.d.ts +82 -0
- package/dist/viewer/polling/polling-manager.js +254 -0
- package/dist/viewer/polling/polling-manager.js.map +1 -0
- package/dist/viewer/polling/polling-restart.d.ts +45 -0
- package/dist/viewer/polling/polling-restart.js +98 -0
- package/dist/viewer/polling/polling-restart.js.map +1 -0
- package/dist/viewer/polling/polling-state.d.ts +182 -0
- package/dist/viewer/polling/polling-state.js +306 -0
- package/dist/viewer/polling/polling-state.js.map +1 -0
- package/dist/viewer/polling/tab-visibility.d.ts +112 -0
- package/dist/viewer/polling/tab-visibility.js +276 -0
- package/dist/viewer/polling/tab-visibility.js.map +1 -0
- package/dist/viewer/polling/tick-timer.d.ts +70 -0
- package/dist/viewer/polling/tick-timer.js +168 -0
- package/dist/viewer/polling/tick-timer.js.map +1 -0
- package/dist/viewer/polling/tick-visibility-gate.d.ts +92 -0
- package/dist/viewer/polling/tick-visibility-gate.js +146 -0
- package/dist/viewer/polling/tick-visibility-gate.js.map +1 -0
- package/dist/viewer/route-state.d.ts +8 -0
- package/dist/viewer/route-state.js +77 -0
- package/dist/viewer/route-state.js.map +1 -0
- package/dist/viewer/schema-compat.d.ts +17 -0
- package/dist/viewer/schema-compat.js +49 -0
- package/dist/viewer/schema-compat.js.map +1 -0
- package/dist/viewer/types.d.ts +66 -0
- package/dist/viewer/types.js +2 -0
- package/dist/viewer/types.js.map +1 -0
- package/dist/viewer/usage/constants.d.ts +14 -0
- package/dist/viewer/usage/constants.js +14 -0
- package/dist/viewer/usage/constants.js.map +1 -0
- package/dist/viewer/usage/index.d.ts +7 -0
- package/dist/viewer/usage/index.js +8 -0
- package/dist/viewer/usage/index.js.map +1 -0
- package/dist/viewer/utils.d.ts +25 -0
- package/dist/viewer/utils.js +48 -0
- package/dist/viewer/utils.js.map +1 -0
- package/dist/viewer/validate.d.ts +23 -0
- package/dist/viewer/validate.js +275 -0
- package/dist/viewer/validate.js.map +1 -0
- package/dist/viewer/views/analysis.d.ts +10 -0
- package/dist/viewer/views/analysis.js +109 -0
- package/dist/viewer/views/analysis.js.map +1 -0
- package/dist/viewer/views/architecture.d.ts +10 -0
- package/dist/viewer/views/architecture.js +44 -0
- package/dist/viewer/views/architecture.js.map +1 -0
- package/dist/viewer/views/domain-hench.d.ts +13 -0
- package/dist/viewer/views/domain-hench.js +14 -0
- package/dist/viewer/views/domain-hench.js.map +1 -0
- package/dist/viewer/views/domain-rex.d.ts +17 -0
- package/dist/viewer/views/domain-rex.js +18 -0
- package/dist/viewer/views/domain-rex.js.map +1 -0
- package/dist/viewer/views/domain-settings.d.ts +12 -0
- package/dist/viewer/views/domain-settings.js +13 -0
- package/dist/viewer/views/domain-settings.js.map +1 -0
- package/dist/viewer/views/domain-sourcevision.d.ts +20 -0
- package/dist/viewer/views/domain-sourcevision.js +21 -0
- package/dist/viewer/views/domain-sourcevision.js.map +1 -0
- package/dist/viewer/views/enrichment-thresholds.d.ts +11 -0
- package/dist/viewer/views/enrichment-thresholds.js +12 -0
- package/dist/viewer/views/enrichment-thresholds.js.map +1 -0
- package/dist/viewer/views/feature-toggles.d.ts +13 -0
- package/dist/viewer/views/feature-toggles.js +185 -0
- package/dist/viewer/views/feature-toggles.js.map +1 -0
- package/dist/viewer/views/files.d.ts +13 -0
- package/dist/viewer/views/files.js +174 -0
- package/dist/viewer/views/files.js.map +1 -0
- package/dist/viewer/views/graph.d.ts +12 -0
- package/dist/viewer/views/graph.js +316 -0
- package/dist/viewer/views/graph.js.map +1 -0
- package/dist/viewer/views/hench-config.d.ts +39 -0
- package/dist/viewer/views/hench-config.js +473 -0
- package/dist/viewer/views/hench-config.js.map +1 -0
- package/dist/viewer/views/hench-runs.d.ts +19 -0
- package/dist/viewer/views/hench-runs.js +460 -0
- package/dist/viewer/views/hench-runs.js.map +1 -0
- package/dist/viewer/views/hench-templates.d.ts +17 -0
- package/dist/viewer/views/hench-templates.js +262 -0
- package/dist/viewer/views/hench-templates.js.map +1 -0
- package/dist/viewer/views/integration-config.d.ts +73 -0
- package/dist/viewer/views/integration-config.js +524 -0
- package/dist/viewer/views/integration-config.js.map +1 -0
- package/dist/viewer/views/notion-config.d.ts +16 -0
- package/dist/viewer/views/notion-config.js +357 -0
- package/dist/viewer/views/notion-config.js.map +1 -0
- package/dist/viewer/views/overview.d.ts +10 -0
- package/dist/viewer/views/overview.js +187 -0
- package/dist/viewer/views/overview.js.map +1 -0
- package/dist/viewer/views/pr-markdown.d.ts +3 -0
- package/dist/viewer/views/pr-markdown.js +350 -0
- package/dist/viewer/views/pr-markdown.js.map +1 -0
- package/dist/viewer/views/prd.d.ts +34 -0
- package/dist/viewer/views/prd.js +257 -0
- package/dist/viewer/views/prd.js.map +1 -0
- package/dist/viewer/views/problems.d.ts +8 -0
- package/dist/viewer/views/problems.js +50 -0
- package/dist/viewer/views/problems.js.map +1 -0
- package/dist/viewer/views/rex-dashboard.d.ts +14 -0
- package/dist/viewer/views/rex-dashboard.js +334 -0
- package/dist/viewer/views/rex-dashboard.js.map +1 -0
- package/dist/viewer/views/routes.d.ts +8 -0
- package/dist/viewer/views/routes.js +216 -0
- package/dist/viewer/views/routes.js.map +1 -0
- package/dist/viewer/views/sourcevision-tabs.d.ts +18 -0
- package/dist/viewer/views/sourcevision-tabs.js +14 -0
- package/dist/viewer/views/sourcevision-tabs.js.map +1 -0
- package/dist/viewer/views/suggestions.d.ts +8 -0
- package/dist/viewer/views/suggestions.js +36 -0
- package/dist/viewer/views/suggestions.js.map +1 -0
- package/dist/viewer/views/task-audit.d.ts +18 -0
- package/dist/viewer/views/task-audit.js +413 -0
- package/dist/viewer/views/task-audit.js.map +1 -0
- package/dist/viewer/views/token-usage.d.ts +10 -0
- package/dist/viewer/views/token-usage.js +410 -0
- package/dist/viewer/views/token-usage.js.map +1 -0
- package/dist/viewer/views/validation.d.ts +11 -0
- package/dist/viewer/views/validation.js +475 -0
- package/dist/viewer/views/validation.js.map +1 -0
- package/dist/viewer/views/view-registry.d.ts +27 -0
- package/dist/viewer/views/view-registry.js +70 -0
- package/dist/viewer/views/view-registry.js.map +1 -0
- package/dist/viewer/views/workflow-optimization.d.ts +12 -0
- package/dist/viewer/views/workflow-optimization.js +311 -0
- package/dist/viewer/views/workflow-optimization.js.map +1 -0
- package/dist/viewer/views/zone-types.d.ts +69 -0
- package/dist/viewer/views/zone-types.js +5 -0
- package/dist/viewer/views/zone-types.js.map +1 -0
- package/dist/viewer/views/zones.d.ts +50 -0
- package/dist/viewer/views/zones.js +1438 -0
- package/dist/viewer/views/zones.js.map +1 -0
- package/dist/viewer/visualization/colors.d.ts +16 -0
- package/dist/viewer/visualization/colors.js +31 -0
- package/dist/viewer/visualization/colors.js.map +1 -0
- package/dist/viewer/visualization/flow.d.ts +54 -0
- package/dist/viewer/visualization/flow.js +123 -0
- package/dist/viewer/visualization/flow.js.map +1 -0
- package/dist/viewer/visualization/index.d.ts +34 -0
- package/dist/viewer/visualization/index.js +40 -0
- package/dist/viewer/visualization/index.js.map +1 -0
- package/dist/viewer/visualization/metrics.d.ts +8 -0
- package/dist/viewer/visualization/metrics.js +16 -0
- package/dist/viewer/visualization/metrics.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Concurrent execution metrics collection and resource utilization tracking.
|
|
3
|
+
*
|
|
4
|
+
* Collects time-series snapshots of concurrent process counts, total memory
|
|
5
|
+
* utilization across all hench processes, and per-task resource metrics.
|
|
6
|
+
* Snapshots are stored in bounded ring buffers and aggregated into patterns
|
|
7
|
+
* (peak, average) for dashboard consumption.
|
|
8
|
+
*
|
|
9
|
+
* This is the web-server counterpart to hench's own ConcurrentExecutionMetrics.
|
|
10
|
+
* Implemented separately to avoid adding a runtime dependency from
|
|
11
|
+
* @n-dx/web to hench (web reads hench data from disk, never imports it).
|
|
12
|
+
*
|
|
13
|
+
* @module @n-dx/web/server/concurrent-execution-metrics
|
|
14
|
+
*/
|
|
15
|
+
export interface ConcurrentExecutionMetricsConfig {
|
|
16
|
+
maxSnapshots: number;
|
|
17
|
+
maxCompletedTasks: number;
|
|
18
|
+
}
|
|
19
|
+
export declare const DEFAULT_CONCURRENT_EXECUTION_METRICS_CONFIG: ConcurrentExecutionMetricsConfig;
|
|
20
|
+
/** A single point-in-time snapshot of concurrent execution state. */
|
|
21
|
+
export interface ExecutionMetricsSnapshot {
|
|
22
|
+
concurrentCount: number;
|
|
23
|
+
totalRssBytes: number;
|
|
24
|
+
systemMemoryPercent: number;
|
|
25
|
+
loadAvg1m: number;
|
|
26
|
+
timestamp: string;
|
|
27
|
+
epochMs: number;
|
|
28
|
+
}
|
|
29
|
+
/** Resource utilization metrics for a single task execution. */
|
|
30
|
+
export interface TaskResourceMetrics {
|
|
31
|
+
taskId: string;
|
|
32
|
+
taskTitle: string;
|
|
33
|
+
pid: number;
|
|
34
|
+
startedAt: string;
|
|
35
|
+
completedAt?: string;
|
|
36
|
+
durationMs: number;
|
|
37
|
+
peakRssBytes: number;
|
|
38
|
+
avgRssBytes: number;
|
|
39
|
+
currentRssBytes: number;
|
|
40
|
+
sampleCount: number;
|
|
41
|
+
avgConcurrentDuringExecution: number;
|
|
42
|
+
}
|
|
43
|
+
/** Aggregated utilization patterns from time-series data. */
|
|
44
|
+
export interface UtilizationPatterns {
|
|
45
|
+
peakConcurrent: number;
|
|
46
|
+
avgConcurrent: number;
|
|
47
|
+
peakTotalRssBytes: number;
|
|
48
|
+
avgTotalRssBytes: number;
|
|
49
|
+
avgSystemMemoryPercent: number;
|
|
50
|
+
peakSystemMemoryPercent: number;
|
|
51
|
+
avgLoadAvg1m: number;
|
|
52
|
+
peakLoadAvg1m: number;
|
|
53
|
+
windowDurationMs: number;
|
|
54
|
+
snapshotCount: number;
|
|
55
|
+
}
|
|
56
|
+
/** Full metrics summary for API response. */
|
|
57
|
+
export interface ExecutionMetricsSummary {
|
|
58
|
+
current: ExecutionMetricsSnapshot;
|
|
59
|
+
patterns: UtilizationPatterns;
|
|
60
|
+
activeTasks: TaskResourceMetrics[];
|
|
61
|
+
completedTasks: TaskResourceMetrics[];
|
|
62
|
+
timestamp: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Collects and aggregates concurrent execution metrics across hench processes.
|
|
66
|
+
*
|
|
67
|
+
* Records periodic snapshots of concurrent process counts and memory utilization,
|
|
68
|
+
* tracks per-task resource usage, and computes utilization patterns.
|
|
69
|
+
*/
|
|
70
|
+
export declare class ConcurrentExecutionMetrics {
|
|
71
|
+
private readonly _config;
|
|
72
|
+
private readonly _snapshots;
|
|
73
|
+
private readonly _activeTasks;
|
|
74
|
+
private readonly _completedTasks;
|
|
75
|
+
private readonly _now;
|
|
76
|
+
constructor(config?: Partial<ConcurrentExecutionMetricsConfig>, overrides?: {
|
|
77
|
+
now?: () => number;
|
|
78
|
+
});
|
|
79
|
+
get config(): Readonly<ConcurrentExecutionMetricsConfig>;
|
|
80
|
+
get snapshotCount(): number;
|
|
81
|
+
get activeTaskCount(): number;
|
|
82
|
+
get completedTaskCount(): number;
|
|
83
|
+
taskStarted(taskId: string, taskTitle: string, pid: number): void;
|
|
84
|
+
taskCompleted(taskId: string): void;
|
|
85
|
+
recordSnapshot(input: {
|
|
86
|
+
concurrentCount: number;
|
|
87
|
+
totalRssBytes: number;
|
|
88
|
+
systemMemoryPercent: number;
|
|
89
|
+
loadAvg1m: number;
|
|
90
|
+
perTaskRss: Array<{
|
|
91
|
+
taskId: string;
|
|
92
|
+
rssBytes: number;
|
|
93
|
+
}>;
|
|
94
|
+
}): void;
|
|
95
|
+
getLatestSnapshot(): ExecutionMetricsSnapshot;
|
|
96
|
+
getSnapshots(): ExecutionMetricsSnapshot[];
|
|
97
|
+
computePatterns(): UtilizationPatterns;
|
|
98
|
+
getActiveTaskMetrics(): TaskResourceMetrics[];
|
|
99
|
+
getCompletedTaskMetrics(): TaskResourceMetrics[];
|
|
100
|
+
getSummary(): ExecutionMetricsSummary;
|
|
101
|
+
reset(): void;
|
|
102
|
+
private _buildTaskMetrics;
|
|
103
|
+
}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Concurrent execution metrics collection and resource utilization tracking.
|
|
3
|
+
*
|
|
4
|
+
* Collects time-series snapshots of concurrent process counts, total memory
|
|
5
|
+
* utilization across all hench processes, and per-task resource metrics.
|
|
6
|
+
* Snapshots are stored in bounded ring buffers and aggregated into patterns
|
|
7
|
+
* (peak, average) for dashboard consumption.
|
|
8
|
+
*
|
|
9
|
+
* This is the web-server counterpart to hench's own ConcurrentExecutionMetrics.
|
|
10
|
+
* Implemented separately to avoid adding a runtime dependency from
|
|
11
|
+
* @n-dx/web to hench (web reads hench data from disk, never imports it).
|
|
12
|
+
*
|
|
13
|
+
* @module @n-dx/web/server/concurrent-execution-metrics
|
|
14
|
+
*/
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Constants
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
/** Maximum time-series snapshots retained (ring buffer size). */
|
|
19
|
+
const DEFAULT_MAX_SNAPSHOTS = 360;
|
|
20
|
+
/** Maximum completed task metrics retained for post-mortem analysis. */
|
|
21
|
+
const DEFAULT_MAX_COMPLETED_TASKS = 50;
|
|
22
|
+
export const DEFAULT_CONCURRENT_EXECUTION_METRICS_CONFIG = {
|
|
23
|
+
maxSnapshots: DEFAULT_MAX_SNAPSHOTS,
|
|
24
|
+
maxCompletedTasks: DEFAULT_MAX_COMPLETED_TASKS,
|
|
25
|
+
};
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// ConcurrentExecutionMetrics
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
/**
|
|
30
|
+
* Collects and aggregates concurrent execution metrics across hench processes.
|
|
31
|
+
*
|
|
32
|
+
* Records periodic snapshots of concurrent process counts and memory utilization,
|
|
33
|
+
* tracks per-task resource usage, and computes utilization patterns.
|
|
34
|
+
*/
|
|
35
|
+
export class ConcurrentExecutionMetrics {
|
|
36
|
+
_config;
|
|
37
|
+
_snapshots = [];
|
|
38
|
+
_activeTasks = new Map();
|
|
39
|
+
_completedTasks = [];
|
|
40
|
+
_now;
|
|
41
|
+
constructor(config, overrides) {
|
|
42
|
+
this._config = { ...DEFAULT_CONCURRENT_EXECUTION_METRICS_CONFIG, ...config };
|
|
43
|
+
this._now = overrides?.now ?? Date.now;
|
|
44
|
+
}
|
|
45
|
+
get config() {
|
|
46
|
+
return { ...this._config };
|
|
47
|
+
}
|
|
48
|
+
get snapshotCount() {
|
|
49
|
+
return this._snapshots.length;
|
|
50
|
+
}
|
|
51
|
+
get activeTaskCount() {
|
|
52
|
+
return this._activeTasks.size;
|
|
53
|
+
}
|
|
54
|
+
get completedTaskCount() {
|
|
55
|
+
return this._completedTasks.length;
|
|
56
|
+
}
|
|
57
|
+
// -----------------------------------------------------------------------
|
|
58
|
+
// Task lifecycle
|
|
59
|
+
// -----------------------------------------------------------------------
|
|
60
|
+
taskStarted(taskId, taskTitle, pid) {
|
|
61
|
+
const now = this._now();
|
|
62
|
+
this._activeTasks.set(taskId, {
|
|
63
|
+
taskId,
|
|
64
|
+
taskTitle,
|
|
65
|
+
pid,
|
|
66
|
+
startedAt: new Date(now).toISOString(),
|
|
67
|
+
startedEpochMs: now,
|
|
68
|
+
rssSumBytes: 0,
|
|
69
|
+
rssSampleCount: 0,
|
|
70
|
+
peakRssBytes: 0,
|
|
71
|
+
currentRssBytes: 0,
|
|
72
|
+
concurrentSum: 0,
|
|
73
|
+
concurrentSampleCount: 0,
|
|
74
|
+
active: true,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
taskCompleted(taskId) {
|
|
78
|
+
const tracked = this._activeTasks.get(taskId);
|
|
79
|
+
if (!tracked)
|
|
80
|
+
return;
|
|
81
|
+
const now = this._now();
|
|
82
|
+
tracked.active = false;
|
|
83
|
+
tracked.completedAt = new Date(now).toISOString();
|
|
84
|
+
tracked.completedEpochMs = now;
|
|
85
|
+
this._activeTasks.delete(taskId);
|
|
86
|
+
this._completedTasks.push(tracked);
|
|
87
|
+
while (this._completedTasks.length > this._config.maxCompletedTasks) {
|
|
88
|
+
this._completedTasks.shift();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// -----------------------------------------------------------------------
|
|
92
|
+
// Snapshot recording
|
|
93
|
+
// -----------------------------------------------------------------------
|
|
94
|
+
recordSnapshot(input) {
|
|
95
|
+
const now = this._now();
|
|
96
|
+
const snapshot = {
|
|
97
|
+
concurrentCount: input.concurrentCount,
|
|
98
|
+
totalRssBytes: input.totalRssBytes,
|
|
99
|
+
systemMemoryPercent: input.systemMemoryPercent,
|
|
100
|
+
loadAvg1m: input.loadAvg1m,
|
|
101
|
+
timestamp: new Date(now).toISOString(),
|
|
102
|
+
epochMs: now,
|
|
103
|
+
};
|
|
104
|
+
if (this._snapshots.length >= this._config.maxSnapshots) {
|
|
105
|
+
this._snapshots.shift();
|
|
106
|
+
}
|
|
107
|
+
this._snapshots.push(snapshot);
|
|
108
|
+
for (const { taskId, rssBytes } of input.perTaskRss) {
|
|
109
|
+
const tracked = this._activeTasks.get(taskId);
|
|
110
|
+
if (!tracked)
|
|
111
|
+
continue;
|
|
112
|
+
tracked.rssSumBytes += rssBytes;
|
|
113
|
+
tracked.rssSampleCount += 1;
|
|
114
|
+
tracked.currentRssBytes = rssBytes;
|
|
115
|
+
if (rssBytes > tracked.peakRssBytes) {
|
|
116
|
+
tracked.peakRssBytes = rssBytes;
|
|
117
|
+
}
|
|
118
|
+
tracked.concurrentSum += input.concurrentCount;
|
|
119
|
+
tracked.concurrentSampleCount += 1;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// -----------------------------------------------------------------------
|
|
123
|
+
// Queries
|
|
124
|
+
// -----------------------------------------------------------------------
|
|
125
|
+
getLatestSnapshot() {
|
|
126
|
+
const last = this._snapshots[this._snapshots.length - 1];
|
|
127
|
+
if (last)
|
|
128
|
+
return { ...last };
|
|
129
|
+
const now = this._now();
|
|
130
|
+
return {
|
|
131
|
+
concurrentCount: 0,
|
|
132
|
+
totalRssBytes: 0,
|
|
133
|
+
systemMemoryPercent: 0,
|
|
134
|
+
loadAvg1m: 0,
|
|
135
|
+
timestamp: new Date(now).toISOString(),
|
|
136
|
+
epochMs: now,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
getSnapshots() {
|
|
140
|
+
return this._snapshots.map((s) => ({ ...s }));
|
|
141
|
+
}
|
|
142
|
+
computePatterns() {
|
|
143
|
+
const n = this._snapshots.length;
|
|
144
|
+
if (n === 0) {
|
|
145
|
+
return {
|
|
146
|
+
peakConcurrent: 0,
|
|
147
|
+
avgConcurrent: 0,
|
|
148
|
+
peakTotalRssBytes: 0,
|
|
149
|
+
avgTotalRssBytes: 0,
|
|
150
|
+
avgSystemMemoryPercent: 0,
|
|
151
|
+
peakSystemMemoryPercent: 0,
|
|
152
|
+
avgLoadAvg1m: 0,
|
|
153
|
+
peakLoadAvg1m: 0,
|
|
154
|
+
windowDurationMs: 0,
|
|
155
|
+
snapshotCount: 0,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
let sumConcurrent = 0;
|
|
159
|
+
let peakConcurrent = 0;
|
|
160
|
+
let sumRss = 0;
|
|
161
|
+
let peakRss = 0;
|
|
162
|
+
let sumMemPercent = 0;
|
|
163
|
+
let peakMemPercent = 0;
|
|
164
|
+
let sumLoad = 0;
|
|
165
|
+
let peakLoad = 0;
|
|
166
|
+
for (const s of this._snapshots) {
|
|
167
|
+
sumConcurrent += s.concurrentCount;
|
|
168
|
+
if (s.concurrentCount > peakConcurrent)
|
|
169
|
+
peakConcurrent = s.concurrentCount;
|
|
170
|
+
sumRss += s.totalRssBytes;
|
|
171
|
+
if (s.totalRssBytes > peakRss)
|
|
172
|
+
peakRss = s.totalRssBytes;
|
|
173
|
+
sumMemPercent += s.systemMemoryPercent;
|
|
174
|
+
if (s.systemMemoryPercent > peakMemPercent)
|
|
175
|
+
peakMemPercent = s.systemMemoryPercent;
|
|
176
|
+
sumLoad += s.loadAvg1m;
|
|
177
|
+
if (s.loadAvg1m > peakLoad)
|
|
178
|
+
peakLoad = s.loadAvg1m;
|
|
179
|
+
}
|
|
180
|
+
const first = this._snapshots[0];
|
|
181
|
+
const last = this._snapshots[n - 1];
|
|
182
|
+
const windowDurationMs = last.epochMs - first.epochMs;
|
|
183
|
+
return {
|
|
184
|
+
peakConcurrent,
|
|
185
|
+
avgConcurrent: Math.round((sumConcurrent / n) * 100) / 100,
|
|
186
|
+
peakTotalRssBytes: peakRss,
|
|
187
|
+
avgTotalRssBytes: Math.round(sumRss / n),
|
|
188
|
+
avgSystemMemoryPercent: Math.round((sumMemPercent / n) * 100) / 100,
|
|
189
|
+
peakSystemMemoryPercent: peakMemPercent,
|
|
190
|
+
avgLoadAvg1m: Math.round((sumLoad / n) * 100) / 100,
|
|
191
|
+
peakLoadAvg1m: Math.round(peakLoad * 100) / 100,
|
|
192
|
+
windowDurationMs,
|
|
193
|
+
snapshotCount: n,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
getActiveTaskMetrics() {
|
|
197
|
+
const now = this._now();
|
|
198
|
+
const result = [];
|
|
199
|
+
for (const t of this._activeTasks.values()) {
|
|
200
|
+
result.push(this._buildTaskMetrics(t, now));
|
|
201
|
+
}
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
204
|
+
getCompletedTaskMetrics() {
|
|
205
|
+
const now = this._now();
|
|
206
|
+
return this._completedTasks.map((t) => this._buildTaskMetrics(t, now));
|
|
207
|
+
}
|
|
208
|
+
getSummary() {
|
|
209
|
+
const now = this._now();
|
|
210
|
+
return {
|
|
211
|
+
current: this.getLatestSnapshot(),
|
|
212
|
+
patterns: this.computePatterns(),
|
|
213
|
+
activeTasks: this.getActiveTaskMetrics(),
|
|
214
|
+
completedTasks: this.getCompletedTaskMetrics(),
|
|
215
|
+
timestamp: new Date(now).toISOString(),
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
// -----------------------------------------------------------------------
|
|
219
|
+
// Reset
|
|
220
|
+
// -----------------------------------------------------------------------
|
|
221
|
+
reset() {
|
|
222
|
+
this._snapshots.length = 0;
|
|
223
|
+
this._activeTasks.clear();
|
|
224
|
+
this._completedTasks.length = 0;
|
|
225
|
+
}
|
|
226
|
+
// -----------------------------------------------------------------------
|
|
227
|
+
// Private helpers
|
|
228
|
+
// -----------------------------------------------------------------------
|
|
229
|
+
_buildTaskMetrics(tracked, now) {
|
|
230
|
+
const endTime = tracked.completedEpochMs ?? now;
|
|
231
|
+
const durationMs = endTime - tracked.startedEpochMs;
|
|
232
|
+
const avgRss = tracked.rssSampleCount > 0
|
|
233
|
+
? Math.round(tracked.rssSumBytes / tracked.rssSampleCount)
|
|
234
|
+
: 0;
|
|
235
|
+
const avgConcurrent = tracked.concurrentSampleCount > 0
|
|
236
|
+
? Math.round((tracked.concurrentSum / tracked.concurrentSampleCount) * 100) / 100
|
|
237
|
+
: 0;
|
|
238
|
+
return {
|
|
239
|
+
taskId: tracked.taskId,
|
|
240
|
+
taskTitle: tracked.taskTitle,
|
|
241
|
+
pid: tracked.pid,
|
|
242
|
+
startedAt: tracked.startedAt,
|
|
243
|
+
completedAt: tracked.completedAt,
|
|
244
|
+
durationMs,
|
|
245
|
+
peakRssBytes: tracked.peakRssBytes,
|
|
246
|
+
avgRssBytes: avgRss,
|
|
247
|
+
currentRssBytes: tracked.currentRssBytes,
|
|
248
|
+
sampleCount: tracked.rssSampleCount,
|
|
249
|
+
avgConcurrentDuringExecution: avgConcurrent,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=concurrent-execution-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrent-execution-metrics.js","sourceRoot":"","sources":["../../src/server/concurrent-execution-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized gateway for sourcevision runtime imports.
|
|
3
|
+
*
|
|
4
|
+
* Web route handlers need the sourcevision MCP server factory to serve
|
|
5
|
+
* the `/mcp/sourcevision` endpoint. Rather than importing from "@n-dx/sourcevision"
|
|
6
|
+
* directly in route files, all web→sourcevision runtime imports pass through
|
|
7
|
+
* this single module.
|
|
8
|
+
*
|
|
9
|
+
* By concentrating all web→sourcevision runtime imports here, we ensure:
|
|
10
|
+
* - The cross-package surface is **explicit** (1 re-export, not scattered imports).
|
|
11
|
+
* - The DAG stays **acyclic** — sourcevision never imports from web.
|
|
12
|
+
* - Future changes to sourcevision's public API need only be updated here.
|
|
13
|
+
*
|
|
14
|
+
* @module web/server/domain-gateway
|
|
15
|
+
* @see packages/web/src/server/rex-gateway.ts — web's gateway for rex imports
|
|
16
|
+
* @see packages/hench/src/prd/rex-gateway.ts — hench's equivalent gateway
|
|
17
|
+
*/
|
|
18
|
+
export { createSourcevisionMcpServer } from "@n-dx/sourcevision";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized gateway for sourcevision runtime imports.
|
|
3
|
+
*
|
|
4
|
+
* Web route handlers need the sourcevision MCP server factory to serve
|
|
5
|
+
* the `/mcp/sourcevision` endpoint. Rather than importing from "@n-dx/sourcevision"
|
|
6
|
+
* directly in route files, all web→sourcevision runtime imports pass through
|
|
7
|
+
* this single module.
|
|
8
|
+
*
|
|
9
|
+
* By concentrating all web→sourcevision runtime imports here, we ensure:
|
|
10
|
+
* - The cross-package surface is **explicit** (1 re-export, not scattered imports).
|
|
11
|
+
* - The DAG stays **acyclic** — sourcevision never imports from web.
|
|
12
|
+
* - Future changes to sourcevision's public API need only be updated here.
|
|
13
|
+
*
|
|
14
|
+
* @module web/server/domain-gateway
|
|
15
|
+
* @see packages/web/src/server/rex-gateway.ts — web's gateway for rex imports
|
|
16
|
+
* @see packages/hench/src/prd/rex-gateway.ts — hench's equivalent gateway
|
|
17
|
+
*/
|
|
18
|
+
export { createSourcevisionMcpServer } from "@n-dx/sourcevision";
|
|
19
|
+
//# sourceMappingURL=domain-gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-gateway.js","sourceRoot":"","sources":["../../src/server/domain-gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incremental task usage aggregator.
|
|
3
|
+
*
|
|
4
|
+
* Maintains an in-memory cache of per-task token usage aggregation.
|
|
5
|
+
* On each refresh, only processes new/modified run files using
|
|
6
|
+
* mtime+size change detection, keeping aggregation time constant
|
|
7
|
+
* regardless of total run history size.
|
|
8
|
+
*
|
|
9
|
+
* ## Design
|
|
10
|
+
*
|
|
11
|
+
* Each run file's contribution (taskId + totalTokens) is tracked
|
|
12
|
+
* individually so that modifications and deletions can be applied
|
|
13
|
+
* as incremental deltas rather than requiring a full re-scan.
|
|
14
|
+
*
|
|
15
|
+
* Change detection uses mtime + file size — the same strategy as
|
|
16
|
+
* hench's `RunChangeDetector` — to avoid reading unchanged files.
|
|
17
|
+
*
|
|
18
|
+
* @module web/server/incremental-task-usage
|
|
19
|
+
*/
|
|
20
|
+
import type { TaskUsageAccumulator } from "./shared-types.js";
|
|
21
|
+
export type { TaskUsageAccumulator } from "./shared-types.js";
|
|
22
|
+
/**
|
|
23
|
+
* Incrementally aggregates per-task token usage from `.hench/runs/` files.
|
|
24
|
+
*
|
|
25
|
+
* First call processes all existing run files (full scan). Subsequent calls
|
|
26
|
+
* detect filesystem changes via mtime+size comparison and only read the
|
|
27
|
+
* files that were added, modified, or deleted — keeping aggregation time
|
|
28
|
+
* constant regardless of total run history size.
|
|
29
|
+
*
|
|
30
|
+
* Usage:
|
|
31
|
+
* ```ts
|
|
32
|
+
* const aggregator = new IncrementalTaskUsageAggregator(runsDir);
|
|
33
|
+
* const usage = await aggregator.getTaskUsage();
|
|
34
|
+
* // { "task-123": { totalTokens: 5000, runCount: 2 }, ... }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare class IncrementalTaskUsageAggregator {
|
|
38
|
+
private readonly runsDir;
|
|
39
|
+
/** Current snapshot of each file's mtime + size. */
|
|
40
|
+
private fileSnapshots;
|
|
41
|
+
/** Per-file contribution to the aggregation (for subtract-on-change). */
|
|
42
|
+
private fileContributions;
|
|
43
|
+
/** Aggregated usage per task ID. */
|
|
44
|
+
private taskUsage;
|
|
45
|
+
/** Whether the initial full scan has been completed. */
|
|
46
|
+
private initialized;
|
|
47
|
+
constructor(runsDir: string);
|
|
48
|
+
/**
|
|
49
|
+
* Get current per-task token usage, incrementally updating from filesystem.
|
|
50
|
+
*
|
|
51
|
+
* First call processes all files; subsequent calls only process changes.
|
|
52
|
+
* Returns a plain object keyed by task ID.
|
|
53
|
+
*/
|
|
54
|
+
getTaskUsage(): Promise<Record<string, TaskUsageAccumulator>>;
|
|
55
|
+
/**
|
|
56
|
+
* Force a full rebuild on the next `getTaskUsage()` call.
|
|
57
|
+
* Useful for testing or when external state is known to have changed.
|
|
58
|
+
*/
|
|
59
|
+
reset(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Remove aggregation entries for task IDs not present in `validTaskIds`.
|
|
62
|
+
*
|
|
63
|
+
* Cleans up both the `taskUsage` accumulator and corresponding
|
|
64
|
+
* `fileContributions` entries. File snapshots are preserved so that
|
|
65
|
+
* the underlying run files are not re-processed on the next refresh
|
|
66
|
+
* (they are still on disk, just no longer contributing to results).
|
|
67
|
+
*
|
|
68
|
+
* Call this after `getTaskUsage()` — or let the route handler call it
|
|
69
|
+
* before returning results — to ensure the UI never sees usage data
|
|
70
|
+
* for tasks that have been deleted from the PRD.
|
|
71
|
+
*
|
|
72
|
+
* @returns The number of stale task IDs that were pruned.
|
|
73
|
+
*/
|
|
74
|
+
pruneStaleEntries(validTaskIds: Set<string>): number;
|
|
75
|
+
private refresh;
|
|
76
|
+
/** Subtract a file's previously tracked contribution from the task total. */
|
|
77
|
+
private subtractContribution;
|
|
78
|
+
/** Add a file's contribution to the task total. */
|
|
79
|
+
private applyContribution;
|
|
80
|
+
/**
|
|
81
|
+
* Read a single run file (plain JSON or gzip-compressed) and extract
|
|
82
|
+
* its task usage contribution.
|
|
83
|
+
* Returns null for files that cannot be read or lack a taskId.
|
|
84
|
+
*/
|
|
85
|
+
private readFileContribution;
|
|
86
|
+
/**
|
|
87
|
+
* Scan the runs directory and return a snapshot map of all run files
|
|
88
|
+
* (`.json` and `.json.gz`). Hidden files (prefixed with `.`) are
|
|
89
|
+
* excluded to avoid picking up checkpoint or metadata files.
|
|
90
|
+
*/
|
|
91
|
+
private scanRunFiles;
|
|
92
|
+
}
|