@contractspec/lib.ai-agent 1.57.0 → 1.58.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/dist/agent/agent-factory.d.ts +67 -71
- package/dist/agent/agent-factory.d.ts.map +1 -1
- package/dist/agent/agent-factory.js +658 -100
- package/dist/agent/agent.test.d.ts +2 -0
- package/dist/agent/agent.test.d.ts.map +1 -0
- package/dist/agent/contract-spec-agent.d.ts +48 -52
- package/dist/agent/contract-spec-agent.d.ts.map +1 -1
- package/dist/agent/contract-spec-agent.js +605 -146
- package/dist/agent/index.d.ts +4 -4
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +2102 -4
- package/dist/agent/json-runner.d.ts +15 -19
- package/dist/agent/json-runner.d.ts.map +1 -1
- package/dist/agent/json-runner.js +672 -57
- package/dist/agent/json-runner.test.d.ts +2 -0
- package/dist/agent/json-runner.test.d.ts.map +1 -0
- package/dist/agent/unified-agent.d.ts +132 -109
- package/dist/agent/unified-agent.d.ts.map +1 -1
- package/dist/agent/unified-agent.js +2011 -293
- package/dist/approval/index.d.ts +3 -2
- package/dist/approval/index.d.ts.map +1 -0
- package/dist/approval/index.js +128 -2
- package/dist/approval/workflow.d.ts +106 -110
- package/dist/approval/workflow.d.ts.map +1 -1
- package/dist/approval/workflow.js +126 -157
- package/dist/exporters/claude-agent-exporter.d.ts +50 -48
- package/dist/exporters/claude-agent-exporter.d.ts.map +1 -1
- package/dist/exporters/claude-agent-exporter.js +258 -203
- package/dist/exporters/index.d.ts +28 -4
- package/dist/exporters/index.d.ts.map +1 -0
- package/dist/exporters/index.js +737 -3
- package/dist/exporters/opencode-exporter.d.ts +47 -45
- package/dist/exporters/opencode-exporter.d.ts.map +1 -1
- package/dist/exporters/opencode-exporter.js +507 -191
- package/dist/exporters/types.d.ts +171 -169
- package/dist/exporters/types.d.ts.map +1 -1
- package/dist/exporters/types.js +1 -0
- package/dist/index.d.ts +15 -39
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3337 -32
- package/dist/interop/index.d.ts +48 -4
- package/dist/interop/index.d.ts.map +1 -0
- package/dist/interop/index.js +709 -3
- package/dist/interop/spec-consumer.d.ts +57 -53
- package/dist/interop/spec-consumer.d.ts.map +1 -1
- package/dist/interop/spec-consumer.js +302 -282
- package/dist/interop/tool-consumer.d.ts +57 -53
- package/dist/interop/tool-consumer.d.ts.map +1 -1
- package/dist/interop/tool-consumer.js +412 -213
- package/dist/interop/types.d.ts +173 -171
- package/dist/interop/types.d.ts.map +1 -1
- package/dist/interop/types.js +1 -0
- package/dist/knowledge/index.d.ts +2 -2
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/knowledge/index.js +66 -2
- package/dist/knowledge/injector.d.ts +16 -20
- package/dist/knowledge/injector.d.ts.map +1 -1
- package/dist/knowledge/injector.js +56 -47
- package/dist/memory/in-memory.d.ts +15 -19
- package/dist/memory/in-memory.d.ts.map +1 -1
- package/dist/memory/in-memory.js +152 -46
- package/dist/memory/index.d.ts +3 -3
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +155 -3
- package/dist/memory/manager.d.ts +32 -36
- package/dist/memory/manager.d.ts.map +1 -1
- package/dist/memory/manager.js +96 -70
- package/dist/memory/memory.test.d.ts +2 -0
- package/dist/memory/memory.test.d.ts.map +1 -0
- package/dist/node/agent/agent-factory.js +661 -0
- package/dist/node/agent/contract-spec-agent.js +607 -0
- package/dist/node/agent/index.js +2103 -0
- package/dist/node/agent/json-runner.js +684 -0
- package/dist/node/agent/unified-agent.js +2019 -0
- package/dist/node/approval/index.js +129 -0
- package/dist/node/approval/workflow.js +129 -0
- package/dist/node/exporters/claude-agent-exporter.js +265 -0
- package/dist/node/exporters/index.js +738 -0
- package/dist/node/exporters/opencode-exporter.js +516 -0
- package/dist/node/exporters/types.js +0 -0
- package/dist/node/index.js +3337 -0
- package/dist/node/interop/index.js +710 -0
- package/dist/node/interop/spec-consumer.js +307 -0
- package/dist/node/interop/tool-consumer.js +419 -0
- package/dist/node/interop/types.js +0 -0
- package/dist/node/knowledge/index.js +67 -0
- package/dist/node/knowledge/injector.js +67 -0
- package/dist/node/memory/in-memory.js +154 -0
- package/dist/node/memory/index.js +156 -0
- package/dist/node/memory/manager.js +105 -0
- package/dist/node/providers/claude-agent-sdk/adapter.js +624 -0
- package/dist/node/providers/claude-agent-sdk/index.js +673 -0
- package/dist/node/providers/claude-agent-sdk/session-bridge.js +149 -0
- package/dist/node/providers/claude-agent-sdk/tool-bridge.js +118 -0
- package/dist/node/providers/index.js +1261 -0
- package/dist/node/providers/opencode-sdk/adapter.js +669 -0
- package/dist/node/providers/opencode-sdk/agent-bridge.js +299 -0
- package/dist/node/providers/opencode-sdk/index.js +703 -0
- package/dist/node/providers/opencode-sdk/tool-bridge.js +141 -0
- package/dist/node/providers/registry.js +89 -0
- package/dist/node/providers/types.js +56 -0
- package/dist/node/schema/index.js +195 -0
- package/dist/node/schema/json-schema-to-zod.js +152 -0
- package/dist/node/schema/schema-output.js +190 -0
- package/dist/node/session/index.js +90 -0
- package/dist/node/session/store.js +90 -0
- package/dist/node/spec/index.js +85 -0
- package/dist/node/spec/registry.js +56 -0
- package/dist/node/spec/spec.js +44 -0
- package/dist/node/telemetry/adapter.js +85 -0
- package/dist/node/telemetry/index.js +86 -0
- package/dist/node/tools/index.js +345 -0
- package/dist/node/tools/knowledge-tool.js +74 -0
- package/dist/node/tools/mcp-client.js +47 -0
- package/dist/node/tools/mcp-server.js +205 -0
- package/dist/node/tools/tool-adapter.js +197 -0
- package/dist/node/types.js +0 -0
- package/dist/providers/claude-agent-sdk/adapter.d.ts +60 -52
- package/dist/providers/claude-agent-sdk/adapter.d.ts.map +1 -1
- package/dist/providers/claude-agent-sdk/adapter.js +622 -304
- package/dist/providers/claude-agent-sdk/index.d.ts +22 -4
- package/dist/providers/claude-agent-sdk/index.d.ts.map +1 -0
- package/dist/providers/claude-agent-sdk/index.js +672 -4
- package/dist/providers/claude-agent-sdk/session-bridge.d.ts +43 -40
- package/dist/providers/claude-agent-sdk/session-bridge.d.ts.map +1 -1
- package/dist/providers/claude-agent-sdk/session-bridge.js +121 -130
- package/dist/providers/claude-agent-sdk/tool-bridge.d.ts +63 -60
- package/dist/providers/claude-agent-sdk/tool-bridge.d.ts.map +1 -1
- package/dist/providers/claude-agent-sdk/tool-bridge.js +104 -108
- package/dist/providers/index.d.ts +28 -7
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +1261 -8
- package/dist/providers/opencode-sdk/adapter.d.ts +56 -48
- package/dist/providers/opencode-sdk/adapter.d.ts.map +1 -1
- package/dist/providers/opencode-sdk/adapter.js +667 -274
- package/dist/providers/opencode-sdk/agent-bridge.d.ts +62 -57
- package/dist/providers/opencode-sdk/agent-bridge.d.ts.map +1 -1
- package/dist/providers/opencode-sdk/agent-bridge.js +289 -155
- package/dist/providers/opencode-sdk/index.d.ts +22 -4
- package/dist/providers/opencode-sdk/index.d.ts.map +1 -0
- package/dist/providers/opencode-sdk/index.js +702 -4
- package/dist/providers/opencode-sdk/tool-bridge.d.ts +41 -42
- package/dist/providers/opencode-sdk/tool-bridge.d.ts.map +1 -1
- package/dist/providers/opencode-sdk/tool-bridge.js +121 -107
- package/dist/providers/registry.d.ts +10 -11
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +86 -49
- package/dist/providers/types.d.ts +169 -166
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +54 -42
- package/dist/schema/index.d.ts +3 -3
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +194 -3
- package/dist/schema/json-schema-to-zod.d.ts +23 -26
- package/dist/schema/json-schema-to-zod.d.ts.map +1 -1
- package/dist/schema/json-schema-to-zod.js +138 -110
- package/dist/schema/schema-output.d.ts +29 -32
- package/dist/schema/schema-output.d.ts.map +1 -1
- package/dist/schema/schema-output.js +178 -53
- package/dist/session/index.d.ts +2 -2
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +89 -2
- package/dist/session/store.d.ts +51 -55
- package/dist/session/store.d.ts.map +1 -1
- package/dist/session/store.js +85 -74
- package/dist/spec/index.d.ts +3 -3
- package/dist/spec/index.d.ts.map +1 -0
- package/dist/spec/index.js +84 -3
- package/dist/spec/registry.d.ts +32 -36
- package/dist/spec/registry.d.ts.map +1 -1
- package/dist/spec/registry.js +51 -60
- package/dist/spec/spec.d.ts +80 -84
- package/dist/spec/spec.d.ts.map +1 -1
- package/dist/spec/spec.js +40 -26
- package/dist/telemetry/adapter.d.ts +33 -37
- package/dist/telemetry/adapter.d.ts.map +1 -1
- package/dist/telemetry/adapter.js +78 -96
- package/dist/telemetry/index.d.ts +2 -2
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +85 -2
- package/dist/tools/index.d.ts +5 -5
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +344 -5
- package/dist/tools/knowledge-tool.d.ts +4 -8
- package/dist/tools/knowledge-tool.d.ts.map +1 -1
- package/dist/tools/knowledge-tool.js +68 -48
- package/dist/tools/mcp-client.d.ts +17 -21
- package/dist/tools/mcp-client.d.ts.map +1 -1
- package/dist/tools/mcp-client.js +42 -53
- package/dist/tools/mcp-server.d.ts +14 -18
- package/dist/tools/mcp-server.d.ts.map +1 -1
- package/dist/tools/mcp-server.js +200 -64
- package/dist/tools/tool-adapter.d.ts +7 -11
- package/dist/tools/tool-adapter.d.ts.map +1 -1
- package/dist/tools/tool-adapter.js +187 -70
- package/dist/tools/tools.test.d.ts +2 -0
- package/dist/tools/tools.test.d.ts.map +1 -0
- package/dist/types.d.ts +108 -111
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/package.json +448 -90
- package/dist/_virtual/_rolldown/runtime.js +0 -8
- package/dist/agent/agent-factory.js.map +0 -1
- package/dist/agent/contract-spec-agent.js.map +0 -1
- package/dist/agent/json-runner.js.map +0 -1
- package/dist/agent/unified-agent.js.map +0 -1
- package/dist/approval/workflow.js.map +0 -1
- package/dist/exporters/claude-agent-exporter.js.map +0 -1
- package/dist/exporters/opencode-exporter.js.map +0 -1
- package/dist/interop/spec-consumer.js.map +0 -1
- package/dist/interop/tool-consumer.js.map +0 -1
- package/dist/knowledge/injector.js.map +0 -1
- package/dist/memory/in-memory.js.map +0 -1
- package/dist/memory/manager.js.map +0 -1
- package/dist/providers/claude-agent-sdk/adapter.js.map +0 -1
- package/dist/providers/claude-agent-sdk/session-bridge.js.map +0 -1
- package/dist/providers/claude-agent-sdk/tool-bridge.js.map +0 -1
- package/dist/providers/opencode-sdk/adapter.js.map +0 -1
- package/dist/providers/opencode-sdk/agent-bridge.js.map +0 -1
- package/dist/providers/opencode-sdk/tool-bridge.js.map +0 -1
- package/dist/providers/registry.js.map +0 -1
- package/dist/providers/types.js.map +0 -1
- package/dist/schema/json-schema-to-zod.js.map +0 -1
- package/dist/schema/schema-output.js.map +0 -1
- package/dist/session/store.js.map +0 -1
- package/dist/spec/registry.js.map +0 -1
- package/dist/spec/spec.js.map +0 -1
- package/dist/telemetry/adapter.js.map +0 -1
- package/dist/tools/knowledge-tool.js.map +0 -1
- package/dist/tools/mcp-client.js.map +0 -1
- package/dist/tools/mcp-server.js.map +0 -1
- package/dist/tools/tool-adapter.js.map +0 -1
|
@@ -1,38 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
// @bun
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __export = (target, all) => {
|
|
4
|
+
for (var name in all)
|
|
5
|
+
__defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
set: (newValue) => all[name] = () => newValue
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
13
|
+
var __require = import.meta.require;
|
|
14
|
+
|
|
15
|
+
// src/knowledge/injector.ts
|
|
14
16
|
async function injectStaticKnowledge(instructions, knowledgeRefs, retriever) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
17
|
+
if (!retriever)
|
|
18
|
+
return instructions;
|
|
19
|
+
const requiredRefs = knowledgeRefs.filter((ref) => ref.required);
|
|
20
|
+
if (requiredRefs.length === 0)
|
|
21
|
+
return instructions;
|
|
22
|
+
const blocks = [];
|
|
23
|
+
for (const ref of requiredRefs) {
|
|
24
|
+
if (!retriever.supportsSpace(ref.key)) {
|
|
25
|
+
console.warn(`Required knowledge space "${ref.key}" is not available`);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const content = await retriever.getStatic(ref.key);
|
|
30
|
+
if (content) {
|
|
31
|
+
const header = ref.instructions ? `## ${ref.key}
|
|
32
|
+
${ref.instructions}` : `## ${ref.key}`;
|
|
33
|
+
blocks.push(`${header}
|
|
34
|
+
|
|
35
|
+
${content}`);
|
|
36
|
+
}
|
|
37
|
+
} catch (error) {
|
|
38
|
+
console.warn(`Failed to load required knowledge "${ref.key}":`, error);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (blocks.length === 0)
|
|
42
|
+
return instructions;
|
|
43
|
+
return `${instructions}
|
|
36
44
|
|
|
37
45
|
---
|
|
38
46
|
|
|
@@ -40,19 +48,20 @@ async function injectStaticKnowledge(instructions, knowledgeRefs, retriever) {
|
|
|
40
48
|
|
|
41
49
|
The following information is provided for your reference. Use it to inform your responses.
|
|
42
50
|
|
|
43
|
-
${blocks.join(
|
|
51
|
+
${blocks.join(`
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
`)}`;
|
|
44
56
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Create a knowledge injector instance for reuse.
|
|
47
|
-
*/
|
|
48
57
|
function createKnowledgeInjector(retriever) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
58
|
+
return {
|
|
59
|
+
inject: (instructions, knowledgeRefs) => injectStaticKnowledge(instructions, knowledgeRefs, retriever),
|
|
60
|
+
hasSpace: (spaceKey) => retriever?.supportsSpace(spaceKey) ?? false,
|
|
61
|
+
listSpaces: () => retriever?.listSpaces() ?? []
|
|
62
|
+
};
|
|
54
63
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
64
|
+
export {
|
|
65
|
+
injectStaticKnowledge,
|
|
66
|
+
createKnowledgeInjector
|
|
67
|
+
};
|
|
@@ -1,22 +1,18 @@
|
|
|
1
|
-
import { AgentSessionState } from
|
|
2
|
-
import { AgentMemorySnapshot, AgentSessionMemory
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
ttlMinutes?: number;
|
|
7
|
-
maxEntries?: number;
|
|
1
|
+
import type { AgentSessionState } from '../types';
|
|
2
|
+
import { BaseAgentMemoryManager, type AgentMemorySnapshot, type AgentSessionMemory } from './manager';
|
|
3
|
+
export interface InMemoryAgentMemoryOptions {
|
|
4
|
+
ttlMinutes?: number;
|
|
5
|
+
maxEntries?: number;
|
|
8
6
|
}
|
|
9
|
-
declare class InMemoryAgentMemory extends BaseAgentMemoryManager {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
7
|
+
export declare class InMemoryAgentMemory extends BaseAgentMemoryManager {
|
|
8
|
+
private readonly ttlMs;
|
|
9
|
+
private readonly maxEntries;
|
|
10
|
+
private readonly store;
|
|
11
|
+
constructor(options?: InMemoryAgentMemoryOptions);
|
|
12
|
+
load(sessionId: string): Promise<AgentSessionMemory | null>;
|
|
13
|
+
save(snapshot: AgentSessionMemory): Promise<void>;
|
|
14
|
+
summarize(session: AgentSessionState): Promise<AgentMemorySnapshot>;
|
|
15
|
+
private trim;
|
|
16
|
+
private evictExpired;
|
|
19
17
|
}
|
|
20
|
-
//#endregion
|
|
21
|
-
export { InMemoryAgentMemory, InMemoryAgentMemoryOptions };
|
|
22
18
|
//# sourceMappingURL=in-memory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.d.ts","
|
|
1
|
+
{"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../src/memory/in-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EACL,sBAAsB,EAEtB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACxB,MAAM,WAAW,CAAC;AAOnB,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,mBAAoB,SAAQ,sBAAsB;IAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;gBAE9C,OAAO,CAAC,EAAE,0BAA0B;IAM1C,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAS3D,IAAI,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjD,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAazE,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,YAAY;CAQrB"}
|
package/dist/memory/in-memory.js
CHANGED
|
@@ -1,48 +1,154 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
this.maxEntries = options?.maxEntries ?? 250;
|
|
12
|
-
}
|
|
13
|
-
async load(sessionId) {
|
|
14
|
-
this.evictExpired();
|
|
15
|
-
const stored = this.store.get(sessionId);
|
|
16
|
-
if (!stored) return null;
|
|
17
|
-
stored.data.session.updatedAt = /* @__PURE__ */ new Date();
|
|
18
|
-
stored.expiresAt = Date.now() + this.ttlMs;
|
|
19
|
-
return stored.data;
|
|
20
|
-
}
|
|
21
|
-
async save(snapshot) {
|
|
22
|
-
this.trim(snapshot.memory.entries);
|
|
23
|
-
this.store.set(snapshot.session.sessionId, {
|
|
24
|
-
data: snapshot,
|
|
25
|
-
expiresAt: Date.now() + this.ttlMs
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
async summarize(session) {
|
|
29
|
-
const current = await this.load(session.sessionId) ?? this.bootstrapMemory(session);
|
|
30
|
-
const content = current.memory.entries.slice(-10).map((entry) => `- ${entry.type}: ${entry.content}`).join("\n");
|
|
31
|
-
current.memory.summary = content;
|
|
32
|
-
current.memory.lastSummarizedAt = /* @__PURE__ */ new Date();
|
|
33
|
-
await this.save(current);
|
|
34
|
-
return current.memory;
|
|
35
|
-
}
|
|
36
|
-
trim(entries) {
|
|
37
|
-
if (entries.length <= this.maxEntries) return;
|
|
38
|
-
entries.splice(0, entries.length - this.maxEntries);
|
|
39
|
-
}
|
|
40
|
-
evictExpired() {
|
|
41
|
-
const now = Date.now();
|
|
42
|
-
for (const [sessionId, stored] of this.store.entries()) if (stored.expiresAt <= now) this.store.delete(sessionId);
|
|
43
|
-
}
|
|
1
|
+
// @bun
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __export = (target, all) => {
|
|
4
|
+
for (var name in all)
|
|
5
|
+
__defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
set: (newValue) => all[name] = () => newValue
|
|
10
|
+
});
|
|
44
11
|
};
|
|
12
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
13
|
+
var __require = import.meta.require;
|
|
14
|
+
|
|
15
|
+
// src/memory/manager.ts
|
|
16
|
+
import { randomUUID } from "crypto";
|
|
17
|
+
function extractMessageContent(message) {
|
|
18
|
+
const content = message.content;
|
|
19
|
+
if (typeof content === "string") {
|
|
20
|
+
return content;
|
|
21
|
+
}
|
|
22
|
+
if (Array.isArray(content)) {
|
|
23
|
+
return content.map((part) => {
|
|
24
|
+
if (typeof part === "string")
|
|
25
|
+
return part;
|
|
26
|
+
if ("text" in part && typeof part.text === "string")
|
|
27
|
+
return part.text;
|
|
28
|
+
return "";
|
|
29
|
+
}).filter(Boolean).join("");
|
|
30
|
+
}
|
|
31
|
+
return "";
|
|
32
|
+
}
|
|
33
|
+
function extractAgentMessageContent(message) {
|
|
34
|
+
const content = message.content;
|
|
35
|
+
if (typeof content === "string") {
|
|
36
|
+
return content;
|
|
37
|
+
}
|
|
38
|
+
if (Array.isArray(content)) {
|
|
39
|
+
return content.map((part) => {
|
|
40
|
+
if (typeof part === "string")
|
|
41
|
+
return part;
|
|
42
|
+
if ("text" in part && typeof part.text === "string")
|
|
43
|
+
return part.text;
|
|
44
|
+
return "";
|
|
45
|
+
}).filter(Boolean).join("");
|
|
46
|
+
}
|
|
47
|
+
return "";
|
|
48
|
+
}
|
|
49
|
+
function roleToEntryType(role) {
|
|
50
|
+
switch (role) {
|
|
51
|
+
case "assistant":
|
|
52
|
+
return "assistant";
|
|
53
|
+
case "system":
|
|
54
|
+
return "system";
|
|
55
|
+
case "tool":
|
|
56
|
+
return "tool";
|
|
57
|
+
case "user":
|
|
58
|
+
default:
|
|
59
|
+
return "user";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
45
62
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
63
|
+
class BaseAgentMemoryManager {
|
|
64
|
+
async append(session, entry) {
|
|
65
|
+
const current = await this.load(session.sessionId) ?? this.bootstrapMemory(session);
|
|
66
|
+
const finalEntry = {
|
|
67
|
+
id: randomUUID(),
|
|
68
|
+
createdAt: entry.createdAt ?? new Date,
|
|
69
|
+
...entry
|
|
70
|
+
};
|
|
71
|
+
current.memory.entries.push(finalEntry);
|
|
72
|
+
await this.save(current);
|
|
73
|
+
return current;
|
|
74
|
+
}
|
|
75
|
+
async summarize(_session) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
async prune(_session) {}
|
|
79
|
+
bootstrapMemory(session) {
|
|
80
|
+
return {
|
|
81
|
+
session,
|
|
82
|
+
memory: {
|
|
83
|
+
entries: session.messages.map((message) => ({
|
|
84
|
+
id: randomUUID(),
|
|
85
|
+
createdAt: new Date,
|
|
86
|
+
type: roleToEntryType(message.role),
|
|
87
|
+
content: extractMessageContent(message)
|
|
88
|
+
}))
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function trackMessageInMemory(manager, session, message) {
|
|
94
|
+
if (!manager)
|
|
95
|
+
return;
|
|
96
|
+
manager.append(session, {
|
|
97
|
+
type: message.role,
|
|
98
|
+
content: extractAgentMessageContent(message),
|
|
99
|
+
metadata: message.metadata
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// src/memory/in-memory.ts
|
|
104
|
+
class InMemoryAgentMemory extends BaseAgentMemoryManager {
|
|
105
|
+
ttlMs;
|
|
106
|
+
maxEntries;
|
|
107
|
+
store = new Map;
|
|
108
|
+
constructor(options) {
|
|
109
|
+
super();
|
|
110
|
+
this.ttlMs = (options?.ttlMinutes ?? 60) * 60 * 1000;
|
|
111
|
+
this.maxEntries = options?.maxEntries ?? 250;
|
|
112
|
+
}
|
|
113
|
+
async load(sessionId) {
|
|
114
|
+
this.evictExpired();
|
|
115
|
+
const stored = this.store.get(sessionId);
|
|
116
|
+
if (!stored)
|
|
117
|
+
return null;
|
|
118
|
+
stored.data.session.updatedAt = new Date;
|
|
119
|
+
stored.expiresAt = Date.now() + this.ttlMs;
|
|
120
|
+
return stored.data;
|
|
121
|
+
}
|
|
122
|
+
async save(snapshot) {
|
|
123
|
+
this.trim(snapshot.memory.entries);
|
|
124
|
+
this.store.set(snapshot.session.sessionId, {
|
|
125
|
+
data: snapshot,
|
|
126
|
+
expiresAt: Date.now() + this.ttlMs
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
async summarize(session) {
|
|
130
|
+
const current = await this.load(session.sessionId) ?? this.bootstrapMemory(session);
|
|
131
|
+
const content = current.memory.entries.slice(-10).map((entry) => `- ${entry.type}: ${entry.content}`).join(`
|
|
132
|
+
`);
|
|
133
|
+
current.memory.summary = content;
|
|
134
|
+
current.memory.lastSummarizedAt = new Date;
|
|
135
|
+
await this.save(current);
|
|
136
|
+
return current.memory;
|
|
137
|
+
}
|
|
138
|
+
trim(entries) {
|
|
139
|
+
if (entries.length <= this.maxEntries)
|
|
140
|
+
return;
|
|
141
|
+
entries.splice(0, entries.length - this.maxEntries);
|
|
142
|
+
}
|
|
143
|
+
evictExpired() {
|
|
144
|
+
const now = Date.now();
|
|
145
|
+
for (const [sessionId, stored] of this.store.entries()) {
|
|
146
|
+
if (stored.expiresAt <= now) {
|
|
147
|
+
this.store.delete(sessionId);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
export {
|
|
153
|
+
InMemoryAgentMemory
|
|
154
|
+
};
|
package/dist/memory/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export * from './manager';
|
|
2
|
+
export * from './in-memory';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC"}
|
package/dist/memory/index.js
CHANGED
|
@@ -1,4 +1,156 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
// @bun
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __export = (target, all) => {
|
|
4
|
+
for (var name in all)
|
|
5
|
+
__defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
set: (newValue) => all[name] = () => newValue
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
13
|
+
var __require = import.meta.require;
|
|
3
14
|
|
|
4
|
-
|
|
15
|
+
// src/memory/manager.ts
|
|
16
|
+
import { randomUUID } from "crypto";
|
|
17
|
+
function extractMessageContent(message) {
|
|
18
|
+
const content = message.content;
|
|
19
|
+
if (typeof content === "string") {
|
|
20
|
+
return content;
|
|
21
|
+
}
|
|
22
|
+
if (Array.isArray(content)) {
|
|
23
|
+
return content.map((part) => {
|
|
24
|
+
if (typeof part === "string")
|
|
25
|
+
return part;
|
|
26
|
+
if ("text" in part && typeof part.text === "string")
|
|
27
|
+
return part.text;
|
|
28
|
+
return "";
|
|
29
|
+
}).filter(Boolean).join("");
|
|
30
|
+
}
|
|
31
|
+
return "";
|
|
32
|
+
}
|
|
33
|
+
function extractAgentMessageContent(message) {
|
|
34
|
+
const content = message.content;
|
|
35
|
+
if (typeof content === "string") {
|
|
36
|
+
return content;
|
|
37
|
+
}
|
|
38
|
+
if (Array.isArray(content)) {
|
|
39
|
+
return content.map((part) => {
|
|
40
|
+
if (typeof part === "string")
|
|
41
|
+
return part;
|
|
42
|
+
if ("text" in part && typeof part.text === "string")
|
|
43
|
+
return part.text;
|
|
44
|
+
return "";
|
|
45
|
+
}).filter(Boolean).join("");
|
|
46
|
+
}
|
|
47
|
+
return "";
|
|
48
|
+
}
|
|
49
|
+
function roleToEntryType(role) {
|
|
50
|
+
switch (role) {
|
|
51
|
+
case "assistant":
|
|
52
|
+
return "assistant";
|
|
53
|
+
case "system":
|
|
54
|
+
return "system";
|
|
55
|
+
case "tool":
|
|
56
|
+
return "tool";
|
|
57
|
+
case "user":
|
|
58
|
+
default:
|
|
59
|
+
return "user";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
class BaseAgentMemoryManager {
|
|
64
|
+
async append(session, entry) {
|
|
65
|
+
const current = await this.load(session.sessionId) ?? this.bootstrapMemory(session);
|
|
66
|
+
const finalEntry = {
|
|
67
|
+
id: randomUUID(),
|
|
68
|
+
createdAt: entry.createdAt ?? new Date,
|
|
69
|
+
...entry
|
|
70
|
+
};
|
|
71
|
+
current.memory.entries.push(finalEntry);
|
|
72
|
+
await this.save(current);
|
|
73
|
+
return current;
|
|
74
|
+
}
|
|
75
|
+
async summarize(_session) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
async prune(_session) {}
|
|
79
|
+
bootstrapMemory(session) {
|
|
80
|
+
return {
|
|
81
|
+
session,
|
|
82
|
+
memory: {
|
|
83
|
+
entries: session.messages.map((message) => ({
|
|
84
|
+
id: randomUUID(),
|
|
85
|
+
createdAt: new Date,
|
|
86
|
+
type: roleToEntryType(message.role),
|
|
87
|
+
content: extractMessageContent(message)
|
|
88
|
+
}))
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function trackMessageInMemory(manager, session, message) {
|
|
94
|
+
if (!manager)
|
|
95
|
+
return;
|
|
96
|
+
manager.append(session, {
|
|
97
|
+
type: message.role,
|
|
98
|
+
content: extractAgentMessageContent(message),
|
|
99
|
+
metadata: message.metadata
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// src/memory/in-memory.ts
|
|
104
|
+
class InMemoryAgentMemory extends BaseAgentMemoryManager {
|
|
105
|
+
ttlMs;
|
|
106
|
+
maxEntries;
|
|
107
|
+
store = new Map;
|
|
108
|
+
constructor(options) {
|
|
109
|
+
super();
|
|
110
|
+
this.ttlMs = (options?.ttlMinutes ?? 60) * 60 * 1000;
|
|
111
|
+
this.maxEntries = options?.maxEntries ?? 250;
|
|
112
|
+
}
|
|
113
|
+
async load(sessionId) {
|
|
114
|
+
this.evictExpired();
|
|
115
|
+
const stored = this.store.get(sessionId);
|
|
116
|
+
if (!stored)
|
|
117
|
+
return null;
|
|
118
|
+
stored.data.session.updatedAt = new Date;
|
|
119
|
+
stored.expiresAt = Date.now() + this.ttlMs;
|
|
120
|
+
return stored.data;
|
|
121
|
+
}
|
|
122
|
+
async save(snapshot) {
|
|
123
|
+
this.trim(snapshot.memory.entries);
|
|
124
|
+
this.store.set(snapshot.session.sessionId, {
|
|
125
|
+
data: snapshot,
|
|
126
|
+
expiresAt: Date.now() + this.ttlMs
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
async summarize(session) {
|
|
130
|
+
const current = await this.load(session.sessionId) ?? this.bootstrapMemory(session);
|
|
131
|
+
const content = current.memory.entries.slice(-10).map((entry) => `- ${entry.type}: ${entry.content}`).join(`
|
|
132
|
+
`);
|
|
133
|
+
current.memory.summary = content;
|
|
134
|
+
current.memory.lastSummarizedAt = new Date;
|
|
135
|
+
await this.save(current);
|
|
136
|
+
return current.memory;
|
|
137
|
+
}
|
|
138
|
+
trim(entries) {
|
|
139
|
+
if (entries.length <= this.maxEntries)
|
|
140
|
+
return;
|
|
141
|
+
entries.splice(0, entries.length - this.maxEntries);
|
|
142
|
+
}
|
|
143
|
+
evictExpired() {
|
|
144
|
+
const now = Date.now();
|
|
145
|
+
for (const [sessionId, stored] of this.store.entries()) {
|
|
146
|
+
if (stored.expiresAt <= now) {
|
|
147
|
+
this.store.delete(sessionId);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
export {
|
|
153
|
+
trackMessageInMemory,
|
|
154
|
+
InMemoryAgentMemory,
|
|
155
|
+
BaseAgentMemoryManager
|
|
156
|
+
};
|
package/dist/memory/manager.d.ts
CHANGED
|
@@ -1,42 +1,38 @@
|
|
|
1
|
-
import { AgentMessage, AgentSessionState } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
createdAt: Date;
|
|
9
|
-
metadata?: Record<string, string>;
|
|
1
|
+
import type { AgentMessage, AgentSessionState } from '../types';
|
|
2
|
+
export interface AgentMemoryEntry {
|
|
3
|
+
id: string;
|
|
4
|
+
type: 'user' | 'assistant' | 'tool' | 'system';
|
|
5
|
+
content: string;
|
|
6
|
+
createdAt: Date;
|
|
7
|
+
metadata?: Record<string, string>;
|
|
10
8
|
}
|
|
11
|
-
interface AgentMemorySnapshot {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
export interface AgentMemorySnapshot {
|
|
10
|
+
entries: AgentMemoryEntry[];
|
|
11
|
+
summary?: string;
|
|
12
|
+
lastSummarizedAt?: Date;
|
|
15
13
|
}
|
|
16
|
-
interface AgentSessionMemory {
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
export interface AgentSessionMemory {
|
|
15
|
+
session: AgentSessionState;
|
|
16
|
+
memory: AgentMemorySnapshot;
|
|
19
17
|
}
|
|
20
|
-
interface AgentMemoryManager {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
export interface AgentMemoryManager {
|
|
19
|
+
load(sessionId: string): Promise<AgentSessionMemory | null>;
|
|
20
|
+
save(snapshot: AgentSessionMemory): Promise<void>;
|
|
21
|
+
append(session: AgentSessionState, entry: Omit<AgentMemoryEntry, 'id' | 'createdAt'> & {
|
|
22
|
+
createdAt?: Date;
|
|
23
|
+
}): Promise<AgentSessionMemory>;
|
|
24
|
+
summarize(session: AgentSessionState): Promise<AgentMemorySnapshot | undefined>;
|
|
25
|
+
prune(session: AgentSessionState): Promise<void>;
|
|
28
26
|
}
|
|
29
|
-
declare abstract class BaseAgentMemoryManager implements AgentMemoryManager {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
27
|
+
export declare abstract class BaseAgentMemoryManager implements AgentMemoryManager {
|
|
28
|
+
abstract load(sessionId: string): Promise<AgentSessionMemory | null>;
|
|
29
|
+
abstract save(snapshot: AgentSessionMemory): Promise<void>;
|
|
30
|
+
append(session: AgentSessionState, entry: Omit<AgentMemoryEntry, 'id' | 'createdAt'> & {
|
|
31
|
+
createdAt?: Date;
|
|
32
|
+
}): Promise<AgentSessionMemory>;
|
|
33
|
+
summarize(_session: AgentSessionState): Promise<AgentMemorySnapshot | undefined>;
|
|
34
|
+
prune(_session: AgentSessionState): Promise<void>;
|
|
35
|
+
protected bootstrapMemory(session: AgentSessionState): AgentSessionMemory;
|
|
38
36
|
}
|
|
39
|
-
declare function trackMessageInMemory(manager: AgentMemoryManager | undefined, session: AgentSessionState, message: AgentMessage): void;
|
|
40
|
-
//#endregion
|
|
41
|
-
export { AgentMemoryEntry, AgentMemoryManager, AgentMemorySnapshot, AgentSessionMemory, BaseAgentMemoryManager, trackMessageInMemory };
|
|
37
|
+
export declare function trackMessageInMemory(manager: AgentMemoryManager | undefined, session: AgentSessionState, message: AgentMessage): void;
|
|
42
38
|
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/memory/manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAC5D,IAAI,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,CACJ,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG;QAAE,SAAS,CAAC,EAAE,IAAI,CAAA;KAAE,GACvE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC/B,SAAS,CACP,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;IAC5C,KAAK,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAwED,8BAAsB,sBAAuB,YAAW,kBAAkB;IACxE,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACpE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAEpD,MAAM,CACV,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG;QAAE,SAAS,CAAC,EAAE,IAAI,CAAA;KAAE,GACvE,OAAO,CAAC,kBAAkB,CAAC;IAaxB,SAAS,CACb,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAIrC,KAAK,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,kBAAkB;CAa1E;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,kBAAkB,GAAG,SAAS,EACvC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,YAAY,QAQtB"}
|