@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,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feature toggles API routes.
|
|
3
|
+
*
|
|
4
|
+
* Manages feature flags stored in `.n-dx.json` under the `features` key.
|
|
5
|
+
* Flags are organized by package (sourcevision, rex, hench) and control
|
|
6
|
+
* experimental or problematic features across the n-dx toolkit.
|
|
7
|
+
*
|
|
8
|
+
* GET /api/features — current feature flags with metadata
|
|
9
|
+
* PUT /api/features — update feature flags
|
|
10
|
+
*/
|
|
11
|
+
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
import { jsonResponse, errorResponse, readBody } from "./types.js";
|
|
14
|
+
/**
|
|
15
|
+
* Central registry of all feature toggles across n-dx packages.
|
|
16
|
+
* Add new features here as they are developed.
|
|
17
|
+
*/
|
|
18
|
+
const FEATURE_REGISTRY = [
|
|
19
|
+
// ── SourceVision ──────────────────────────────────────────────────
|
|
20
|
+
{
|
|
21
|
+
key: "sourcevision.callGraph",
|
|
22
|
+
label: "Call Graph Analysis",
|
|
23
|
+
description: "Enable call graph extraction during analysis. Traces function calls across files to build a dependency graph at the function level.",
|
|
24
|
+
impact: "Increases analysis time and memory usage. Large codebases may see significant slowdown.",
|
|
25
|
+
package: "sourcevision",
|
|
26
|
+
stability: "experimental",
|
|
27
|
+
defaultValue: false,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
key: "sourcevision.enrichment",
|
|
31
|
+
label: "AI Enrichment Passes",
|
|
32
|
+
description: "Enable AI-powered enrichment that adds architectural insights, problem detection, and improvement suggestions to the analysis.",
|
|
33
|
+
impact: "Requires an API key or CLI access. Each enrichment pass uses token budget.",
|
|
34
|
+
package: "sourcevision",
|
|
35
|
+
stability: "stable",
|
|
36
|
+
defaultValue: true,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
key: "sourcevision.componentCatalog",
|
|
40
|
+
label: "React Component Catalog",
|
|
41
|
+
description: "Extract React/Preact component metadata including props, hooks usage, and component hierarchy.",
|
|
42
|
+
impact: "Only useful for React/Preact projects. Adds a small amount of analysis time.",
|
|
43
|
+
package: "sourcevision",
|
|
44
|
+
stability: "stable",
|
|
45
|
+
defaultValue: true,
|
|
46
|
+
},
|
|
47
|
+
// ── Rex ────────────────────────────────────────────────────────────
|
|
48
|
+
{
|
|
49
|
+
key: "rex.autoComplete",
|
|
50
|
+
label: "Auto-Complete Parent Items",
|
|
51
|
+
description: "Automatically mark parent items (features, epics) as complete when all children are done.",
|
|
52
|
+
impact: "Parent items transition to 'completed' without manual intervention. Disable if you prefer explicit completion.",
|
|
53
|
+
package: "rex",
|
|
54
|
+
stability: "stable",
|
|
55
|
+
defaultValue: true,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
key: "rex.showTokenBudget",
|
|
59
|
+
label: "Show Token Budget",
|
|
60
|
+
description: "Display token budget information on Rex task line items and in the detail side panel. When disabled, only non-zero token usage badges are shown.",
|
|
61
|
+
impact: "Adds budget percentage and remaining capacity indicators to task views. No performance impact.",
|
|
62
|
+
package: "rex",
|
|
63
|
+
stability: "stable",
|
|
64
|
+
defaultValue: false,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
key: "rex.budgetEnforcement",
|
|
68
|
+
label: "Budget Enforcement",
|
|
69
|
+
description: "Enforce token and cost budgets during rex analyze operations. When exceeded, operations are blocked or warned.",
|
|
70
|
+
impact: "When enabled, analysis operations may be interrupted if budget limits are reached.",
|
|
71
|
+
package: "rex",
|
|
72
|
+
stability: "stable",
|
|
73
|
+
defaultValue: false,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
key: "rex.notionSync",
|
|
77
|
+
label: "Notion Sync",
|
|
78
|
+
description: "Enable two-way synchronization between the local PRD and a Notion database. Shows the Notion tab in the Rex sidebar.",
|
|
79
|
+
impact: "Requires Notion integration setup. Sync operations may modify both local and remote data.",
|
|
80
|
+
package: "rex",
|
|
81
|
+
stability: "experimental",
|
|
82
|
+
defaultValue: false,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
key: "rex.integrations",
|
|
86
|
+
label: "Integrations",
|
|
87
|
+
description: "Show the Integrations tab in the Rex sidebar for configuring external service connections.",
|
|
88
|
+
impact: "No performance impact. Hides integration configuration UI when disabled.",
|
|
89
|
+
package: "rex",
|
|
90
|
+
stability: "experimental",
|
|
91
|
+
defaultValue: false,
|
|
92
|
+
},
|
|
93
|
+
// ── Hench ─────────────────────────────────────────────────────────
|
|
94
|
+
{
|
|
95
|
+
key: "hench.autoRetry",
|
|
96
|
+
label: "Automatic Retry on Failure",
|
|
97
|
+
description: "Automatically retry failed task runs with exponential backoff when transient errors occur.",
|
|
98
|
+
impact: "May consume additional tokens when retrying. Useful for flaky API connections.",
|
|
99
|
+
package: "hench",
|
|
100
|
+
stability: "stable",
|
|
101
|
+
defaultValue: true,
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
key: "hench.guardRails",
|
|
105
|
+
label: "Guard Rails",
|
|
106
|
+
description: "Enforce security boundaries: blocked file paths, allowed commands, size limits, and timeouts.",
|
|
107
|
+
impact: "When disabled, the agent has unrestricted file and command access. Keep enabled for safety.",
|
|
108
|
+
package: "hench",
|
|
109
|
+
stability: "stable",
|
|
110
|
+
defaultValue: true,
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
key: "hench.adaptiveWorkflow",
|
|
114
|
+
label: "Adaptive Workflow Adjustment",
|
|
115
|
+
description: "Allow the agent to dynamically adjust its workflow based on task complexity and past performance.",
|
|
116
|
+
impact: "May change execution parameters between runs. Provides better results but less predictable behavior.",
|
|
117
|
+
package: "hench",
|
|
118
|
+
stability: "experimental",
|
|
119
|
+
defaultValue: false,
|
|
120
|
+
},
|
|
121
|
+
];
|
|
122
|
+
// ---------------------------------------------------------------------------
|
|
123
|
+
// Helpers
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
const NDX_CONFIG = ".n-dx.json";
|
|
126
|
+
/** Read .n-dx.json, returning empty object on failure. */
|
|
127
|
+
function readNdxConfig(projectDir) {
|
|
128
|
+
const configPath = join(projectDir, NDX_CONFIG);
|
|
129
|
+
if (!existsSync(configPath))
|
|
130
|
+
return {};
|
|
131
|
+
try {
|
|
132
|
+
return JSON.parse(readFileSync(configPath, "utf-8"));
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
return {};
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/** Write .n-dx.json preserving existing content. */
|
|
139
|
+
function writeNdxConfig(projectDir, config) {
|
|
140
|
+
const configPath = join(projectDir, NDX_CONFIG);
|
|
141
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n", "utf-8");
|
|
142
|
+
}
|
|
143
|
+
/** Get a nested value from an object by dot-separated path. */
|
|
144
|
+
function getByPath(obj, path) {
|
|
145
|
+
const parts = path.split(".");
|
|
146
|
+
let current = obj;
|
|
147
|
+
for (const part of parts) {
|
|
148
|
+
if (current == null || typeof current !== "object")
|
|
149
|
+
return undefined;
|
|
150
|
+
current = current[part];
|
|
151
|
+
}
|
|
152
|
+
return current;
|
|
153
|
+
}
|
|
154
|
+
/** Set a nested value in an object by dot-separated path. */
|
|
155
|
+
function setByPath(obj, path, value) {
|
|
156
|
+
const parts = path.split(".");
|
|
157
|
+
let current = obj;
|
|
158
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
159
|
+
const part = parts[i];
|
|
160
|
+
if (current[part] == null || typeof current[part] !== "object") {
|
|
161
|
+
current[part] = {};
|
|
162
|
+
}
|
|
163
|
+
current = current[part];
|
|
164
|
+
}
|
|
165
|
+
current[parts[parts.length - 1]] = value;
|
|
166
|
+
}
|
|
167
|
+
/** Build toggles list with current values from config. */
|
|
168
|
+
function buildToggles(projectDir) {
|
|
169
|
+
const config = readNdxConfig(projectDir);
|
|
170
|
+
const features = (config.features ?? {});
|
|
171
|
+
return FEATURE_REGISTRY.map((def) => {
|
|
172
|
+
// Key in features section is relative (e.g., "sourcevision.callGraph")
|
|
173
|
+
const stored = getByPath(features, def.key);
|
|
174
|
+
const enabled = typeof stored === "boolean" ? stored : def.defaultValue;
|
|
175
|
+
return {
|
|
176
|
+
key: def.key,
|
|
177
|
+
label: def.label,
|
|
178
|
+
description: def.description,
|
|
179
|
+
impact: def.impact,
|
|
180
|
+
package: def.package,
|
|
181
|
+
stability: def.stability,
|
|
182
|
+
enabled,
|
|
183
|
+
defaultValue: def.defaultValue,
|
|
184
|
+
};
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
// ---------------------------------------------------------------------------
|
|
188
|
+
// Route handler
|
|
189
|
+
// ---------------------------------------------------------------------------
|
|
190
|
+
const FEATURES_PREFIX = "/api/features";
|
|
191
|
+
export async function handleFeaturesRoute(req, res, ctx) {
|
|
192
|
+
const url = req.url || "/";
|
|
193
|
+
const method = req.method || "GET";
|
|
194
|
+
// GET /api/features — return all toggles with current state
|
|
195
|
+
if (method === "GET" && url === FEATURES_PREFIX) {
|
|
196
|
+
const toggles = buildToggles(ctx.projectDir);
|
|
197
|
+
jsonResponse(res, 200, { toggles });
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
// PUT /api/features — update one or more toggle values
|
|
201
|
+
if (method === "PUT" && url === FEATURES_PREFIX) {
|
|
202
|
+
try {
|
|
203
|
+
const body = await readBody(req);
|
|
204
|
+
const parsed = JSON.parse(body);
|
|
205
|
+
if (!parsed.changes || typeof parsed.changes !== "object") {
|
|
206
|
+
errorResponse(res, 400, "Request body must include a 'changes' object mapping feature keys to boolean values.");
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
// Validate all keys exist in registry
|
|
210
|
+
const validKeys = new Set(FEATURE_REGISTRY.map((d) => d.key));
|
|
211
|
+
const invalidKeys = Object.keys(parsed.changes).filter((k) => !validKeys.has(k));
|
|
212
|
+
if (invalidKeys.length > 0) {
|
|
213
|
+
errorResponse(res, 400, `Unknown feature key(s): ${invalidKeys.join(", ")}`);
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
// Validate all values are boolean
|
|
217
|
+
for (const [key, value] of Object.entries(parsed.changes)) {
|
|
218
|
+
if (typeof value !== "boolean") {
|
|
219
|
+
errorResponse(res, 400, `Feature "${key}" value must be a boolean, got ${typeof value}`);
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// Apply changes to .n-dx.json
|
|
224
|
+
const config = readNdxConfig(ctx.projectDir);
|
|
225
|
+
if (!config.features || typeof config.features !== "object") {
|
|
226
|
+
config.features = {};
|
|
227
|
+
}
|
|
228
|
+
const features = config.features;
|
|
229
|
+
const applied = [];
|
|
230
|
+
for (const [key, value] of Object.entries(parsed.changes)) {
|
|
231
|
+
setByPath(features, key, value);
|
|
232
|
+
applied.push({ key, enabled: value });
|
|
233
|
+
}
|
|
234
|
+
writeNdxConfig(ctx.projectDir, config);
|
|
235
|
+
jsonResponse(res, 200, { applied });
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
238
|
+
catch (err) {
|
|
239
|
+
errorResponse(res, 400, err instanceof Error ? err.message : "Invalid request body");
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=routes-features.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes-features.js","sourceRoot":"","sources":["../../src/server/routes-features.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hench API routes — agent run history, workflow configuration, and templates.
|
|
3
|
+
*
|
|
4
|
+
* All endpoints are under /api/hench/.
|
|
5
|
+
*
|
|
6
|
+
* GET /api/hench/runs — list runs with summary (newest first, ?limit=N)
|
|
7
|
+
* GET /api/hench/runs/:id — full run detail with transcript
|
|
8
|
+
* GET /api/hench/runs/health — staleness health check for running runs
|
|
9
|
+
* POST /api/hench/runs/:id/mark-stuck — mark a stuck run as failed
|
|
10
|
+
* GET /api/hench/task-usage — incremental per-task token usage aggregation
|
|
11
|
+
* GET /api/hench/audit — audit info for active tasks (PIDs, resource usage)
|
|
12
|
+
* GET /api/hench/metrics — concurrent execution metrics and resource utilization
|
|
13
|
+
* GET /api/hench/metrics/snapshots — time-series execution metrics snapshots
|
|
14
|
+
* GET /api/hench/memory — system memory, per-process memory, and resource health
|
|
15
|
+
* GET /api/hench/memory/history — per-process memory history (all tracked processes)
|
|
16
|
+
* GET /api/hench/memory/history/:taskId — memory history for a specific task
|
|
17
|
+
* GET /api/hench/memory/leaks — leak detection summary for all active processes
|
|
18
|
+
* GET /api/hench/concurrency — concurrent execution count, limits, and queue status
|
|
19
|
+
* POST /api/hench/execute/:taskId/terminate — terminate a running task
|
|
20
|
+
* GET /api/hench/config — current workflow configuration with field metadata
|
|
21
|
+
* PUT /api/hench/config — update workflow configuration (partial or full)
|
|
22
|
+
* GET /api/hench/templates — list all workflow templates (built-in + user)
|
|
23
|
+
* GET /api/hench/templates/:id — get template details
|
|
24
|
+
* POST /api/hench/templates — create/update a user-defined template
|
|
25
|
+
* POST /api/hench/templates/:id/apply — apply a template to current config
|
|
26
|
+
* DELETE /api/hench/templates/:id — delete a user-defined template
|
|
27
|
+
* POST /api/hench/execute — trigger Hench run for a specific task
|
|
28
|
+
* GET /api/hench/execute/status — get all active execution statuses
|
|
29
|
+
* GET /api/hench/execute/status/:taskId — get specific task execution status
|
|
30
|
+
* GET /api/hench/throttle — current throttle state (paused, concurrency override, etc.)
|
|
31
|
+
* PUT /api/hench/throttle — adjust concurrency limit override
|
|
32
|
+
* POST /api/hench/throttle/pause — pause new task executions
|
|
33
|
+
* POST /api/hench/throttle/resume — resume new task executions
|
|
34
|
+
* POST /api/hench/throttle/emergency-stop — terminate all running executions immediately
|
|
35
|
+
*/
|
|
36
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
37
|
+
import type { ServerContext } from "./types.js";
|
|
38
|
+
import type { WebSocketBroadcaster } from "./websocket.js";
|
|
39
|
+
import { IncrementalTaskUsageAggregator } from "./task-usage.js";
|
|
40
|
+
export declare function getAggregator(runsDir: string): IncrementalTaskUsageAggregator;
|
|
41
|
+
/** Handle Hench API requests. Returns true if the request was handled. */
|
|
42
|
+
export declare function handleHenchRoute(req: IncomingMessage, res: ServerResponse, ctx: ServerContext, broadcast?: WebSocketBroadcaster): boolean | Promise<boolean>;
|
|
43
|
+
/** Execution status for a single task run. */
|
|
44
|
+
export interface TaskExecutionStatus {
|
|
45
|
+
taskId: string;
|
|
46
|
+
taskTitle: string;
|
|
47
|
+
runId: string;
|
|
48
|
+
status: "starting" | "running" | "completed" | "failed";
|
|
49
|
+
startedAt: string;
|
|
50
|
+
finishedAt?: string;
|
|
51
|
+
lastOutput?: string;
|
|
52
|
+
error?: string;
|
|
53
|
+
exitCode?: number | null;
|
|
54
|
+
}
|
|
55
|
+
export type HeartbeatStatus = "healthy" | "warning" | "unresponsive" | "unknown";
|
|
56
|
+
/**
|
|
57
|
+
* Start a periodic heartbeat monitor that scans for unresponsive running tasks
|
|
58
|
+
* and broadcasts alerts via WebSocket.
|
|
59
|
+
*
|
|
60
|
+
* The monitor runs every 30 seconds and broadcasts:
|
|
61
|
+
* - `hench:heartbeat-alert` when a task transitions to "warning" or "unresponsive"
|
|
62
|
+
* - `hench:heartbeat-status` with a summary of all running task heartbeats
|
|
63
|
+
*
|
|
64
|
+
* Call this once at server startup. The timer is unref'd so it won't prevent
|
|
65
|
+
* process exit.
|
|
66
|
+
*/
|
|
67
|
+
export declare function startHeartbeatMonitor(runsDir: string, broadcast: WebSocketBroadcaster): void;
|
|
68
|
+
/**
|
|
69
|
+
* Start a periodic concurrency status broadcaster.
|
|
70
|
+
*
|
|
71
|
+
* Broadcasts `hench:concurrency-status` via WebSocket every 10 seconds
|
|
72
|
+
* with current process count, max limit, utilization level, and queue info.
|
|
73
|
+
* This enables real-time updates of the concurrency panel in the dashboard.
|
|
74
|
+
*
|
|
75
|
+
* Call this once at server startup alongside startHeartbeatMonitor.
|
|
76
|
+
* The timer is unref'd so it won't prevent process exit.
|
|
77
|
+
*/
|
|
78
|
+
export declare function startConcurrencyMonitor(ctx: ServerContext, broadcast: WebSocketBroadcaster): void;
|
|
79
|
+
/**
|
|
80
|
+
* Periodically broadcast memory + resource health via WebSocket.
|
|
81
|
+
* Runs every 10 seconds so the memory panel stays live.
|
|
82
|
+
*
|
|
83
|
+
* Also records per-process RSS samples into the process memory tracker
|
|
84
|
+
* for historical analysis and leak detection.
|
|
85
|
+
*/
|
|
86
|
+
export declare function startMemoryMonitor(broadcast: WebSocketBroadcaster): void;
|
|
87
|
+
/**
|
|
88
|
+
* Result returned by {@link shutdownActiveExecutions}.
|
|
89
|
+
*
|
|
90
|
+
* Callers (e.g. `gracefulShutdown` in start.ts) use these counts to
|
|
91
|
+
* build a final verification summary and to decide whether to exit clean.
|
|
92
|
+
*/
|
|
93
|
+
export interface ShutdownExecutionsResult {
|
|
94
|
+
/** Number of executions that were cleanly terminated. */
|
|
95
|
+
terminated: number;
|
|
96
|
+
/** Number of executions that failed to terminate (kill errored or timed out). */
|
|
97
|
+
failed: number;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Gracefully terminate all active hench executions on server shutdown.
|
|
101
|
+
*
|
|
102
|
+
* Iterates over all entries in `activeExecutions`, sends SIGTERM to each
|
|
103
|
+
* managed child, and waits up to `gracePeriodMs` for them to exit. Any
|
|
104
|
+
* process that does not exit within the grace period receives SIGKILL.
|
|
105
|
+
*
|
|
106
|
+
* This must be called before the HTTP server closes so that child processes
|
|
107
|
+
* are not orphaned. The function resolves only after all processes have
|
|
108
|
+
* been signalled and (best-effort) waited for.
|
|
109
|
+
*
|
|
110
|
+
* @param gracePeriodMs How long to wait for each process to exit gracefully
|
|
111
|
+
* before force-killing it. Defaults to 5 000 ms.
|
|
112
|
+
* Can be overridden via the `HENCH_SHUTDOWN_TIMEOUT_MS`
|
|
113
|
+
* environment variable.
|
|
114
|
+
* @returns Counts of terminated and failed executions for verification.
|
|
115
|
+
*/
|
|
116
|
+
export declare function shutdownActiveExecutions(gracePeriodMs?: number): Promise<ShutdownExecutionsResult>;
|