@namzu/sdk 0.2.0 → 0.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/CHANGELOG.md +74 -2
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +3 -2
- package/dist/agents/ReactiveAgent.js.map +1 -1
- package/dist/agents/SupervisorAgent.d.ts.map +1 -1
- package/dist/agents/SupervisorAgent.js +5 -2
- package/dist/agents/SupervisorAgent.js.map +1 -1
- package/dist/bridge/a2a/index.d.ts +1 -1
- package/dist/bridge/a2a/index.d.ts.map +1 -1
- package/dist/bridge/a2a/index.js +1 -1
- package/dist/bridge/a2a/index.js.map +1 -1
- package/dist/bridge/a2a/message.d.ts +0 -2
- package/dist/bridge/a2a/message.d.ts.map +1 -1
- package/dist/bridge/a2a/message.js +0 -26
- package/dist/bridge/a2a/message.js.map +1 -1
- package/dist/bridge/a2a/task.d.ts +4 -3
- package/dist/bridge/a2a/task.d.ts.map +1 -1
- package/dist/bridge/a2a/task.js +4 -4
- package/dist/bridge/a2a/task.js.map +1 -1
- package/dist/contracts/api.d.ts +6 -38
- package/dist/contracts/api.d.ts.map +1 -1
- package/dist/contracts/ids.d.ts +1 -1
- package/dist/contracts/ids.d.ts.map +1 -1
- package/dist/contracts/index.d.ts +3 -5
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +1 -1
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/schemas.d.ts +1 -31
- package/dist/contracts/schemas.d.ts.map +1 -1
- package/dist/contracts/schemas.js +1 -7
- package/dist/contracts/schemas.js.map +1 -1
- package/dist/index.d.ts +2 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -6
- package/dist/index.js.map +1 -1
- package/dist/manager/agent/__tests__/lifecycle.test.js +27 -13
- package/dist/manager/agent/__tests__/lifecycle.test.js.map +1 -1
- package/dist/manager/agent/lifecycle.d.ts +9 -0
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +93 -31
- package/dist/manager/agent/lifecycle.js.map +1 -1
- package/dist/manager/index.d.ts +2 -0
- package/dist/manager/index.d.ts.map +1 -1
- package/dist/manager/index.js +1 -0
- package/dist/manager/index.js.map +1 -1
- package/dist/manager/run/persistence.d.ts +3 -1
- package/dist/manager/run/persistence.d.ts.map +1 -1
- package/dist/manager/run/persistence.js +5 -0
- package/dist/manager/run/persistence.js.map +1 -1
- package/dist/manager/thread/__tests__/lifecycle.test.d.ts +2 -0
- package/dist/manager/thread/__tests__/lifecycle.test.d.ts.map +1 -0
- package/dist/manager/thread/__tests__/lifecycle.test.js +216 -0
- package/dist/manager/thread/__tests__/lifecycle.test.js.map +1 -0
- package/dist/manager/thread/lifecycle.d.ts +105 -0
- package/dist/manager/thread/lifecycle.d.ts.map +1 -0
- package/dist/manager/thread/lifecycle.js +186 -0
- package/dist/manager/thread/lifecycle.js.map +1 -0
- package/dist/rag/retriever.js +2 -2
- package/dist/registry/tool/execute.js +1 -1
- package/dist/registry/tool/execute.js.map +1 -1
- package/dist/runtime/query/__tests__/context.test.js +8 -7
- package/dist/runtime/query/__tests__/context.test.js.map +1 -1
- package/dist/runtime/query/context-cache.d.ts +3 -3
- package/dist/runtime/query/context-cache.d.ts.map +1 -1
- package/dist/runtime/query/context-cache.js +2 -2
- package/dist/runtime/query/context-cache.js.map +1 -1
- package/dist/runtime/query/context.d.ts +12 -21
- package/dist/runtime/query/context.d.ts.map +1 -1
- package/dist/runtime/query/context.js +3 -1
- package/dist/runtime/query/context.js.map +1 -1
- package/dist/runtime/query/index.d.ts +13 -15
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +2 -1
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +1 -1
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/session/__tests__/integration/_fixtures.d.ts +11 -4
- package/dist/session/__tests__/integration/_fixtures.d.ts.map +1 -1
- package/dist/session/__tests__/integration/_fixtures.js +23 -6
- package/dist/session/__tests__/integration/_fixtures.js.map +1 -1
- package/dist/session/__tests__/integration/archive-gate.test.d.ts +15 -0
- package/dist/session/__tests__/integration/archive-gate.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/archive-gate.test.js +214 -0
- package/dist/session/__tests__/integration/archive-gate.test.js.map +1 -0
- package/dist/session/__tests__/integration/capacity-caps.test.js +13 -6
- package/dist/session/__tests__/integration/capacity-caps.test.js.map +1 -1
- package/dist/session/__tests__/integration/e2e-spawn.test.js +14 -2
- package/dist/session/__tests__/integration/e2e-spawn.test.js.map +1 -1
- package/dist/session/__tests__/integration/event-stream-ordering.test.js +14 -7
- package/dist/session/__tests__/integration/event-stream-ordering.test.js.map +1 -1
- package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.js +26 -14
- package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.js.map +1 -1
- package/dist/session/__tests__/integration/handoff-illegal-transition.test.js +30 -20
- package/dist/session/__tests__/integration/handoff-illegal-transition.test.js.map +1 -1
- package/dist/session/__tests__/integration/handoff-single-e2e.test.js +25 -9
- package/dist/session/__tests__/integration/handoff-single-e2e.test.js.map +1 -1
- package/dist/session/__tests__/integration/hierarchy-lifecycle.test.js +11 -10
- package/dist/session/__tests__/integration/hierarchy-lifecycle.test.js.map +1 -1
- package/dist/session/__tests__/integration/prev-artifact-dag.test.js +5 -4
- package/dist/session/__tests__/integration/prev-artifact-dag.test.js.map +1 -1
- package/dist/session/__tests__/integration/retention-archive.test.js +3 -2
- package/dist/session/__tests__/integration/retention-archive.test.js.map +1 -1
- package/dist/session/__tests__/integration/spawn-rollback.test.d.ts +26 -0
- package/dist/session/__tests__/integration/spawn-rollback.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/spawn-rollback.test.js +236 -0
- package/dist/session/__tests__/integration/spawn-rollback.test.js.map +1 -0
- package/dist/session/__tests__/integration/summary-materialization-e2e.test.js +2 -1
- package/dist/session/__tests__/integration/summary-materialization-e2e.test.js.map +1 -1
- package/dist/session/__tests__/integration/tenant-isolation.test.js +14 -5
- package/dist/session/__tests__/integration/tenant-isolation.test.js.map +1 -1
- package/dist/session/errors.d.ts +79 -0
- package/dist/session/errors.d.ts.map +1 -1
- package/dist/session/errors.js +57 -0
- package/dist/session/errors.js.map +1 -1
- package/dist/session/handoff/__tests__/broadcast.test.js +49 -31
- package/dist/session/handoff/__tests__/broadcast.test.js.map +1 -1
- package/dist/session/handoff/__tests__/capacity.test.js +21 -18
- package/dist/session/handoff/__tests__/capacity.test.js.map +1 -1
- package/dist/session/handoff/__tests__/single.test.js +39 -30
- package/dist/session/handoff/__tests__/single.test.js.map +1 -1
- package/dist/session/handoff/assignment.d.ts +13 -1
- package/dist/session/handoff/assignment.d.ts.map +1 -1
- package/dist/session/handoff/broadcast.d.ts +7 -0
- package/dist/session/handoff/broadcast.d.ts.map +1 -1
- package/dist/session/handoff/broadcast.js +16 -1
- package/dist/session/handoff/broadcast.js.map +1 -1
- package/dist/session/handoff/single.d.ts +7 -0
- package/dist/session/handoff/single.d.ts.map +1 -1
- package/dist/session/handoff/single.js +13 -1
- package/dist/session/handoff/single.js.map +1 -1
- package/dist/session/hierarchy/__tests__/session.test.js +2 -0
- package/dist/session/hierarchy/__tests__/session.test.js.map +1 -1
- package/dist/session/hierarchy/index.d.ts +1 -0
- package/dist/session/hierarchy/index.d.ts.map +1 -1
- package/dist/session/hierarchy/index.js.map +1 -1
- package/dist/session/hierarchy/session.d.ts +15 -3
- package/dist/session/hierarchy/session.d.ts.map +1 -1
- package/dist/session/hierarchy/session.js.map +1 -1
- package/dist/session/hierarchy/thread.d.ts +54 -0
- package/dist/session/hierarchy/thread.d.ts.map +1 -0
- package/dist/session/hierarchy/thread.js +2 -0
- package/dist/session/hierarchy/thread.js.map +1 -0
- package/dist/session/migration/id-prefix.d.ts +8 -13
- package/dist/session/migration/id-prefix.d.ts.map +1 -1
- package/dist/session/migration/id-prefix.js +8 -13
- package/dist/session/migration/id-prefix.js.map +1 -1
- package/dist/session/retention/__tests__/archive.test.js +3 -2
- package/dist/session/retention/__tests__/archive.test.js.map +1 -1
- package/dist/session/summary/__tests__/materialize.test.js +4 -3
- package/dist/session/summary/__tests__/materialize.test.js.map +1 -1
- package/dist/store/index.d.ts +0 -2
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +0 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/session/__tests__/disk.test.js +32 -5
- package/dist/store/session/__tests__/disk.test.js.map +1 -1
- package/dist/store/session/__tests__/memory.test.js +50 -9
- package/dist/store/session/__tests__/memory.test.js.map +1 -1
- package/dist/store/session/disk.d.ts +2 -1
- package/dist/store/session/disk.d.ts.map +1 -1
- package/dist/store/session/disk.js +61 -0
- package/dist/store/session/disk.js.map +1 -1
- package/dist/store/session/index.d.ts.map +1 -1
- package/dist/store/session/index.js +3 -4
- package/dist/store/session/index.js.map +1 -1
- package/dist/store/session/memory.d.ts +2 -1
- package/dist/store/session/memory.d.ts.map +1 -1
- package/dist/store/session/memory.js +13 -0
- package/dist/store/session/memory.js.map +1 -1
- package/dist/store/thread/disk.d.ts +41 -0
- package/dist/store/thread/disk.d.ts.map +1 -0
- package/dist/store/thread/disk.js +229 -0
- package/dist/store/thread/disk.js.map +1 -0
- package/dist/store/thread/index.d.ts +4 -0
- package/dist/store/thread/index.d.ts.map +1 -0
- package/dist/store/thread/index.js +6 -0
- package/dist/store/thread/index.js.map +1 -0
- package/dist/store/thread/memory.d.ts +23 -0
- package/dist/store/thread/memory.d.ts.map +1 -0
- package/dist/store/thread/memory.js +90 -0
- package/dist/store/thread/memory.js.map +1 -0
- package/dist/telemetry/runtime-accessors.d.ts +4 -0
- package/dist/telemetry/runtime-accessors.d.ts.map +1 -0
- package/dist/telemetry/runtime-accessors.js +17 -0
- package/dist/telemetry/runtime-accessors.js.map +1 -0
- package/dist/types/agent/base.d.ts +17 -21
- package/dist/types/agent/base.d.ts.map +1 -1
- package/dist/types/agent/factory.d.ts +8 -2
- package/dist/types/agent/factory.d.ts.map +1 -1
- package/dist/types/agent/task.d.ts +18 -11
- package/dist/types/agent/task.d.ts.map +1 -1
- package/dist/types/ids/index.d.ts +5 -9
- package/dist/types/ids/index.d.ts.map +1 -1
- package/dist/types/ids/index.js +4 -4
- package/dist/types/ids/index.js.map +1 -1
- package/dist/types/rag/retrieval.d.ts +4 -3
- package/dist/types/rag/retrieval.d.ts.map +1 -1
- package/dist/types/run/config.d.ts +6 -5
- package/dist/types/run/config.d.ts.map +1 -1
- package/dist/types/run/metadata.d.ts +5 -18
- package/dist/types/run/metadata.d.ts.map +1 -1
- package/dist/types/session/ids.d.ts +4 -13
- package/dist/types/session/ids.d.ts.map +1 -1
- package/dist/types/session/ids.js +3 -6
- package/dist/types/session/ids.js.map +1 -1
- package/dist/types/session/index.d.ts +1 -1
- package/dist/types/session/index.d.ts.map +1 -1
- package/dist/types/session/store.d.ts +32 -10
- package/dist/types/session/store.d.ts.map +1 -1
- package/dist/types/session/store.js +3 -8
- package/dist/types/session/store.js.map +1 -1
- package/dist/types/thread/index.d.ts +2 -0
- package/dist/types/thread/index.d.ts.map +1 -0
- package/dist/types/thread/index.js +5 -0
- package/dist/types/thread/index.js.map +1 -0
- package/dist/types/thread/store.d.ts +86 -0
- package/dist/types/thread/store.d.ts.map +1 -0
- package/dist/types/thread/store.js +22 -0
- package/dist/types/thread/store.js.map +1 -0
- package/dist/utils/id.d.ts +1 -12
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +3 -23
- package/dist/utils/id.js.map +1 -1
- package/package.json +11 -20
- package/src/agents/ReactiveAgent.ts +3 -2
- package/src/agents/SupervisorAgent.ts +5 -2
- package/src/bridge/a2a/index.ts +0 -1
- package/src/bridge/a2a/message.ts +0 -32
- package/src/bridge/a2a/task.ts +8 -7
- package/src/contracts/api.ts +6 -42
- package/src/contracts/ids.ts +1 -1
- package/src/contracts/index.ts +2 -8
- package/src/contracts/schemas.ts +1 -8
- package/src/index.ts +3 -15
- package/src/manager/agent/__tests__/lifecycle.test.ts +34 -13
- package/src/manager/agent/lifecycle.ts +114 -35
- package/src/manager/index.ts +3 -0
- package/src/manager/run/persistence.ts +7 -1
- package/src/manager/thread/__tests__/lifecycle.test.ts +286 -0
- package/src/manager/thread/lifecycle.ts +217 -0
- package/src/rag/retriever.ts +2 -2
- package/src/registry/tool/execute.ts +1 -1
- package/src/runtime/query/__tests__/context.test.ts +9 -8
- package/src/runtime/query/context-cache.ts +4 -4
- package/src/runtime/query/context.ts +15 -22
- package/src/runtime/query/index.ts +16 -17
- package/src/runtime/query/iteration/index.ts +1 -1
- package/src/session/__tests__/integration/_fixtures.ts +36 -8
- package/src/session/__tests__/integration/archive-gate.test.ts +288 -0
- package/src/session/__tests__/integration/capacity-caps.test.ts +13 -6
- package/src/session/__tests__/integration/e2e-spawn.test.ts +20 -2
- package/src/session/__tests__/integration/event-stream-ordering.test.ts +14 -7
- package/src/session/__tests__/integration/handoff-broadcast-e2e.test.ts +39 -13
- package/src/session/__tests__/integration/handoff-illegal-transition.test.ts +54 -19
- package/src/session/__tests__/integration/handoff-single-e2e.test.ts +40 -9
- package/src/session/__tests__/integration/hierarchy-lifecycle.test.ts +13 -10
- package/src/session/__tests__/integration/prev-artifact-dag.test.ts +12 -5
- package/src/session/__tests__/integration/retention-archive.test.ts +5 -3
- package/src/session/__tests__/integration/spawn-rollback.test.ts +313 -0
- package/src/session/__tests__/integration/summary-materialization-e2e.test.ts +4 -2
- package/src/session/__tests__/integration/tenant-isolation.test.ts +16 -6
- package/src/session/errors.ts +89 -0
- package/src/session/handoff/__tests__/broadcast.test.ts +56 -28
- package/src/session/handoff/__tests__/capacity.test.ts +26 -20
- package/src/session/handoff/__tests__/single.test.ts +45 -28
- package/src/session/handoff/assignment.ts +13 -1
- package/src/session/handoff/broadcast.ts +26 -1
- package/src/session/handoff/single.ts +23 -1
- package/src/session/hierarchy/__tests__/session.test.ts +9 -1
- package/src/session/hierarchy/index.ts +1 -0
- package/src/session/hierarchy/session.ts +15 -3
- package/src/session/hierarchy/thread.ts +55 -0
- package/src/session/migration/id-prefix.ts +8 -13
- package/src/session/retention/__tests__/archive.test.ts +5 -3
- package/src/session/summary/__tests__/materialize.test.ts +6 -4
- package/src/store/index.ts +0 -3
- package/src/store/session/__tests__/disk.test.ts +57 -6
- package/src/store/session/__tests__/memory.test.ts +84 -9
- package/src/store/session/disk.ts +57 -1
- package/src/store/session/index.ts +3 -4
- package/src/store/session/memory.ts +13 -1
- package/src/store/thread/disk.ts +261 -0
- package/src/store/thread/index.ts +7 -0
- package/src/store/thread/memory.ts +104 -0
- package/src/telemetry/runtime-accessors.ts +19 -0
- package/src/types/agent/base.ts +17 -21
- package/src/types/agent/factory.ts +8 -3
- package/src/types/agent/task.ts +19 -11
- package/src/types/ids/index.ts +8 -15
- package/src/types/rag/retrieval.ts +4 -3
- package/src/types/run/config.ts +6 -5
- package/src/types/run/metadata.ts +5 -18
- package/src/types/session/ids.ts +4 -15
- package/src/types/session/index.ts +1 -2
- package/src/types/session/store.ts +34 -11
- package/src/types/thread/index.ts +5 -0
- package/src/types/thread/store.ts +92 -0
- package/src/utils/id.ts +3 -24
- package/dist/provider/telemetry/setup.d.ts +0 -19
- package/dist/provider/telemetry/setup.d.ts.map +0 -1
- package/dist/provider/telemetry/setup.js +0 -102
- package/dist/provider/telemetry/setup.js.map +0 -1
- package/dist/store/conversation/memory.d.ts +0 -43
- package/dist/store/conversation/memory.d.ts.map +0 -1
- package/dist/store/conversation/memory.js +0 -108
- package/dist/store/conversation/memory.js.map +0 -1
- package/dist/telemetry/index.d.ts +0 -6
- package/dist/telemetry/index.d.ts.map +0 -1
- package/dist/telemetry/index.js +0 -4
- package/dist/telemetry/index.js.map +0 -1
- package/dist/telemetry/metrics.d.ts +0 -8
- package/dist/telemetry/metrics.d.ts.map +0 -1
- package/dist/telemetry/metrics.js +0 -53
- package/dist/telemetry/metrics.js.map +0 -1
- package/dist/types/conversation/index.d.ts +0 -14
- package/dist/types/conversation/index.d.ts.map +0 -1
- package/dist/types/conversation/index.js +0 -2
- package/dist/types/conversation/index.js.map +0 -1
- package/dist/types/telemetry/index.d.ts +0 -10
- package/dist/types/telemetry/index.d.ts.map +0 -1
- package/dist/types/telemetry/index.js +0 -2
- package/dist/types/telemetry/index.js.map +0 -1
- package/src/provider/telemetry/setup.ts +0 -125
- package/src/store/conversation/memory.ts +0 -144
- package/src/telemetry/index.ts +0 -14
- package/src/telemetry/metrics.ts +0 -69
- package/src/types/conversation/index.ts +0 -15
- package/src/types/telemetry/index.ts +0 -10
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @deprecated Use `InMemorySessionStore` from
|
|
3
|
-
* `@namzu/sdk/store/session`. This class implements the deprecated
|
|
4
|
-
* `ConversationStore` contract (thread-scoped, no tenantId) and is kept
|
|
5
|
-
* for one migration window per session-hierarchy.md §13.1; it will be
|
|
6
|
-
* removed in 0.3.0.
|
|
7
|
-
*
|
|
8
|
-
* INTERPRETATION (Phase 3): the old class exposes helpers
|
|
9
|
-
* (`addUserMessage`, `createThread`, `hasThread`, `deleteThread`,
|
|
10
|
-
* `messageCount`, `clear`) that are not part of `ConversationStore` and
|
|
11
|
-
* whose signatures rely on `ThreadId` + `Message` without `TenantId`.
|
|
12
|
-
* Those signatures are structurally incompatible with the new
|
|
13
|
-
* `SessionStore` surface, so a strict alias re-export would lose API
|
|
14
|
-
* (roadmap §2 Phase 3 option (a)). We pick option (b) — retain the
|
|
15
|
-
* original class body verbatim with a deprecation banner — to preserve
|
|
16
|
-
* existing consumers during the migration window without polluting the
|
|
17
|
-
* new `InMemorySessionStore` with thread-scoped helpers.
|
|
18
|
-
*/
|
|
19
|
-
import { findSafeTrimIndex } from '../../compaction/dangling.js';
|
|
20
|
-
import { createAssistantMessage, createUserMessage, } from '../../types/message/index.js';
|
|
21
|
-
import { extractFinalResponse } from '../../utils/conversation.js';
|
|
22
|
-
import { generateMessageId } from '../../utils/id.js';
|
|
23
|
-
/**
|
|
24
|
-
* @deprecated See module banner. Use `InMemorySessionStore` from
|
|
25
|
-
* `@namzu/sdk/store/session`.
|
|
26
|
-
*/
|
|
27
|
-
export class InMemoryConversationStore {
|
|
28
|
-
threads = new Map();
|
|
29
|
-
maxMessages;
|
|
30
|
-
constructor(config = {}) {
|
|
31
|
-
this.maxMessages = config.maxMessages ?? 100;
|
|
32
|
-
}
|
|
33
|
-
loadMessages(threadId) {
|
|
34
|
-
const messages = this.threads.get(threadId);
|
|
35
|
-
if (!messages)
|
|
36
|
-
return [];
|
|
37
|
-
// Convert to Message type for trim safety check
|
|
38
|
-
const convertedMessages = messages.map((m) => {
|
|
39
|
-
switch (m.role) {
|
|
40
|
-
case 'user':
|
|
41
|
-
return createUserMessage(m.content);
|
|
42
|
-
case 'assistant':
|
|
43
|
-
return createAssistantMessage(m.content);
|
|
44
|
-
default: {
|
|
45
|
-
const _exhaustive = m.role;
|
|
46
|
-
throw new Error(`Unhandled message role: ${_exhaustive}`);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
// Apply safe trimming to preserve tool call/result atomicity
|
|
51
|
-
let trimStartIdx = 0;
|
|
52
|
-
if (convertedMessages.length > this.maxMessages) {
|
|
53
|
-
const desiredTrimPoint = convertedMessages.length - this.maxMessages;
|
|
54
|
-
trimStartIdx = findSafeTrimIndex(convertedMessages, desiredTrimPoint);
|
|
55
|
-
}
|
|
56
|
-
return convertedMessages.slice(trimStartIdx);
|
|
57
|
-
}
|
|
58
|
-
persistRunResult(threadId, runId, messages) {
|
|
59
|
-
const finalAssistant = extractFinalResponse(messages);
|
|
60
|
-
if (!finalAssistant || !finalAssistant.content)
|
|
61
|
-
return;
|
|
62
|
-
this.ensureThread(threadId);
|
|
63
|
-
this.threads.get(threadId)?.push({
|
|
64
|
-
id: generateMessageId(),
|
|
65
|
-
threadId,
|
|
66
|
-
role: 'assistant',
|
|
67
|
-
content: finalAssistant.content,
|
|
68
|
-
runId,
|
|
69
|
-
createdAt: new Date().toISOString(),
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
addUserMessage(threadId, content) {
|
|
73
|
-
this.ensureThread(threadId);
|
|
74
|
-
const id = generateMessageId();
|
|
75
|
-
this.threads.get(threadId)?.push({
|
|
76
|
-
id,
|
|
77
|
-
threadId,
|
|
78
|
-
role: 'user',
|
|
79
|
-
content,
|
|
80
|
-
createdAt: new Date().toISOString(),
|
|
81
|
-
});
|
|
82
|
-
return id;
|
|
83
|
-
}
|
|
84
|
-
hasThread(threadId) {
|
|
85
|
-
return this.threads.has(threadId);
|
|
86
|
-
}
|
|
87
|
-
createThread(threadId) {
|
|
88
|
-
if (this.threads.has(threadId))
|
|
89
|
-
return false;
|
|
90
|
-
this.threads.set(threadId, []);
|
|
91
|
-
return true;
|
|
92
|
-
}
|
|
93
|
-
deleteThread(threadId) {
|
|
94
|
-
return this.threads.delete(threadId);
|
|
95
|
-
}
|
|
96
|
-
messageCount(threadId) {
|
|
97
|
-
return this.threads.get(threadId)?.length ?? 0;
|
|
98
|
-
}
|
|
99
|
-
clear() {
|
|
100
|
-
this.threads.clear();
|
|
101
|
-
}
|
|
102
|
-
ensureThread(threadId) {
|
|
103
|
-
if (!this.threads.has(threadId)) {
|
|
104
|
-
this.threads.set(threadId, []);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
//# sourceMappingURL=memory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/store/conversation/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export { TelemetryProvider, initTelemetry, getTelemetry, getTracer, getMeter, } from '../provider/telemetry/setup.js';
|
|
2
|
-
export type { TelemetryConfig, ExporterType } from '../types/telemetry/index.js';
|
|
3
|
-
export { createPlatformMetrics } from './metrics.js';
|
|
4
|
-
export type { PlatformMetrics } from './metrics.js';
|
|
5
|
-
export * from './attributes.js';
|
|
6
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,SAAS,EACT,QAAQ,GACR,MAAM,gCAAgC,CAAA;AAEvC,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAEhF,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACpD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEnD,cAAc,iBAAiB,CAAA"}
|
package/dist/telemetry/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,SAAS,EACT,QAAQ,GACR,MAAM,gCAAgC,CAAA;AAIvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAGpD,cAAc,iBAAiB,CAAA"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export interface PlatformMetrics {
|
|
2
|
-
recordTokenUsage(model: string, inputTokens: number, outputTokens: number): void;
|
|
3
|
-
recordToolCall(toolName: string, success: boolean): void;
|
|
4
|
-
recordRunDuration(status: string, durationSec: number): void;
|
|
5
|
-
recordLLMLatency(model: string, durationSec: number): void;
|
|
6
|
-
}
|
|
7
|
-
export declare function createPlatformMetrics(): PlatformMetrics;
|
|
8
|
-
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC/B,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAChF,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACxD,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5D,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1D;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CA2DvD"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { getMeter } from '../provider/telemetry/setup.js';
|
|
2
|
-
export function createPlatformMetrics() {
|
|
3
|
-
const meter = getMeter();
|
|
4
|
-
const tokenInputCounter = meter.createCounter('gen_ai.client.token.usage', {
|
|
5
|
-
description: 'Number of input (prompt) tokens used',
|
|
6
|
-
unit: '{token}',
|
|
7
|
-
});
|
|
8
|
-
const tokenOutputCounter = meter.createCounter('gen_ai.client.token.usage.output', {
|
|
9
|
-
description: 'Number of output (completion) tokens used',
|
|
10
|
-
unit: '{token}',
|
|
11
|
-
});
|
|
12
|
-
const toolCallCounter = meter.createCounter('gen_ai.tool.call.count', {
|
|
13
|
-
description: 'Number of tool calls executed',
|
|
14
|
-
unit: '{call}',
|
|
15
|
-
});
|
|
16
|
-
const runDurationHistogram = meter.createHistogram('namzu.run.duration', {
|
|
17
|
-
description: 'Agent run duration',
|
|
18
|
-
unit: 's',
|
|
19
|
-
});
|
|
20
|
-
const llmLatencyHistogram = meter.createHistogram('gen_ai.client.operation.duration', {
|
|
21
|
-
description: 'LLM request duration (GenAI semantic convention)',
|
|
22
|
-
unit: 's',
|
|
23
|
-
});
|
|
24
|
-
return {
|
|
25
|
-
recordTokenUsage(model, inputTokens, outputTokens) {
|
|
26
|
-
tokenInputCounter.add(inputTokens, {
|
|
27
|
-
'gen_ai.request.model': model,
|
|
28
|
-
'gen_ai.token.type': 'input',
|
|
29
|
-
});
|
|
30
|
-
tokenOutputCounter.add(outputTokens, {
|
|
31
|
-
'gen_ai.request.model': model,
|
|
32
|
-
'gen_ai.token.type': 'output',
|
|
33
|
-
});
|
|
34
|
-
},
|
|
35
|
-
recordToolCall(toolName, success) {
|
|
36
|
-
toolCallCounter.add(1, {
|
|
37
|
-
'gen_ai.tool.name': toolName,
|
|
38
|
-
'namzu.tool.success': success,
|
|
39
|
-
});
|
|
40
|
-
},
|
|
41
|
-
recordRunDuration(status, durationSec) {
|
|
42
|
-
runDurationHistogram.record(durationSec, {
|
|
43
|
-
'namzu.run.status': status,
|
|
44
|
-
});
|
|
45
|
-
},
|
|
46
|
-
recordLLMLatency(model, durationSec) {
|
|
47
|
-
llmLatencyHistogram.record(durationSec, {
|
|
48
|
-
'gen_ai.request.model': model,
|
|
49
|
-
});
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=metrics.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AASzD,MAAM,UAAU,qBAAqB;IACpC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IAExB,MAAM,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAAC,2BAA2B,EAAE;QAC1E,WAAW,EAAE,sCAAsC;QACnD,IAAI,EAAE,SAAS;KACf,CAAC,CAAA;IAEF,MAAM,kBAAkB,GAAG,KAAK,CAAC,aAAa,CAAC,kCAAkC,EAAE;QAClF,WAAW,EAAE,2CAA2C;QACxD,IAAI,EAAE,SAAS;KACf,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,wBAAwB,EAAE;QACrE,WAAW,EAAE,+BAA+B;QAC5C,IAAI,EAAE,QAAQ;KACd,CAAC,CAAA;IAEF,MAAM,oBAAoB,GAAG,KAAK,CAAC,eAAe,CAAC,oBAAoB,EAAE;QACxE,WAAW,EAAE,oBAAoB;QACjC,IAAI,EAAE,GAAG;KACT,CAAC,CAAA;IAEF,MAAM,mBAAmB,GAAG,KAAK,CAAC,eAAe,CAAC,kCAAkC,EAAE;QACrF,WAAW,EAAE,kDAAkD;QAC/D,IAAI,EAAE,GAAG;KACT,CAAC,CAAA;IAEF,OAAO;QACN,gBAAgB,CAAC,KAAa,EAAE,WAAmB,EAAE,YAAoB;YACxE,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE;gBAClC,sBAAsB,EAAE,KAAK;gBAC7B,mBAAmB,EAAE,OAAO;aAC5B,CAAC,CAAA;YACF,kBAAkB,CAAC,GAAG,CAAC,YAAY,EAAE;gBACpC,sBAAsB,EAAE,KAAK;gBAC7B,mBAAmB,EAAE,QAAQ;aAC7B,CAAC,CAAA;QACH,CAAC;QAED,cAAc,CAAC,QAAgB,EAAE,OAAgB;YAChD,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE;gBACtB,kBAAkB,EAAE,QAAQ;gBAC5B,oBAAoB,EAAE,OAAO;aAC7B,CAAC,CAAA;QACH,CAAC;QAED,iBAAiB,CAAC,MAAc,EAAE,WAAmB;YACpD,oBAAoB,CAAC,MAAM,CAAC,WAAW,EAAE;gBACxC,kBAAkB,EAAE,MAAM;aAC1B,CAAC,CAAA;QACH,CAAC;QAED,gBAAgB,CAAC,KAAa,EAAE,WAAmB;YAClD,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE;gBACvC,sBAAsB,EAAE,KAAK;aAC7B,CAAC,CAAA;QACH,CAAC;KACD,CAAA;AACF,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { RunId, ThreadId } from '../ids/index.js';
|
|
2
|
-
import type { Message } from '../message/index.js';
|
|
3
|
-
/**
|
|
4
|
-
* @deprecated Use `SessionStore` from `@namzu/sdk` (import via
|
|
5
|
-
* `types/session/store.ts` or the root barrel). `ConversationStore` is
|
|
6
|
-
* thread-scoped and does not carry the `tenantId` required by
|
|
7
|
-
* session-hierarchy.md §12.1. Scheduled for removal in 0.3.0; the one-
|
|
8
|
-
* version migration window follows session-hierarchy.md §13.1.
|
|
9
|
-
*/
|
|
10
|
-
export interface ConversationStore {
|
|
11
|
-
loadMessages(threadId: ThreadId): Message[];
|
|
12
|
-
persistRunResult(threadId: ThreadId, runId: RunId, messages: Message[]): void;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/conversation/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IACjC,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,EAAE,CAAA;IAE3C,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;CAC7E"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/conversation/index.ts"],"names":[],"mappings":""}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export type ExporterType = 'console' | 'otlp' | 'none';
|
|
2
|
-
export interface TelemetryConfig {
|
|
3
|
-
serviceName: string;
|
|
4
|
-
serviceVersion?: string;
|
|
5
|
-
exporterType: ExporterType;
|
|
6
|
-
otlpEndpoint?: string;
|
|
7
|
-
otlpHeaders?: Record<string, string>;
|
|
8
|
-
metricExportIntervalMs?: number;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/telemetry/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAA;AAEtD,MAAM,WAAW,eAAe;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,YAAY,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAC/B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/telemetry/index.ts"],"names":[],"mappings":""}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { type Meter, type Tracer, metrics, trace } from '@opentelemetry/api'
|
|
2
|
-
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http'
|
|
3
|
-
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
|
|
4
|
-
import { Resource } from '@opentelemetry/resources'
|
|
5
|
-
import {
|
|
6
|
-
ConsoleMetricExporter,
|
|
7
|
-
MeterProvider,
|
|
8
|
-
PeriodicExportingMetricReader,
|
|
9
|
-
} from '@opentelemetry/sdk-metrics'
|
|
10
|
-
import { NodeSDK } from '@opentelemetry/sdk-node'
|
|
11
|
-
import { ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-node'
|
|
12
|
-
import type { TelemetryConfig } from '../../types/telemetry/index.js'
|
|
13
|
-
import { toErrorMessage } from '../../utils/error.js'
|
|
14
|
-
import { getRootLogger } from '../../utils/logger.js'
|
|
15
|
-
import { VERSION } from '../../version.js'
|
|
16
|
-
|
|
17
|
-
const logger = getRootLogger().child({ component: 'TelemetryProvider' })
|
|
18
|
-
|
|
19
|
-
export class TelemetryProvider {
|
|
20
|
-
private sdk: NodeSDK | null = null
|
|
21
|
-
private meterProvider: MeterProvider | null = null
|
|
22
|
-
private config: TelemetryConfig
|
|
23
|
-
private _tracer: Tracer | null = null
|
|
24
|
-
private _meter: Meter | null = null
|
|
25
|
-
|
|
26
|
-
constructor(config: TelemetryConfig) {
|
|
27
|
-
this.config = config
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
get tracer(): Tracer {
|
|
31
|
-
if (!this._tracer) {
|
|
32
|
-
this._tracer = trace.getTracer(this.config.serviceName, this.config.serviceVersion ?? VERSION)
|
|
33
|
-
}
|
|
34
|
-
return this._tracer
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
get meter(): Meter {
|
|
38
|
-
if (!this._meter) {
|
|
39
|
-
this._meter = metrics.getMeter(this.config.serviceName, this.config.serviceVersion ?? VERSION)
|
|
40
|
-
}
|
|
41
|
-
return this._meter
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
async start(): Promise<void> {
|
|
45
|
-
if (this.config.exporterType === 'none') {
|
|
46
|
-
logger.info('Telemetry disabled (exporterType=none)')
|
|
47
|
-
return
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const resource = new Resource({
|
|
51
|
-
'service.name': this.config.serviceName,
|
|
52
|
-
'service.version': this.config.serviceVersion ?? VERSION,
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
const traceExporter =
|
|
56
|
-
this.config.exporterType === 'otlp'
|
|
57
|
-
? new OTLPTraceExporter({
|
|
58
|
-
url: this.config.otlpEndpoint ? `${this.config.otlpEndpoint}/v1/traces` : undefined,
|
|
59
|
-
headers: this.config.otlpHeaders,
|
|
60
|
-
})
|
|
61
|
-
: new ConsoleSpanExporter()
|
|
62
|
-
|
|
63
|
-
const metricExporter =
|
|
64
|
-
this.config.exporterType === 'otlp'
|
|
65
|
-
? new OTLPMetricExporter({
|
|
66
|
-
url: this.config.otlpEndpoint ? `${this.config.otlpEndpoint}/v1/metrics` : undefined,
|
|
67
|
-
headers: this.config.otlpHeaders,
|
|
68
|
-
})
|
|
69
|
-
: new ConsoleMetricExporter()
|
|
70
|
-
|
|
71
|
-
this.meterProvider = new MeterProvider({
|
|
72
|
-
resource,
|
|
73
|
-
readers: [
|
|
74
|
-
new PeriodicExportingMetricReader({
|
|
75
|
-
exporter: metricExporter,
|
|
76
|
-
exportIntervalMillis: this.config.metricExportIntervalMs ?? 10_000,
|
|
77
|
-
}),
|
|
78
|
-
],
|
|
79
|
-
})
|
|
80
|
-
metrics.setGlobalMeterProvider(this.meterProvider)
|
|
81
|
-
|
|
82
|
-
this.sdk = new NodeSDK({
|
|
83
|
-
resource,
|
|
84
|
-
spanProcessor: new SimpleSpanProcessor(traceExporter),
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
this.sdk.start()
|
|
88
|
-
logger.info(`Telemetry started (exporter=${this.config.exporterType})`)
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
async shutdown(): Promise<void> {
|
|
92
|
-
try {
|
|
93
|
-
if (this.meterProvider) {
|
|
94
|
-
await this.meterProvider.shutdown()
|
|
95
|
-
}
|
|
96
|
-
if (this.sdk) {
|
|
97
|
-
await this.sdk.shutdown()
|
|
98
|
-
}
|
|
99
|
-
logger.info('Telemetry shutdown complete')
|
|
100
|
-
} catch (err) {
|
|
101
|
-
logger.error('Telemetry shutdown error', {
|
|
102
|
-
error: toErrorMessage(err),
|
|
103
|
-
})
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
let _globalProvider: TelemetryProvider | null = null
|
|
109
|
-
|
|
110
|
-
export function initTelemetry(config: TelemetryConfig): TelemetryProvider {
|
|
111
|
-
_globalProvider = new TelemetryProvider(config)
|
|
112
|
-
return _globalProvider
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export function getTelemetry(): TelemetryProvider | null {
|
|
116
|
-
return _globalProvider
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
export function getTracer(): Tracer {
|
|
120
|
-
return _globalProvider?.tracer ?? trace.getTracer('namzu')
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
export function getMeter(): Meter {
|
|
124
|
-
return _globalProvider?.meter ?? metrics.getMeter('namzu')
|
|
125
|
-
}
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @deprecated Use `InMemorySessionStore` from
|
|
3
|
-
* `@namzu/sdk/store/session`. This class implements the deprecated
|
|
4
|
-
* `ConversationStore` contract (thread-scoped, no tenantId) and is kept
|
|
5
|
-
* for one migration window per session-hierarchy.md §13.1; it will be
|
|
6
|
-
* removed in 0.3.0.
|
|
7
|
-
*
|
|
8
|
-
* INTERPRETATION (Phase 3): the old class exposes helpers
|
|
9
|
-
* (`addUserMessage`, `createThread`, `hasThread`, `deleteThread`,
|
|
10
|
-
* `messageCount`, `clear`) that are not part of `ConversationStore` and
|
|
11
|
-
* whose signatures rely on `ThreadId` + `Message` without `TenantId`.
|
|
12
|
-
* Those signatures are structurally incompatible with the new
|
|
13
|
-
* `SessionStore` surface, so a strict alias re-export would lose API
|
|
14
|
-
* (roadmap §2 Phase 3 option (a)). We pick option (b) — retain the
|
|
15
|
-
* original class body verbatim with a deprecation banner — to preserve
|
|
16
|
-
* existing consumers during the migration window without polluting the
|
|
17
|
-
* new `InMemorySessionStore` with thread-scoped helpers.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
import { findSafeTrimIndex } from '../../compaction/dangling.js'
|
|
21
|
-
import type { ConversationStore } from '../../types/conversation/index.js'
|
|
22
|
-
import type { MessageId, RunId, ThreadId } from '../../types/ids/index.js'
|
|
23
|
-
import {
|
|
24
|
-
type Message,
|
|
25
|
-
createAssistantMessage,
|
|
26
|
-
createUserMessage,
|
|
27
|
-
} from '../../types/message/index.js'
|
|
28
|
-
import { extractFinalResponse } from '../../utils/conversation.js'
|
|
29
|
-
import { generateMessageId } from '../../utils/id.js'
|
|
30
|
-
|
|
31
|
-
interface ConversationMessage {
|
|
32
|
-
readonly id: MessageId
|
|
33
|
-
|
|
34
|
-
readonly threadId: ThreadId
|
|
35
|
-
|
|
36
|
-
readonly role: 'user' | 'assistant'
|
|
37
|
-
|
|
38
|
-
readonly content: string
|
|
39
|
-
|
|
40
|
-
readonly runId?: RunId
|
|
41
|
-
|
|
42
|
-
readonly createdAt: string
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export interface InMemoryConversationStoreConfig {
|
|
46
|
-
readonly maxMessages?: number
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* @deprecated See module banner. Use `InMemorySessionStore` from
|
|
51
|
-
* `@namzu/sdk/store/session`.
|
|
52
|
-
*/
|
|
53
|
-
export class InMemoryConversationStore implements ConversationStore {
|
|
54
|
-
private readonly threads = new Map<ThreadId, ConversationMessage[]>()
|
|
55
|
-
private readonly maxMessages: number
|
|
56
|
-
|
|
57
|
-
constructor(config: InMemoryConversationStoreConfig = {}) {
|
|
58
|
-
this.maxMessages = config.maxMessages ?? 100
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
loadMessages(threadId: ThreadId): Message[] {
|
|
62
|
-
const messages = this.threads.get(threadId)
|
|
63
|
-
if (!messages) return []
|
|
64
|
-
|
|
65
|
-
// Convert to Message type for trim safety check
|
|
66
|
-
const convertedMessages: Message[] = messages.map((m) => {
|
|
67
|
-
switch (m.role) {
|
|
68
|
-
case 'user':
|
|
69
|
-
return createUserMessage(m.content)
|
|
70
|
-
case 'assistant':
|
|
71
|
-
return createAssistantMessage(m.content)
|
|
72
|
-
default: {
|
|
73
|
-
const _exhaustive: never = m.role
|
|
74
|
-
throw new Error(`Unhandled message role: ${_exhaustive}`)
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
// Apply safe trimming to preserve tool call/result atomicity
|
|
80
|
-
let trimStartIdx = 0
|
|
81
|
-
if (convertedMessages.length > this.maxMessages) {
|
|
82
|
-
const desiredTrimPoint = convertedMessages.length - this.maxMessages
|
|
83
|
-
trimStartIdx = findSafeTrimIndex(convertedMessages, desiredTrimPoint)
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
return convertedMessages.slice(trimStartIdx)
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
persistRunResult(threadId: ThreadId, runId: RunId, messages: Message[]): void {
|
|
90
|
-
const finalAssistant = extractFinalResponse(messages)
|
|
91
|
-
if (!finalAssistant || !finalAssistant.content) return
|
|
92
|
-
|
|
93
|
-
this.ensureThread(threadId)
|
|
94
|
-
this.threads.get(threadId)?.push({
|
|
95
|
-
id: generateMessageId(),
|
|
96
|
-
threadId,
|
|
97
|
-
role: 'assistant',
|
|
98
|
-
content: finalAssistant.content,
|
|
99
|
-
runId,
|
|
100
|
-
createdAt: new Date().toISOString(),
|
|
101
|
-
})
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
addUserMessage(threadId: ThreadId, content: string): MessageId {
|
|
105
|
-
this.ensureThread(threadId)
|
|
106
|
-
const id = generateMessageId()
|
|
107
|
-
this.threads.get(threadId)?.push({
|
|
108
|
-
id,
|
|
109
|
-
threadId,
|
|
110
|
-
role: 'user',
|
|
111
|
-
content,
|
|
112
|
-
createdAt: new Date().toISOString(),
|
|
113
|
-
})
|
|
114
|
-
return id
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
hasThread(threadId: ThreadId): boolean {
|
|
118
|
-
return this.threads.has(threadId)
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
createThread(threadId: ThreadId): boolean {
|
|
122
|
-
if (this.threads.has(threadId)) return false
|
|
123
|
-
this.threads.set(threadId, [])
|
|
124
|
-
return true
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
deleteThread(threadId: ThreadId): boolean {
|
|
128
|
-
return this.threads.delete(threadId)
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
messageCount(threadId: ThreadId): number {
|
|
132
|
-
return this.threads.get(threadId)?.length ?? 0
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
clear(): void {
|
|
136
|
-
this.threads.clear()
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
private ensureThread(threadId: ThreadId): void {
|
|
140
|
-
if (!this.threads.has(threadId)) {
|
|
141
|
-
this.threads.set(threadId, [])
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
package/src/telemetry/index.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export {
|
|
2
|
-
TelemetryProvider,
|
|
3
|
-
initTelemetry,
|
|
4
|
-
getTelemetry,
|
|
5
|
-
getTracer,
|
|
6
|
-
getMeter,
|
|
7
|
-
} from '../provider/telemetry/setup.js'
|
|
8
|
-
|
|
9
|
-
export type { TelemetryConfig, ExporterType } from '../types/telemetry/index.js'
|
|
10
|
-
|
|
11
|
-
export { createPlatformMetrics } from './metrics.js'
|
|
12
|
-
export type { PlatformMetrics } from './metrics.js'
|
|
13
|
-
|
|
14
|
-
export * from './attributes.js'
|
package/src/telemetry/metrics.ts
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { getMeter } from '../provider/telemetry/setup.js'
|
|
2
|
-
|
|
3
|
-
export interface PlatformMetrics {
|
|
4
|
-
recordTokenUsage(model: string, inputTokens: number, outputTokens: number): void
|
|
5
|
-
recordToolCall(toolName: string, success: boolean): void
|
|
6
|
-
recordRunDuration(status: string, durationSec: number): void
|
|
7
|
-
recordLLMLatency(model: string, durationSec: number): void
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export function createPlatformMetrics(): PlatformMetrics {
|
|
11
|
-
const meter = getMeter()
|
|
12
|
-
|
|
13
|
-
const tokenInputCounter = meter.createCounter('gen_ai.client.token.usage', {
|
|
14
|
-
description: 'Number of input (prompt) tokens used',
|
|
15
|
-
unit: '{token}',
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
const tokenOutputCounter = meter.createCounter('gen_ai.client.token.usage.output', {
|
|
19
|
-
description: 'Number of output (completion) tokens used',
|
|
20
|
-
unit: '{token}',
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
const toolCallCounter = meter.createCounter('gen_ai.tool.call.count', {
|
|
24
|
-
description: 'Number of tool calls executed',
|
|
25
|
-
unit: '{call}',
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
const runDurationHistogram = meter.createHistogram('namzu.run.duration', {
|
|
29
|
-
description: 'Agent run duration',
|
|
30
|
-
unit: 's',
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
const llmLatencyHistogram = meter.createHistogram('gen_ai.client.operation.duration', {
|
|
34
|
-
description: 'LLM request duration (GenAI semantic convention)',
|
|
35
|
-
unit: 's',
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
return {
|
|
39
|
-
recordTokenUsage(model: string, inputTokens: number, outputTokens: number): void {
|
|
40
|
-
tokenInputCounter.add(inputTokens, {
|
|
41
|
-
'gen_ai.request.model': model,
|
|
42
|
-
'gen_ai.token.type': 'input',
|
|
43
|
-
})
|
|
44
|
-
tokenOutputCounter.add(outputTokens, {
|
|
45
|
-
'gen_ai.request.model': model,
|
|
46
|
-
'gen_ai.token.type': 'output',
|
|
47
|
-
})
|
|
48
|
-
},
|
|
49
|
-
|
|
50
|
-
recordToolCall(toolName: string, success: boolean): void {
|
|
51
|
-
toolCallCounter.add(1, {
|
|
52
|
-
'gen_ai.tool.name': toolName,
|
|
53
|
-
'namzu.tool.success': success,
|
|
54
|
-
})
|
|
55
|
-
},
|
|
56
|
-
|
|
57
|
-
recordRunDuration(status: string, durationSec: number): void {
|
|
58
|
-
runDurationHistogram.record(durationSec, {
|
|
59
|
-
'namzu.run.status': status,
|
|
60
|
-
})
|
|
61
|
-
},
|
|
62
|
-
|
|
63
|
-
recordLLMLatency(model: string, durationSec: number): void {
|
|
64
|
-
llmLatencyHistogram.record(durationSec, {
|
|
65
|
-
'gen_ai.request.model': model,
|
|
66
|
-
})
|
|
67
|
-
},
|
|
68
|
-
}
|
|
69
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { RunId, ThreadId } from '../ids/index.js'
|
|
2
|
-
import type { Message } from '../message/index.js'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @deprecated Use `SessionStore` from `@namzu/sdk` (import via
|
|
6
|
-
* `types/session/store.ts` or the root barrel). `ConversationStore` is
|
|
7
|
-
* thread-scoped and does not carry the `tenantId` required by
|
|
8
|
-
* session-hierarchy.md §12.1. Scheduled for removal in 0.3.0; the one-
|
|
9
|
-
* version migration window follows session-hierarchy.md §13.1.
|
|
10
|
-
*/
|
|
11
|
-
export interface ConversationStore {
|
|
12
|
-
loadMessages(threadId: ThreadId): Message[]
|
|
13
|
-
|
|
14
|
-
persistRunResult(threadId: ThreadId, runId: RunId, messages: Message[]): void
|
|
15
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export type ExporterType = 'console' | 'otlp' | 'none'
|
|
2
|
-
|
|
3
|
-
export interface TelemetryConfig {
|
|
4
|
-
serviceName: string
|
|
5
|
-
serviceVersion?: string
|
|
6
|
-
exporterType: ExporterType
|
|
7
|
-
otlpEndpoint?: string
|
|
8
|
-
otlpHeaders?: Record<string, string>
|
|
9
|
-
metricExportIntervalMs?: number
|
|
10
|
-
}
|