agentic-qe 1.8.3 → 1.9.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/skills/agentic-jujutsu/SKILL.md +645 -0
- package/.claude/skills/cicd-pipeline-qe-orchestrator/README.md +2 -2
- package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +6 -6
- package/CHANGELOG.md +595 -0
- package/README.md +117 -16
- package/config/constitution.schema.json +423 -0
- package/config/otel-collector.yaml +234 -0
- package/dist/App.d.ts +5 -0
- package/dist/App.d.ts.map +1 -0
- package/dist/App.js +15 -0
- package/dist/App.js.map +1 -0
- package/dist/cli/commands/constitution.d.ts +34 -0
- package/dist/cli/commands/constitution.d.ts.map +1 -0
- package/dist/cli/commands/constitution.js +679 -0
- package/dist/cli/commands/constitution.js.map +1 -0
- package/dist/cli/commands/init-claude-md-template.js +3 -3
- package/dist/cli/commands/init.d.ts +8 -75
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +22 -2292
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/telemetry.d.ts +36 -0
- package/dist/cli/commands/telemetry.d.ts.map +1 -0
- package/dist/cli/commands/telemetry.js +364 -0
- package/dist/cli/commands/telemetry.js.map +1 -0
- package/dist/cli/index.js +66 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/agents.d.ts +22 -0
- package/dist/cli/init/agents.d.ts.map +1 -0
- package/dist/cli/init/agents.js +522 -0
- package/dist/cli/init/agents.js.map +1 -0
- package/dist/cli/init/bash-wrapper.d.ts +14 -0
- package/dist/cli/init/bash-wrapper.d.ts.map +1 -0
- package/dist/cli/init/bash-wrapper.js +47 -0
- package/dist/cli/init/bash-wrapper.js.map +1 -0
- package/dist/cli/init/claude-config.d.ts +24 -0
- package/dist/cli/init/claude-config.d.ts.map +1 -0
- package/dist/cli/init/claude-config.js +275 -0
- package/dist/cli/init/claude-config.js.map +1 -0
- package/dist/cli/init/claude-md.d.ts +19 -0
- package/dist/cli/init/claude-md.d.ts.map +1 -0
- package/dist/cli/init/claude-md.js +153 -0
- package/dist/cli/init/claude-md.js.map +1 -0
- package/dist/cli/init/commands.d.ts +6 -0
- package/dist/cli/init/commands.d.ts.map +1 -0
- package/dist/cli/init/commands.js +83 -0
- package/dist/cli/init/commands.js.map +1 -0
- package/dist/cli/init/database-init.d.ts +15 -0
- package/dist/cli/init/database-init.d.ts.map +1 -0
- package/dist/cli/init/database-init.js +203 -0
- package/dist/cli/init/database-init.js.map +1 -0
- package/dist/cli/init/directory-structure.d.ts +14 -0
- package/dist/cli/init/directory-structure.d.ts.map +1 -0
- package/dist/cli/init/directory-structure.js +107 -0
- package/dist/cli/init/directory-structure.js.map +1 -0
- package/dist/cli/init/documentation.d.ts +14 -0
- package/dist/cli/init/documentation.d.ts.map +1 -0
- package/dist/cli/init/documentation.js +195 -0
- package/dist/cli/init/documentation.js.map +1 -0
- package/dist/cli/init/fleet-config.d.ts +34 -0
- package/dist/cli/init/fleet-config.d.ts.map +1 -0
- package/dist/cli/init/fleet-config.js +269 -0
- package/dist/cli/init/fleet-config.js.map +1 -0
- package/dist/cli/init/helpers.d.ts +6 -0
- package/dist/cli/init/helpers.d.ts.map +1 -0
- package/dist/cli/init/helpers.js +94 -0
- package/dist/cli/init/helpers.js.map +1 -0
- package/dist/cli/init/index.d.ts +32 -0
- package/dist/cli/init/index.d.ts.map +1 -0
- package/dist/cli/init/index.js +294 -0
- package/dist/cli/init/index.js.map +1 -0
- package/dist/cli/init/skills.d.ts +6 -0
- package/dist/cli/init/skills.d.ts.map +1 -0
- package/dist/cli/init/skills.js +138 -0
- package/dist/cli/init/skills.js.map +1 -0
- package/dist/cli/init/utils/file-utils.d.ts +74 -0
- package/dist/cli/init/utils/file-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/file-utils.js +187 -0
- package/dist/cli/init/utils/file-utils.js.map +1 -0
- package/dist/cli/init/utils/index.d.ts +18 -0
- package/dist/cli/init/utils/index.d.ts.map +1 -0
- package/dist/cli/init/utils/index.js +48 -0
- package/dist/cli/init/utils/index.js.map +1 -0
- package/dist/cli/init/utils/log-utils.d.ts +47 -0
- package/dist/cli/init/utils/log-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/log-utils.js +68 -0
- package/dist/cli/init/utils/log-utils.js.map +1 -0
- package/dist/cli/init/utils/path-utils.d.ts +91 -0
- package/dist/cli/init/utils/path-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/path-utils.js +208 -0
- package/dist/cli/init/utils/path-utils.js.map +1 -0
- package/dist/cli/init/utils/validation-utils.d.ts +44 -0
- package/dist/cli/init/utils/validation-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/validation-utils.js +68 -0
- package/dist/cli/init/utils/validation-utils.js.map +1 -0
- package/dist/cli/init/utils.d.ts +183 -0
- package/dist/cli/init/utils.d.ts.map +1 -0
- package/dist/cli/init/utils.js +354 -0
- package/dist/cli/init/utils.js.map +1 -0
- package/dist/components/Dashboard/Dashboard.d.ts +4 -0
- package/dist/components/Dashboard/Dashboard.d.ts.map +1 -0
- package/dist/components/Dashboard/Dashboard.js +148 -0
- package/dist/components/Dashboard/Dashboard.js.map +1 -0
- package/dist/components/Dashboard/DashboardHeader.d.ts +4 -0
- package/dist/components/Dashboard/DashboardHeader.d.ts.map +1 -0
- package/dist/components/Dashboard/DashboardHeader.js +138 -0
- package/dist/components/Dashboard/DashboardHeader.js.map +1 -0
- package/dist/constitution/evaluators/ast-evaluator.d.ts +42 -0
- package/dist/constitution/evaluators/ast-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/ast-evaluator.js +303 -0
- package/dist/constitution/evaluators/ast-evaluator.js.map +1 -0
- package/dist/constitution/evaluators/base.d.ts +144 -0
- package/dist/constitution/evaluators/base.d.ts.map +1 -0
- package/dist/constitution/evaluators/base.js +144 -0
- package/dist/constitution/evaluators/base.js.map +1 -0
- package/dist/constitution/evaluators/index.d.ts +19 -0
- package/dist/constitution/evaluators/index.d.ts.map +1 -0
- package/dist/constitution/evaluators/index.js +56 -0
- package/dist/constitution/evaluators/index.js.map +1 -0
- package/dist/constitution/evaluators/metric-evaluator.d.ts +59 -0
- package/dist/constitution/evaluators/metric-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/metric-evaluator.js +195 -0
- package/dist/constitution/evaluators/metric-evaluator.js.map +1 -0
- package/dist/constitution/evaluators/pattern-evaluator.d.ts +66 -0
- package/dist/constitution/evaluators/pattern-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/pattern-evaluator.js +221 -0
- package/dist/constitution/evaluators/pattern-evaluator.js.map +1 -0
- package/dist/constitution/evaluators/semantic-evaluator.d.ts +68 -0
- package/dist/constitution/evaluators/semantic-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/semantic-evaluator.js +250 -0
- package/dist/constitution/evaluators/semantic-evaluator.js.map +1 -0
- package/dist/constitution/index.d.ts +105 -0
- package/dist/constitution/index.d.ts.map +1 -0
- package/dist/constitution/index.js +207 -0
- package/dist/constitution/index.js.map +1 -0
- package/dist/constitution/loader.d.ts +141 -0
- package/dist/constitution/loader.d.ts.map +1 -0
- package/dist/constitution/loader.js +515 -0
- package/dist/constitution/loader.js.map +1 -0
- package/dist/constitution/schema.d.ts +409 -0
- package/dist/constitution/schema.d.ts.map +1 -0
- package/dist/constitution/schema.js +71 -0
- package/dist/constitution/schema.js.map +1 -0
- package/dist/contexts/DashboardContext.d.ts +41 -0
- package/dist/contexts/DashboardContext.d.ts.map +1 -0
- package/dist/contexts/DashboardContext.js +187 -0
- package/dist/contexts/DashboardContext.js.map +1 -0
- package/dist/core/memory/MemoryManagerFactory.d.ts +77 -0
- package/dist/core/memory/MemoryManagerFactory.d.ts.map +1 -0
- package/dist/core/memory/MemoryManagerFactory.js +270 -0
- package/dist/core/memory/MemoryManagerFactory.js.map +1 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts +58 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +375 -131
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/index.d.ts +1 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +12 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/hooks/useKeyboardShortcuts.d.ts +12 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/hooks/useKeyboardShortcuts.js +69 -0
- package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/mcp/handlers/memory/memory-backup.js +6 -6
- package/dist/mcp/handlers/memory/memory-backup.js.map +1 -1
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -1
- package/dist/mcp/handlers/phase2/Phase2Tools.js +4 -2
- package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +4 -38
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +4 -4
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/persistence/event-store.d.ts +162 -0
- package/dist/persistence/event-store.d.ts.map +1 -0
- package/dist/persistence/event-store.js +315 -0
- package/dist/persistence/event-store.js.map +1 -0
- package/dist/persistence/index.d.ts +145 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +227 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/metrics-aggregator.d.ts +187 -0
- package/dist/persistence/metrics-aggregator.d.ts.map +1 -0
- package/dist/persistence/metrics-aggregator.js +495 -0
- package/dist/persistence/metrics-aggregator.js.map +1 -0
- package/dist/persistence/reasoning-store.d.ts +178 -0
- package/dist/persistence/reasoning-store.d.ts.map +1 -0
- package/dist/persistence/reasoning-store.js +440 -0
- package/dist/persistence/reasoning-store.js.map +1 -0
- package/dist/persistence/schema.d.ts +181 -0
- package/dist/persistence/schema.d.ts.map +1 -0
- package/dist/persistence/schema.js +186 -0
- package/dist/persistence/schema.js.map +1 -0
- package/dist/telemetry/bootstrap.d.ts +67 -0
- package/dist/telemetry/bootstrap.d.ts.map +1 -0
- package/dist/telemetry/bootstrap.js +320 -0
- package/dist/telemetry/bootstrap.js.map +1 -0
- package/dist/telemetry/index.d.ts +16 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +84 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/instrumentation/agent.d.ts +158 -0
- package/dist/telemetry/instrumentation/agent.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/agent.js +372 -0
- package/dist/telemetry/instrumentation/agent.js.map +1 -0
- package/dist/telemetry/instrumentation/index.d.ts +24 -0
- package/dist/telemetry/instrumentation/index.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/index.js +54 -0
- package/dist/telemetry/instrumentation/index.js.map +1 -0
- package/dist/telemetry/instrumentation/memory.d.ts +313 -0
- package/dist/telemetry/instrumentation/memory.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/memory.js +552 -0
- package/dist/telemetry/instrumentation/memory.js.map +1 -0
- package/dist/telemetry/instrumentation/task.d.ts +146 -0
- package/dist/telemetry/instrumentation/task.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/task.js +305 -0
- package/dist/telemetry/instrumentation/task.js.map +1 -0
- package/dist/telemetry/metrics/agent-metrics.d.ts +109 -0
- package/dist/telemetry/metrics/agent-metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics/agent-metrics.js +213 -0
- package/dist/telemetry/metrics/agent-metrics.js.map +1 -0
- package/dist/telemetry/metrics/collectors/cost.d.ts +246 -0
- package/dist/telemetry/metrics/collectors/cost.d.ts.map +1 -0
- package/dist/telemetry/metrics/collectors/cost.js +526 -0
- package/dist/telemetry/metrics/collectors/cost.js.map +1 -0
- package/dist/telemetry/metrics/collectors/pricing-config.d.ts +87 -0
- package/dist/telemetry/metrics/collectors/pricing-config.d.ts.map +1 -0
- package/dist/telemetry/metrics/collectors/pricing-config.js +207 -0
- package/dist/telemetry/metrics/collectors/pricing-config.js.map +1 -0
- package/dist/telemetry/metrics/index.d.ts +54 -0
- package/dist/telemetry/metrics/index.d.ts.map +1 -0
- package/dist/telemetry/metrics/index.js +116 -0
- package/dist/telemetry/metrics/index.js.map +1 -0
- package/dist/telemetry/metrics/quality-metrics.d.ts +171 -0
- package/dist/telemetry/metrics/quality-metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics/quality-metrics.js +259 -0
- package/dist/telemetry/metrics/quality-metrics.js.map +1 -0
- package/dist/telemetry/metrics/system-metrics.d.ts +129 -0
- package/dist/telemetry/metrics/system-metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics/system-metrics.js +380 -0
- package/dist/telemetry/metrics/system-metrics.js.map +1 -0
- package/dist/telemetry/types.d.ts +195 -0
- package/dist/telemetry/types.d.ts.map +1 -0
- package/dist/telemetry/types.js +90 -0
- package/dist/telemetry/types.js.map +1 -0
- package/dist/visualization/api/RestEndpoints.d.ts +136 -0
- package/dist/visualization/api/RestEndpoints.d.ts.map +1 -0
- package/dist/visualization/api/RestEndpoints.js +428 -0
- package/dist/visualization/api/RestEndpoints.js.map +1 -0
- package/dist/visualization/api/WebSocketServer.d.ts +165 -0
- package/dist/visualization/api/WebSocketServer.d.ts.map +1 -0
- package/dist/visualization/api/WebSocketServer.js +518 -0
- package/dist/visualization/api/WebSocketServer.js.map +1 -0
- package/dist/visualization/core/DataTransformer.d.ts +89 -0
- package/dist/visualization/core/DataTransformer.d.ts.map +1 -0
- package/dist/visualization/core/DataTransformer.js +478 -0
- package/dist/visualization/core/DataTransformer.js.map +1 -0
- package/dist/visualization/index.d.ts +92 -0
- package/dist/visualization/index.d.ts.map +1 -0
- package/dist/visualization/index.js +121 -0
- package/dist/visualization/index.js.map +1 -0
- package/dist/visualization/types.d.ts +148 -0
- package/dist/visualization/types.d.ts.map +1 -0
- package/dist/visualization/types.js +7 -0
- package/dist/visualization/types.js.map +1 -0
- package/dist/voting/consensus.d.ts +87 -0
- package/dist/voting/consensus.d.ts.map +1 -0
- package/dist/voting/consensus.js +568 -0
- package/dist/voting/consensus.js.map +1 -0
- package/dist/voting/index.d.ts +12 -0
- package/dist/voting/index.d.ts.map +1 -0
- package/dist/voting/index.js +36 -0
- package/dist/voting/index.js.map +1 -0
- package/dist/voting/orchestrator.d.ts +65 -0
- package/dist/voting/orchestrator.d.ts.map +1 -0
- package/dist/voting/orchestrator.js +306 -0
- package/dist/voting/orchestrator.js.map +1 -0
- package/dist/voting/panel-assembly.d.ts +54 -0
- package/dist/voting/panel-assembly.d.ts.map +1 -0
- package/dist/voting/panel-assembly.js +192 -0
- package/dist/voting/panel-assembly.js.map +1 -0
- package/dist/voting/protocol.d.ts +119 -0
- package/dist/voting/protocol.d.ts.map +1 -0
- package/dist/voting/protocol.js +18 -0
- package/dist/voting/protocol.js.map +1 -0
- package/dist/voting/types.d.ts +125 -0
- package/dist/voting/types.d.ts.map +1 -0
- package/dist/voting/types.js +7 -0
- package/dist/voting/types.js.map +1 -0
- package/package.json +43 -2
|
@@ -0,0 +1,552 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Memory Instrumentation - OpenTelemetry spans for memory operations
|
|
4
|
+
*
|
|
5
|
+
* Provides comprehensive tracing for memory store/retrieve/search/delete operations
|
|
6
|
+
* with semantic attributes following OpenTelemetry conventions. Automatically instruments
|
|
7
|
+
* all memory operations with context propagation and performance tracking.
|
|
8
|
+
*
|
|
9
|
+
* @module telemetry/instrumentation/memory
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.memorySpanManager = exports.MemorySpanManager = void 0;
|
|
13
|
+
exports.withMemoryStore = withMemoryStore;
|
|
14
|
+
exports.withMemoryRetrieve = withMemoryRetrieve;
|
|
15
|
+
exports.withMemorySearch = withMemorySearch;
|
|
16
|
+
exports.withMemoryDelete = withMemoryDelete;
|
|
17
|
+
const api_1 = require("@opentelemetry/api");
|
|
18
|
+
const bootstrap_1 = require("../bootstrap");
|
|
19
|
+
const types_1 = require("../types");
|
|
20
|
+
/**
|
|
21
|
+
* Memory operation span manager
|
|
22
|
+
*
|
|
23
|
+
* Manages OpenTelemetry spans for memory operations with automatic
|
|
24
|
+
* context propagation and semantic attribute attachment following
|
|
25
|
+
* OTEL conventions for distributed tracing.
|
|
26
|
+
*/
|
|
27
|
+
class MemorySpanManager {
|
|
28
|
+
constructor() {
|
|
29
|
+
this.tracer = (0, bootstrap_1.getTracer)();
|
|
30
|
+
this.activeSpans = new Map();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Start memory store span
|
|
34
|
+
*
|
|
35
|
+
* Records memory store operation with semantic attributes for namespace,
|
|
36
|
+
* key, value size, and optional TTL.
|
|
37
|
+
*
|
|
38
|
+
* @param config - Memory store configuration
|
|
39
|
+
* @returns Active span with context
|
|
40
|
+
*/
|
|
41
|
+
startStoreSpan(config) {
|
|
42
|
+
const { agentId, namespace, key, valueSize, ttl, parentContext } = config;
|
|
43
|
+
const spanContext = parentContext || api_1.context.active();
|
|
44
|
+
const span = this.tracer.startSpan(types_1.SPAN_NAMES.MEMORY_STORE, {
|
|
45
|
+
attributes: {
|
|
46
|
+
'memory.operation': 'store',
|
|
47
|
+
'memory.namespace': namespace,
|
|
48
|
+
'memory.key': key,
|
|
49
|
+
'memory.value_size': valueSize,
|
|
50
|
+
'agent.id': agentId.id,
|
|
51
|
+
'agent.type': agentId.type,
|
|
52
|
+
...(ttl !== undefined && { 'memory.ttl': ttl }),
|
|
53
|
+
},
|
|
54
|
+
}, spanContext);
|
|
55
|
+
// Store span for lifecycle tracking
|
|
56
|
+
const spanKey = `store:${namespace}:${key}`;
|
|
57
|
+
this.activeSpans.set(spanKey, span);
|
|
58
|
+
span.addEvent('memory.store.started', {
|
|
59
|
+
'memory.namespace': namespace,
|
|
60
|
+
'memory.key': key,
|
|
61
|
+
'agent.id': agentId.id,
|
|
62
|
+
});
|
|
63
|
+
// Create context with active span
|
|
64
|
+
const activeContext = api_1.trace.setSpan(api_1.context.active(), span);
|
|
65
|
+
return { span, context: activeContext };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Complete memory store span
|
|
69
|
+
*
|
|
70
|
+
* @param span - Active span from startStoreSpan
|
|
71
|
+
* @param result - Store operation result
|
|
72
|
+
*/
|
|
73
|
+
completeStoreSpan(span, result) {
|
|
74
|
+
if (!span) {
|
|
75
|
+
console.warn('[MemorySpanManager] No span provided to completeStoreSpan');
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
// Add performance metrics
|
|
79
|
+
if (result.durationMs !== undefined) {
|
|
80
|
+
span.setAttribute('memory.operation_duration_ms', result.durationMs);
|
|
81
|
+
}
|
|
82
|
+
if (result.success) {
|
|
83
|
+
span.setStatus({ code: api_1.SpanStatusCode.OK });
|
|
84
|
+
span.addEvent('memory.store.completed', {
|
|
85
|
+
'memory.success': true,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
span.setStatus({
|
|
90
|
+
code: api_1.SpanStatusCode.ERROR,
|
|
91
|
+
message: result.error?.message || 'Memory store failed',
|
|
92
|
+
});
|
|
93
|
+
if (result.error) {
|
|
94
|
+
span.recordException(result.error);
|
|
95
|
+
}
|
|
96
|
+
span.addEvent('memory.store.failed', {
|
|
97
|
+
'error.message': result.error?.message || 'Unknown error',
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
span.end();
|
|
101
|
+
// Clean up from active spans
|
|
102
|
+
for (const [key, activeSpan] of this.activeSpans.entries()) {
|
|
103
|
+
if (activeSpan === span) {
|
|
104
|
+
this.activeSpans.delete(key);
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Start memory retrieve span
|
|
111
|
+
*
|
|
112
|
+
* Records memory retrieve operation with semantic attributes for namespace
|
|
113
|
+
* and key lookup.
|
|
114
|
+
*
|
|
115
|
+
* @param config - Memory retrieve configuration
|
|
116
|
+
* @returns Active span with context
|
|
117
|
+
*/
|
|
118
|
+
startRetrieveSpan(config) {
|
|
119
|
+
const { agentId, namespace, key, parentContext } = config;
|
|
120
|
+
const spanContext = parentContext || api_1.context.active();
|
|
121
|
+
const span = this.tracer.startSpan(types_1.SPAN_NAMES.MEMORY_RETRIEVE, {
|
|
122
|
+
attributes: {
|
|
123
|
+
'memory.operation': 'retrieve',
|
|
124
|
+
'memory.namespace': namespace,
|
|
125
|
+
'memory.key': key,
|
|
126
|
+
'agent.id': agentId.id,
|
|
127
|
+
'agent.type': agentId.type,
|
|
128
|
+
},
|
|
129
|
+
}, spanContext);
|
|
130
|
+
// Store span for lifecycle tracking
|
|
131
|
+
const spanKey = `retrieve:${namespace}:${key}`;
|
|
132
|
+
this.activeSpans.set(spanKey, span);
|
|
133
|
+
span.addEvent('memory.retrieve.started', {
|
|
134
|
+
'memory.namespace': namespace,
|
|
135
|
+
'memory.key': key,
|
|
136
|
+
'agent.id': agentId.id,
|
|
137
|
+
});
|
|
138
|
+
// Create context with active span
|
|
139
|
+
const activeContext = api_1.trace.setSpan(api_1.context.active(), span);
|
|
140
|
+
return { span, context: activeContext };
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Complete memory retrieve span
|
|
144
|
+
*
|
|
145
|
+
* @param span - Active span from startRetrieveSpan
|
|
146
|
+
* @param result - Retrieve operation result
|
|
147
|
+
*/
|
|
148
|
+
completeRetrieveSpan(span, result) {
|
|
149
|
+
if (!span) {
|
|
150
|
+
console.warn('[MemorySpanManager] No span provided to completeRetrieveSpan');
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
// Add result attributes
|
|
154
|
+
span.setAttribute('memory.found', result.found);
|
|
155
|
+
if (result.valueSize !== undefined) {
|
|
156
|
+
span.setAttribute('memory.value_size', result.valueSize);
|
|
157
|
+
}
|
|
158
|
+
if (result.durationMs !== undefined) {
|
|
159
|
+
span.setAttribute('memory.operation_duration_ms', result.durationMs);
|
|
160
|
+
}
|
|
161
|
+
if (result.found && !result.error) {
|
|
162
|
+
span.setStatus({ code: api_1.SpanStatusCode.OK });
|
|
163
|
+
span.addEvent('memory.retrieve.completed', {
|
|
164
|
+
'memory.found': true,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
else if (!result.found && !result.error) {
|
|
168
|
+
// Not found is not an error, just unsuccessful retrieval
|
|
169
|
+
span.setStatus({ code: api_1.SpanStatusCode.OK });
|
|
170
|
+
span.addEvent('memory.retrieve.not_found', {
|
|
171
|
+
'memory.found': false,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
span.setStatus({
|
|
176
|
+
code: api_1.SpanStatusCode.ERROR,
|
|
177
|
+
message: result.error?.message || 'Memory retrieve failed',
|
|
178
|
+
});
|
|
179
|
+
if (result.error) {
|
|
180
|
+
span.recordException(result.error);
|
|
181
|
+
}
|
|
182
|
+
span.addEvent('memory.retrieve.failed', {
|
|
183
|
+
'error.message': result.error?.message || 'Unknown error',
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
span.end();
|
|
187
|
+
// Clean up from active spans
|
|
188
|
+
for (const [key, activeSpan] of this.activeSpans.entries()) {
|
|
189
|
+
if (activeSpan === span) {
|
|
190
|
+
this.activeSpans.delete(key);
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Start memory search span
|
|
197
|
+
*
|
|
198
|
+
* Records memory search operation with semantic attributes for namespace,
|
|
199
|
+
* search pattern, and result limits.
|
|
200
|
+
*
|
|
201
|
+
* @param config - Memory search configuration
|
|
202
|
+
* @returns Active span with context
|
|
203
|
+
*/
|
|
204
|
+
startSearchSpan(config) {
|
|
205
|
+
const { agentId, namespace, pattern, limit, parentContext } = config;
|
|
206
|
+
const spanContext = parentContext || api_1.context.active();
|
|
207
|
+
const span = this.tracer.startSpan(types_1.SPAN_NAMES.MEMORY_SEARCH, {
|
|
208
|
+
attributes: {
|
|
209
|
+
'memory.operation': 'search',
|
|
210
|
+
'memory.namespace': namespace,
|
|
211
|
+
'memory.pattern': pattern,
|
|
212
|
+
'agent.id': agentId.id,
|
|
213
|
+
'agent.type': agentId.type,
|
|
214
|
+
...(limit !== undefined && { 'memory.limit': limit }),
|
|
215
|
+
},
|
|
216
|
+
}, spanContext);
|
|
217
|
+
// Store span for lifecycle tracking
|
|
218
|
+
const spanKey = `search:${namespace}:${pattern}`;
|
|
219
|
+
this.activeSpans.set(spanKey, span);
|
|
220
|
+
span.addEvent('memory.search.started', {
|
|
221
|
+
'memory.namespace': namespace,
|
|
222
|
+
'memory.pattern': pattern,
|
|
223
|
+
'agent.id': agentId.id,
|
|
224
|
+
});
|
|
225
|
+
// Create context with active span
|
|
226
|
+
const activeContext = api_1.trace.setSpan(api_1.context.active(), span);
|
|
227
|
+
return { span, context: activeContext };
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Complete memory search span
|
|
231
|
+
*
|
|
232
|
+
* @param span - Active span from startSearchSpan
|
|
233
|
+
* @param result - Search operation result
|
|
234
|
+
*/
|
|
235
|
+
completeSearchSpan(span, result) {
|
|
236
|
+
if (!span) {
|
|
237
|
+
console.warn('[MemorySpanManager] No span provided to completeSearchSpan');
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
// Add result attributes
|
|
241
|
+
span.setAttribute('memory.result_count', result.resultCount);
|
|
242
|
+
if (result.durationMs !== undefined) {
|
|
243
|
+
span.setAttribute('memory.operation_duration_ms', result.durationMs);
|
|
244
|
+
}
|
|
245
|
+
if (!result.error) {
|
|
246
|
+
span.setStatus({ code: api_1.SpanStatusCode.OK });
|
|
247
|
+
span.addEvent('memory.search.completed', {
|
|
248
|
+
'memory.result_count': result.resultCount,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
span.setStatus({
|
|
253
|
+
code: api_1.SpanStatusCode.ERROR,
|
|
254
|
+
message: result.error.message || 'Memory search failed',
|
|
255
|
+
});
|
|
256
|
+
span.recordException(result.error);
|
|
257
|
+
span.addEvent('memory.search.failed', {
|
|
258
|
+
'error.message': result.error.message || 'Unknown error',
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
span.end();
|
|
262
|
+
// Clean up from active spans
|
|
263
|
+
for (const [key, activeSpan] of this.activeSpans.entries()) {
|
|
264
|
+
if (activeSpan === span) {
|
|
265
|
+
this.activeSpans.delete(key);
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Start memory delete span
|
|
272
|
+
*
|
|
273
|
+
* Records memory delete operation with semantic attributes for namespace
|
|
274
|
+
* and key deletion.
|
|
275
|
+
*
|
|
276
|
+
* @param config - Memory delete configuration
|
|
277
|
+
* @returns Active span with context
|
|
278
|
+
*/
|
|
279
|
+
startDeleteSpan(config) {
|
|
280
|
+
const { agentId, namespace, key, parentContext } = config;
|
|
281
|
+
const spanContext = parentContext || api_1.context.active();
|
|
282
|
+
const span = this.tracer.startSpan('aqe.memory.delete', {
|
|
283
|
+
attributes: {
|
|
284
|
+
'memory.operation': 'delete',
|
|
285
|
+
'memory.namespace': namespace,
|
|
286
|
+
'memory.key': key,
|
|
287
|
+
'agent.id': agentId.id,
|
|
288
|
+
'agent.type': agentId.type,
|
|
289
|
+
},
|
|
290
|
+
}, spanContext);
|
|
291
|
+
// Store span for lifecycle tracking
|
|
292
|
+
const spanKey = `delete:${namespace}:${key}`;
|
|
293
|
+
this.activeSpans.set(spanKey, span);
|
|
294
|
+
span.addEvent('memory.delete.started', {
|
|
295
|
+
'memory.namespace': namespace,
|
|
296
|
+
'memory.key': key,
|
|
297
|
+
'agent.id': agentId.id,
|
|
298
|
+
});
|
|
299
|
+
// Create context with active span
|
|
300
|
+
const activeContext = api_1.trace.setSpan(api_1.context.active(), span);
|
|
301
|
+
return { span, context: activeContext };
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Complete memory delete span
|
|
305
|
+
*
|
|
306
|
+
* @param span - Active span from startDeleteSpan
|
|
307
|
+
* @param result - Delete operation result
|
|
308
|
+
*/
|
|
309
|
+
completeDeleteSpan(span, result) {
|
|
310
|
+
if (!span) {
|
|
311
|
+
console.warn('[MemorySpanManager] No span provided to completeDeleteSpan');
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
// Add performance metrics
|
|
315
|
+
if (result.durationMs !== undefined) {
|
|
316
|
+
span.setAttribute('memory.operation_duration_ms', result.durationMs);
|
|
317
|
+
}
|
|
318
|
+
if (result.success) {
|
|
319
|
+
span.setStatus({ code: api_1.SpanStatusCode.OK });
|
|
320
|
+
span.addEvent('memory.delete.completed', {
|
|
321
|
+
'memory.success': true,
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
span.setStatus({
|
|
326
|
+
code: api_1.SpanStatusCode.ERROR,
|
|
327
|
+
message: result.error?.message || 'Memory delete failed',
|
|
328
|
+
});
|
|
329
|
+
if (result.error) {
|
|
330
|
+
span.recordException(result.error);
|
|
331
|
+
}
|
|
332
|
+
span.addEvent('memory.delete.failed', {
|
|
333
|
+
'error.message': result.error?.message || 'Unknown error',
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
span.end();
|
|
337
|
+
// Clean up from active spans
|
|
338
|
+
for (const [key, activeSpan] of this.activeSpans.entries()) {
|
|
339
|
+
if (activeSpan === span) {
|
|
340
|
+
this.activeSpans.delete(key);
|
|
341
|
+
break;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Record memory operation error
|
|
347
|
+
*
|
|
348
|
+
* Records an error event on the currently active span.
|
|
349
|
+
*
|
|
350
|
+
* @param operation - Operation type (store, retrieve, search, delete)
|
|
351
|
+
* @param namespace - Memory namespace
|
|
352
|
+
* @param key - Memory key (if applicable)
|
|
353
|
+
* @param error - Error that occurred
|
|
354
|
+
*/
|
|
355
|
+
recordError(operation, namespace, key, error) {
|
|
356
|
+
const span = api_1.trace.getActiveSpan();
|
|
357
|
+
if (span) {
|
|
358
|
+
span.recordException(error);
|
|
359
|
+
span.addEvent('memory.error', {
|
|
360
|
+
'memory.operation': operation,
|
|
361
|
+
'memory.namespace': namespace,
|
|
362
|
+
...(key && { 'memory.key': key }),
|
|
363
|
+
'error.message': error.message,
|
|
364
|
+
'error.stack': error.stack,
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Cleanup all active spans (for graceful shutdown)
|
|
370
|
+
*
|
|
371
|
+
* Ensures all memory operation spans are properly ended during
|
|
372
|
+
* application shutdown or cleanup.
|
|
373
|
+
*/
|
|
374
|
+
cleanup() {
|
|
375
|
+
for (const [key, span] of this.activeSpans.entries()) {
|
|
376
|
+
console.warn(`[MemorySpanManager] Force-ending orphaned span: ${key}`);
|
|
377
|
+
span.setStatus({
|
|
378
|
+
code: api_1.SpanStatusCode.ERROR,
|
|
379
|
+
message: 'Span ended during cleanup',
|
|
380
|
+
});
|
|
381
|
+
span.end();
|
|
382
|
+
}
|
|
383
|
+
this.activeSpans.clear();
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
exports.MemorySpanManager = MemorySpanManager;
|
|
387
|
+
/**
|
|
388
|
+
* Global memory span manager instance
|
|
389
|
+
*/
|
|
390
|
+
exports.memorySpanManager = new MemorySpanManager();
|
|
391
|
+
/**
|
|
392
|
+
* Execute function within memory store span context
|
|
393
|
+
*
|
|
394
|
+
* Convenience wrapper that automatically creates, tracks, and completes
|
|
395
|
+
* a memory store span around the provided function.
|
|
396
|
+
*
|
|
397
|
+
* @param config - Memory store configuration
|
|
398
|
+
* @param fn - Function to execute (receives span context)
|
|
399
|
+
* @returns Function result
|
|
400
|
+
*
|
|
401
|
+
* @example
|
|
402
|
+
* const result = await withMemoryStore(
|
|
403
|
+
* { agentId, namespace: 'aqe', key: 'test-plan', valueSize: 1024 },
|
|
404
|
+
* async (ctx) => {
|
|
405
|
+
* return await memoryService.store('test-plan', data);
|
|
406
|
+
* }
|
|
407
|
+
* );
|
|
408
|
+
*/
|
|
409
|
+
async function withMemoryStore(config, fn) {
|
|
410
|
+
const { span, context: spanContext } = exports.memorySpanManager.startStoreSpan(config);
|
|
411
|
+
const startTime = Date.now();
|
|
412
|
+
try {
|
|
413
|
+
const result = await fn(spanContext);
|
|
414
|
+
const durationMs = Date.now() - startTime;
|
|
415
|
+
exports.memorySpanManager.completeStoreSpan(span, {
|
|
416
|
+
success: true,
|
|
417
|
+
durationMs,
|
|
418
|
+
});
|
|
419
|
+
return result;
|
|
420
|
+
}
|
|
421
|
+
catch (error) {
|
|
422
|
+
const durationMs = Date.now() - startTime;
|
|
423
|
+
exports.memorySpanManager.completeStoreSpan(span, {
|
|
424
|
+
success: false,
|
|
425
|
+
durationMs,
|
|
426
|
+
error: error,
|
|
427
|
+
});
|
|
428
|
+
throw error;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Execute function within memory retrieve span context
|
|
433
|
+
*
|
|
434
|
+
* Convenience wrapper that automatically creates, tracks, and completes
|
|
435
|
+
* a memory retrieve span around the provided function.
|
|
436
|
+
*
|
|
437
|
+
* @param config - Memory retrieve configuration
|
|
438
|
+
* @param fn - Function to execute (receives span context)
|
|
439
|
+
* @returns Function result with found flag
|
|
440
|
+
*
|
|
441
|
+
* @example
|
|
442
|
+
* const { found, value } = await withMemoryRetrieve(
|
|
443
|
+
* { agentId, namespace: 'aqe', key: 'test-plan' },
|
|
444
|
+
* async (ctx) => {
|
|
445
|
+
* return await memoryService.retrieve('test-plan');
|
|
446
|
+
* }
|
|
447
|
+
* );
|
|
448
|
+
*/
|
|
449
|
+
async function withMemoryRetrieve(config, fn) {
|
|
450
|
+
const { span, context: spanContext } = exports.memorySpanManager.startRetrieveSpan(config);
|
|
451
|
+
const startTime = Date.now();
|
|
452
|
+
try {
|
|
453
|
+
const result = await fn(spanContext);
|
|
454
|
+
const durationMs = Date.now() - startTime;
|
|
455
|
+
exports.memorySpanManager.completeRetrieveSpan(span, {
|
|
456
|
+
found: result.found,
|
|
457
|
+
valueSize: result.valueSize,
|
|
458
|
+
durationMs,
|
|
459
|
+
});
|
|
460
|
+
return result;
|
|
461
|
+
}
|
|
462
|
+
catch (error) {
|
|
463
|
+
const durationMs = Date.now() - startTime;
|
|
464
|
+
exports.memorySpanManager.completeRetrieveSpan(span, {
|
|
465
|
+
found: false,
|
|
466
|
+
durationMs,
|
|
467
|
+
error: error,
|
|
468
|
+
});
|
|
469
|
+
throw error;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Execute function within memory search span context
|
|
474
|
+
*
|
|
475
|
+
* Convenience wrapper that automatically creates, tracks, and completes
|
|
476
|
+
* a memory search span around the provided function.
|
|
477
|
+
*
|
|
478
|
+
* @param config - Memory search configuration
|
|
479
|
+
* @param fn - Function to execute (receives span context)
|
|
480
|
+
* @returns Function result with result count
|
|
481
|
+
*
|
|
482
|
+
* @example
|
|
483
|
+
* const results = await withMemorySearch(
|
|
484
|
+
* { agentId, namespace: 'aqe', pattern: 'test-*', limit: 10 },
|
|
485
|
+
* async (ctx) => {
|
|
486
|
+
* return await memoryService.search('test-*');
|
|
487
|
+
* }
|
|
488
|
+
* );
|
|
489
|
+
*/
|
|
490
|
+
async function withMemorySearch(config, fn) {
|
|
491
|
+
const { span, context: spanContext } = exports.memorySpanManager.startSearchSpan(config);
|
|
492
|
+
const startTime = Date.now();
|
|
493
|
+
try {
|
|
494
|
+
const results = await fn(spanContext);
|
|
495
|
+
const durationMs = Date.now() - startTime;
|
|
496
|
+
exports.memorySpanManager.completeSearchSpan(span, {
|
|
497
|
+
resultCount: results.length,
|
|
498
|
+
durationMs,
|
|
499
|
+
});
|
|
500
|
+
return results;
|
|
501
|
+
}
|
|
502
|
+
catch (error) {
|
|
503
|
+
const durationMs = Date.now() - startTime;
|
|
504
|
+
exports.memorySpanManager.completeSearchSpan(span, {
|
|
505
|
+
resultCount: 0,
|
|
506
|
+
durationMs,
|
|
507
|
+
error: error,
|
|
508
|
+
});
|
|
509
|
+
throw error;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Execute function within memory delete span context
|
|
514
|
+
*
|
|
515
|
+
* Convenience wrapper that automatically creates, tracks, and completes
|
|
516
|
+
* a memory delete span around the provided function.
|
|
517
|
+
*
|
|
518
|
+
* @param config - Memory delete configuration
|
|
519
|
+
* @param fn - Function to execute (receives span context)
|
|
520
|
+
* @returns Function result
|
|
521
|
+
*
|
|
522
|
+
* @example
|
|
523
|
+
* await withMemoryDelete(
|
|
524
|
+
* { agentId, namespace: 'aqe', key: 'test-plan' },
|
|
525
|
+
* async (ctx) => {
|
|
526
|
+
* await memoryService.delete('test-plan');
|
|
527
|
+
* }
|
|
528
|
+
* );
|
|
529
|
+
*/
|
|
530
|
+
async function withMemoryDelete(config, fn) {
|
|
531
|
+
const { span, context: spanContext } = exports.memorySpanManager.startDeleteSpan(config);
|
|
532
|
+
const startTime = Date.now();
|
|
533
|
+
try {
|
|
534
|
+
const result = await fn(spanContext);
|
|
535
|
+
const durationMs = Date.now() - startTime;
|
|
536
|
+
exports.memorySpanManager.completeDeleteSpan(span, {
|
|
537
|
+
success: true,
|
|
538
|
+
durationMs,
|
|
539
|
+
});
|
|
540
|
+
return result;
|
|
541
|
+
}
|
|
542
|
+
catch (error) {
|
|
543
|
+
const durationMs = Date.now() - startTime;
|
|
544
|
+
exports.memorySpanManager.completeDeleteSpan(span, {
|
|
545
|
+
success: false,
|
|
546
|
+
durationMs,
|
|
547
|
+
error: error,
|
|
548
|
+
});
|
|
549
|
+
throw error;
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/telemetry/instrumentation/memory.ts"],"names":[],"mappings":"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"}
|