@jagilber-org/index-server 1.19.1
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/CHANGELOG.md +1218 -0
- package/CODE_OF_CONDUCT.md +49 -0
- package/CONTRIBUTING.md +75 -0
- package/LICENSE +21 -0
- package/README.md +523 -0
- package/SECURITY.md +50 -0
- package/dist/config/configUtils.d.ts +11 -0
- package/dist/config/configUtils.js +87 -0
- package/dist/config/dashboardConfig.d.ts +45 -0
- package/dist/config/dashboardConfig.js +63 -0
- package/dist/config/defaultValues.d.ts +61 -0
- package/dist/config/defaultValues.js +70 -0
- package/dist/config/dirConstants.d.ts +17 -0
- package/dist/config/dirConstants.js +28 -0
- package/dist/config/featureConfig.d.ts +61 -0
- package/dist/config/featureConfig.js +121 -0
- package/dist/config/runtimeConfig.d.ts +145 -0
- package/dist/config/runtimeConfig.js +334 -0
- package/dist/config/serverConfig.d.ts +90 -0
- package/dist/config/serverConfig.js +164 -0
- package/dist/dashboard/analytics/AnalyticsEngine.d.ts +142 -0
- package/dist/dashboard/analytics/AnalyticsEngine.js +373 -0
- package/dist/dashboard/analytics/BusinessIntelligence.d.ts +187 -0
- package/dist/dashboard/analytics/BusinessIntelligence.js +594 -0
- package/dist/dashboard/client/admin.html +2150 -0
- package/dist/dashboard/client/chunks/mermaid-layout-elk.esm.min/chunk-SP2CHFBE.mjs +1 -0
- package/dist/dashboard/client/chunks/mermaid-layout-elk.esm.min/render-T6MDALS3.mjs +27 -0
- package/dist/dashboard/client/css/admin.css +1466 -0
- package/dist/dashboard/client/js/admin.boot.js +359 -0
- package/dist/dashboard/client/js/admin.config.js +196 -0
- package/dist/dashboard/client/js/admin.embeddings.js +425 -0
- package/dist/dashboard/client/js/admin.graph.js +583 -0
- package/dist/dashboard/client/js/admin.instances.js +120 -0
- package/dist/dashboard/client/js/admin.instructions.js +552 -0
- package/dist/dashboard/client/js/admin.logs.js +113 -0
- package/dist/dashboard/client/js/admin.maintenance.js +354 -0
- package/dist/dashboard/client/js/admin.messaging.js +635 -0
- package/dist/dashboard/client/js/admin.monitor.js +181 -0
- package/dist/dashboard/client/js/admin.overview.js +221 -0
- package/dist/dashboard/client/js/admin.performance.js +61 -0
- package/dist/dashboard/client/js/admin.sessions.js +293 -0
- package/dist/dashboard/client/js/admin.sqlite.js +366 -0
- package/dist/dashboard/client/js/admin.utils.js +49 -0
- package/dist/dashboard/client/js/chart.umd.js +14 -0
- package/dist/dashboard/client/js/elk.bundled.js +6696 -0
- package/dist/dashboard/client/js/marked.umd.js +74 -0
- package/dist/dashboard/client/js/mermaid.min.js +3022 -0
- package/dist/dashboard/client/mermaid-layout-elk.esm.min.mjs +1 -0
- package/dist/dashboard/export/DataExporter.d.ts +169 -0
- package/dist/dashboard/export/DataExporter.js +737 -0
- package/dist/dashboard/export/exporters/csvExporter.d.ts +11 -0
- package/dist/dashboard/export/exporters/csvExporter.js +46 -0
- package/dist/dashboard/export/exporters/exportTypes.d.ts +89 -0
- package/dist/dashboard/export/exporters/exportTypes.js +5 -0
- package/dist/dashboard/export/exporters/jsonExporter.d.ts +7 -0
- package/dist/dashboard/export/exporters/jsonExporter.js +22 -0
- package/dist/dashboard/export/exporters/xmlExporter.d.ts +17 -0
- package/dist/dashboard/export/exporters/xmlExporter.js +175 -0
- package/dist/dashboard/integration/APIIntegration.d.ts +41 -0
- package/dist/dashboard/integration/APIIntegration.js +95 -0
- package/dist/dashboard/security/SecurityMonitor.d.ts +167 -0
- package/dist/dashboard/security/SecurityMonitor.js +559 -0
- package/dist/dashboard/server/AdminPanel.d.ts +183 -0
- package/dist/dashboard/server/AdminPanel.js +792 -0
- package/dist/dashboard/server/AdminPanelConfig.d.ts +42 -0
- package/dist/dashboard/server/AdminPanelConfig.js +80 -0
- package/dist/dashboard/server/AdminPanelState.d.ts +47 -0
- package/dist/dashboard/server/AdminPanelState.js +214 -0
- package/dist/dashboard/server/ApiRoutes.d.ts +17 -0
- package/dist/dashboard/server/ApiRoutes.js +149 -0
- package/dist/dashboard/server/DashboardServer.d.ts +49 -0
- package/dist/dashboard/server/DashboardServer.js +159 -0
- package/dist/dashboard/server/FileMetricsStorage.d.ts +49 -0
- package/dist/dashboard/server/FileMetricsStorage.js +195 -0
- package/dist/dashboard/server/HttpTransport.d.ts +23 -0
- package/dist/dashboard/server/HttpTransport.js +116 -0
- package/dist/dashboard/server/InstanceManager.d.ts +53 -0
- package/dist/dashboard/server/InstanceManager.js +284 -0
- package/dist/dashboard/server/KnowledgeStore.d.ts +35 -0
- package/dist/dashboard/server/KnowledgeStore.js +105 -0
- package/dist/dashboard/server/LeaderElection.d.ts +81 -0
- package/dist/dashboard/server/LeaderElection.js +268 -0
- package/dist/dashboard/server/MetricsCollector.d.ts +200 -0
- package/dist/dashboard/server/MetricsCollector.js +803 -0
- package/dist/dashboard/server/SessionPersistenceManager.d.ts +88 -0
- package/dist/dashboard/server/SessionPersistenceManager.js +457 -0
- package/dist/dashboard/server/ThinClient.d.ts +64 -0
- package/dist/dashboard/server/ThinClient.js +237 -0
- package/dist/dashboard/server/WebSocketManager.d.ts +161 -0
- package/dist/dashboard/server/WebSocketManager.js +463 -0
- package/dist/dashboard/server/httpLifecycle.d.ts +17 -0
- package/dist/dashboard/server/httpLifecycle.js +35 -0
- package/dist/dashboard/server/legacyDashboardHtml.d.ts +9 -0
- package/dist/dashboard/server/legacyDashboardHtml.js +618 -0
- package/dist/dashboard/server/legacyDashboardStyles.d.ts +5 -0
- package/dist/dashboard/server/legacyDashboardStyles.js +490 -0
- package/dist/dashboard/server/metricsAggregation.d.ts +252 -0
- package/dist/dashboard/server/metricsAggregation.js +206 -0
- package/dist/dashboard/server/metricsSerializer.d.ts +25 -0
- package/dist/dashboard/server/metricsSerializer.js +195 -0
- package/dist/dashboard/server/routes/admin.routes.d.ts +16 -0
- package/dist/dashboard/server/routes/admin.routes.js +596 -0
- package/dist/dashboard/server/routes/alerts.routes.d.ts +7 -0
- package/dist/dashboard/server/routes/alerts.routes.js +93 -0
- package/dist/dashboard/server/routes/api.feedback.routes.d.ts +73 -0
- package/dist/dashboard/server/routes/api.feedback.routes.js +171 -0
- package/dist/dashboard/server/routes/api.instructions.routes.d.ts +101 -0
- package/dist/dashboard/server/routes/api.instructions.routes.js +213 -0
- package/dist/dashboard/server/routes/api.usage.routes.d.ts +57 -0
- package/dist/dashboard/server/routes/api.usage.routes.js +374 -0
- package/dist/dashboard/server/routes/embeddings.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/embeddings.routes.js +246 -0
- package/dist/dashboard/server/routes/graph.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/graph.routes.js +280 -0
- package/dist/dashboard/server/routes/index.d.ts +38 -0
- package/dist/dashboard/server/routes/index.js +194 -0
- package/dist/dashboard/server/routes/instances.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/instances.routes.js +35 -0
- package/dist/dashboard/server/routes/instructions.routes.d.ts +8 -0
- package/dist/dashboard/server/routes/instructions.routes.js +336 -0
- package/dist/dashboard/server/routes/knowledge.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/knowledge.routes.js +82 -0
- package/dist/dashboard/server/routes/logs.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/logs.routes.js +164 -0
- package/dist/dashboard/server/routes/messaging.routes.d.ts +16 -0
- package/dist/dashboard/server/routes/messaging.routes.js +293 -0
- package/dist/dashboard/server/routes/metrics.routes.d.ts +10 -0
- package/dist/dashboard/server/routes/metrics.routes.js +346 -0
- package/dist/dashboard/server/routes/scripts.routes.d.ts +9 -0
- package/dist/dashboard/server/routes/scripts.routes.js +84 -0
- package/dist/dashboard/server/routes/sqlite.routes.d.ts +9 -0
- package/dist/dashboard/server/routes/sqlite.routes.js +569 -0
- package/dist/dashboard/server/routes/status.routes.d.ts +7 -0
- package/dist/dashboard/server/routes/status.routes.js +183 -0
- package/dist/dashboard/server/routes/synthetic.routes.d.ts +7 -0
- package/dist/dashboard/server/routes/synthetic.routes.js +195 -0
- package/dist/dashboard/server/routes/tools.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/tools.routes.js +46 -0
- package/dist/dashboard/server/routes/usage.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/usage.routes.js +25 -0
- package/dist/dashboard/server/wsInit.d.ts +16 -0
- package/dist/dashboard/server/wsInit.js +35 -0
- package/dist/externalClientLib.d.ts +1 -0
- package/dist/externalClientLib.js +2 -0
- package/dist/minimal/index.d.ts +1 -0
- package/dist/minimal/index.js +140 -0
- package/dist/models/SessionPersistence.d.ts +115 -0
- package/dist/models/SessionPersistence.js +66 -0
- package/dist/models/instruction.d.ts +45 -0
- package/dist/models/instruction.js +2 -0
- package/dist/perf/benchmark.d.ts +1 -0
- package/dist/perf/benchmark.js +50 -0
- package/dist/portableClientWrapper.d.ts +1 -0
- package/dist/portableClientWrapper.js +2 -0
- package/dist/schemas/index.d.ts +128 -0
- package/dist/schemas/index.js +371 -0
- package/dist/scripts/runPerformanceBaseline.d.ts +1 -0
- package/dist/scripts/runPerformanceBaseline.js +17 -0
- package/dist/server/handshakeManager.d.ts +25 -0
- package/dist/server/handshakeManager.js +472 -0
- package/dist/server/index-server.d.ts +56 -0
- package/dist/server/index-server.js +822 -0
- package/dist/server/registry.d.ts +44 -0
- package/dist/server/registry.js +236 -0
- package/dist/server/sdkServer.d.ts +8 -0
- package/dist/server/sdkServer.js +299 -0
- package/dist/server/shutdownGuard.d.ts +41 -0
- package/dist/server/shutdownGuard.js +52 -0
- package/dist/server/thin-client.d.ts +22 -0
- package/dist/server/thin-client.js +111 -0
- package/dist/server/transport.d.ts +41 -0
- package/dist/server/transport.js +312 -0
- package/dist/server/transportFactory.d.ts +21 -0
- package/dist/server/transportFactory.js +429 -0
- package/dist/services/atomicFs.d.ts +22 -0
- package/dist/services/atomicFs.js +103 -0
- package/dist/services/auditLog.d.ts +38 -0
- package/dist/services/auditLog.js +142 -0
- package/dist/services/autoBackup.d.ts +14 -0
- package/dist/services/autoBackup.js +171 -0
- package/dist/services/autoSplit.d.ts +32 -0
- package/dist/services/autoSplit.js +113 -0
- package/dist/services/backupZip.d.ts +25 -0
- package/dist/services/backupZip.js +110 -0
- package/dist/services/bootstrapGating.d.ts +123 -0
- package/dist/services/bootstrapGating.js +221 -0
- package/dist/services/canonical.d.ts +23 -0
- package/dist/services/canonical.js +65 -0
- package/dist/services/categoryRules.d.ts +7 -0
- package/dist/services/categoryRules.js +37 -0
- package/dist/services/classificationService.d.ts +42 -0
- package/dist/services/classificationService.js +168 -0
- package/dist/services/embeddingService.d.ts +62 -0
- package/dist/services/embeddingService.js +259 -0
- package/dist/services/errors.d.ts +22 -0
- package/dist/services/errors.js +31 -0
- package/dist/services/featureFlags.d.ts +25 -0
- package/dist/services/featureFlags.js +89 -0
- package/dist/services/features.d.ts +13 -0
- package/dist/services/features.js +35 -0
- package/dist/services/handlers/instructions.add.d.ts +1 -0
- package/dist/services/handlers/instructions.add.js +496 -0
- package/dist/services/handlers/instructions.groom.d.ts +1 -0
- package/dist/services/handlers/instructions.groom.js +523 -0
- package/dist/services/handlers/instructions.import.d.ts +1 -0
- package/dist/services/handlers/instructions.import.js +173 -0
- package/dist/services/handlers/instructions.patch.d.ts +1 -0
- package/dist/services/handlers/instructions.patch.js +167 -0
- package/dist/services/handlers/instructions.query.d.ts +163 -0
- package/dist/services/handlers/instructions.query.js +522 -0
- package/dist/services/handlers/instructions.reload.d.ts +1 -0
- package/dist/services/handlers/instructions.reload.js +13 -0
- package/dist/services/handlers/instructions.remove.d.ts +1 -0
- package/dist/services/handlers/instructions.remove.js +118 -0
- package/dist/services/handlers/instructions.shared.d.ts +31 -0
- package/dist/services/handlers/instructions.shared.js +124 -0
- package/dist/services/handlers.activation.d.ts +1 -0
- package/dist/services/handlers.activation.js +203 -0
- package/dist/services/handlers.bootstrap.d.ts +1 -0
- package/dist/services/handlers.bootstrap.js +38 -0
- package/dist/services/handlers.dashboardConfig.d.ts +34 -0
- package/dist/services/handlers.dashboardConfig.js +108 -0
- package/dist/services/handlers.diagnostics.d.ts +1 -0
- package/dist/services/handlers.diagnostics.js +64 -0
- package/dist/services/handlers.feedback.d.ts +15 -0
- package/dist/services/handlers.feedback.js +378 -0
- package/dist/services/handlers.gates.d.ts +1 -0
- package/dist/services/handlers.gates.js +46 -0
- package/dist/services/handlers.graph.d.ts +53 -0
- package/dist/services/handlers.graph.js +231 -0
- package/dist/services/handlers.help.d.ts +1 -0
- package/dist/services/handlers.help.js +119 -0
- package/dist/services/handlers.instructionSchema.d.ts +1 -0
- package/dist/services/handlers.instructionSchema.js +227 -0
- package/dist/services/handlers.instructions.d.ts +8 -0
- package/dist/services/handlers.instructions.js +14 -0
- package/dist/services/handlers.instructionsDiagnostics.d.ts +1 -0
- package/dist/services/handlers.instructionsDiagnostics.js +14 -0
- package/dist/services/handlers.integrity.d.ts +1 -0
- package/dist/services/handlers.integrity.js +35 -0
- package/dist/services/handlers.manifest.d.ts +1 -0
- package/dist/services/handlers.manifest.js +24 -0
- package/dist/services/handlers.messaging.d.ts +12 -0
- package/dist/services/handlers.messaging.js +203 -0
- package/dist/services/handlers.metrics.d.ts +1 -0
- package/dist/services/handlers.metrics.js +43 -0
- package/dist/services/handlers.promote.d.ts +1 -0
- package/dist/services/handlers.promote.js +306 -0
- package/dist/services/handlers.prompt.d.ts +1 -0
- package/dist/services/handlers.prompt.js +7 -0
- package/dist/services/handlers.search.d.ts +69 -0
- package/dist/services/handlers.search.js +645 -0
- package/dist/services/handlers.testPrimitive.d.ts +1 -0
- package/dist/services/handlers.testPrimitive.js +5 -0
- package/dist/services/handlers.trace.d.ts +1 -0
- package/dist/services/handlers.trace.js +31 -0
- package/dist/services/handlers.usage.d.ts +1 -0
- package/dist/services/handlers.usage.js +11 -0
- package/dist/services/hotScore.d.ts +137 -0
- package/dist/services/hotScore.js +244 -0
- package/dist/services/indexContext.d.ts +117 -0
- package/dist/services/indexContext.js +968 -0
- package/dist/services/indexLoader.d.ts +44 -0
- package/dist/services/indexLoader.js +921 -0
- package/dist/services/indexRepository.d.ts +32 -0
- package/dist/services/indexRepository.js +71 -0
- package/dist/services/indexingService.d.ts +1 -0
- package/dist/services/indexingService.js +2 -0
- package/dist/services/instructions.dispatcher.d.ts +1 -0
- package/dist/services/instructions.dispatcher.js +231 -0
- package/dist/services/logPrefix.d.ts +1 -0
- package/dist/services/logPrefix.js +30 -0
- package/dist/services/logger.d.ts +52 -0
- package/dist/services/logger.js +268 -0
- package/dist/services/manifestManager.d.ts +82 -0
- package/dist/services/manifestManager.js +200 -0
- package/dist/services/messaging/agentMailbox.d.ts +60 -0
- package/dist/services/messaging/agentMailbox.js +353 -0
- package/dist/services/messaging/messagingPersistence.d.ts +20 -0
- package/dist/services/messaging/messagingPersistence.js +111 -0
- package/dist/services/messaging/messagingTypes.d.ts +150 -0
- package/dist/services/messaging/messagingTypes.js +66 -0
- package/dist/services/ownershipService.d.ts +1 -0
- package/dist/services/ownershipService.js +38 -0
- package/dist/services/performanceBaseline.d.ts +19 -0
- package/dist/services/performanceBaseline.js +210 -0
- package/dist/services/preflight.d.ts +12 -0
- package/dist/services/preflight.js +79 -0
- package/dist/services/promptReviewService.d.ts +44 -0
- package/dist/services/promptReviewService.js +101 -0
- package/dist/services/responseEnvelope.d.ts +6 -0
- package/dist/services/responseEnvelope.js +25 -0
- package/dist/services/seedBootstrap.d.ts +34 -0
- package/dist/services/seedBootstrap.js +427 -0
- package/dist/services/storage/factory.d.ts +17 -0
- package/dist/services/storage/factory.js +35 -0
- package/dist/services/storage/hashUtils.d.ts +11 -0
- package/dist/services/storage/hashUtils.js +35 -0
- package/dist/services/storage/index.d.ts +12 -0
- package/dist/services/storage/index.js +18 -0
- package/dist/services/storage/jsonFileStore.d.ts +32 -0
- package/dist/services/storage/jsonFileStore.js +241 -0
- package/dist/services/storage/migrationEngine.d.ts +35 -0
- package/dist/services/storage/migrationEngine.js +93 -0
- package/dist/services/storage/sqliteMessageStore.d.ts +53 -0
- package/dist/services/storage/sqliteMessageStore.js +146 -0
- package/dist/services/storage/sqliteSchema.d.ts +12 -0
- package/dist/services/storage/sqliteSchema.js +122 -0
- package/dist/services/storage/sqliteStore.d.ts +41 -0
- package/dist/services/storage/sqliteStore.js +339 -0
- package/dist/services/storage/sqliteUsageStore.d.ts +35 -0
- package/dist/services/storage/sqliteUsageStore.js +94 -0
- package/dist/services/storage/types.d.ts +171 -0
- package/dist/services/storage/types.js +12 -0
- package/dist/services/toolHandlers.d.ts +23 -0
- package/dist/services/toolHandlers.js +50 -0
- package/dist/services/toolRegistry.d.ts +20 -0
- package/dist/services/toolRegistry.js +490 -0
- package/dist/services/toolRegistry.zod.d.ts +10 -0
- package/dist/services/toolRegistry.zod.js +323 -0
- package/dist/services/tracing.d.ts +26 -0
- package/dist/services/tracing.js +260 -0
- package/dist/services/usageBuckets.d.ts +161 -0
- package/dist/services/usageBuckets.js +364 -0
- package/dist/services/validationService.d.ts +38 -0
- package/dist/services/validationService.js +125 -0
- package/dist/utils/BufferRing.d.ts +203 -0
- package/dist/utils/BufferRing.js +551 -0
- package/dist/utils/BufferRingExamples.d.ts +55 -0
- package/dist/utils/BufferRingExamples.js +188 -0
- package/dist/utils/envUtils.d.ts +42 -0
- package/dist/utils/envUtils.js +80 -0
- package/dist/utils/memoryMonitor.d.ts +83 -0
- package/dist/utils/memoryMonitor.js +275 -0
- package/dist/versioning/schemaVersion.d.ts +6 -0
- package/dist/versioning/schemaVersion.js +93 -0
- package/package.json +134 -0
- package/schemas/README.md +13 -0
- package/schemas/feedback-entry.schema.json +27 -0
- package/schemas/graph-export-v2.schema.json +60 -0
- package/schemas/index-server.code-schema.json +38477 -0
- package/schemas/instruction.schema.json +262 -0
- package/schemas/json-schema/SessionPersistence-persisted-admin-session.schema.json +54 -0
- package/schemas/json-schema/SessionPersistence-persisted-session-history-entry.schema.json +51 -0
- package/schemas/json-schema/SessionPersistence-persisted-web-socket-connection.schema.json +54 -0
- package/schemas/json-schema/SessionPersistence-session-persistence-config.schema.json +110 -0
- package/schemas/json-schema/SessionPersistence-session-persistence-data.schema.json +229 -0
- package/schemas/json-schema/SessionPersistence-session-persistence-manifest.schema.json +109 -0
- package/schemas/json-schema/SessionPersistence-session-persistence-metadata.schema.json +55 -0
- package/schemas/json-schema/instruction-audience-scope.schema.json +14 -0
- package/schemas/json-schema/instruction-content-type.schema.json +17 -0
- package/schemas/json-schema/instruction-instruction-entry.schema.json +206 -0
- package/schemas/json-schema/instruction-requirement-level.schema.json +16 -0
- package/schemas/manifest.json +78 -0
- package/schemas/manifest.schema.json +33 -0
- package/schemas/usage-batch.schema.json +16 -0
- package/schemas/usage-buckets.schema.json +30 -0
- package/schemas/usage-event.schema.json +17 -0
- package/scripts/copy-dashboard-assets.mjs +170 -0
- package/scripts/setup-hooks.cjs +28 -0
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Feedback/Emit System for Index Server
|
|
4
|
+
*
|
|
5
|
+
* Provides MCP protocol-compliant tools for clients to submit structured feedback,
|
|
6
|
+
* status reports, security issues, feature requests, and other communications
|
|
7
|
+
* to server administrators or monitoring systems.
|
|
8
|
+
*
|
|
9
|
+
* This system follows MCP best practices:
|
|
10
|
+
* - Tools are discoverable via tools/list
|
|
11
|
+
* - Input validation via JSON schemas
|
|
12
|
+
* - Structured responses for programmatic consumption
|
|
13
|
+
* - Proper error handling and logging
|
|
14
|
+
* - Audit trail for security and compliance
|
|
15
|
+
*/
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
const registry_1 = require("../server/registry");
|
|
21
|
+
const logger_1 = require("./logger");
|
|
22
|
+
const runtimeConfig_1 = require("../config/runtimeConfig");
|
|
23
|
+
const fs_1 = __importDefault(require("fs"));
|
|
24
|
+
const path_1 = __importDefault(require("path"));
|
|
25
|
+
const crypto_1 = require("crypto");
|
|
26
|
+
// Directory is resolved dynamically so tests can override via env per test case.
|
|
27
|
+
// Fall back to config for max entries; tests may still override INDEX_SERVER_FEEDBACK_DIR.
|
|
28
|
+
function getMaxEntries() {
|
|
29
|
+
return (0, runtimeConfig_1.getRuntimeConfig)().feedback.maxEntries;
|
|
30
|
+
}
|
|
31
|
+
function getFeedbackDir() {
|
|
32
|
+
return (0, runtimeConfig_1.getRuntimeConfig)().feedback.dir;
|
|
33
|
+
}
|
|
34
|
+
function getFeedbackFile() {
|
|
35
|
+
return path_1.default.join(getFeedbackDir(), 'feedback-entries.json');
|
|
36
|
+
}
|
|
37
|
+
function ensureFeedbackDir() {
|
|
38
|
+
const dir = getFeedbackDir();
|
|
39
|
+
if (!fs_1.default.existsSync(dir)) {
|
|
40
|
+
try {
|
|
41
|
+
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
(0, logger_1.logError)('[feedback] Failed to create feedback directory', { error: String(error), dir });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return dir;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Load feedback entries from storage
|
|
51
|
+
*/
|
|
52
|
+
function loadFeedbackStorage() {
|
|
53
|
+
const file = getFeedbackFile();
|
|
54
|
+
ensureFeedbackDir();
|
|
55
|
+
try {
|
|
56
|
+
if (fs_1.default.existsSync(file)) {
|
|
57
|
+
const content = fs_1.default.readFileSync(file, 'utf8');
|
|
58
|
+
const parsed = JSON.parse(content);
|
|
59
|
+
// Validate structure
|
|
60
|
+
if (!parsed.entries || !Array.isArray(parsed.entries)) {
|
|
61
|
+
throw new Error('Invalid feedback storage format');
|
|
62
|
+
}
|
|
63
|
+
return parsed;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
(0, logger_1.logWarn)('[feedback] Failed to load feedback storage, initializing empty', { error: String(error) });
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
entries: [],
|
|
71
|
+
lastUpdated: new Date().toISOString(),
|
|
72
|
+
version: '1.0.0'
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Save feedback entries to storage
|
|
77
|
+
*/
|
|
78
|
+
function saveFeedbackStorage(storage) {
|
|
79
|
+
const file = getFeedbackFile();
|
|
80
|
+
ensureFeedbackDir();
|
|
81
|
+
try {
|
|
82
|
+
// Limit storage size
|
|
83
|
+
const maxEntries = getMaxEntries();
|
|
84
|
+
if (storage.entries.length > maxEntries) {
|
|
85
|
+
// Keep most recent entries
|
|
86
|
+
storage.entries = storage.entries
|
|
87
|
+
.sort((a, b) => b.timestamp.localeCompare(a.timestamp))
|
|
88
|
+
.slice(0, maxEntries);
|
|
89
|
+
}
|
|
90
|
+
storage.lastUpdated = new Date().toISOString();
|
|
91
|
+
const content = JSON.stringify(storage, null, 2);
|
|
92
|
+
fs_1.default.writeFileSync(file, content, 'utf8');
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
(0, logger_1.logError)('[feedback] Failed to save feedback storage', error instanceof Error ? error : { error: String(error) });
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Generate unique ID for feedback entry
|
|
101
|
+
*/
|
|
102
|
+
function generateFeedbackId(type, timestamp) {
|
|
103
|
+
const hash = (0, crypto_1.createHash)('sha256');
|
|
104
|
+
hash.update(`${type}-${timestamp}-${Math.random()}`);
|
|
105
|
+
return hash.digest('hex').substring(0, 16);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* feedback_submit - Submit new feedback entry
|
|
109
|
+
*/
|
|
110
|
+
(0, registry_1.registerHandler)('feedback_submit', (params) => {
|
|
111
|
+
// Validate required parameters
|
|
112
|
+
if (!params.type || !params.severity || !params.title || !params.description) {
|
|
113
|
+
throw new Error('Missing required parameters: type, severity, title, description');
|
|
114
|
+
}
|
|
115
|
+
// Validate enum values
|
|
116
|
+
const validTypes = ['issue', 'status', 'security', 'feature-request', 'bug-report', 'performance', 'usability', 'other'];
|
|
117
|
+
const validSeverities = ['low', 'medium', 'high', 'critical'];
|
|
118
|
+
if (!validTypes.includes(params.type)) {
|
|
119
|
+
throw new Error(`Invalid type. Must be one of: ${validTypes.join(', ')}`);
|
|
120
|
+
}
|
|
121
|
+
if (!validSeverities.includes(params.severity)) {
|
|
122
|
+
throw new Error(`Invalid severity. Must be one of: ${validSeverities.join(', ')}`);
|
|
123
|
+
}
|
|
124
|
+
const timestamp = new Date().toISOString();
|
|
125
|
+
const entry = {
|
|
126
|
+
id: generateFeedbackId(params.type, timestamp),
|
|
127
|
+
timestamp,
|
|
128
|
+
type: params.type,
|
|
129
|
+
severity: params.severity,
|
|
130
|
+
title: params.title.substring(0, 200), // Limit title length
|
|
131
|
+
description: params.description.substring(0, 10000), // Limit description length
|
|
132
|
+
context: params.context,
|
|
133
|
+
metadata: params.metadata,
|
|
134
|
+
tags: params.tags?.slice(0, 10), // Limit number of tags
|
|
135
|
+
status: 'new'
|
|
136
|
+
};
|
|
137
|
+
const storage = loadFeedbackStorage();
|
|
138
|
+
storage.entries.push(entry);
|
|
139
|
+
saveFeedbackStorage(storage);
|
|
140
|
+
// Log feedback submission for audit trail
|
|
141
|
+
(0, logger_1.logInfo)('[feedback] Feedback submitted', {
|
|
142
|
+
id: entry.id,
|
|
143
|
+
type: entry.type,
|
|
144
|
+
severity: entry.severity,
|
|
145
|
+
title: entry.title
|
|
146
|
+
});
|
|
147
|
+
// For security issues, also log to stderr for immediate visibility
|
|
148
|
+
if (entry.type === 'security' || entry.severity === 'critical') {
|
|
149
|
+
try {
|
|
150
|
+
process.stderr.write(`[SECURITY/CRITICAL] Feedback ID: ${entry.id}, Type: ${entry.type}, Title: ${entry.title}\n`);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// Ignore stderr write failures
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
success: true,
|
|
158
|
+
feedbackId: entry.id,
|
|
159
|
+
timestamp: entry.timestamp,
|
|
160
|
+
message: 'Feedback submitted successfully'
|
|
161
|
+
};
|
|
162
|
+
});
|
|
163
|
+
/**
|
|
164
|
+
* feedback_list - List feedback entries with filtering
|
|
165
|
+
*/
|
|
166
|
+
(0, registry_1.registerHandler)('feedback_list', (params) => {
|
|
167
|
+
const storage = loadFeedbackStorage();
|
|
168
|
+
let entries = [...storage.entries];
|
|
169
|
+
// Apply filters
|
|
170
|
+
if (params.type) {
|
|
171
|
+
entries = entries.filter(e => e.type === params.type);
|
|
172
|
+
}
|
|
173
|
+
if (params.severity) {
|
|
174
|
+
entries = entries.filter(e => e.severity === params.severity);
|
|
175
|
+
}
|
|
176
|
+
if (params.status) {
|
|
177
|
+
entries = entries.filter(e => e.status === params.status);
|
|
178
|
+
}
|
|
179
|
+
if (typeof params.since === 'string' && params.since) {
|
|
180
|
+
const sinceVal = params.since;
|
|
181
|
+
entries = entries.filter(e => e.timestamp >= sinceVal);
|
|
182
|
+
}
|
|
183
|
+
if (params.tags && params.tags.length > 0) {
|
|
184
|
+
entries = entries.filter(e => e.tags && params.tags.some(tag => e.tags.includes(tag)));
|
|
185
|
+
}
|
|
186
|
+
// Sort by timestamp (newest first)
|
|
187
|
+
entries.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
|
|
188
|
+
// Apply pagination
|
|
189
|
+
const limit = Math.min(params.limit || 50, 200); // Max 200 entries per request
|
|
190
|
+
const offset = params.offset || 0;
|
|
191
|
+
const paginatedEntries = entries.slice(offset, offset + limit);
|
|
192
|
+
return {
|
|
193
|
+
entries: paginatedEntries,
|
|
194
|
+
total: entries.length,
|
|
195
|
+
limit,
|
|
196
|
+
offset,
|
|
197
|
+
hasMore: offset + limit < entries.length
|
|
198
|
+
};
|
|
199
|
+
});
|
|
200
|
+
/**
|
|
201
|
+
* feedback_get - Get specific feedback entry by ID
|
|
202
|
+
*/
|
|
203
|
+
(0, registry_1.registerHandler)('feedback_get', (params) => {
|
|
204
|
+
if (!params.id) {
|
|
205
|
+
throw new Error('Missing required parameter: id');
|
|
206
|
+
}
|
|
207
|
+
const storage = loadFeedbackStorage();
|
|
208
|
+
const entry = storage.entries.find(e => e.id === params.id);
|
|
209
|
+
if (!entry) {
|
|
210
|
+
return { notFound: true, id: params.id, hint: `No feedback entry found with id "${params.id}". Use feedback_list to see all entries.` };
|
|
211
|
+
}
|
|
212
|
+
return { entry };
|
|
213
|
+
});
|
|
214
|
+
/**
|
|
215
|
+
* feedback_update - Update feedback entry status (admin function)
|
|
216
|
+
*/
|
|
217
|
+
(0, registry_1.registerHandler)('feedback_update', (params) => {
|
|
218
|
+
if (!params.id) {
|
|
219
|
+
throw new Error('Missing required parameter: id');
|
|
220
|
+
}
|
|
221
|
+
const validStatuses = ['new', 'acknowledged', 'in-progress', 'resolved', 'closed'];
|
|
222
|
+
if (params.status && !validStatuses.includes(params.status)) {
|
|
223
|
+
throw new Error(`Invalid status. Must be one of: ${validStatuses.join(', ')}`);
|
|
224
|
+
}
|
|
225
|
+
const storage = loadFeedbackStorage();
|
|
226
|
+
const entryIndex = storage.entries.findIndex(e => e.id === params.id);
|
|
227
|
+
if (entryIndex === -1) {
|
|
228
|
+
return { notFound: true, id: params.id, hint: `No feedback entry found with id "${params.id}". Use feedback_list to see all entries.` };
|
|
229
|
+
}
|
|
230
|
+
const entry = storage.entries[entryIndex];
|
|
231
|
+
const oldStatus = entry.status;
|
|
232
|
+
// Update fields
|
|
233
|
+
if (params.status) {
|
|
234
|
+
entry.status = params.status;
|
|
235
|
+
}
|
|
236
|
+
if (params.metadata) {
|
|
237
|
+
entry.metadata = { ...entry.metadata, ...params.metadata };
|
|
238
|
+
}
|
|
239
|
+
// Add update timestamp to metadata
|
|
240
|
+
entry.metadata = {
|
|
241
|
+
...entry.metadata,
|
|
242
|
+
lastUpdated: new Date().toISOString(),
|
|
243
|
+
updatedBy: 'system' // Could be enhanced to track admin user
|
|
244
|
+
};
|
|
245
|
+
storage.entries[entryIndex] = entry;
|
|
246
|
+
saveFeedbackStorage(storage);
|
|
247
|
+
(0, logger_1.logInfo)('[feedback] Feedback entry updated', {
|
|
248
|
+
id: entry.id,
|
|
249
|
+
oldStatus,
|
|
250
|
+
newStatus: entry.status,
|
|
251
|
+
type: entry.type
|
|
252
|
+
});
|
|
253
|
+
return {
|
|
254
|
+
success: true,
|
|
255
|
+
entry,
|
|
256
|
+
message: 'Feedback entry updated successfully'
|
|
257
|
+
};
|
|
258
|
+
});
|
|
259
|
+
/**
|
|
260
|
+
* feedback_stats - Get feedback statistics and metrics
|
|
261
|
+
*/
|
|
262
|
+
(0, registry_1.registerHandler)('feedback_stats', (params) => {
|
|
263
|
+
const storage = loadFeedbackStorage();
|
|
264
|
+
let entries = storage.entries;
|
|
265
|
+
// Filter by date if specified
|
|
266
|
+
if (params.since) {
|
|
267
|
+
const sinceDate = params.since;
|
|
268
|
+
entries = entries.filter(e => e.timestamp >= sinceDate);
|
|
269
|
+
}
|
|
270
|
+
// Calculate statistics
|
|
271
|
+
const stats = {
|
|
272
|
+
total: entries.length,
|
|
273
|
+
byType: {},
|
|
274
|
+
bySeverity: {},
|
|
275
|
+
byStatus: {},
|
|
276
|
+
recentActivity: {
|
|
277
|
+
last24h: 0,
|
|
278
|
+
last7d: 0,
|
|
279
|
+
last30d: 0
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
const now = Date.now();
|
|
283
|
+
const day = 24 * 60 * 60 * 1000;
|
|
284
|
+
entries.forEach(entry => {
|
|
285
|
+
// Count by type
|
|
286
|
+
stats.byType[entry.type] = (stats.byType[entry.type] || 0) + 1;
|
|
287
|
+
// Count by severity
|
|
288
|
+
stats.bySeverity[entry.severity] = (stats.bySeverity[entry.severity] || 0) + 1;
|
|
289
|
+
// Count by status
|
|
290
|
+
stats.byStatus[entry.status] = (stats.byStatus[entry.status] || 0) + 1;
|
|
291
|
+
// Count recent activity
|
|
292
|
+
const entryTime = new Date(entry.timestamp).getTime();
|
|
293
|
+
const age = now - entryTime;
|
|
294
|
+
if (age <= day)
|
|
295
|
+
stats.recentActivity.last24h++;
|
|
296
|
+
if (age <= 7 * day)
|
|
297
|
+
stats.recentActivity.last7d++;
|
|
298
|
+
if (age <= 30 * day)
|
|
299
|
+
stats.recentActivity.last30d++;
|
|
300
|
+
});
|
|
301
|
+
return {
|
|
302
|
+
stats,
|
|
303
|
+
storageInfo: {
|
|
304
|
+
lastUpdated: storage.lastUpdated,
|
|
305
|
+
version: storage.version,
|
|
306
|
+
maxEntries: getMaxEntries()
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
});
|
|
310
|
+
/**
|
|
311
|
+
* feedback_health - Health check for feedback system
|
|
312
|
+
*/
|
|
313
|
+
(0, registry_1.registerHandler)('feedback_health', () => {
|
|
314
|
+
const dir = getFeedbackDir();
|
|
315
|
+
const file = getFeedbackFile();
|
|
316
|
+
const health = {
|
|
317
|
+
status: 'ok',
|
|
318
|
+
timestamp: new Date().toISOString(),
|
|
319
|
+
storage: {
|
|
320
|
+
accessible: false,
|
|
321
|
+
writable: false,
|
|
322
|
+
directory: dir,
|
|
323
|
+
file
|
|
324
|
+
},
|
|
325
|
+
config: {
|
|
326
|
+
maxEntries: getMaxEntries(),
|
|
327
|
+
feedbackDir: dir
|
|
328
|
+
}
|
|
329
|
+
};
|
|
330
|
+
try {
|
|
331
|
+
// Check if storage is accessible
|
|
332
|
+
if (fs_1.default.existsSync(file)) {
|
|
333
|
+
fs_1.default.accessSync(file, fs_1.default.constants.R_OK);
|
|
334
|
+
health.storage.accessible = true;
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
// File doesn't exist but directory should be writable
|
|
338
|
+
health.storage.accessible = fs_1.default.existsSync(dir);
|
|
339
|
+
}
|
|
340
|
+
// Check if writable
|
|
341
|
+
ensureFeedbackDir();
|
|
342
|
+
fs_1.default.accessSync(dir, fs_1.default.constants.W_OK);
|
|
343
|
+
health.storage.writable = true;
|
|
344
|
+
}
|
|
345
|
+
catch (error) {
|
|
346
|
+
health.status = 'degraded';
|
|
347
|
+
(0, logger_1.logWarn)('[feedback] Health check failed', error instanceof Error ? error : { error: String(error) });
|
|
348
|
+
}
|
|
349
|
+
return health;
|
|
350
|
+
});
|
|
351
|
+
// Unified feedback dispatch handler (002 Phase 2a)
|
|
352
|
+
(0, registry_1.registerHandler)('feedback_dispatch', async (params) => {
|
|
353
|
+
const { action, ...rest } = params;
|
|
354
|
+
if (!action)
|
|
355
|
+
throw new Error('Missing required parameter: action');
|
|
356
|
+
const validActions = ['submit', 'list', 'get', 'update', 'stats', 'health'];
|
|
357
|
+
if (!validActions.includes(action)) {
|
|
358
|
+
throw new Error(`Unknown feedback action: ${action}. Valid: ${validActions.join(', ')}`);
|
|
359
|
+
}
|
|
360
|
+
// Flat-param alias: agents may send 'body' instead of 'description' (v1.8.2+)
|
|
361
|
+
if (action === 'submit' && rest.body != null && rest.description == null) {
|
|
362
|
+
rest.description = rest.body;
|
|
363
|
+
delete rest.body;
|
|
364
|
+
}
|
|
365
|
+
const handler = (0, registry_1.getHandler)(`feedback_${action}`);
|
|
366
|
+
if (!handler)
|
|
367
|
+
throw new Error(`Handler not found for feedback_${action}`);
|
|
368
|
+
const result = await Promise.resolve(handler(rest));
|
|
369
|
+
// Reshape results for consistent dispatch API
|
|
370
|
+
if (action === 'submit') {
|
|
371
|
+
return { id: result.feedbackId, status: 'new', ...result };
|
|
372
|
+
}
|
|
373
|
+
if (action === 'stats') {
|
|
374
|
+
const stats = result.stats;
|
|
375
|
+
return { total: stats?.total, ...result };
|
|
376
|
+
}
|
|
377
|
+
return result;
|
|
378
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const registry_1 = require("../server/registry");
|
|
9
|
+
const indexContext_1 = require("./indexContext");
|
|
10
|
+
(0, registry_1.registerHandler)('gates_evaluate', () => { const st = (0, indexContext_1.ensureLoaded)(); const gatesPath = path_1.default.join((0, indexContext_1.getInstructionsDir)(), 'gates.json'); if (!fs_1.default.existsSync(gatesPath))
|
|
11
|
+
return { notConfigured: true }; let data; try {
|
|
12
|
+
data = JSON.parse(fs_1.default.readFileSync(gatesPath, 'utf8'));
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return { error: 'invalid gates file' };
|
|
16
|
+
} const results = []; for (const g of data.gates || []) {
|
|
17
|
+
if (g.type !== 'count')
|
|
18
|
+
continue;
|
|
19
|
+
const matches = st.list.filter(e => { const w = g.where || {}; let ok = true; if (w.requirement !== undefined)
|
|
20
|
+
ok = ok && e.requirement === w.requirement; if (w.priorityGt !== undefined)
|
|
21
|
+
ok = ok && e.priority > w.priorityGt; return ok; });
|
|
22
|
+
const count = matches.length;
|
|
23
|
+
const v = g.value;
|
|
24
|
+
let passed = true;
|
|
25
|
+
switch (g.op) {
|
|
26
|
+
case '>=':
|
|
27
|
+
passed = count >= v;
|
|
28
|
+
break;
|
|
29
|
+
case '>':
|
|
30
|
+
passed = count > v;
|
|
31
|
+
break;
|
|
32
|
+
case '<=':
|
|
33
|
+
passed = count <= v;
|
|
34
|
+
break;
|
|
35
|
+
case '<':
|
|
36
|
+
passed = count < v;
|
|
37
|
+
break;
|
|
38
|
+
case '==':
|
|
39
|
+
passed = count === v;
|
|
40
|
+
break;
|
|
41
|
+
case '!=':
|
|
42
|
+
passed = count !== v;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
results.push({ id: g.id, passed, count, op: g.op, value: v, severity: g.severity, description: g.description });
|
|
46
|
+
} const summary = { errors: results.filter(r => !r.passed && r.severity === 'error').length, warnings: results.filter(r => !r.passed && r.severity === 'warn').length, total: results.length }; return { generatedAt: new Date().toISOString(), results, summary }; });
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { getRuntimeConfig } from '../config/runtimeConfig';
|
|
2
|
+
type GraphConfigSnapshot = ReturnType<typeof getRuntimeConfig>['graph'];
|
|
3
|
+
export interface GraphExportParams {
|
|
4
|
+
includeEdgeTypes?: Array<'primary' | 'category' | 'belongs'>;
|
|
5
|
+
maxEdges?: number;
|
|
6
|
+
format?: 'json' | 'dot' | 'mermaid';
|
|
7
|
+
enrich?: boolean;
|
|
8
|
+
includeCategoryNodes?: boolean;
|
|
9
|
+
includeUsage?: boolean;
|
|
10
|
+
}
|
|
11
|
+
interface GraphNodeV1 {
|
|
12
|
+
id: string;
|
|
13
|
+
}
|
|
14
|
+
interface GraphNodeV2 extends GraphNodeV1 {
|
|
15
|
+
categories?: string[];
|
|
16
|
+
primaryCategory?: string;
|
|
17
|
+
priority?: number;
|
|
18
|
+
priorityTier?: string;
|
|
19
|
+
requirement?: string;
|
|
20
|
+
owner?: string;
|
|
21
|
+
status?: string;
|
|
22
|
+
createdAt?: string;
|
|
23
|
+
updatedAt?: string;
|
|
24
|
+
usageCount?: number;
|
|
25
|
+
nodeType?: 'instruction' | 'category';
|
|
26
|
+
}
|
|
27
|
+
type GraphNode = GraphNodeV1 | GraphNodeV2;
|
|
28
|
+
interface GraphEdgeBase {
|
|
29
|
+
from: string;
|
|
30
|
+
to: string;
|
|
31
|
+
type: 'primary' | 'category' | 'belongs';
|
|
32
|
+
}
|
|
33
|
+
interface GraphEdgeEnriched extends GraphEdgeBase {
|
|
34
|
+
weight?: number;
|
|
35
|
+
}
|
|
36
|
+
type GraphEdge = GraphEdgeBase | GraphEdgeEnriched;
|
|
37
|
+
interface GraphMeta {
|
|
38
|
+
graphSchemaVersion: 1 | 2;
|
|
39
|
+
nodeCount: number;
|
|
40
|
+
edgeCount: number;
|
|
41
|
+
truncated?: boolean;
|
|
42
|
+
notes?: string[];
|
|
43
|
+
}
|
|
44
|
+
interface GraphResult {
|
|
45
|
+
meta: GraphMeta;
|
|
46
|
+
nodes: GraphNode[];
|
|
47
|
+
edges: GraphEdge[];
|
|
48
|
+
dot?: string;
|
|
49
|
+
mermaid?: string;
|
|
50
|
+
}
|
|
51
|
+
export declare function buildGraph(params: GraphExportParams, graphCfg?: GraphConfigSnapshot): GraphResult;
|
|
52
|
+
export declare function __resetGraphCache(): void;
|
|
53
|
+
export {};
|