@mce-bt/microagents-memory 0.15.0 → 0.17.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/artifact-store.d.ts +65 -0
- package/dist/artifact-store.d.ts.map +1 -0
- package/dist/artifact-store.js +145 -0
- package/dist/artifact-store.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/redis-state.d.ts +19 -1
- package/dist/redis-state.d.ts.map +1 -1
- package/dist/redis-state.js +39 -0
- package/dist/redis-state.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { Artifact, ArtifactStore } from '@mce-bt/microagents-core';
|
|
2
|
+
/**
|
|
3
|
+
* Postgres-backed artifact store — the shared workbench of one delegated
|
|
4
|
+
* investigation. Artifacts are named work products (tables, evidence bundles,
|
|
5
|
+
* drafts) scoped to a ROOT session: subtasks write their bulk output here and
|
|
6
|
+
* return only a summary, so evidence rides by reference instead of through
|
|
7
|
+
* the parent's context window.
|
|
8
|
+
*
|
|
9
|
+
* Same conventions as the other stores here: lazy CREATE TABLE at start, a
|
|
10
|
+
* namespace column as the tenant isolation boundary, unqualified table names
|
|
11
|
+
* (the host's search_path decides the schema).
|
|
12
|
+
*
|
|
13
|
+
* Deliberately bounded: artifacts are scaffolding for one job, not memory.
|
|
14
|
+
* Size and count caps below; aged rows are swept opportunistically on write.
|
|
15
|
+
* Anything worth keeping graduates explicitly — to a document for the user
|
|
16
|
+
* or a fact in the knowledge graph — never by lingering here.
|
|
17
|
+
*/
|
|
18
|
+
export interface PostgresArtifactStoreConfig {
|
|
19
|
+
connectionString: string;
|
|
20
|
+
namespace?: string;
|
|
21
|
+
/** Days an artifact outlives its creation before the sweep removes it. */
|
|
22
|
+
ttlDays?: number;
|
|
23
|
+
}
|
|
24
|
+
/** One artifact may hold ~a quarter MB — a large table, not a dataset dump. */
|
|
25
|
+
export declare const MAX_ARTIFACT_BYTES = 262144;
|
|
26
|
+
/** Per-investigation ceiling; past it the writer must consolidate or delete. */
|
|
27
|
+
export declare const MAX_ARTIFACTS_PER_SCOPE = 50;
|
|
28
|
+
export declare class PostgresArtifactStore implements ArtifactStore {
|
|
29
|
+
private readonly config;
|
|
30
|
+
private pool;
|
|
31
|
+
private readonly namespace;
|
|
32
|
+
private readonly ttlDays;
|
|
33
|
+
private agentId;
|
|
34
|
+
constructor(config: PostgresArtifactStoreConfig);
|
|
35
|
+
start(agentId: string): Promise<void>;
|
|
36
|
+
stop(): Promise<void>;
|
|
37
|
+
private db;
|
|
38
|
+
private ensureSchema;
|
|
39
|
+
/**
|
|
40
|
+
* Write (or overwrite — same name in the same scope upserts) one artifact.
|
|
41
|
+
* Caps are enforced here, not at the tool layer, so no caller can bypass
|
|
42
|
+
* them. The TTL sweep piggybacks on writes: no timers to manage, and a
|
|
43
|
+
* store that is being written is a store that is alive enough to clean.
|
|
44
|
+
*/
|
|
45
|
+
put(input: {
|
|
46
|
+
scope: string;
|
|
47
|
+
name: string;
|
|
48
|
+
summary: string;
|
|
49
|
+
content: string;
|
|
50
|
+
contentType?: string;
|
|
51
|
+
createdBySession: string;
|
|
52
|
+
}): Promise<{
|
|
53
|
+
name: string;
|
|
54
|
+
bytes: number;
|
|
55
|
+
}>;
|
|
56
|
+
/** Full artifact incl. content, or null. Scoped — foreign ids read as absent. */
|
|
57
|
+
get(scope: string, name: string): Promise<Artifact | null>;
|
|
58
|
+
/** The scope's index: names + summaries + sizes, never content — cheap to hold in context. */
|
|
59
|
+
list(scope: string): Promise<Array<Omit<Artifact, 'content'>>>;
|
|
60
|
+
/** Drop one investigation's workbench (e.g. when its session is cleaned). */
|
|
61
|
+
deleteScope(scope: string): Promise<number>;
|
|
62
|
+
/** Remove aged artifacts across the whole namespace+agent (TTL enforcement). */
|
|
63
|
+
private sweep;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=artifact-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-store.d.ts","sourceRoot":"","sources":["../src/artifact-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAExE;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,2BAA2B;IAC1C,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,SAAU,CAAC;AAC1C,gFAAgF;AAChF,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAgB1C,qBAAa,qBAAsB,YAAW,aAAa;IAM7C,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,IAAI,CAA0C;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,OAAO,CAAM;gBAEQ,MAAM,EAAE,2BAA2B;IAK1D,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,OAAO,CAAC,EAAE;YAKI,YAAY;IAuB1B;;;;;OAKG;IACG,GAAG,CAAC,KAAK,EAAE;QACf,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAqD5C,iFAAiF;IAC3E,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAShE,8FAA8F;IACxF,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAepE,6EAA6E;IACvE,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQjD,gFAAgF;YAClE,KAAK;CAYpB"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import pkg from 'pg';
|
|
2
|
+
const { Pool } = pkg;
|
|
3
|
+
/** One artifact may hold ~a quarter MB — a large table, not a dataset dump. */
|
|
4
|
+
export const MAX_ARTIFACT_BYTES = 262_144;
|
|
5
|
+
/** Per-investigation ceiling; past it the writer must consolidate or delete. */
|
|
6
|
+
export const MAX_ARTIFACTS_PER_SCOPE = 50;
|
|
7
|
+
function rowToArtifact(r) {
|
|
8
|
+
return {
|
|
9
|
+
name: r.name,
|
|
10
|
+
summary: r.summary,
|
|
11
|
+
content: r.content ?? '',
|
|
12
|
+
contentType: r.content_type,
|
|
13
|
+
bytes: Number(r.bytes),
|
|
14
|
+
scope: r.scope,
|
|
15
|
+
createdBySession: r.created_by_session,
|
|
16
|
+
createdAt: new Date(r.created_at),
|
|
17
|
+
updatedAt: new Date(r.updated_at),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export class PostgresArtifactStore {
|
|
21
|
+
config;
|
|
22
|
+
pool = null;
|
|
23
|
+
namespace;
|
|
24
|
+
ttlDays;
|
|
25
|
+
agentId = '';
|
|
26
|
+
constructor(config) {
|
|
27
|
+
this.config = config;
|
|
28
|
+
this.namespace = config.namespace ?? 'default';
|
|
29
|
+
this.ttlDays = config.ttlDays ?? 7;
|
|
30
|
+
}
|
|
31
|
+
async start(agentId) {
|
|
32
|
+
this.agentId = agentId;
|
|
33
|
+
this.pool = new Pool({ connectionString: this.config.connectionString });
|
|
34
|
+
await this.ensureSchema();
|
|
35
|
+
}
|
|
36
|
+
async stop() {
|
|
37
|
+
if (this.pool) {
|
|
38
|
+
await this.pool.end();
|
|
39
|
+
this.pool = null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
db() {
|
|
43
|
+
if (!this.pool)
|
|
44
|
+
throw new Error('ArtifactStore not started');
|
|
45
|
+
return this.pool;
|
|
46
|
+
}
|
|
47
|
+
async ensureSchema() {
|
|
48
|
+
await this.db().query(`
|
|
49
|
+
CREATE TABLE IF NOT EXISTS agent_artifacts (
|
|
50
|
+
id TEXT PRIMARY KEY,
|
|
51
|
+
agent_id TEXT NOT NULL,
|
|
52
|
+
namespace TEXT NOT NULL DEFAULT 'default',
|
|
53
|
+
scope TEXT NOT NULL,
|
|
54
|
+
name TEXT NOT NULL,
|
|
55
|
+
summary TEXT NOT NULL,
|
|
56
|
+
content TEXT NOT NULL,
|
|
57
|
+
content_type TEXT NOT NULL DEFAULT 'text/plain',
|
|
58
|
+
bytes INT NOT NULL,
|
|
59
|
+
created_by_session TEXT NOT NULL,
|
|
60
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
61
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
62
|
+
);
|
|
63
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_agent_artifacts_name
|
|
64
|
+
ON agent_artifacts (namespace, agent_id, scope, name);
|
|
65
|
+
CREATE INDEX IF NOT EXISTS idx_agent_artifacts_scope
|
|
66
|
+
ON agent_artifacts (namespace, agent_id, scope);
|
|
67
|
+
`);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Write (or overwrite — same name in the same scope upserts) one artifact.
|
|
71
|
+
* Caps are enforced here, not at the tool layer, so no caller can bypass
|
|
72
|
+
* them. The TTL sweep piggybacks on writes: no timers to manage, and a
|
|
73
|
+
* store that is being written is a store that is alive enough to clean.
|
|
74
|
+
*/
|
|
75
|
+
async put(input) {
|
|
76
|
+
const bytes = Buffer.byteLength(input.content, 'utf8');
|
|
77
|
+
if (bytes > MAX_ARTIFACT_BYTES) {
|
|
78
|
+
throw new Error(`artifact "${input.name}" is ${bytes} bytes — the cap is ${MAX_ARTIFACT_BYTES}. Split it, or store only what downstream steps actually need.`);
|
|
79
|
+
}
|
|
80
|
+
await this.sweep();
|
|
81
|
+
const { rows: existing } = await this.db().query(`SELECT COUNT(*)::int AS n FROM agent_artifacts
|
|
82
|
+
WHERE namespace = $1 AND agent_id = $2 AND scope = $3`, [this.namespace, this.agentId, input.scope]);
|
|
83
|
+
const { rows: named } = await this.db().query(`SELECT 1 FROM agent_artifacts
|
|
84
|
+
WHERE namespace = $1 AND agent_id = $2 AND scope = $3 AND name = $4`, [this.namespace, this.agentId, input.scope, input.name]);
|
|
85
|
+
if (named.length === 0 && existing[0]?.n >= MAX_ARTIFACTS_PER_SCOPE) {
|
|
86
|
+
throw new Error(`this investigation already holds ${MAX_ARTIFACTS_PER_SCOPE} artifacts — consolidate before writing more.`);
|
|
87
|
+
}
|
|
88
|
+
await this.db().query(`INSERT INTO agent_artifacts
|
|
89
|
+
(id, agent_id, namespace, scope, name, summary, content, content_type, bytes, created_by_session)
|
|
90
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
|
|
91
|
+
ON CONFLICT (namespace, agent_id, scope, name) DO UPDATE SET
|
|
92
|
+
summary = EXCLUDED.summary,
|
|
93
|
+
content = EXCLUDED.content,
|
|
94
|
+
content_type = EXCLUDED.content_type,
|
|
95
|
+
bytes = EXCLUDED.bytes,
|
|
96
|
+
created_by_session = EXCLUDED.created_by_session,
|
|
97
|
+
updated_at = NOW()`, [
|
|
98
|
+
`art-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
|
|
99
|
+
this.agentId,
|
|
100
|
+
this.namespace,
|
|
101
|
+
input.scope,
|
|
102
|
+
input.name,
|
|
103
|
+
input.summary,
|
|
104
|
+
input.content,
|
|
105
|
+
input.contentType ?? 'text/plain',
|
|
106
|
+
bytes,
|
|
107
|
+
input.createdBySession,
|
|
108
|
+
]);
|
|
109
|
+
return { name: input.name, bytes };
|
|
110
|
+
}
|
|
111
|
+
/** Full artifact incl. content, or null. Scoped — foreign ids read as absent. */
|
|
112
|
+
async get(scope, name) {
|
|
113
|
+
const { rows } = await this.db().query(`SELECT * FROM agent_artifacts
|
|
114
|
+
WHERE namespace = $1 AND agent_id = $2 AND scope = $3 AND name = $4`, [this.namespace, this.agentId, scope, name]);
|
|
115
|
+
return rows[0] ? rowToArtifact(rows[0]) : null;
|
|
116
|
+
}
|
|
117
|
+
/** The scope's index: names + summaries + sizes, never content — cheap to hold in context. */
|
|
118
|
+
async list(scope) {
|
|
119
|
+
const { rows } = await this.db().query(`SELECT id, agent_id, namespace, scope, name, summary, content_type, bytes,
|
|
120
|
+
created_by_session, created_at, updated_at
|
|
121
|
+
FROM agent_artifacts
|
|
122
|
+
WHERE namespace = $1 AND agent_id = $2 AND scope = $3
|
|
123
|
+
ORDER BY updated_at`, [this.namespace, this.agentId, scope]);
|
|
124
|
+
return rows.map((r) => {
|
|
125
|
+
const { content: _content, ...rest } = rowToArtifact(r);
|
|
126
|
+
return rest;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
/** Drop one investigation's workbench (e.g. when its session is cleaned). */
|
|
130
|
+
async deleteScope(scope) {
|
|
131
|
+
const { rowCount } = await this.db().query(`DELETE FROM agent_artifacts WHERE namespace = $1 AND agent_id = $2 AND scope = $3`, [this.namespace, this.agentId, scope]);
|
|
132
|
+
return rowCount ?? 0;
|
|
133
|
+
}
|
|
134
|
+
/** Remove aged artifacts across the whole namespace+agent (TTL enforcement). */
|
|
135
|
+
async sweep() {
|
|
136
|
+
await this.db()
|
|
137
|
+
.query(`DELETE FROM agent_artifacts
|
|
138
|
+
WHERE namespace = $1 AND agent_id = $2
|
|
139
|
+
AND updated_at < NOW() - make_interval(days => $3)`, [this.namespace, this.agentId, this.ttlDays])
|
|
140
|
+
.catch(() => {
|
|
141
|
+
// The sweep is hygiene, never a reason to fail a write.
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=artifact-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-store.js","sourceRoot":"","sources":["../src/artifact-store.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,4 +9,5 @@ export { createMemoryTools, DUPLICATE_NOOP_THRESHOLD, DUPLICATE_HINT_THRESHOLD,
|
|
|
9
9
|
export { SummarizationPipeline, type SummarizationPipelineConfig, type PipelineResult, } from './summarization-pipeline.js';
|
|
10
10
|
export { RedisSessionStore, RedisChannelSessionStore, RedisSchedulerStateStore, IoredisLockClient, createRedisStateStores, type RedisStateConfig, type RedisStateStores, } from './redis-state.js';
|
|
11
11
|
export { PostgresJobStore, type PostgresJobStoreConfig } from './job-store-postgres.js';
|
|
12
|
+
export { PostgresArtifactStore, MAX_ARTIFACT_BYTES, MAX_ARTIFACTS_PER_SCOPE, type PostgresArtifactStoreConfig, } from './artifact-store.js';
|
|
12
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EACL,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,4BAA4B,EAC5B,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,qBAAqB,EACrB,KAAK,2BAA2B,EAChC,KAAK,cAAc,GACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EACL,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,4BAA4B,EAC5B,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,qBAAqB,EACrB,KAAK,2BAA2B,EAChC,KAAK,cAAc,GACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACxF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,2BAA2B,GACjC,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,4 +9,5 @@ export { createMemoryTools, DUPLICATE_NOOP_THRESHOLD, DUPLICATE_HINT_THRESHOLD,
|
|
|
9
9
|
export { SummarizationPipeline, } from './summarization-pipeline.js';
|
|
10
10
|
export { RedisSessionStore, RedisChannelSessionStore, RedisSchedulerStateStore, IoredisLockClient, createRedisStateStores, } from './redis-state.js';
|
|
11
11
|
export { PostgresJobStore } from './job-store-postgres.js';
|
|
12
|
+
export { PostgresArtifactStore, MAX_ARTIFACT_BYTES, MAX_ARTIFACTS_PER_SCOPE, } from './artifact-store.js';
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkB,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAuC,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAsC,MAAM,UAAU,CAAC;AAC9E,OAAO,EACL,aAAa,GAId,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,4BAA4B,EAC5B,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,GAYf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,eAAe,EACf,uBAAuB,GAMxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,qBAAqB,GAGtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,GAGvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAA+B,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkB,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAuC,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAsC,MAAM,UAAU,CAAC;AAC9E,OAAO,EACL,aAAa,GAId,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,4BAA4B,EAC5B,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,GAYf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,eAAe,EACf,uBAAuB,GAMxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,qBAAqB,GAGtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,GAGvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAA+B,MAAM,yBAAyB,CAAC;AACxF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,GAExB,MAAM,qBAAqB,CAAC"}
|
package/dist/redis-state.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Redis } from 'ioredis';
|
|
2
|
-
import type { Session, SessionStore, SchedulerJobState, SchedulerStateStore, ChannelSessionStore } from '@mce-bt/microagents-core';
|
|
2
|
+
import type { Session, SessionStore, SchedulerJobState, SchedulerStateStore, ChannelSessionStore, ChannelAuthStore } from '@mce-bt/microagents-core';
|
|
3
3
|
/**
|
|
4
4
|
* Redis-backed durable state for agents: sessions, channel↔session mappings,
|
|
5
5
|
* scheduler run-state, and the client adapter for core's RedisLockProvider.
|
|
@@ -52,6 +52,23 @@ export declare class RedisChannelSessionStore implements ChannelSessionStore {
|
|
|
52
52
|
reset(channelType: string, externalId: string): Promise<void>;
|
|
53
53
|
listExternalIds(channelType: string): Promise<string[]>;
|
|
54
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Pairing credentials for token-less channel adapters (WhatsApp linked-device
|
|
57
|
+
* state). Deliberately NO TTL: an expired session mapping is a mild UX bump,
|
|
58
|
+
* an expired credential blob silently unlinks the channel and demands a
|
|
59
|
+
* human re-pair — auth lives until logout() or an explicit clear().
|
|
60
|
+
*/
|
|
61
|
+
export declare class RedisChannelAuthStore implements ChannelAuthStore {
|
|
62
|
+
private redis;
|
|
63
|
+
private agentId;
|
|
64
|
+
constructor(redis: Redis, agentId: string);
|
|
65
|
+
private key;
|
|
66
|
+
private indexKey;
|
|
67
|
+
get(channelType: string, name: string): Promise<Buffer | null>;
|
|
68
|
+
set(channelType: string, name: string, value: Buffer): Promise<void>;
|
|
69
|
+
delete(channelType: string, name: string): Promise<void>;
|
|
70
|
+
clear(channelType: string): Promise<void>;
|
|
71
|
+
}
|
|
55
72
|
export declare class RedisSchedulerStateStore implements SchedulerStateStore {
|
|
56
73
|
private redis;
|
|
57
74
|
private agentId;
|
|
@@ -77,6 +94,7 @@ export declare class IoredisLockClient {
|
|
|
77
94
|
export interface RedisStateStores {
|
|
78
95
|
sessionStore: RedisSessionStore;
|
|
79
96
|
channelSessions: RedisChannelSessionStore;
|
|
97
|
+
channelAuth: RedisChannelAuthStore;
|
|
80
98
|
schedulerState: RedisSchedulerStateStore;
|
|
81
99
|
lockClient: IoredisLockClient;
|
|
82
100
|
/** Connect + ping. The agent races this against a boot timeout. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-state.d.ts","sourceRoot":"","sources":["../src/redis-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"redis-state.d.ts","sourceRoot":"","sources":["../src/redis-state.ts"],"names":[],"mappings":"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"}
|
package/dist/redis-state.js
CHANGED
|
@@ -114,6 +114,44 @@ export class RedisChannelSessionStore {
|
|
|
114
114
|
return this.redis.zrevrange(this.indexKey(channelType), 0, -1);
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* Pairing credentials for token-less channel adapters (WhatsApp linked-device
|
|
119
|
+
* state). Deliberately NO TTL: an expired session mapping is a mild UX bump,
|
|
120
|
+
* an expired credential blob silently unlinks the channel and demands a
|
|
121
|
+
* human re-pair — auth lives until logout() or an explicit clear().
|
|
122
|
+
*/
|
|
123
|
+
export class RedisChannelAuthStore {
|
|
124
|
+
redis;
|
|
125
|
+
agentId;
|
|
126
|
+
constructor(redis, agentId) {
|
|
127
|
+
this.redis = redis;
|
|
128
|
+
this.agentId = agentId;
|
|
129
|
+
}
|
|
130
|
+
key(channelType, name) {
|
|
131
|
+
return `chanauth:${this.agentId}:${channelType}:${name}`;
|
|
132
|
+
}
|
|
133
|
+
indexKey(channelType) {
|
|
134
|
+
return `chanauthidx:${this.agentId}:${channelType}`;
|
|
135
|
+
}
|
|
136
|
+
async get(channelType, name) {
|
|
137
|
+
return this.redis.getBuffer(this.key(channelType, name));
|
|
138
|
+
}
|
|
139
|
+
async set(channelType, name, value) {
|
|
140
|
+
await this.redis.set(this.key(channelType, name), value);
|
|
141
|
+
await this.redis.sadd(this.indexKey(channelType), name);
|
|
142
|
+
}
|
|
143
|
+
async delete(channelType, name) {
|
|
144
|
+
await this.redis.del(this.key(channelType, name));
|
|
145
|
+
await this.redis.srem(this.indexKey(channelType), name);
|
|
146
|
+
}
|
|
147
|
+
async clear(channelType) {
|
|
148
|
+
const names = await this.redis.smembers(this.indexKey(channelType));
|
|
149
|
+
if (names.length > 0) {
|
|
150
|
+
await this.redis.del(names.map((n) => this.key(channelType, n)));
|
|
151
|
+
}
|
|
152
|
+
await this.redis.del(this.indexKey(channelType));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
117
155
|
export class RedisSchedulerStateStore {
|
|
118
156
|
redis;
|
|
119
157
|
agentId;
|
|
@@ -162,6 +200,7 @@ export function createRedisStateStores(config) {
|
|
|
162
200
|
return {
|
|
163
201
|
sessionStore: new RedisSessionStore(redis, config.agentId, config.sessionTtlS),
|
|
164
202
|
channelSessions: new RedisChannelSessionStore(redis, config.agentId, config.channelTtlS),
|
|
203
|
+
channelAuth: new RedisChannelAuthStore(redis, config.agentId),
|
|
165
204
|
schedulerState: new RedisSchedulerStateStore(redis, config.agentId, config.schedulerTtlS),
|
|
166
205
|
lockClient: new IoredisLockClient(redis),
|
|
167
206
|
async start() {
|
package/dist/redis-state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-state.js","sourceRoot":"","sources":["../src/redis-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"redis-state.js","sourceRoot":"","sources":["../src/redis-state.ts"],"names":[],"mappings":"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"}
|