agentic-qe 3.3.5 → 3.4.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/.claude/helpers/statusline-v3.cjs +47 -0
- package/.claude/skills/qcsd-ideation-swarm/SKILL.md +7 -4
- package/CHANGELOG.md +23 -0
- package/README.md +69 -0
- package/package.json +1 -1
- package/v3/CHANGELOG.md +91 -0
- package/v3/README.md +117 -0
- package/v3/assets/skills/qcsd-ideation-swarm/SKILL.md +7 -4
- package/v3/dist/adapters/a2a/agent-cards/generator.d.ts +153 -0
- package/v3/dist/adapters/a2a/agent-cards/generator.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/agent-cards/generator.js +478 -0
- package/v3/dist/adapters/a2a/agent-cards/generator.js.map +1 -0
- package/v3/dist/adapters/a2a/agent-cards/schema.d.ts +274 -0
- package/v3/dist/adapters/a2a/agent-cards/schema.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/agent-cards/schema.js +135 -0
- package/v3/dist/adapters/a2a/agent-cards/schema.js.map +1 -0
- package/v3/dist/adapters/a2a/agent-cards/validator.d.ts +514 -0
- package/v3/dist/adapters/a2a/agent-cards/validator.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/agent-cards/validator.js +555 -0
- package/v3/dist/adapters/a2a/agent-cards/validator.js.map +1 -0
- package/v3/dist/adapters/a2a/auth/index.d.ts +23 -0
- package/v3/dist/adapters/a2a/auth/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/auth/index.js +85 -0
- package/v3/dist/adapters/a2a/auth/index.js.map +1 -0
- package/v3/dist/adapters/a2a/auth/jwt-utils.d.ts +215 -0
- package/v3/dist/adapters/a2a/auth/jwt-utils.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/auth/jwt-utils.js +314 -0
- package/v3/dist/adapters/a2a/auth/jwt-utils.js.map +1 -0
- package/v3/dist/adapters/a2a/auth/middleware.d.ts +173 -0
- package/v3/dist/adapters/a2a/auth/middleware.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/auth/middleware.js +300 -0
- package/v3/dist/adapters/a2a/auth/middleware.js.map +1 -0
- package/v3/dist/adapters/a2a/auth/oauth-provider.d.ts +308 -0
- package/v3/dist/adapters/a2a/auth/oauth-provider.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/auth/oauth-provider.js +573 -0
- package/v3/dist/adapters/a2a/auth/oauth-provider.js.map +1 -0
- package/v3/dist/adapters/a2a/auth/routes.d.ts +244 -0
- package/v3/dist/adapters/a2a/auth/routes.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/auth/routes.js +496 -0
- package/v3/dist/adapters/a2a/auth/routes.js.map +1 -0
- package/v3/dist/adapters/a2a/auth/scopes.d.ts +219 -0
- package/v3/dist/adapters/a2a/auth/scopes.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/auth/scopes.js +292 -0
- package/v3/dist/adapters/a2a/auth/scopes.js.map +1 -0
- package/v3/dist/adapters/a2a/auth/token-store.d.ts +278 -0
- package/v3/dist/adapters/a2a/auth/token-store.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/auth/token-store.js +453 -0
- package/v3/dist/adapters/a2a/auth/token-store.js.map +1 -0
- package/v3/dist/adapters/a2a/discovery/agent-health.d.ts +226 -0
- package/v3/dist/adapters/a2a/discovery/agent-health.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/discovery/agent-health.js +426 -0
- package/v3/dist/adapters/a2a/discovery/agent-health.js.map +1 -0
- package/v3/dist/adapters/a2a/discovery/discovery-service.d.ts +296 -0
- package/v3/dist/adapters/a2a/discovery/discovery-service.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/discovery/discovery-service.js +520 -0
- package/v3/dist/adapters/a2a/discovery/discovery-service.js.map +1 -0
- package/v3/dist/adapters/a2a/discovery/file-watcher.d.ts +166 -0
- package/v3/dist/adapters/a2a/discovery/file-watcher.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/discovery/file-watcher.js +385 -0
- package/v3/dist/adapters/a2a/discovery/file-watcher.js.map +1 -0
- package/v3/dist/adapters/a2a/discovery/hot-reload-service.d.ts +226 -0
- package/v3/dist/adapters/a2a/discovery/hot-reload-service.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/discovery/hot-reload-service.js +433 -0
- package/v3/dist/adapters/a2a/discovery/hot-reload-service.js.map +1 -0
- package/v3/dist/adapters/a2a/discovery/index.d.ts +18 -0
- package/v3/dist/adapters/a2a/discovery/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/discovery/index.js +54 -0
- package/v3/dist/adapters/a2a/discovery/index.js.map +1 -0
- package/v3/dist/adapters/a2a/discovery/metrics.d.ts +200 -0
- package/v3/dist/adapters/a2a/discovery/metrics.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/discovery/metrics.js +371 -0
- package/v3/dist/adapters/a2a/discovery/metrics.js.map +1 -0
- package/v3/dist/adapters/a2a/discovery/routes.d.ts +184 -0
- package/v3/dist/adapters/a2a/discovery/routes.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/discovery/routes.js +453 -0
- package/v3/dist/adapters/a2a/discovery/routes.js.map +1 -0
- package/v3/dist/adapters/a2a/index.d.ts +18 -0
- package/v3/dist/adapters/a2a/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/index.js +139 -0
- package/v3/dist/adapters/a2a/index.js.map +1 -0
- package/v3/dist/adapters/a2a/jsonrpc/envelope.d.ts +312 -0
- package/v3/dist/adapters/a2a/jsonrpc/envelope.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/jsonrpc/envelope.js +554 -0
- package/v3/dist/adapters/a2a/jsonrpc/envelope.js.map +1 -0
- package/v3/dist/adapters/a2a/jsonrpc/errors.d.ts +244 -0
- package/v3/dist/adapters/a2a/jsonrpc/errors.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/jsonrpc/errors.js +365 -0
- package/v3/dist/adapters/a2a/jsonrpc/errors.js.map +1 -0
- package/v3/dist/adapters/a2a/jsonrpc/index.d.ts +14 -0
- package/v3/dist/adapters/a2a/jsonrpc/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/jsonrpc/index.js +59 -0
- package/v3/dist/adapters/a2a/jsonrpc/index.js.map +1 -0
- package/v3/dist/adapters/a2a/jsonrpc/methods.d.ts +400 -0
- package/v3/dist/adapters/a2a/jsonrpc/methods.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/jsonrpc/methods.js +249 -0
- package/v3/dist/adapters/a2a/jsonrpc/methods.js.map +1 -0
- package/v3/dist/adapters/a2a/notifications/index.d.ts +60 -0
- package/v3/dist/adapters/a2a/notifications/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/notifications/index.js +99 -0
- package/v3/dist/adapters/a2a/notifications/index.js.map +1 -0
- package/v3/dist/adapters/a2a/notifications/retry-queue.d.ts +225 -0
- package/v3/dist/adapters/a2a/notifications/retry-queue.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/notifications/retry-queue.js +449 -0
- package/v3/dist/adapters/a2a/notifications/retry-queue.js.map +1 -0
- package/v3/dist/adapters/a2a/notifications/signature.d.ts +133 -0
- package/v3/dist/adapters/a2a/notifications/signature.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/notifications/signature.js +244 -0
- package/v3/dist/adapters/a2a/notifications/signature.js.map +1 -0
- package/v3/dist/adapters/a2a/notifications/subscription-store.d.ts +243 -0
- package/v3/dist/adapters/a2a/notifications/subscription-store.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/notifications/subscription-store.js +486 -0
- package/v3/dist/adapters/a2a/notifications/subscription-store.js.map +1 -0
- package/v3/dist/adapters/a2a/notifications/webhook-service.d.ts +257 -0
- package/v3/dist/adapters/a2a/notifications/webhook-service.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/notifications/webhook-service.js +542 -0
- package/v3/dist/adapters/a2a/notifications/webhook-service.js.map +1 -0
- package/v3/dist/adapters/a2a/tasks/index.d.ts +16 -0
- package/v3/dist/adapters/a2a/tasks/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/tasks/index.js +33 -0
- package/v3/dist/adapters/a2a/tasks/index.js.map +1 -0
- package/v3/dist/adapters/a2a/tasks/task-manager.d.ts +306 -0
- package/v3/dist/adapters/a2a/tasks/task-manager.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/tasks/task-manager.js +562 -0
- package/v3/dist/adapters/a2a/tasks/task-manager.js.map +1 -0
- package/v3/dist/adapters/a2a/tasks/task-router.d.ts +270 -0
- package/v3/dist/adapters/a2a/tasks/task-router.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/tasks/task-router.js +574 -0
- package/v3/dist/adapters/a2a/tasks/task-router.js.map +1 -0
- package/v3/dist/adapters/a2a/tasks/task-store.d.ts +251 -0
- package/v3/dist/adapters/a2a/tasks/task-store.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/tasks/task-store.js +468 -0
- package/v3/dist/adapters/a2a/tasks/task-store.js.map +1 -0
- package/v3/dist/adapters/a2ui/accessibility/aria-attributes.d.ts +294 -0
- package/v3/dist/adapters/a2ui/accessibility/aria-attributes.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/accessibility/aria-attributes.js +447 -0
- package/v3/dist/adapters/a2ui/accessibility/aria-attributes.js.map +1 -0
- package/v3/dist/adapters/a2ui/accessibility/index.d.ts +83 -0
- package/v3/dist/adapters/a2ui/accessibility/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/accessibility/index.js +155 -0
- package/v3/dist/adapters/a2ui/accessibility/index.js.map +1 -0
- package/v3/dist/adapters/a2ui/accessibility/keyboard-nav.d.ts +177 -0
- package/v3/dist/adapters/a2ui/accessibility/keyboard-nav.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/accessibility/keyboard-nav.js +638 -0
- package/v3/dist/adapters/a2ui/accessibility/keyboard-nav.js.map +1 -0
- package/v3/dist/adapters/a2ui/accessibility/wcag-validator.d.ts +186 -0
- package/v3/dist/adapters/a2ui/accessibility/wcag-validator.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/accessibility/wcag-validator.js +816 -0
- package/v3/dist/adapters/a2ui/accessibility/wcag-validator.js.map +1 -0
- package/v3/dist/adapters/a2ui/catalog/component-schemas.d.ts +227 -0
- package/v3/dist/adapters/a2ui/catalog/component-schemas.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/catalog/component-schemas.js +1090 -0
- package/v3/dist/adapters/a2ui/catalog/component-schemas.js.map +1 -0
- package/v3/dist/adapters/a2ui/catalog/index.d.ts +55 -0
- package/v3/dist/adapters/a2ui/catalog/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/catalog/index.js +100 -0
- package/v3/dist/adapters/a2ui/catalog/index.js.map +1 -0
- package/v3/dist/adapters/a2ui/catalog/qe-catalog.d.ts +456 -0
- package/v3/dist/adapters/a2ui/catalog/qe-catalog.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/catalog/qe-catalog.js +413 -0
- package/v3/dist/adapters/a2ui/catalog/qe-catalog.js.map +1 -0
- package/v3/dist/adapters/a2ui/catalog/standard-catalog.d.ts +581 -0
- package/v3/dist/adapters/a2ui/catalog/standard-catalog.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/catalog/standard-catalog.js +409 -0
- package/v3/dist/adapters/a2ui/catalog/standard-catalog.js.map +1 -0
- package/v3/dist/adapters/a2ui/data/bound-value.d.ts +252 -0
- package/v3/dist/adapters/a2ui/data/bound-value.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/data/bound-value.js +403 -0
- package/v3/dist/adapters/a2ui/data/bound-value.js.map +1 -0
- package/v3/dist/adapters/a2ui/data/index.d.ts +14 -0
- package/v3/dist/adapters/a2ui/data/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/data/index.js +41 -0
- package/v3/dist/adapters/a2ui/data/index.js.map +1 -0
- package/v3/dist/adapters/a2ui/data/json-pointer-resolver.d.ts +187 -0
- package/v3/dist/adapters/a2ui/data/json-pointer-resolver.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/data/json-pointer-resolver.js +425 -0
- package/v3/dist/adapters/a2ui/data/json-pointer-resolver.js.map +1 -0
- package/v3/dist/adapters/a2ui/data/reactive-store.d.ts +241 -0
- package/v3/dist/adapters/a2ui/data/reactive-store.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/data/reactive-store.js +461 -0
- package/v3/dist/adapters/a2ui/data/reactive-store.js.map +1 -0
- package/v3/dist/adapters/a2ui/index.d.ts +17 -0
- package/v3/dist/adapters/a2ui/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/index.js +119 -0
- package/v3/dist/adapters/a2ui/index.js.map +1 -0
- package/v3/dist/adapters/a2ui/integration/agui-sync.d.ts +259 -0
- package/v3/dist/adapters/a2ui/integration/agui-sync.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/integration/agui-sync.js +559 -0
- package/v3/dist/adapters/a2ui/integration/agui-sync.js.map +1 -0
- package/v3/dist/adapters/a2ui/integration/index.d.ts +11 -0
- package/v3/dist/adapters/a2ui/integration/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/integration/index.js +23 -0
- package/v3/dist/adapters/a2ui/integration/index.js.map +1 -0
- package/v3/dist/adapters/a2ui/integration/surface-state-bridge.d.ts +209 -0
- package/v3/dist/adapters/a2ui/integration/surface-state-bridge.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/integration/surface-state-bridge.js +545 -0
- package/v3/dist/adapters/a2ui/integration/surface-state-bridge.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/component-builder.d.ts +227 -0
- package/v3/dist/adapters/a2ui/renderer/component-builder.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/component-builder.js +488 -0
- package/v3/dist/adapters/a2ui/renderer/component-builder.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/index.d.ts +16 -0
- package/v3/dist/adapters/a2ui/renderer/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/index.js +50 -0
- package/v3/dist/adapters/a2ui/renderer/index.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/message-types.d.ts +299 -0
- package/v3/dist/adapters/a2ui/renderer/message-types.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/message-types.js +187 -0
- package/v3/dist/adapters/a2ui/renderer/message-types.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/surface-generator.d.ts +210 -0
- package/v3/dist/adapters/a2ui/renderer/surface-generator.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/surface-generator.js +586 -0
- package/v3/dist/adapters/a2ui/renderer/surface-generator.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/accessibility-surface.d.ts +149 -0
- package/v3/dist/adapters/a2ui/renderer/templates/accessibility-surface.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/accessibility-surface.js +414 -0
- package/v3/dist/adapters/a2ui/renderer/templates/accessibility-surface.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/coverage-surface.d.ts +95 -0
- package/v3/dist/adapters/a2ui/renderer/templates/coverage-surface.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/coverage-surface.js +231 -0
- package/v3/dist/adapters/a2ui/renderer/templates/coverage-surface.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/index.d.ts +12 -0
- package/v3/dist/adapters/a2ui/renderer/templates/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/index.js +16 -0
- package/v3/dist/adapters/a2ui/renderer/templates/index.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/security-surface.d.ts +121 -0
- package/v3/dist/adapters/a2ui/renderer/templates/security-surface.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/security-surface.js +367 -0
- package/v3/dist/adapters/a2ui/renderer/templates/security-surface.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/test-results-surface.d.ts +104 -0
- package/v3/dist/adapters/a2ui/renderer/templates/test-results-surface.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/test-results-surface.js +294 -0
- package/v3/dist/adapters/a2ui/renderer/templates/test-results-surface.js.map +1 -0
- package/v3/dist/adapters/ag-ui/backpressure-handler.d.ts +201 -0
- package/v3/dist/adapters/ag-ui/backpressure-handler.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/backpressure-handler.js +399 -0
- package/v3/dist/adapters/ag-ui/backpressure-handler.js.map +1 -0
- package/v3/dist/adapters/ag-ui/event-adapter.d.ts +360 -0
- package/v3/dist/adapters/ag-ui/event-adapter.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/event-adapter.js +1083 -0
- package/v3/dist/adapters/ag-ui/event-adapter.js.map +1 -0
- package/v3/dist/adapters/ag-ui/event-batcher.d.ts +242 -0
- package/v3/dist/adapters/ag-ui/event-batcher.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/event-batcher.js +444 -0
- package/v3/dist/adapters/ag-ui/event-batcher.js.map +1 -0
- package/v3/dist/adapters/ag-ui/event-types.d.ts +450 -0
- package/v3/dist/adapters/ag-ui/event-types.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/event-types.js +173 -0
- package/v3/dist/adapters/ag-ui/event-types.js.map +1 -0
- package/v3/dist/adapters/ag-ui/index.d.ts +17 -0
- package/v3/dist/adapters/ag-ui/index.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/index.js +47 -0
- package/v3/dist/adapters/ag-ui/index.js.map +1 -0
- package/v3/dist/adapters/ag-ui/json-patch-utils.d.ts +136 -0
- package/v3/dist/adapters/ag-ui/json-patch-utils.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/json-patch-utils.js +574 -0
- package/v3/dist/adapters/ag-ui/json-patch-utils.js.map +1 -0
- package/v3/dist/adapters/ag-ui/json-patch.d.ts +241 -0
- package/v3/dist/adapters/ag-ui/json-patch.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/json-patch.js +726 -0
- package/v3/dist/adapters/ag-ui/json-patch.js.map +1 -0
- package/v3/dist/adapters/ag-ui/state-delta-cache.d.ts +218 -0
- package/v3/dist/adapters/ag-ui/state-delta-cache.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/state-delta-cache.js +422 -0
- package/v3/dist/adapters/ag-ui/state-delta-cache.js.map +1 -0
- package/v3/dist/adapters/ag-ui/state-manager.d.ts +249 -0
- package/v3/dist/adapters/ag-ui/state-manager.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/state-manager.js +511 -0
- package/v3/dist/adapters/ag-ui/state-manager.js.map +1 -0
- package/v3/dist/adapters/ag-ui/stream-controller.d.ts +195 -0
- package/v3/dist/adapters/ag-ui/stream-controller.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/stream-controller.js +481 -0
- package/v3/dist/adapters/ag-ui/stream-controller.js.map +1 -0
- package/v3/dist/adapters/index.d.ts +4 -0
- package/v3/dist/adapters/index.d.ts.map +1 -1
- package/v3/dist/adapters/index.js +89 -0
- package/v3/dist/adapters/index.js.map +1 -1
- package/v3/dist/cli/bundle.js +7412 -3749
- package/v3/dist/init/init-wizard.d.ts.map +1 -1
- package/v3/dist/init/init-wizard.js +16 -1
- package/v3/dist/init/init-wizard.js.map +1 -1
- package/v3/dist/init/migration/config-migrator.d.ts.map +1 -1
- package/v3/dist/init/migration/config-migrator.js +15 -1
- package/v3/dist/init/migration/config-migrator.js.map +1 -1
- package/v3/dist/init/self-configurator.d.ts +7 -0
- package/v3/dist/init/self-configurator.d.ts.map +1 -1
- package/v3/dist/init/self-configurator.js +23 -27
- package/v3/dist/init/self-configurator.js.map +1 -1
- package/v3/dist/kernel/plugin-loader.d.ts.map +1 -1
- package/v3/dist/kernel/plugin-loader.js +6 -1
- package/v3/dist/kernel/plugin-loader.js.map +1 -1
- package/v3/dist/kernel/unified-memory.d.ts +97 -0
- package/v3/dist/kernel/unified-memory.d.ts.map +1 -1
- package/v3/dist/kernel/unified-memory.js +204 -0
- package/v3/dist/kernel/unified-memory.js.map +1 -1
- package/v3/dist/mcp/bundle.js +121759 -105597
- package/v3/dist/mcp/entry.d.ts +5 -0
- package/v3/dist/mcp/entry.d.ts.map +1 -1
- package/v3/dist/mcp/entry.js +36 -0
- package/v3/dist/mcp/entry.js.map +1 -1
- package/v3/dist/mcp/http-server.d.ts +95 -0
- package/v3/dist/mcp/http-server.d.ts.map +1 -0
- package/v3/dist/mcp/http-server.js +833 -0
- package/v3/dist/mcp/http-server.js.map +1 -0
- package/v3/dist/mcp/protocol-server.d.ts +6 -0
- package/v3/dist/mcp/protocol-server.d.ts.map +1 -1
- package/v3/dist/mcp/protocol-server.js +40 -0
- package/v3/dist/mcp/protocol-server.js.map +1 -1
- package/v3/dist/mcp/transport/index.d.ts +25 -3
- package/v3/dist/mcp/transport/index.d.ts.map +1 -1
- package/v3/dist/mcp/transport/index.js +22 -4
- package/v3/dist/mcp/transport/index.js.map +1 -1
- package/v3/dist/mcp/transport/sse/connection-manager.d.ts +84 -0
- package/v3/dist/mcp/transport/sse/connection-manager.d.ts.map +1 -0
- package/v3/dist/mcp/transport/sse/connection-manager.js +271 -0
- package/v3/dist/mcp/transport/sse/connection-manager.js.map +1 -0
- package/v3/dist/mcp/transport/sse/index.d.ts +10 -0
- package/v3/dist/mcp/transport/sse/index.d.ts.map +1 -0
- package/v3/dist/mcp/transport/sse/index.js +15 -0
- package/v3/dist/mcp/transport/sse/index.js.map +1 -0
- package/v3/dist/mcp/transport/sse/sse-transport.d.ts +56 -0
- package/v3/dist/mcp/transport/sse/sse-transport.d.ts.map +1 -0
- package/v3/dist/mcp/transport/sse/sse-transport.js +381 -0
- package/v3/dist/mcp/transport/sse/sse-transport.js.map +1 -0
- package/v3/dist/mcp/transport/sse/types.d.ts +237 -0
- package/v3/dist/mcp/transport/sse/types.d.ts.map +1 -0
- package/v3/dist/mcp/transport/sse/types.js +37 -0
- package/v3/dist/mcp/transport/sse/types.js.map +1 -0
- package/v3/dist/mcp/transport/websocket/connection-manager.d.ts +143 -0
- package/v3/dist/mcp/transport/websocket/connection-manager.d.ts.map +1 -0
- package/v3/dist/mcp/transport/websocket/connection-manager.js +522 -0
- package/v3/dist/mcp/transport/websocket/connection-manager.js.map +1 -0
- package/v3/dist/mcp/transport/websocket/index.d.ts +10 -0
- package/v3/dist/mcp/transport/websocket/index.d.ts.map +1 -0
- package/v3/dist/mcp/transport/websocket/index.js +19 -0
- package/v3/dist/mcp/transport/websocket/index.js.map +1 -0
- package/v3/dist/mcp/transport/websocket/types.d.ts +354 -0
- package/v3/dist/mcp/transport/websocket/types.d.ts.map +1 -0
- package/v3/dist/mcp/transport/websocket/types.js +49 -0
- package/v3/dist/mcp/transport/websocket/types.js.map +1 -0
- package/v3/dist/mcp/transport/websocket/websocket-transport.d.ts +77 -0
- package/v3/dist/mcp/transport/websocket/websocket-transport.d.ts.map +1 -0
- package/v3/dist/mcp/transport/websocket/websocket-transport.js +622 -0
- package/v3/dist/mcp/transport/websocket/websocket-transport.js.map +1 -0
- package/v3/dist/memory/crdt/convergence-tracker.d.ts +59 -0
- package/v3/dist/memory/crdt/convergence-tracker.d.ts.map +1 -0
- package/v3/dist/memory/crdt/convergence-tracker.js +325 -0
- package/v3/dist/memory/crdt/convergence-tracker.js.map +1 -0
- package/v3/dist/memory/crdt/crdt-store.d.ts +55 -0
- package/v3/dist/memory/crdt/crdt-store.d.ts.map +1 -0
- package/v3/dist/memory/crdt/crdt-store.js +582 -0
- package/v3/dist/memory/crdt/crdt-store.js.map +1 -0
- package/v3/dist/memory/crdt/g-counter.d.ts +47 -0
- package/v3/dist/memory/crdt/g-counter.d.ts.map +1 -0
- package/v3/dist/memory/crdt/g-counter.js +134 -0
- package/v3/dist/memory/crdt/g-counter.js.map +1 -0
- package/v3/dist/memory/crdt/index.d.ts +52 -0
- package/v3/dist/memory/crdt/index.d.ts.map +1 -0
- package/v3/dist/memory/crdt/index.js +66 -0
- package/v3/dist/memory/crdt/index.js.map +1 -0
- package/v3/dist/memory/crdt/lww-register.d.ts +40 -0
- package/v3/dist/memory/crdt/lww-register.d.ts.map +1 -0
- package/v3/dist/memory/crdt/lww-register.js +133 -0
- package/v3/dist/memory/crdt/lww-register.js.map +1 -0
- package/v3/dist/memory/crdt/or-set.d.ts +62 -0
- package/v3/dist/memory/crdt/or-set.d.ts.map +1 -0
- package/v3/dist/memory/crdt/or-set.js +336 -0
- package/v3/dist/memory/crdt/or-set.js.map +1 -0
- package/v3/dist/memory/crdt/pn-counter.d.ts +53 -0
- package/v3/dist/memory/crdt/pn-counter.d.ts.map +1 -0
- package/v3/dist/memory/crdt/pn-counter.js +147 -0
- package/v3/dist/memory/crdt/pn-counter.js.map +1 -0
- package/v3/dist/memory/crdt/types.d.ts +397 -0
- package/v3/dist/memory/crdt/types.d.ts.map +1 -0
- package/v3/dist/memory/crdt/types.js +12 -0
- package/v3/dist/memory/crdt/types.js.map +1 -0
- package/v3/dist/memory/index.d.ts +5 -2
- package/v3/dist/memory/index.d.ts.map +1 -1
- package/v3/dist/memory/index.js +5 -2
- package/v3/dist/memory/index.js.map +1 -1
- package/v3/dist/performance/benchmarks.d.ts +215 -0
- package/v3/dist/performance/benchmarks.d.ts.map +1 -0
- package/v3/dist/performance/benchmarks.js +516 -0
- package/v3/dist/performance/benchmarks.js.map +1 -0
- package/v3/dist/performance/ci-gates.d.ts +149 -0
- package/v3/dist/performance/ci-gates.d.ts.map +1 -0
- package/v3/dist/performance/ci-gates.js +425 -0
- package/v3/dist/performance/ci-gates.js.map +1 -0
- package/v3/dist/performance/index.d.ts +18 -0
- package/v3/dist/performance/index.d.ts.map +1 -0
- package/v3/dist/performance/index.js +26 -0
- package/v3/dist/performance/index.js.map +1 -0
- package/v3/dist/performance/optimizer.d.ts +323 -0
- package/v3/dist/performance/optimizer.d.ts.map +1 -0
- package/v3/dist/performance/optimizer.js +592 -0
- package/v3/dist/performance/optimizer.js.map +1 -0
- package/v3/dist/performance/profiler.d.ts +195 -0
- package/v3/dist/performance/profiler.d.ts.map +1 -0
- package/v3/dist/performance/profiler.js +369 -0
- package/v3/dist/performance/profiler.js.map +1 -0
- package/v3/dist/performance/run-gates.d.ts +23 -0
- package/v3/dist/performance/run-gates.d.ts.map +1 -0
- package/v3/dist/performance/run-gates.js +122 -0
- package/v3/dist/performance/run-gates.js.map +1 -0
- package/v3/dist/testing/index.d.ts +6 -0
- package/v3/dist/testing/index.d.ts.map +1 -0
- package/v3/dist/testing/index.js +7 -0
- package/v3/dist/testing/index.js.map +1 -0
- package/v3/dist/testing/load/agent-load-tester.d.ts +221 -0
- package/v3/dist/testing/load/agent-load-tester.d.ts.map +1 -0
- package/v3/dist/testing/load/agent-load-tester.js +566 -0
- package/v3/dist/testing/load/agent-load-tester.js.map +1 -0
- package/v3/dist/testing/load/bottleneck-analyzer.d.ts +150 -0
- package/v3/dist/testing/load/bottleneck-analyzer.d.ts.map +1 -0
- package/v3/dist/testing/load/bottleneck-analyzer.js +442 -0
- package/v3/dist/testing/load/bottleneck-analyzer.js.map +1 -0
- package/v3/dist/testing/load/index.d.ts +17 -0
- package/v3/dist/testing/load/index.d.ts.map +1 -0
- package/v3/dist/testing/load/index.js +23 -0
- package/v3/dist/testing/load/index.js.map +1 -0
- package/v3/dist/testing/load/metrics-collector.d.ts +275 -0
- package/v3/dist/testing/load/metrics-collector.d.ts.map +1 -0
- package/v3/dist/testing/load/metrics-collector.js +475 -0
- package/v3/dist/testing/load/metrics-collector.js.map +1 -0
- package/v3/package.json +5 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convergence Tracker Implementation
|
|
3
|
+
*
|
|
4
|
+
* Tracks the state of multiple CRDT stores to determine when they have
|
|
5
|
+
* converged to the same state. Used for monitoring distributed system health
|
|
6
|
+
* and ensuring eventual consistency.
|
|
7
|
+
*
|
|
8
|
+
* @module memory/crdt/convergence-tracker
|
|
9
|
+
*/
|
|
10
|
+
import type { ConvergenceTracker, ConvergenceTrackerConfig, ConvergenceStatus, NodeStateSnapshot } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Create a new Convergence Tracker
|
|
13
|
+
*
|
|
14
|
+
* @param config - Tracker configuration
|
|
15
|
+
* @returns Convergence Tracker instance
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const tracker = createConvergenceTracker();
|
|
20
|
+
*
|
|
21
|
+
* // Record state from each node
|
|
22
|
+
* tracker.recordNodeState('node-1', store1.getState());
|
|
23
|
+
* tracker.recordNodeState('node-2', store2.getState());
|
|
24
|
+
*
|
|
25
|
+
* // Check if they've converged
|
|
26
|
+
* if (tracker.hasConverged()) {
|
|
27
|
+
* console.log('All nodes have same state!');
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare function createConvergenceTracker(config?: ConvergenceTrackerConfig): ConvergenceTracker;
|
|
32
|
+
/**
|
|
33
|
+
* Convergence metrics for monitoring
|
|
34
|
+
*/
|
|
35
|
+
export interface ConvergenceMetrics {
|
|
36
|
+
/** Average time to convergence (ms) */
|
|
37
|
+
averageConvergenceTime: number | null;
|
|
38
|
+
/** Number of convergence events recorded */
|
|
39
|
+
convergenceCount: number;
|
|
40
|
+
/** Time since tracking started (ms) */
|
|
41
|
+
trackingDuration: number;
|
|
42
|
+
/** Percentage of time system was converged */
|
|
43
|
+
convergenceRatio: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Extended tracker with metrics collection
|
|
47
|
+
*/
|
|
48
|
+
export interface MetricsConvergenceTracker extends ConvergenceTracker {
|
|
49
|
+
/** Get convergence metrics */
|
|
50
|
+
getMetrics(): ConvergenceMetrics;
|
|
51
|
+
/** Reset metrics (keeps node tracking) */
|
|
52
|
+
resetMetrics(): void;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a convergence tracker with metrics collection
|
|
56
|
+
*/
|
|
57
|
+
export declare function createMetricsConvergenceTracker(config?: ConvergenceTrackerConfig): MetricsConvergenceTracker;
|
|
58
|
+
export type { ConvergenceTracker, ConvergenceTrackerConfig, ConvergenceStatus, NodeStateSnapshot, };
|
|
59
|
+
//# sourceMappingURL=convergence-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convergence-tracker.d.ts","sourceRoot":"","sources":["../../../src/memory/crdt/convergence-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EAElB,MAAM,YAAY,CAAC;AAsGpB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,CAAC,EAAE,wBAAwB,GAChC,kBAAkB,CAkLpB;AAMD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,4CAA4C;IAC5C,gBAAgB,EAAE,MAAM,CAAC;IACzB,uCAAuC;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,kBAAkB;IACnE,8BAA8B;IAC9B,UAAU,IAAI,kBAAkB,CAAC;IACjC,0CAA0C;IAC1C,YAAY,IAAI,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,CAAC,EAAE,wBAAwB,GAChC,yBAAyB,CAuE3B;AAMD,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,GAClB,CAAC"}
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convergence Tracker Implementation
|
|
3
|
+
*
|
|
4
|
+
* Tracks the state of multiple CRDT stores to determine when they have
|
|
5
|
+
* converged to the same state. Used for monitoring distributed system health
|
|
6
|
+
* and ensuring eventual consistency.
|
|
7
|
+
*
|
|
8
|
+
* @module memory/crdt/convergence-tracker
|
|
9
|
+
*/
|
|
10
|
+
// =============================================================================
|
|
11
|
+
// Default Configuration
|
|
12
|
+
// =============================================================================
|
|
13
|
+
const DEFAULT_CONFIG = {
|
|
14
|
+
historyRetentionMs: 60_000, // 1 minute
|
|
15
|
+
staleThresholdMs: 30_000, // 30 seconds
|
|
16
|
+
};
|
|
17
|
+
// =============================================================================
|
|
18
|
+
// Hash Utilities
|
|
19
|
+
// =============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Generate a content-based hash of CRDT store state for quick comparison.
|
|
22
|
+
* This hash is based on the *semantic value* of the CRDTs (what they evaluate to),
|
|
23
|
+
* not the internal representations, so that stores with equivalent data produce
|
|
24
|
+
* the same hash regardless of how they arrived at that state.
|
|
25
|
+
*
|
|
26
|
+
* Not cryptographic - just for detecting differences.
|
|
27
|
+
*/
|
|
28
|
+
function hashState(state) {
|
|
29
|
+
const parts = [];
|
|
30
|
+
// Hash registers by their current value (timestamp/nodeId determine winner, but we
|
|
31
|
+
// compare the result - if both have same winner, they have same value)
|
|
32
|
+
for (const [key, reg] of Object.entries(state.registers)) {
|
|
33
|
+
// Include value, timestamp, and nodeId - these together determine the LWW winner
|
|
34
|
+
parts.push(`r:${key}:${JSON.stringify(reg.value)}:${reg.timestamp}:${reg.nodeId}`);
|
|
35
|
+
}
|
|
36
|
+
// Hash G-Counters by their TOTAL value (not per-node breakdown)
|
|
37
|
+
// Two stores are converged if they produce the same sum, even if the internal
|
|
38
|
+
// per-node counts differ (e.g., one has extra nodes with count 0)
|
|
39
|
+
for (const [key, counter] of Object.entries(state.gCounters)) {
|
|
40
|
+
const total = Object.values(counter.counts).reduce((sum, c) => sum + c, 0);
|
|
41
|
+
// Also include non-zero counts to detect semantic differences
|
|
42
|
+
const nonZeroCounts = Object.entries(counter.counts)
|
|
43
|
+
.filter(([_, count]) => count > 0)
|
|
44
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
45
|
+
.map(([nodeId, count]) => `${nodeId}=${count}`)
|
|
46
|
+
.join(',');
|
|
47
|
+
parts.push(`g:${key}:${total}:{${nonZeroCounts}}`);
|
|
48
|
+
}
|
|
49
|
+
// Hash PN-Counters by their NET value (positive - negative)
|
|
50
|
+
// Two stores are converged if they evaluate to the same number
|
|
51
|
+
for (const [key, counter] of Object.entries(state.pnCounters)) {
|
|
52
|
+
const posTotal = Object.values(counter.positive.counts).reduce((sum, c) => sum + c, 0);
|
|
53
|
+
const negTotal = Object.values(counter.negative.counts).reduce((sum, c) => sum + c, 0);
|
|
54
|
+
const netValue = posTotal - negTotal;
|
|
55
|
+
// Include non-zero contributions for semantic comparison
|
|
56
|
+
const nonZeroPos = Object.entries(counter.positive.counts)
|
|
57
|
+
.filter(([_, count]) => count > 0)
|
|
58
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
59
|
+
.map(([nodeId, count]) => `${nodeId}=+${count}`)
|
|
60
|
+
.join(',');
|
|
61
|
+
const nonZeroNeg = Object.entries(counter.negative.counts)
|
|
62
|
+
.filter(([_, count]) => count > 0)
|
|
63
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
64
|
+
.map(([nodeId, count]) => `${nodeId}=-${count}`)
|
|
65
|
+
.join(',');
|
|
66
|
+
parts.push(`p:${key}:${netValue}:{${nonZeroPos}|${nonZeroNeg}}`);
|
|
67
|
+
}
|
|
68
|
+
// Hash OR-Sets by their active elements (elements with at least one non-tombstoned tag)
|
|
69
|
+
for (const [key, set] of Object.entries(state.sets)) {
|
|
70
|
+
// Compute active elements: elements where at least one tag is not tombstoned
|
|
71
|
+
const activeElements = [];
|
|
72
|
+
for (const [elem, tags] of Object.entries(set.elements)) {
|
|
73
|
+
const tombstoneTags = new Set(set.tombstones[elem] || []);
|
|
74
|
+
const hasActiveTag = tags.some(tag => !tombstoneTags.has(tag));
|
|
75
|
+
if (hasActiveTag) {
|
|
76
|
+
activeElements.push(elem);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
activeElements.sort();
|
|
80
|
+
parts.push(`s:${key}:[${activeElements.join(',')}]`);
|
|
81
|
+
}
|
|
82
|
+
// Sort for consistency
|
|
83
|
+
parts.sort();
|
|
84
|
+
// Simple hash: join and get a fingerprint
|
|
85
|
+
const joined = parts.join('|');
|
|
86
|
+
let hash = 0;
|
|
87
|
+
for (let i = 0; i < joined.length; i++) {
|
|
88
|
+
const char = joined.charCodeAt(i);
|
|
89
|
+
hash = ((hash << 5) - hash) + char;
|
|
90
|
+
hash = hash & hash; // Convert to 32-bit integer
|
|
91
|
+
}
|
|
92
|
+
// Return hash without version - version is per-node and shouldn't affect convergence check
|
|
93
|
+
return hash.toString(16);
|
|
94
|
+
}
|
|
95
|
+
// =============================================================================
|
|
96
|
+
// Convergence Tracker Implementation
|
|
97
|
+
// =============================================================================
|
|
98
|
+
/**
|
|
99
|
+
* Create a new Convergence Tracker
|
|
100
|
+
*
|
|
101
|
+
* @param config - Tracker configuration
|
|
102
|
+
* @returns Convergence Tracker instance
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* const tracker = createConvergenceTracker();
|
|
107
|
+
*
|
|
108
|
+
* // Record state from each node
|
|
109
|
+
* tracker.recordNodeState('node-1', store1.getState());
|
|
110
|
+
* tracker.recordNodeState('node-2', store2.getState());
|
|
111
|
+
*
|
|
112
|
+
* // Check if they've converged
|
|
113
|
+
* if (tracker.hasConverged()) {
|
|
114
|
+
* console.log('All nodes have same state!');
|
|
115
|
+
* }
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
export function createConvergenceTracker(config) {
|
|
119
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
120
|
+
const { historyRetentionMs, staleThresholdMs } = cfg;
|
|
121
|
+
// Track node states: nodeId -> latest snapshot
|
|
122
|
+
const nodeStates = new Map();
|
|
123
|
+
// Track state history for each node: nodeId -> array of snapshots
|
|
124
|
+
const stateHistory = new Map();
|
|
125
|
+
// Track last convergence time
|
|
126
|
+
let lastConvergenceTime = null;
|
|
127
|
+
/**
|
|
128
|
+
* Clean up old history entries
|
|
129
|
+
*/
|
|
130
|
+
function cleanupHistory() {
|
|
131
|
+
const now = Date.now();
|
|
132
|
+
const cutoff = now - historyRetentionMs;
|
|
133
|
+
for (const [nodeId, history] of stateHistory) {
|
|
134
|
+
const filtered = history.filter((s) => s.timestamp >= cutoff);
|
|
135
|
+
if (filtered.length !== history.length) {
|
|
136
|
+
stateHistory.set(nodeId, filtered);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Check if a node is stale (hasn't reported recently)
|
|
142
|
+
*/
|
|
143
|
+
function isNodeStale(snapshot) {
|
|
144
|
+
return Date.now() - snapshot.timestamp > staleThresholdMs;
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
recordNodeState(nodeId, state) {
|
|
148
|
+
const snapshot = {
|
|
149
|
+
nodeId,
|
|
150
|
+
version: state.version,
|
|
151
|
+
timestamp: Date.now(),
|
|
152
|
+
stateHash: hashState(state),
|
|
153
|
+
};
|
|
154
|
+
// Update current state
|
|
155
|
+
nodeStates.set(nodeId, snapshot);
|
|
156
|
+
// Add to history
|
|
157
|
+
if (!stateHistory.has(nodeId)) {
|
|
158
|
+
stateHistory.set(nodeId, []);
|
|
159
|
+
}
|
|
160
|
+
stateHistory.get(nodeId).push(snapshot);
|
|
161
|
+
// Cleanup old history
|
|
162
|
+
cleanupHistory();
|
|
163
|
+
// Check if convergence just happened
|
|
164
|
+
if (this.hasConverged()) {
|
|
165
|
+
lastConvergenceTime = Date.now();
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
hasConverged() {
|
|
169
|
+
if (nodeStates.size < 2) {
|
|
170
|
+
return true; // Single node is always converged with itself
|
|
171
|
+
}
|
|
172
|
+
// Get non-stale nodes
|
|
173
|
+
const activeSnapshots = [];
|
|
174
|
+
for (const snapshot of nodeStates.values()) {
|
|
175
|
+
if (!isNodeStale(snapshot)) {
|
|
176
|
+
activeSnapshots.push(snapshot);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (activeSnapshots.length < 2) {
|
|
180
|
+
return true; // Only one active node
|
|
181
|
+
}
|
|
182
|
+
// Check if all active nodes have the same hash
|
|
183
|
+
const firstHash = activeSnapshots[0].stateHash;
|
|
184
|
+
return activeSnapshots.every((s) => s.stateHash === firstHash);
|
|
185
|
+
},
|
|
186
|
+
getStatus() {
|
|
187
|
+
const activeSnapshots = [];
|
|
188
|
+
const staleSnapshots = [];
|
|
189
|
+
for (const snapshot of nodeStates.values()) {
|
|
190
|
+
if (isNodeStale(snapshot)) {
|
|
191
|
+
staleSnapshots.push(snapshot);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
activeSnapshots.push(snapshot);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Find max version
|
|
198
|
+
let maxVersion = 0;
|
|
199
|
+
let minVersion = Number.MAX_SAFE_INTEGER;
|
|
200
|
+
for (const snapshot of activeSnapshots) {
|
|
201
|
+
maxVersion = Math.max(maxVersion, snapshot.version);
|
|
202
|
+
minVersion = Math.min(minVersion, snapshot.version);
|
|
203
|
+
}
|
|
204
|
+
if (activeSnapshots.length === 0) {
|
|
205
|
+
minVersion = 0;
|
|
206
|
+
}
|
|
207
|
+
// Find lagging nodes
|
|
208
|
+
const laggingNodes = [];
|
|
209
|
+
if (activeSnapshots.length > 1) {
|
|
210
|
+
const maxHash = activeSnapshots.reduce((best, s) => (s.version > best.version ? s : best), activeSnapshots[0]).stateHash;
|
|
211
|
+
for (const snapshot of activeSnapshots) {
|
|
212
|
+
if (snapshot.stateHash !== maxHash) {
|
|
213
|
+
laggingNodes.push(snapshot.nodeId);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Add stale nodes as lagging
|
|
218
|
+
for (const snapshot of staleSnapshots) {
|
|
219
|
+
laggingNodes.push(snapshot.nodeId);
|
|
220
|
+
}
|
|
221
|
+
const converged = laggingNodes.length === 0 && activeSnapshots.length > 0;
|
|
222
|
+
return {
|
|
223
|
+
converged,
|
|
224
|
+
nodeCount: nodeStates.size,
|
|
225
|
+
syncedNodes: activeSnapshots.length - laggingNodes.filter((id) => !staleSnapshots.some((s) => s.nodeId === id)).length,
|
|
226
|
+
laggingNodes,
|
|
227
|
+
lastConvergenceTime,
|
|
228
|
+
maxVersion,
|
|
229
|
+
minVersion,
|
|
230
|
+
};
|
|
231
|
+
},
|
|
232
|
+
getLaggingNodes() {
|
|
233
|
+
return this.getStatus().laggingNodes;
|
|
234
|
+
},
|
|
235
|
+
getTimeSinceConvergence() {
|
|
236
|
+
if (lastConvergenceTime === null) {
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
return Date.now() - lastConvergenceTime;
|
|
240
|
+
},
|
|
241
|
+
removeNode(nodeId) {
|
|
242
|
+
nodeStates.delete(nodeId);
|
|
243
|
+
stateHistory.delete(nodeId);
|
|
244
|
+
},
|
|
245
|
+
clear() {
|
|
246
|
+
nodeStates.clear();
|
|
247
|
+
stateHistory.clear();
|
|
248
|
+
lastConvergenceTime = null;
|
|
249
|
+
},
|
|
250
|
+
getTrackedNodes() {
|
|
251
|
+
return Array.from(nodeStates.keys());
|
|
252
|
+
},
|
|
253
|
+
isTracking(nodeId) {
|
|
254
|
+
return nodeStates.has(nodeId);
|
|
255
|
+
},
|
|
256
|
+
getNodeVersion(nodeId) {
|
|
257
|
+
const snapshot = nodeStates.get(nodeId);
|
|
258
|
+
return snapshot?.version ?? null;
|
|
259
|
+
},
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Create a convergence tracker with metrics collection
|
|
264
|
+
*/
|
|
265
|
+
export function createMetricsConvergenceTracker(config) {
|
|
266
|
+
const baseTracker = createConvergenceTracker(config);
|
|
267
|
+
// Metrics tracking
|
|
268
|
+
const startTime = Date.now();
|
|
269
|
+
let convergenceCount = 0;
|
|
270
|
+
let totalConvergedTime = 0;
|
|
271
|
+
let lastStateChangeTime = startTime;
|
|
272
|
+
let wasConverged = true;
|
|
273
|
+
const convergenceTimes = [];
|
|
274
|
+
// Wrap recordNodeState to track metrics
|
|
275
|
+
const originalRecord = baseTracker.recordNodeState.bind(baseTracker);
|
|
276
|
+
return {
|
|
277
|
+
...baseTracker,
|
|
278
|
+
recordNodeState(nodeId, state) {
|
|
279
|
+
const wasConvergedBefore = baseTracker.hasConverged();
|
|
280
|
+
originalRecord(nodeId, state);
|
|
281
|
+
const isConvergedNow = baseTracker.hasConverged();
|
|
282
|
+
const now = Date.now();
|
|
283
|
+
// Track state changes
|
|
284
|
+
if (wasConvergedBefore !== isConvergedNow) {
|
|
285
|
+
const duration = now - lastStateChangeTime;
|
|
286
|
+
if (wasConvergedBefore) {
|
|
287
|
+
// Was converged, now diverged
|
|
288
|
+
totalConvergedTime += duration;
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
// Was diverged, now converged
|
|
292
|
+
convergenceCount++;
|
|
293
|
+
convergenceTimes.push(duration);
|
|
294
|
+
}
|
|
295
|
+
lastStateChangeTime = now;
|
|
296
|
+
wasConverged = isConvergedNow;
|
|
297
|
+
}
|
|
298
|
+
},
|
|
299
|
+
getMetrics() {
|
|
300
|
+
const now = Date.now();
|
|
301
|
+
const trackingDuration = now - startTime;
|
|
302
|
+
// Add current state duration
|
|
303
|
+
let convergedTime = totalConvergedTime;
|
|
304
|
+
if (wasConverged) {
|
|
305
|
+
convergedTime += now - lastStateChangeTime;
|
|
306
|
+
}
|
|
307
|
+
return {
|
|
308
|
+
averageConvergenceTime: convergenceTimes.length > 0
|
|
309
|
+
? convergenceTimes.reduce((a, b) => a + b, 0) / convergenceTimes.length
|
|
310
|
+
: null,
|
|
311
|
+
convergenceCount,
|
|
312
|
+
trackingDuration,
|
|
313
|
+
convergenceRatio: trackingDuration > 0 ? convergedTime / trackingDuration : 1,
|
|
314
|
+
};
|
|
315
|
+
},
|
|
316
|
+
resetMetrics() {
|
|
317
|
+
convergenceCount = 0;
|
|
318
|
+
totalConvergedTime = 0;
|
|
319
|
+
convergenceTimes.length = 0;
|
|
320
|
+
lastStateChangeTime = Date.now();
|
|
321
|
+
wasConverged = baseTracker.hasConverged();
|
|
322
|
+
},
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
//# sourceMappingURL=convergence-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convergence-tracker.js","sourceRoot":"","sources":["../../../src/memory/crdt/convergence-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified CRDT Store Implementation
|
|
3
|
+
*
|
|
4
|
+
* A unified store managing multiple CRDT types with support for:
|
|
5
|
+
* - Full state replication
|
|
6
|
+
* - Delta-based incremental sync
|
|
7
|
+
* - Change event emission
|
|
8
|
+
* - Type-safe access to different CRDT types
|
|
9
|
+
*
|
|
10
|
+
* @module memory/crdt/crdt-store
|
|
11
|
+
*/
|
|
12
|
+
import type { CRDTStore, CRDTStoreConfig, CRDTStoreState, CRDTStoreDelta } from './types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Create a new CRDT Store
|
|
15
|
+
*
|
|
16
|
+
* @param config - Store configuration
|
|
17
|
+
* @returns CRDT Store instance
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const store = createCRDTStore({ nodeId: 'agent-1' });
|
|
22
|
+
*
|
|
23
|
+
* // Use registers
|
|
24
|
+
* store.setRegister('config', { maxAgents: 100 });
|
|
25
|
+
*
|
|
26
|
+
* // Use counters
|
|
27
|
+
* store.incrementCounter('tasks-completed');
|
|
28
|
+
*
|
|
29
|
+
* // Use sets
|
|
30
|
+
* store.addToSet('active-agents', 'agent-1');
|
|
31
|
+
*
|
|
32
|
+
* // Merge with another store
|
|
33
|
+
* store.merge(otherStore);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function createCRDTStore(config: CRDTStoreConfig): CRDTStore;
|
|
37
|
+
/**
|
|
38
|
+
* Create a CRDT Store from existing state
|
|
39
|
+
*
|
|
40
|
+
* @param nodeId - Unique identifier for this node
|
|
41
|
+
* @param existingState - State to restore from
|
|
42
|
+
* @param config - Additional configuration
|
|
43
|
+
* @returns CRDT Store instance
|
|
44
|
+
*/
|
|
45
|
+
export declare function createCRDTStoreFromState(nodeId: string, existingState: CRDTStoreState, config?: Partial<CRDTStoreConfig>): CRDTStore;
|
|
46
|
+
/**
|
|
47
|
+
* Check if a value is a valid CRDT Store state
|
|
48
|
+
*/
|
|
49
|
+
export declare function isCRDTStoreState(value: unknown): value is CRDTStoreState;
|
|
50
|
+
/**
|
|
51
|
+
* Check if a value is a valid CRDT Store delta
|
|
52
|
+
*/
|
|
53
|
+
export declare function isCRDTStoreDelta(value: unknown): value is CRDTStoreDelta;
|
|
54
|
+
export type { CRDTStore, CRDTStoreConfig, CRDTStoreState, CRDTStoreDelta };
|
|
55
|
+
//# sourceMappingURL=crdt-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crdt-store.d.ts","sourceRoot":"","sources":["../../../src/memory/crdt/crdt-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,cAAc,EACd,cAAc,EAaf,MAAM,YAAY,CAAC;AAqBpB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CA0jBlE;AAMD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,cAAc,EAC7B,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAChC,SAAS,CAIX;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAexE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAYxE;AAMD,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
|