agentic-qe 3.3.4 → 3.4.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/.claude/agents/v3/qe-queen-coordinator.md +332 -166
- package/.claude/helpers/statusline-v3.cjs +85 -42
- package/.claude/skills/qcsd-ideation-swarm/SKILL.md +7 -4
- package/README.md +71 -2
- package/package.json +1 -1
- package/scripts/cloud-db-config.json +10 -5
- package/scripts/merge-v3-to-root.sql +48 -0
- package/v3/CHANGELOG.md +156 -0
- package/v3/README.md +118 -1
- package/v3/assets/agents/v3/qe-queen-coordinator.md +332 -166
- 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 +1507 -425
- package/v3/dist/coordination/consensus/providers/claude-provider.js +1 -1
- package/v3/dist/coordination/consensus/providers/gemini-provider.js +1 -1
- package/v3/dist/coordination/consensus/providers/openai-provider.js +1 -1
- package/v3/dist/init/init-wizard.d.ts.map +1 -1
- package/v3/dist/init/init-wizard.js +19 -4
- 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/phases/05-learning.js +1 -1
- package/v3/dist/init/phases/05-learning.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/integrations/ruvector/interfaces.js +1 -1
- package/v3/dist/integrations/ruvector/interfaces.js.map +1 -1
- package/v3/dist/kernel/index.d.ts +1 -1
- package/v3/dist/kernel/index.d.ts.map +1 -1
- package/v3/dist/kernel/index.js +3 -1
- package/v3/dist/kernel/index.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 +123 -0
- package/v3/dist/kernel/unified-memory.d.ts.map +1 -1
- package/v3/dist/kernel/unified-memory.js +258 -2
- package/v3/dist/kernel/unified-memory.js.map +1 -1
- package/v3/dist/learning/qe-unified-memory.js +1 -1
- package/v3/dist/learning/qe-unified-memory.js.map +1 -1
- package/v3/dist/learning/real-qe-reasoning-bank.js +2 -2
- package/v3/dist/learning/real-qe-reasoning-bank.js.map +1 -1
- package/v3/dist/learning/sqlite-persistence.d.ts +1 -1
- package/v3/dist/learning/sqlite-persistence.js +1 -1
- package/v3/dist/learning/sqlite-persistence.js.map +1 -1
- package/v3/dist/learning/v2-to-v3-migration.d.ts +2 -2
- package/v3/dist/learning/v2-to-v3-migration.d.ts.map +1 -1
- package/v3/dist/learning/v2-to-v3-migration.js +2 -2
- package/v3/dist/learning/v2-to-v3-migration.js.map +1 -1
- package/v3/dist/mcp/bundle.js +63075 -53304
- 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/sync/claude-flow-bridge.d.ts +1 -1
- package/v3/dist/sync/claude-flow-bridge.js +1 -1
- package/v3/dist/sync/interfaces.d.ts +6 -0
- package/v3/dist/sync/interfaces.d.ts.map +1 -1
- package/v3/dist/sync/interfaces.js +34 -47
- package/v3/dist/sync/interfaces.js.map +1 -1
- package/v3/dist/sync/readers/sqlite-reader.d.ts +1 -1
- package/v3/dist/sync/readers/sqlite-reader.js +1 -1
- 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,453 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2A Token Store
|
|
3
|
+
*
|
|
4
|
+
* In-memory token storage with TTL support for OAuth 2.0 tokens.
|
|
5
|
+
* Provides storage for access tokens, refresh tokens, and authorization codes.
|
|
6
|
+
*
|
|
7
|
+
* @module adapters/a2a/auth/token-store
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Default token store configuration
|
|
11
|
+
*/
|
|
12
|
+
export const DEFAULT_TOKEN_STORE_CONFIG = {
|
|
13
|
+
cleanupInterval: 60000,
|
|
14
|
+
maxTokens: 100000,
|
|
15
|
+
enableAutoCleanup: true,
|
|
16
|
+
};
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Token Store Implementation
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* In-memory token store with TTL support
|
|
22
|
+
*
|
|
23
|
+
* Provides storage for OAuth 2.0 tokens with automatic cleanup
|
|
24
|
+
* of expired tokens.
|
|
25
|
+
*/
|
|
26
|
+
export class TokenStore {
|
|
27
|
+
config;
|
|
28
|
+
accessTokens = new Map();
|
|
29
|
+
refreshTokens = new Map();
|
|
30
|
+
authorizationCodes = new Map();
|
|
31
|
+
revokedTokens = new Set();
|
|
32
|
+
cleanupTimer;
|
|
33
|
+
lastCleanup = null;
|
|
34
|
+
totalExpiredCleaned = 0;
|
|
35
|
+
constructor(config = {}) {
|
|
36
|
+
this.config = { ...DEFAULT_TOKEN_STORE_CONFIG, ...config };
|
|
37
|
+
if (this.config.enableAutoCleanup && this.config.cleanupInterval > 0) {
|
|
38
|
+
this.startCleanupTimer();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// ============================================================================
|
|
42
|
+
// Access Token Operations
|
|
43
|
+
// ============================================================================
|
|
44
|
+
/**
|
|
45
|
+
* Store an access token
|
|
46
|
+
*
|
|
47
|
+
* @param token - The token string (JWT)
|
|
48
|
+
* @param claims - The token claims
|
|
49
|
+
*/
|
|
50
|
+
storeAccessToken(token, claims) {
|
|
51
|
+
this.checkCapacity();
|
|
52
|
+
const fullClaims = {
|
|
53
|
+
...claims,
|
|
54
|
+
tokenType: 'access',
|
|
55
|
+
};
|
|
56
|
+
this.accessTokens.set(token, fullClaims);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get access token claims
|
|
60
|
+
*
|
|
61
|
+
* @param token - The token string
|
|
62
|
+
* @returns The token claims or null if not found/expired/revoked
|
|
63
|
+
*/
|
|
64
|
+
getAccessTokenClaims(token) {
|
|
65
|
+
// Check if revoked
|
|
66
|
+
if (this.isRevoked(token)) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
const claims = this.accessTokens.get(token);
|
|
70
|
+
if (!claims) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
// Check if expired
|
|
74
|
+
if (this.isExpired(claims.expiresAt)) {
|
|
75
|
+
this.accessTokens.delete(token);
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
return claims;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Check if an access token is valid
|
|
82
|
+
*
|
|
83
|
+
* @param token - The token string
|
|
84
|
+
* @returns True if the token is valid
|
|
85
|
+
*/
|
|
86
|
+
isAccessTokenValid(token) {
|
|
87
|
+
return this.getAccessTokenClaims(token) !== null;
|
|
88
|
+
}
|
|
89
|
+
// ============================================================================
|
|
90
|
+
// Refresh Token Operations
|
|
91
|
+
// ============================================================================
|
|
92
|
+
/**
|
|
93
|
+
* Store a refresh token
|
|
94
|
+
*
|
|
95
|
+
* @param token - The token string
|
|
96
|
+
* @param claims - The token claims
|
|
97
|
+
*/
|
|
98
|
+
storeRefreshToken(token, claims) {
|
|
99
|
+
this.checkCapacity();
|
|
100
|
+
const fullClaims = {
|
|
101
|
+
...claims,
|
|
102
|
+
tokenType: 'refresh',
|
|
103
|
+
};
|
|
104
|
+
this.refreshTokens.set(token, fullClaims);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get refresh token claims
|
|
108
|
+
*
|
|
109
|
+
* @param token - The token string
|
|
110
|
+
* @returns The token claims or null if not found/expired/revoked
|
|
111
|
+
*/
|
|
112
|
+
getRefreshTokenClaims(token) {
|
|
113
|
+
if (this.isRevoked(token)) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
const claims = this.refreshTokens.get(token);
|
|
117
|
+
if (!claims) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
if (this.isExpired(claims.expiresAt)) {
|
|
121
|
+
this.refreshTokens.delete(token);
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
return claims;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Increment the use count for a refresh token
|
|
128
|
+
*
|
|
129
|
+
* @param token - The refresh token
|
|
130
|
+
* @returns The updated claims or null if not found
|
|
131
|
+
*/
|
|
132
|
+
incrementRefreshTokenUseCount(token) {
|
|
133
|
+
const claims = this.refreshTokens.get(token);
|
|
134
|
+
if (!claims) {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
const updatedClaims = {
|
|
138
|
+
...claims,
|
|
139
|
+
useCount: claims.useCount + 1,
|
|
140
|
+
};
|
|
141
|
+
this.refreshTokens.set(token, updatedClaims);
|
|
142
|
+
return updatedClaims;
|
|
143
|
+
}
|
|
144
|
+
// ============================================================================
|
|
145
|
+
// Authorization Code Operations
|
|
146
|
+
// ============================================================================
|
|
147
|
+
/**
|
|
148
|
+
* Store an authorization code
|
|
149
|
+
*
|
|
150
|
+
* @param code - The authorization code
|
|
151
|
+
* @param claims - The code claims
|
|
152
|
+
*/
|
|
153
|
+
storeAuthorizationCode(code, claims) {
|
|
154
|
+
this.authorizationCodes.set(code, {
|
|
155
|
+
...claims,
|
|
156
|
+
used: false,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Get authorization code claims
|
|
161
|
+
*
|
|
162
|
+
* @param code - The authorization code
|
|
163
|
+
* @returns The code claims or null if not found/expired/used
|
|
164
|
+
*/
|
|
165
|
+
getAuthorizationCodeClaims(code) {
|
|
166
|
+
const claims = this.authorizationCodes.get(code);
|
|
167
|
+
if (!claims) {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
// Check if expired
|
|
171
|
+
if (this.isExpired(claims.expiresAt)) {
|
|
172
|
+
this.authorizationCodes.delete(code);
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
// Check if already used
|
|
176
|
+
if (claims.used) {
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
return claims;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Mark an authorization code as used
|
|
183
|
+
*
|
|
184
|
+
* @param code - The authorization code
|
|
185
|
+
* @returns True if the code was marked as used
|
|
186
|
+
*/
|
|
187
|
+
markAuthorizationCodeUsed(code) {
|
|
188
|
+
const claims = this.authorizationCodes.get(code);
|
|
189
|
+
if (!claims || claims.used) {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
claims.used = true;
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Consume an authorization code (get and mark as used)
|
|
197
|
+
*
|
|
198
|
+
* @param code - The authorization code
|
|
199
|
+
* @returns The code claims or null if not valid
|
|
200
|
+
*/
|
|
201
|
+
consumeAuthorizationCode(code) {
|
|
202
|
+
const claims = this.getAuthorizationCodeClaims(code);
|
|
203
|
+
if (!claims) {
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
this.markAuthorizationCodeUsed(code);
|
|
207
|
+
return claims;
|
|
208
|
+
}
|
|
209
|
+
// ============================================================================
|
|
210
|
+
// Token Revocation
|
|
211
|
+
// ============================================================================
|
|
212
|
+
/**
|
|
213
|
+
* Revoke a token
|
|
214
|
+
*
|
|
215
|
+
* @param token - The token string
|
|
216
|
+
* @returns True if the token was revoked
|
|
217
|
+
*/
|
|
218
|
+
revokeToken(token) {
|
|
219
|
+
// Add to revocation list
|
|
220
|
+
this.revokedTokens.add(token);
|
|
221
|
+
// Remove from active stores
|
|
222
|
+
const wasAccessToken = this.accessTokens.delete(token);
|
|
223
|
+
const wasRefreshToken = this.refreshTokens.delete(token);
|
|
224
|
+
return wasAccessToken || wasRefreshToken;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Revoke all tokens for a client
|
|
228
|
+
*
|
|
229
|
+
* @param clientId - The client ID
|
|
230
|
+
* @returns Number of tokens revoked
|
|
231
|
+
*/
|
|
232
|
+
revokeTokensByClient(clientId) {
|
|
233
|
+
let count = 0;
|
|
234
|
+
// Revoke access tokens
|
|
235
|
+
for (const [token, claims] of this.accessTokens) {
|
|
236
|
+
if (claims.clientId === clientId) {
|
|
237
|
+
this.revokeToken(token);
|
|
238
|
+
count++;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Revoke refresh tokens
|
|
242
|
+
for (const [token, claims] of this.refreshTokens) {
|
|
243
|
+
if (claims.clientId === clientId) {
|
|
244
|
+
this.revokeToken(token);
|
|
245
|
+
count++;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return count;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Check if a token is revoked
|
|
252
|
+
*
|
|
253
|
+
* @param token - The token string
|
|
254
|
+
* @returns True if the token is revoked
|
|
255
|
+
*/
|
|
256
|
+
isRevoked(token) {
|
|
257
|
+
return this.revokedTokens.has(token);
|
|
258
|
+
}
|
|
259
|
+
// ============================================================================
|
|
260
|
+
// Generic Token Operations
|
|
261
|
+
// ============================================================================
|
|
262
|
+
/**
|
|
263
|
+
* Get claims for any token type
|
|
264
|
+
*
|
|
265
|
+
* @param token - The token string
|
|
266
|
+
* @returns The token claims or null
|
|
267
|
+
*/
|
|
268
|
+
getTokenClaims(token) {
|
|
269
|
+
const accessClaims = this.getAccessTokenClaims(token);
|
|
270
|
+
if (accessClaims) {
|
|
271
|
+
return accessClaims;
|
|
272
|
+
}
|
|
273
|
+
return this.getRefreshTokenClaims(token);
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Check if a token exists and is valid
|
|
277
|
+
*
|
|
278
|
+
* @param token - The token string
|
|
279
|
+
* @returns True if the token is valid
|
|
280
|
+
*/
|
|
281
|
+
isTokenValid(token) {
|
|
282
|
+
return this.getTokenClaims(token) !== null;
|
|
283
|
+
}
|
|
284
|
+
// ============================================================================
|
|
285
|
+
// Cleanup Operations
|
|
286
|
+
// ============================================================================
|
|
287
|
+
/**
|
|
288
|
+
* Clean up expired tokens
|
|
289
|
+
*
|
|
290
|
+
* @returns Number of tokens cleaned up
|
|
291
|
+
*/
|
|
292
|
+
cleanup() {
|
|
293
|
+
const now = Math.floor(Date.now() / 1000);
|
|
294
|
+
let cleaned = 0;
|
|
295
|
+
// Clean access tokens
|
|
296
|
+
for (const [token, claims] of this.accessTokens) {
|
|
297
|
+
if (this.isExpired(claims.expiresAt)) {
|
|
298
|
+
this.accessTokens.delete(token);
|
|
299
|
+
cleaned++;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// Clean refresh tokens
|
|
303
|
+
for (const [token, claims] of this.refreshTokens) {
|
|
304
|
+
if (this.isExpired(claims.expiresAt)) {
|
|
305
|
+
this.refreshTokens.delete(token);
|
|
306
|
+
cleaned++;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
// Clean authorization codes
|
|
310
|
+
for (const [code, claims] of this.authorizationCodes) {
|
|
311
|
+
if (this.isExpired(claims.expiresAt)) {
|
|
312
|
+
this.authorizationCodes.delete(code);
|
|
313
|
+
cleaned++;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
// Clean old revoked tokens (keep for 24 hours)
|
|
317
|
+
const dayAgo = now - 86400;
|
|
318
|
+
for (const token of this.revokedTokens) {
|
|
319
|
+
// We can't know when it was revoked, so we check if there are too many
|
|
320
|
+
if (this.revokedTokens.size > 10000) {
|
|
321
|
+
// Just remove some to prevent unbounded growth
|
|
322
|
+
this.revokedTokens.delete(token);
|
|
323
|
+
cleaned++;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
this.lastCleanup = now;
|
|
327
|
+
this.totalExpiredCleaned += cleaned;
|
|
328
|
+
return cleaned;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Start the automatic cleanup timer
|
|
332
|
+
*/
|
|
333
|
+
startCleanupTimer() {
|
|
334
|
+
this.cleanupTimer = setInterval(() => {
|
|
335
|
+
this.cleanup();
|
|
336
|
+
}, this.config.cleanupInterval);
|
|
337
|
+
// Don't prevent process exit
|
|
338
|
+
if (typeof this.cleanupTimer.unref === 'function') {
|
|
339
|
+
this.cleanupTimer.unref();
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Stop the automatic cleanup timer
|
|
344
|
+
*/
|
|
345
|
+
stopCleanupTimer() {
|
|
346
|
+
if (this.cleanupTimer) {
|
|
347
|
+
clearInterval(this.cleanupTimer);
|
|
348
|
+
this.cleanupTimer = undefined;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Check capacity and evict if necessary
|
|
353
|
+
*/
|
|
354
|
+
checkCapacity() {
|
|
355
|
+
if (this.config.maxTokens <= 0) {
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
const totalTokens = this.accessTokens.size + this.refreshTokens.size;
|
|
359
|
+
if (totalTokens >= this.config.maxTokens) {
|
|
360
|
+
// Run cleanup first
|
|
361
|
+
this.cleanup();
|
|
362
|
+
// If still over capacity, evict oldest tokens
|
|
363
|
+
const stillOver = this.accessTokens.size + this.refreshTokens.size - this.config.maxTokens;
|
|
364
|
+
if (stillOver > 0) {
|
|
365
|
+
this.evictOldestTokens(stillOver + 100); // Evict some extra
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Evict the oldest tokens
|
|
371
|
+
*
|
|
372
|
+
* @param count - Number of tokens to evict
|
|
373
|
+
*/
|
|
374
|
+
evictOldestTokens(count) {
|
|
375
|
+
// Get all tokens sorted by issuedAt
|
|
376
|
+
const allTokens = [];
|
|
377
|
+
for (const [token, claims] of this.accessTokens) {
|
|
378
|
+
allTokens.push({ token, issuedAt: claims.issuedAt, type: 'access' });
|
|
379
|
+
}
|
|
380
|
+
for (const [token, claims] of this.refreshTokens) {
|
|
381
|
+
allTokens.push({ token, issuedAt: claims.issuedAt, type: 'refresh' });
|
|
382
|
+
}
|
|
383
|
+
allTokens.sort((a, b) => a.issuedAt - b.issuedAt);
|
|
384
|
+
// Evict oldest
|
|
385
|
+
const toEvict = allTokens.slice(0, count);
|
|
386
|
+
for (const { token, type } of toEvict) {
|
|
387
|
+
if (type === 'access') {
|
|
388
|
+
this.accessTokens.delete(token);
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
this.refreshTokens.delete(token);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Check if a timestamp has expired
|
|
397
|
+
*/
|
|
398
|
+
isExpired(expiresAt) {
|
|
399
|
+
const now = Math.floor(Date.now() / 1000);
|
|
400
|
+
return expiresAt <= now;
|
|
401
|
+
}
|
|
402
|
+
// ============================================================================
|
|
403
|
+
// Statistics and Management
|
|
404
|
+
// ============================================================================
|
|
405
|
+
/**
|
|
406
|
+
* Get store statistics
|
|
407
|
+
*/
|
|
408
|
+
getStats() {
|
|
409
|
+
return {
|
|
410
|
+
accessTokenCount: this.accessTokens.size,
|
|
411
|
+
refreshTokenCount: this.refreshTokens.size,
|
|
412
|
+
authCodeCount: this.authorizationCodes.size,
|
|
413
|
+
revokedTokenCount: this.revokedTokens.size,
|
|
414
|
+
lastCleanup: this.lastCleanup,
|
|
415
|
+
totalExpiredCleaned: this.totalExpiredCleaned,
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Clear all tokens
|
|
420
|
+
*/
|
|
421
|
+
clear() {
|
|
422
|
+
this.accessTokens.clear();
|
|
423
|
+
this.refreshTokens.clear();
|
|
424
|
+
this.authorizationCodes.clear();
|
|
425
|
+
this.revokedTokens.clear();
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Destroy the store
|
|
429
|
+
*/
|
|
430
|
+
destroy() {
|
|
431
|
+
this.stopCleanupTimer();
|
|
432
|
+
this.clear();
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Get the total number of tokens
|
|
436
|
+
*/
|
|
437
|
+
get size() {
|
|
438
|
+
return this.accessTokens.size + this.refreshTokens.size;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
// ============================================================================
|
|
442
|
+
// Factory Function
|
|
443
|
+
// ============================================================================
|
|
444
|
+
/**
|
|
445
|
+
* Create a new TokenStore instance
|
|
446
|
+
*
|
|
447
|
+
* @param config - Store configuration
|
|
448
|
+
* @returns A new TokenStore
|
|
449
|
+
*/
|
|
450
|
+
export function createTokenStore(config = {}) {
|
|
451
|
+
return new TokenStore(config);
|
|
452
|
+
}
|
|
453
|
+
//# sourceMappingURL=token-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../../../../src/adapters/a2a/auth/token-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2A Agent Health Checker
|
|
3
|
+
*
|
|
4
|
+
* Provides health checking functionality for registered agents.
|
|
5
|
+
* Supports individual and bulk health checks with configurable intervals.
|
|
6
|
+
*
|
|
7
|
+
* @module adapters/a2a/discovery/agent-health
|
|
8
|
+
*/
|
|
9
|
+
import { EventEmitter } from 'events';
|
|
10
|
+
import { QEAgentCard } from '../agent-cards/schema.js';
|
|
11
|
+
/**
|
|
12
|
+
* Agent health status levels
|
|
13
|
+
*/
|
|
14
|
+
export type HealthStatus = 'healthy' | 'degraded' | 'unavailable' | 'unknown';
|
|
15
|
+
/**
|
|
16
|
+
* Health check result for an individual agent
|
|
17
|
+
*/
|
|
18
|
+
export interface AgentHealthStatus {
|
|
19
|
+
/** Agent identifier */
|
|
20
|
+
readonly agentId: string;
|
|
21
|
+
/** Current health status */
|
|
22
|
+
readonly status: HealthStatus;
|
|
23
|
+
/** Timestamp of the last health check */
|
|
24
|
+
readonly lastCheck: Date;
|
|
25
|
+
/** Response time in milliseconds (if available) */
|
|
26
|
+
readonly responseTime?: number;
|
|
27
|
+
/** Consecutive error count */
|
|
28
|
+
readonly errorCount: number;
|
|
29
|
+
/** Consecutive success count */
|
|
30
|
+
readonly successCount: number;
|
|
31
|
+
/** Error message (if unhealthy) */
|
|
32
|
+
readonly errorMessage?: string;
|
|
33
|
+
/** Additional health details */
|
|
34
|
+
readonly details?: Record<string, unknown>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Health check configuration
|
|
38
|
+
*/
|
|
39
|
+
export interface HealthCheckConfig {
|
|
40
|
+
/** Timeout for health check requests in milliseconds */
|
|
41
|
+
readonly timeoutMs?: number;
|
|
42
|
+
/** Number of consecutive failures before marking as unhealthy */
|
|
43
|
+
readonly failureThreshold?: number;
|
|
44
|
+
/** Number of consecutive successes to recover from unhealthy */
|
|
45
|
+
readonly recoveryThreshold?: number;
|
|
46
|
+
/** Response time threshold for degraded status (ms) */
|
|
47
|
+
readonly degradedThresholdMs?: number;
|
|
48
|
+
/** Custom health check function */
|
|
49
|
+
readonly checkFn?: (agentId: string, card: QEAgentCard) => Promise<HealthCheckResult>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Default health check configuration
|
|
53
|
+
*/
|
|
54
|
+
export declare const DEFAULT_HEALTH_CHECK_CONFIG: Required<Omit<HealthCheckConfig, 'checkFn'>>;
|
|
55
|
+
/**
|
|
56
|
+
* Result from a health check attempt
|
|
57
|
+
*/
|
|
58
|
+
export interface HealthCheckResult {
|
|
59
|
+
/** Whether the check was successful */
|
|
60
|
+
readonly success: boolean;
|
|
61
|
+
/** Response time in milliseconds */
|
|
62
|
+
readonly responseTime?: number;
|
|
63
|
+
/** Error if check failed */
|
|
64
|
+
readonly error?: Error;
|
|
65
|
+
/** Additional details */
|
|
66
|
+
readonly details?: Record<string, unknown>;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Periodic check configuration
|
|
70
|
+
*/
|
|
71
|
+
export interface PeriodicCheckConfig {
|
|
72
|
+
/** Interval between checks in milliseconds */
|
|
73
|
+
readonly intervalMs: number;
|
|
74
|
+
/** Whether to check all agents or only previously unhealthy ones */
|
|
75
|
+
readonly checkOnlyUnhealthy?: boolean;
|
|
76
|
+
/** Callback for status changes */
|
|
77
|
+
readonly onStatusChange?: (agentId: string, oldStatus: HealthStatus, newStatus: HealthStatus) => void;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Health summary statistics
|
|
81
|
+
*/
|
|
82
|
+
export interface HealthSummary {
|
|
83
|
+
/** Total number of agents */
|
|
84
|
+
readonly total: number;
|
|
85
|
+
/** Number of healthy agents */
|
|
86
|
+
readonly healthy: number;
|
|
87
|
+
/** Number of degraded agents */
|
|
88
|
+
readonly degraded: number;
|
|
89
|
+
/** Number of unavailable agents */
|
|
90
|
+
readonly unavailable: number;
|
|
91
|
+
/** Number of unknown status agents */
|
|
92
|
+
readonly unknown: number;
|
|
93
|
+
/** Overall health percentage (0-100) */
|
|
94
|
+
readonly healthPercentage: number;
|
|
95
|
+
/** Last summary calculation time */
|
|
96
|
+
readonly calculatedAt: Date;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Event map for AgentHealthChecker
|
|
100
|
+
*/
|
|
101
|
+
export interface HealthCheckerEvents {
|
|
102
|
+
'status-change': (agentId: string, oldStatus: HealthStatus, newStatus: HealthStatus) => void;
|
|
103
|
+
'check-complete': (agentId: string, result: AgentHealthStatus) => void;
|
|
104
|
+
'check-error': (agentId: string, error: Error) => void;
|
|
105
|
+
'all-checks-complete': (summary: HealthSummary) => void;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Agent Health Checker
|
|
109
|
+
*
|
|
110
|
+
* Monitors the health of registered agents through periodic or on-demand checks.
|
|
111
|
+
* Supports configurable thresholds for failure detection and recovery.
|
|
112
|
+
*/
|
|
113
|
+
export declare class AgentHealthChecker extends EventEmitter {
|
|
114
|
+
private readonly config;
|
|
115
|
+
private readonly healthStates;
|
|
116
|
+
private readonly agentCards;
|
|
117
|
+
private periodicCheckTimer;
|
|
118
|
+
private periodicConfig;
|
|
119
|
+
constructor(agentCards: Map<string, QEAgentCard>, config?: HealthCheckConfig);
|
|
120
|
+
/**
|
|
121
|
+
* Check the health of a specific agent
|
|
122
|
+
*/
|
|
123
|
+
checkAgent(agentId: string): Promise<AgentHealthStatus>;
|
|
124
|
+
/**
|
|
125
|
+
* Check the health of all registered agents
|
|
126
|
+
*/
|
|
127
|
+
checkAll(): Promise<Map<string, AgentHealthStatus>>;
|
|
128
|
+
/**
|
|
129
|
+
* Start periodic health checks
|
|
130
|
+
*/
|
|
131
|
+
startPeriodicChecks(config: PeriodicCheckConfig): void;
|
|
132
|
+
/**
|
|
133
|
+
* Stop periodic health checks
|
|
134
|
+
*/
|
|
135
|
+
stopPeriodicChecks(): void;
|
|
136
|
+
/**
|
|
137
|
+
* Check if periodic checks are running
|
|
138
|
+
*/
|
|
139
|
+
isPeriodicCheckRunning(): boolean;
|
|
140
|
+
/**
|
|
141
|
+
* Get list of healthy agent IDs
|
|
142
|
+
*/
|
|
143
|
+
getHealthyAgents(): string[];
|
|
144
|
+
/**
|
|
145
|
+
* Get list of unhealthy agent IDs (degraded or unavailable)
|
|
146
|
+
*/
|
|
147
|
+
getUnhealthyAgents(): string[];
|
|
148
|
+
/**
|
|
149
|
+
* Get health status for a specific agent
|
|
150
|
+
*/
|
|
151
|
+
getStatus(agentId: string): AgentHealthStatus | null;
|
|
152
|
+
/**
|
|
153
|
+
* Get all health statuses
|
|
154
|
+
*/
|
|
155
|
+
getAllStatuses(): Map<string, AgentHealthStatus>;
|
|
156
|
+
/**
|
|
157
|
+
* Get health summary
|
|
158
|
+
*/
|
|
159
|
+
getSummary(): HealthSummary;
|
|
160
|
+
/**
|
|
161
|
+
* Reset health state for an agent
|
|
162
|
+
*/
|
|
163
|
+
resetAgent(agentId: string): void;
|
|
164
|
+
/**
|
|
165
|
+
* Reset all health states
|
|
166
|
+
*/
|
|
167
|
+
resetAll(): void;
|
|
168
|
+
/**
|
|
169
|
+
* Update the agent cards reference (e.g., after hot reload)
|
|
170
|
+
*/
|
|
171
|
+
updateAgentCards(cards: Map<string, QEAgentCard>): void;
|
|
172
|
+
/**
|
|
173
|
+
* Perform the actual health check
|
|
174
|
+
*/
|
|
175
|
+
private performHealthCheck;
|
|
176
|
+
/**
|
|
177
|
+
* Update health state based on check result
|
|
178
|
+
*/
|
|
179
|
+
private updateHealthState;
|
|
180
|
+
/**
|
|
181
|
+
* Handle a check error
|
|
182
|
+
*/
|
|
183
|
+
private handleCheckError;
|
|
184
|
+
/**
|
|
185
|
+
* Convert state to status
|
|
186
|
+
*/
|
|
187
|
+
private stateToStatus;
|
|
188
|
+
/**
|
|
189
|
+
* Create an unknown status
|
|
190
|
+
*/
|
|
191
|
+
private createUnknownStatus;
|
|
192
|
+
/**
|
|
193
|
+
* Calculate health summary
|
|
194
|
+
*/
|
|
195
|
+
private calculateSummary;
|
|
196
|
+
/**
|
|
197
|
+
* Run periodic check
|
|
198
|
+
*/
|
|
199
|
+
private runPeriodicCheck;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Create an Agent Health Checker instance
|
|
203
|
+
*
|
|
204
|
+
* @param agentCards - Map of agent IDs to their cards
|
|
205
|
+
* @param config - Health check configuration
|
|
206
|
+
* @returns Agent health checker instance
|
|
207
|
+
*
|
|
208
|
+
* @example
|
|
209
|
+
* ```typescript
|
|
210
|
+
* const healthChecker = createAgentHealthChecker(agentCards, {
|
|
211
|
+
* timeoutMs: 5000,
|
|
212
|
+
* failureThreshold: 3,
|
|
213
|
+
* });
|
|
214
|
+
*
|
|
215
|
+
* // Check individual agent
|
|
216
|
+
* const status = await healthChecker.checkAgent('qe-test-architect');
|
|
217
|
+
*
|
|
218
|
+
* // Start periodic checks
|
|
219
|
+
* healthChecker.startPeriodicChecks({ intervalMs: 30000 });
|
|
220
|
+
*
|
|
221
|
+
* // Get healthy agents
|
|
222
|
+
* const healthyAgents = healthChecker.getHealthyAgents();
|
|
223
|
+
* ```
|
|
224
|
+
*/
|
|
225
|
+
export declare function createAgentHealthChecker(agentCards: Map<string, QEAgentCard>, config?: HealthCheckConfig): AgentHealthChecker;
|
|
226
|
+
//# sourceMappingURL=agent-health.d.ts.map
|