@jee1/memento-client 0.1.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/LICENSE +21 -0
- package/README.md +17 -0
- package/dist/client/agent-client.d.ts +15 -0
- package/dist/client/agent-client.d.ts.map +1 -0
- package/dist/client/agent-client.js +64 -0
- package/dist/client/agent-client.js.map +1 -0
- package/dist/client/client-context.d.ts +14 -0
- package/dist/client/client-context.d.ts.map +1 -0
- package/dist/client/client-context.js +2 -0
- package/dist/client/client-context.js.map +1 -0
- package/dist/client/factory.d.ts +7 -0
- package/dist/client/factory.d.ts.map +1 -0
- package/dist/client/factory.js +8 -0
- package/dist/client/factory.js.map +1 -0
- package/dist/client/format-utils.d.ts +10 -0
- package/dist/client/format-utils.d.ts.map +1 -0
- package/dist/client/format-utils.js +79 -0
- package/dist/client/format-utils.js.map +1 -0
- package/dist/client/http-transport.d.ts +29 -0
- package/dist/client/http-transport.d.ts.map +1 -0
- package/dist/client/http-transport.js +123 -0
- package/dist/client/http-transport.js.map +1 -0
- package/dist/client/memory-client.d.ts +27 -0
- package/dist/client/memory-client.d.ts.map +1 -0
- package/dist/client/memory-client.js +128 -0
- package/dist/client/memory-client.js.map +1 -0
- package/dist/client/memory-utils.d.ts +30 -0
- package/dist/client/memory-utils.d.ts.map +1 -0
- package/dist/client/memory-utils.js +121 -0
- package/dist/client/memory-utils.js.map +1 -0
- package/dist/client/search-client.d.ts +14 -0
- package/dist/client/search-client.d.ts.map +1 -0
- package/dist/client/search-client.js +54 -0
- package/dist/client/search-client.js.map +1 -0
- package/dist/client/search-utils.d.ts +14 -0
- package/dist/client/search-utils.d.ts.map +1 -0
- package/dist/client/search-utils.js +46 -0
- package/dist/client/search-utils.js.map +1 -0
- package/dist/client/time-utils.d.ts +9 -0
- package/dist/client/time-utils.d.ts.map +1 -0
- package/dist/client/time-utils.js +36 -0
- package/dist/client/time-utils.js.map +1 -0
- package/dist/client/tools-client.d.ts +23 -0
- package/dist/client/tools-client.d.ts.map +1 -0
- package/dist/client/tools-client.js +57 -0
- package/dist/client/tools-client.js.map +1 -0
- package/dist/client/validation-utils.d.ts +28 -0
- package/dist/client/validation-utils.d.ts.map +1 -0
- package/dist/client/validation-utils.js +93 -0
- package/dist/client/validation-utils.js.map +1 -0
- package/dist/context-injector.d.ts +106 -0
- package/dist/context-injector.d.ts.map +1 -0
- package/dist/context-injector.js +299 -0
- package/dist/context-injector.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +11 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +27 -0
- package/dist/logger.js.map +1 -0
- package/dist/memento-client.d.ts +64 -0
- package/dist/memento-client.d.ts.map +1 -0
- package/dist/memento-client.js +146 -0
- package/dist/memento-client.js.map +1 -0
- package/dist/memory-manager.d.ts +137 -0
- package/dist/memory-manager.d.ts.map +1 -0
- package/dist/memory-manager.js +342 -0
- package/dist/memory-manager.js.map +1 -0
- package/dist/types.d.ts +288 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +44 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +11 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +11 -0
- package/dist/utils.js.map +1 -0
- package/package.json +53 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025-2026 Memento Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# @jee1/memento-client
|
|
2
|
+
|
|
3
|
+
TypeScript/JavaScript 앱에서 Memento HTTP API(`/tools/*`)를 **프로그래밍 방식으로** 호출할 때 쓰는 클라이언트입니다. MCP 프로토콜 대신 REST 래퍼가 필요한 백엔드·스크립트·테스트에 맞습니다.
|
|
4
|
+
|
|
5
|
+
## 스크립트
|
|
6
|
+
|
|
7
|
+
| 명령 | 설명 |
|
|
8
|
+
|------|------|
|
|
9
|
+
| `npm run build -w @jee1/memento-client` | 빌드 |
|
|
10
|
+
| `npm run test -w @jee1/memento-client` | 단위 테스트 |
|
|
11
|
+
| `npm run type-check -w @jee1/memento-client` | 타입 검사 |
|
|
12
|
+
|
|
13
|
+
## 문서
|
|
14
|
+
|
|
15
|
+
패키지 API와 사용 예는 저장소 [docs/README.md](../../docs/README.md) 및 앱 예시 `apps/experimental-example`을 참고하세요.
|
|
16
|
+
|
|
17
|
+
저장소 전체 구조는 [AGENTS.md](../../AGENTS.md)를 참고하세요.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { AgentEventEnvelopeLike, AgentObservationQuery, AgentOperationsStatusQuery, AgentProvenanceQuery, AgentProvenanceLinkInput } from '../types.js';
|
|
2
|
+
import type { MementoClientCore } from './client-context.js';
|
|
3
|
+
export declare function getAgentCapabilities<T = Record<string, unknown>>(client: MementoClientCore): Promise<T>;
|
|
4
|
+
export declare function getAgentOperationsStatus<T = Record<string, unknown>>(client: MementoClientCore, query?: AgentOperationsStatusQuery): Promise<T>;
|
|
5
|
+
export declare function startAgentSession<T = Record<string, unknown>>(client: MementoClientCore, event: AgentEventEnvelopeLike): Promise<T>;
|
|
6
|
+
export declare function ingestAgentObservations<T = Record<string, unknown>>(client: MementoClientCore, events: AgentEventEnvelopeLike[]): Promise<T>;
|
|
7
|
+
export declare function preCompactAgentSession<T = Record<string, unknown>>(client: MementoClientCore, sessionId: string, event: AgentEventEnvelopeLike): Promise<T>;
|
|
8
|
+
export declare function stopAgentSession<T = Record<string, unknown>>(client: MementoClientCore, sessionId: string, event: AgentEventEnvelopeLike): Promise<T>;
|
|
9
|
+
export declare function getAgentSession<T = Record<string, unknown>>(client: MementoClientCore, sessionId: string): Promise<T>;
|
|
10
|
+
export declare function listAgentObservations<T = Record<string, unknown>>(client: MementoClientCore, sessionId: string, query?: AgentObservationQuery): Promise<T>;
|
|
11
|
+
export declare function getAgentProvenance<T = Record<string, unknown>>(client: MementoClientCore, query: AgentProvenanceQuery): Promise<T>;
|
|
12
|
+
export declare function linkAgentProvenance<T = Record<string, unknown>>(client: MementoClientCore, input: AgentProvenanceLinkInput): Promise<T>;
|
|
13
|
+
export declare function exportAgentSession<T = Record<string, unknown>>(client: MementoClientCore, sessionId: string): Promise<T>;
|
|
14
|
+
export declare function deleteAgentSession(client: MementoClientCore, sessionId: string): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=agent-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-client.d.ts","sourceRoot":"","sources":["../../src/client/agent-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,wBAAsB,oBAAoB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpE,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,CAAC,CAAC,CAIZ;AAED,wBAAsB,wBAAwB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxE,MAAM,EAAE,iBAAiB,EACzB,KAAK,GAAE,0BAA+B,GACrC,OAAO,CAAC,CAAC,CAAC,CAMZ;AAED,wBAAsB,iBAAiB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,CAAC,CAAC,CAIZ;AAED,wBAAsB,uBAAuB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvE,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,sBAAsB,EAAE,GAC/B,OAAO,CAAC,CAAC,CAAC,CAIZ;AAED,wBAAsB,sBAAsB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtE,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED,wBAAsB,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED,wBAAsB,eAAe,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,CAAC,CAMZ;AAED,wBAAsB,qBAAqB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrE,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,qBAA0B,GAChC,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED,wBAAsB,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,CAAC,CAAC,CAMZ;AAED,wBAAsB,mBAAmB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnE,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,CAAC,CAAC,CAIZ;AAED,wBAAsB,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,CAAC,CAMZ;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export async function getAgentCapabilities(client) {
|
|
2
|
+
client.ensureConnected();
|
|
3
|
+
const response = await client.httpClient.get('/api/v1/agent/capabilities');
|
|
4
|
+
return response.data;
|
|
5
|
+
}
|
|
6
|
+
export async function getAgentOperationsStatus(client, query = {}) {
|
|
7
|
+
client.ensureConnected();
|
|
8
|
+
const response = await client.httpClient.get('/api/v1/agent/operations/status', {
|
|
9
|
+
params: query,
|
|
10
|
+
});
|
|
11
|
+
return response.data;
|
|
12
|
+
}
|
|
13
|
+
export async function startAgentSession(client, event) {
|
|
14
|
+
client.ensureConnected();
|
|
15
|
+
const response = await client.httpClient.post('/api/v1/agent/sessions', event);
|
|
16
|
+
return response.data;
|
|
17
|
+
}
|
|
18
|
+
export async function ingestAgentObservations(client, events) {
|
|
19
|
+
client.ensureConnected();
|
|
20
|
+
const response = await client.httpClient.post('/api/v1/agent/observations:ingest', { events });
|
|
21
|
+
return response.data;
|
|
22
|
+
}
|
|
23
|
+
export async function preCompactAgentSession(client, sessionId, event) {
|
|
24
|
+
client.ensureConnected();
|
|
25
|
+
const response = await client.httpClient.post(`/api/v1/agent/sessions/${encodeURIComponent(sessionId)}:pre-compact`, event);
|
|
26
|
+
return response.data;
|
|
27
|
+
}
|
|
28
|
+
export async function stopAgentSession(client, sessionId, event) {
|
|
29
|
+
client.ensureConnected();
|
|
30
|
+
const response = await client.httpClient.post(`/api/v1/agent/sessions/${encodeURIComponent(sessionId)}:stop`, event);
|
|
31
|
+
return response.data;
|
|
32
|
+
}
|
|
33
|
+
export async function getAgentSession(client, sessionId) {
|
|
34
|
+
client.ensureConnected();
|
|
35
|
+
const response = await client.httpClient.get(`/api/v1/agent/sessions/${encodeURIComponent(sessionId)}`);
|
|
36
|
+
return response.data;
|
|
37
|
+
}
|
|
38
|
+
export async function listAgentObservations(client, sessionId, query = {}) {
|
|
39
|
+
client.ensureConnected();
|
|
40
|
+
const response = await client.httpClient.get(`/api/v1/agent/sessions/${encodeURIComponent(sessionId)}/observations`, { params: query });
|
|
41
|
+
return response.data;
|
|
42
|
+
}
|
|
43
|
+
export async function getAgentProvenance(client, query) {
|
|
44
|
+
client.ensureConnected();
|
|
45
|
+
const response = await client.httpClient.get('/api/v1/agent/provenance', {
|
|
46
|
+
params: query,
|
|
47
|
+
});
|
|
48
|
+
return response.data;
|
|
49
|
+
}
|
|
50
|
+
export async function linkAgentProvenance(client, input) {
|
|
51
|
+
client.ensureConnected();
|
|
52
|
+
const response = await client.httpClient.post('/api/v1/agent/provenance', input);
|
|
53
|
+
return response.data;
|
|
54
|
+
}
|
|
55
|
+
export async function exportAgentSession(client, sessionId) {
|
|
56
|
+
client.ensureConnected();
|
|
57
|
+
const response = await client.httpClient.get(`/api/v1/agent/sessions/${encodeURIComponent(sessionId)}/export`);
|
|
58
|
+
return response.data;
|
|
59
|
+
}
|
|
60
|
+
export async function deleteAgentSession(client, sessionId) {
|
|
61
|
+
client.ensureConnected();
|
|
62
|
+
await client.httpClient.delete(`/api/v1/agent/sessions/${encodeURIComponent(sessionId)}`);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=agent-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-client.js","sourceRoot":"","sources":["../../src/client/agent-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AxiosInstance } from 'axios';
|
|
2
|
+
import type { EventEmitter } from 'events';
|
|
3
|
+
import type { MementoClientOptions, HealthCheck } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* MementoClient 내부 모듈이 공유하는 컨텍스트 인터페이스
|
|
6
|
+
*/
|
|
7
|
+
export type MementoClientCore = EventEmitter & {
|
|
8
|
+
httpClient: AxiosInstance;
|
|
9
|
+
isConnected: boolean;
|
|
10
|
+
options: Required<MementoClientOptions>;
|
|
11
|
+
healthCheck(): Promise<HealthCheck>;
|
|
12
|
+
ensureConnected(): void;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=client-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-context.d.ts","sourceRoot":"","sources":["../../src/client/client-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG;IAC7C,UAAU,EAAE,aAAa,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACxC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,eAAe,IAAI,IAAI,CAAC;CACzB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-context.js","sourceRoot":"","sources":["../../src/client/client-context.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MementoClient } from '../memento-client.js';
|
|
2
|
+
import type { MementoClientOptions } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* MementoClient 인스턴스를 생성하는 팩토리 함수
|
|
5
|
+
*/
|
|
6
|
+
export declare function createMementoClient(options?: MementoClientOptions): MementoClient;
|
|
7
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/client/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAEjF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/client/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA8B;IAChE,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { MemoryItem } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* 메모리 배열을 CSV로 변환
|
|
4
|
+
*/
|
|
5
|
+
export declare function memoriesToCSV(memories: MemoryItem[]): string;
|
|
6
|
+
/**
|
|
7
|
+
* 메모리 배열을 Markdown으로 변환
|
|
8
|
+
*/
|
|
9
|
+
export declare function memoriesToMarkdown(memories: MemoryItem[]): string;
|
|
10
|
+
//# sourceMappingURL=format-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-utils.d.ts","sourceRoot":"","sources":["../../src/client/format-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAa9C;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CA8B5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CA0CjE"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSV 셀 값을 안전하게 이스케이프
|
|
3
|
+
*/
|
|
4
|
+
function toSafeCSVCell(value) {
|
|
5
|
+
if (value == null)
|
|
6
|
+
return '';
|
|
7
|
+
const neutralizedValue = /^[=+\-@]/.test(value) ? `'${value}` : value;
|
|
8
|
+
return `"${neutralizedValue.replace(/"/g, '""')}"`;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 메모리 배열을 CSV로 변환
|
|
12
|
+
*/
|
|
13
|
+
export function memoriesToCSV(memories) {
|
|
14
|
+
if (memories.length === 0)
|
|
15
|
+
return '';
|
|
16
|
+
const headers = [
|
|
17
|
+
'id',
|
|
18
|
+
'content',
|
|
19
|
+
'type',
|
|
20
|
+
'importance',
|
|
21
|
+
'created_at',
|
|
22
|
+
'last_accessed',
|
|
23
|
+
'pinned',
|
|
24
|
+
'tags',
|
|
25
|
+
'privacy_scope',
|
|
26
|
+
'source',
|
|
27
|
+
];
|
|
28
|
+
const rows = memories.map(memory => [
|
|
29
|
+
memory.id,
|
|
30
|
+
toSafeCSVCell(memory.content),
|
|
31
|
+
memory.type,
|
|
32
|
+
memory.importance,
|
|
33
|
+
memory.created_at,
|
|
34
|
+
memory.last_accessed || '',
|
|
35
|
+
memory.pinned,
|
|
36
|
+
memory.tags?.length ? toSafeCSVCell(memory.tags.join(';')) : '',
|
|
37
|
+
memory.privacy_scope,
|
|
38
|
+
memory.source ? toSafeCSVCell(memory.source) : '',
|
|
39
|
+
]);
|
|
40
|
+
return [headers.join(','), ...rows.map(row => row.join(','))].join('\n');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 메모리 배열을 Markdown으로 변환
|
|
44
|
+
*/
|
|
45
|
+
export function memoriesToMarkdown(memories) {
|
|
46
|
+
if (memories.length === 0)
|
|
47
|
+
return '# 기억이 없습니다\n';
|
|
48
|
+
let markdown = `# 기억 목록 (${memories.length}개)\n\n`;
|
|
49
|
+
for (const memory of memories) {
|
|
50
|
+
const typeEmoji = {
|
|
51
|
+
working: '⚡',
|
|
52
|
+
episodic: '📅',
|
|
53
|
+
semantic: '🧠',
|
|
54
|
+
procedural: '🔧',
|
|
55
|
+
core: '⭐',
|
|
56
|
+
vault: '🔒',
|
|
57
|
+
}[memory.type] || '📝';
|
|
58
|
+
const importanceBar = '★'.repeat(Math.round(memory.importance * 5)) +
|
|
59
|
+
'☆'.repeat(5 - Math.round(memory.importance * 5));
|
|
60
|
+
markdown += `## ${typeEmoji} ${memory.id}\n\n`;
|
|
61
|
+
markdown += `**내용**: ${memory.content}\n\n`;
|
|
62
|
+
markdown += `**타입**: ${memory.type}\n`;
|
|
63
|
+
markdown += `**중요도**: ${importanceBar} (${memory.importance})\n`;
|
|
64
|
+
markdown += `**생성일**: ${memory.created_at}\n`;
|
|
65
|
+
if (memory.last_accessed) {
|
|
66
|
+
markdown += `**마지막 접근**: ${memory.last_accessed}\n`;
|
|
67
|
+
}
|
|
68
|
+
if (memory.tags && memory.tags.length > 0) {
|
|
69
|
+
markdown += `**태그**: ${memory.tags.map(tag => `#${tag}`).join(' ')}\n`;
|
|
70
|
+
}
|
|
71
|
+
markdown += `**공개 범위**: ${memory.privacy_scope}\n`;
|
|
72
|
+
if (memory.pinned) {
|
|
73
|
+
markdown += `**고정됨**: ✅\n`;
|
|
74
|
+
}
|
|
75
|
+
markdown += '\n---\n\n';
|
|
76
|
+
}
|
|
77
|
+
return markdown;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=format-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-utils.js","sourceRoot":"","sources":["../../src/client/format-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { MementoClientOptions, HealthCheck } from '../types.js';
|
|
2
|
+
import { MementoError } from '../types.js';
|
|
3
|
+
import type { AxiosInstance, AxiosError } from 'axios';
|
|
4
|
+
import type { MementoClientCore } from './client-context.js';
|
|
5
|
+
/**
|
|
6
|
+
* HTTP 클라이언트 생성
|
|
7
|
+
*/
|
|
8
|
+
export declare function createHttpClient(options: Required<MementoClientOptions>, onError: (error: MementoError) => void): AxiosInstance;
|
|
9
|
+
/**
|
|
10
|
+
* HTTP 에러를 MementoError로 변환
|
|
11
|
+
*/
|
|
12
|
+
export declare function handleHttpError(error: AxiosError): MementoError;
|
|
13
|
+
/**
|
|
14
|
+
* 연결 상태 확인
|
|
15
|
+
*/
|
|
16
|
+
export declare function ensureConnected(client: MementoClientCore): void;
|
|
17
|
+
/**
|
|
18
|
+
* 서버에 연결
|
|
19
|
+
*/
|
|
20
|
+
export declare function connectClient(client: MementoClientCore): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* 연결 해제
|
|
23
|
+
*/
|
|
24
|
+
export declare function disconnectClient(client: MementoClientCore): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* 서버 상태 확인
|
|
27
|
+
*/
|
|
28
|
+
export declare function healthCheck(client: MementoClientCore): Promise<HealthCheck>;
|
|
29
|
+
//# sourceMappingURL=http-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-transport.d.ts","sourceRoot":"","sources":["../../src/client/http-transport.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,YAAY,EAKb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAA6C,UAAU,EAAE,MAAM,OAAO,CAAC;AAClG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EACvC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GACrC,aAAa,CAgDf;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,CA2B/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAI/D;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB5E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAO/E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAGjF"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import { logger } from '../logger.js';
|
|
3
|
+
import { MementoError, ConnectionError, AuthenticationError, ValidationError, NotFoundError, } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* HTTP 클라이언트 생성
|
|
6
|
+
*/
|
|
7
|
+
export function createHttpClient(options, onError) {
|
|
8
|
+
const client = axios.create({
|
|
9
|
+
baseURL: options.serverUrl,
|
|
10
|
+
timeout: options.timeout,
|
|
11
|
+
headers: {
|
|
12
|
+
'Content-Type': 'application/json',
|
|
13
|
+
'User-Agent': '@jee1/memento-client/0.1.0',
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
client.interceptors.request.use((config) => {
|
|
17
|
+
if (options.apiKey && config.headers) {
|
|
18
|
+
config.headers.Authorization = `Bearer ${options.apiKey}`;
|
|
19
|
+
}
|
|
20
|
+
if (options.logLevel === 'debug') {
|
|
21
|
+
logger.debug('[MementoClient] Request:', {
|
|
22
|
+
method: config.method?.toUpperCase(),
|
|
23
|
+
url: config.url,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return config;
|
|
27
|
+
}, (error) => {
|
|
28
|
+
onError(new ConnectionError('Request failed', error));
|
|
29
|
+
return Promise.reject(error);
|
|
30
|
+
});
|
|
31
|
+
client.interceptors.response.use((response) => {
|
|
32
|
+
if (options.logLevel === 'debug') {
|
|
33
|
+
logger.debug('[MementoClient] Response:', {
|
|
34
|
+
status: response.status,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return response;
|
|
38
|
+
}, (error) => {
|
|
39
|
+
const mementoError = handleHttpError(error);
|
|
40
|
+
onError(mementoError);
|
|
41
|
+
return Promise.reject(mementoError);
|
|
42
|
+
});
|
|
43
|
+
return client;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* HTTP 에러를 MementoError로 변환
|
|
47
|
+
*/
|
|
48
|
+
export function handleHttpError(error) {
|
|
49
|
+
if (error.response) {
|
|
50
|
+
const { status, data } = error.response;
|
|
51
|
+
const errorData = data;
|
|
52
|
+
const message = (errorData?.error && typeof errorData.error === 'object' && 'message' in errorData.error && typeof errorData.error.message === 'string')
|
|
53
|
+
? errorData.error.message
|
|
54
|
+
: (errorData?.message && typeof errorData.message === 'string')
|
|
55
|
+
? errorData.message
|
|
56
|
+
: error.message;
|
|
57
|
+
switch (status) {
|
|
58
|
+
case 400:
|
|
59
|
+
return new ValidationError(message, errorData);
|
|
60
|
+
case 401:
|
|
61
|
+
return new AuthenticationError(message, errorData);
|
|
62
|
+
case 404:
|
|
63
|
+
return new NotFoundError(message, errorData);
|
|
64
|
+
case 500:
|
|
65
|
+
return new MementoError(message, 'INTERNAL_ERROR', status, errorData);
|
|
66
|
+
default:
|
|
67
|
+
return new MementoError(message, 'HTTP_ERROR', status, errorData);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else if (error.request) {
|
|
71
|
+
return new ConnectionError('Network error - no response received', error);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
return new ConnectionError('Request setup error', error);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 연결 상태 확인
|
|
79
|
+
*/
|
|
80
|
+
export function ensureConnected(client) {
|
|
81
|
+
if (!client.isConnected) {
|
|
82
|
+
throw new ConnectionError('Client is not connected. Call connect() first.');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 서버에 연결
|
|
87
|
+
*/
|
|
88
|
+
export async function connectClient(client) {
|
|
89
|
+
try {
|
|
90
|
+
const health = await client.healthCheck();
|
|
91
|
+
client.isConnected = true;
|
|
92
|
+
client.emit('connected');
|
|
93
|
+
if (client.options.logLevel !== 'silent') {
|
|
94
|
+
logger.info('✅ Memento 서버에 연결되었습니다:', {
|
|
95
|
+
version: health.version,
|
|
96
|
+
status: health.status,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
client.isConnected = false;
|
|
102
|
+
client.emit('error', error);
|
|
103
|
+
throw new ConnectionError('Failed to connect to Memento server', error);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* 연결 해제
|
|
108
|
+
*/
|
|
109
|
+
export async function disconnectClient(client) {
|
|
110
|
+
client.isConnected = false;
|
|
111
|
+
client.emit('disconnected');
|
|
112
|
+
if (client.options.logLevel !== 'silent') {
|
|
113
|
+
logger.info('🔌 Memento 서버 연결이 해제되었습니다');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* 서버 상태 확인
|
|
118
|
+
*/
|
|
119
|
+
export async function healthCheck(client) {
|
|
120
|
+
const response = await client.httpClient.get('/health');
|
|
121
|
+
return response.data;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=http-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-transport.js","sourceRoot":"","sources":["../../src/client/http-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { MemoryItem, CreateMemoryParams, UpdateMemoryParams, RememberResult, PinResult, ForgetResult } from '../types.js';
|
|
2
|
+
import type { MementoClientCore } from './client-context.js';
|
|
3
|
+
/**
|
|
4
|
+
* 기억 저장
|
|
5
|
+
*/
|
|
6
|
+
export declare function remember(client: MementoClientCore, params: CreateMemoryParams): Promise<RememberResult>;
|
|
7
|
+
/**
|
|
8
|
+
* 기억 조회
|
|
9
|
+
*/
|
|
10
|
+
export declare function getMemory(client: MementoClientCore, id: string): Promise<MemoryItem>;
|
|
11
|
+
/**
|
|
12
|
+
* 기억 업데이트
|
|
13
|
+
*/
|
|
14
|
+
export declare function updateMemory(client: MementoClientCore, id: string, params: UpdateMemoryParams): Promise<MemoryItem>;
|
|
15
|
+
/**
|
|
16
|
+
* 기억 삭제
|
|
17
|
+
*/
|
|
18
|
+
export declare function forget(client: MementoClientCore, memoryId: string, hard?: boolean): Promise<ForgetResult>;
|
|
19
|
+
/**
|
|
20
|
+
* 기억 고정
|
|
21
|
+
*/
|
|
22
|
+
export declare function pin(client: MementoClientCore, memoryId: string): Promise<PinResult>;
|
|
23
|
+
/**
|
|
24
|
+
* 기억 고정 해제
|
|
25
|
+
*/
|
|
26
|
+
export declare function unpin(client: MementoClientCore, memoryId: string): Promise<PinResult>;
|
|
27
|
+
//# sourceMappingURL=memory-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-client.d.ts","sourceRoot":"","sources":["../../src/client/memory-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,cAAc,CAAC,CAQzB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAuB1F;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,iBAAiB,EACzB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,UAAU,CAAC,CA+DrB;AAED;;GAEG;AACH,wBAAsB,MAAM,CAC1B,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,OAAe,GACpB,OAAO,CAAC,YAAY,CAAC,CAWvB;AAED;;GAEG;AACH,wBAAsB,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAUzF;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAU3F"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { recall } from './search-client.js';
|
|
2
|
+
/**
|
|
3
|
+
* 기억 저장
|
|
4
|
+
*/
|
|
5
|
+
export async function remember(client, params) {
|
|
6
|
+
client.ensureConnected();
|
|
7
|
+
const response = await client.httpClient.post('/tools/remember', params);
|
|
8
|
+
const result = response.data.result;
|
|
9
|
+
client.emit('memory:created', result);
|
|
10
|
+
return result;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 기억 조회
|
|
14
|
+
*/
|
|
15
|
+
export async function getMemory(client, id) {
|
|
16
|
+
client.ensureConnected();
|
|
17
|
+
const searchResult = await recall(client, 'memory', { id: [id] }, 1);
|
|
18
|
+
let items;
|
|
19
|
+
if (searchResult.items && Array.isArray(searchResult.items)) {
|
|
20
|
+
items = searchResult.items;
|
|
21
|
+
}
|
|
22
|
+
else if (searchResult.items && typeof searchResult.items === 'object' && 'items' in searchResult.items) {
|
|
23
|
+
const nestedItems = searchResult.items;
|
|
24
|
+
items = Array.isArray(nestedItems.items) ? nestedItems.items : [];
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
throw new Error(`Memory with ID ${id} not found`);
|
|
28
|
+
}
|
|
29
|
+
if (items.length === 0) {
|
|
30
|
+
throw new Error(`Memory with ID ${id} not found`);
|
|
31
|
+
}
|
|
32
|
+
const memory = items[0];
|
|
33
|
+
if (!memory || memory.id !== id) {
|
|
34
|
+
throw new Error(`Memory with ID ${id} not found`);
|
|
35
|
+
}
|
|
36
|
+
return memory;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 기억 업데이트
|
|
40
|
+
*/
|
|
41
|
+
export async function updateMemory(client, id, params) {
|
|
42
|
+
client.ensureConnected();
|
|
43
|
+
const existingMemory = await getMemory(client, id);
|
|
44
|
+
const memoryType = params.type || existingMemory.type;
|
|
45
|
+
await forget(client, id);
|
|
46
|
+
const createParams = {
|
|
47
|
+
type: memoryType,
|
|
48
|
+
tags: params.tags !== undefined ? params.tags : existingMemory.tags,
|
|
49
|
+
importance: params.importance !== undefined ? params.importance : existingMemory.importance,
|
|
50
|
+
source: params.source !== undefined ? params.source : existingMemory.source,
|
|
51
|
+
privacy_scope: params.privacy_scope !== undefined ? params.privacy_scope : existingMemory.privacy_scope,
|
|
52
|
+
project_id: params.project_id !== undefined ? params.project_id : existingMemory.project_id,
|
|
53
|
+
metadata: params.metadata !== undefined ? params.metadata : existingMemory.metadata,
|
|
54
|
+
};
|
|
55
|
+
const existingMemoryExtended = existingMemory;
|
|
56
|
+
if (memoryType === 'core') {
|
|
57
|
+
createParams.key = params.key !== undefined ? params.key : existingMemoryExtended.key;
|
|
58
|
+
createParams.value = params.value !== undefined ? params.value : existingMemoryExtended.value;
|
|
59
|
+
createParams.always_load = params.always_load !== undefined ? params.always_load : existingMemoryExtended.always_load;
|
|
60
|
+
}
|
|
61
|
+
else if (memoryType === 'vault') {
|
|
62
|
+
createParams.key = params.key !== undefined ? params.key : existingMemoryExtended.key;
|
|
63
|
+
createParams.value = params.value !== undefined ? params.value : existingMemoryExtended.value;
|
|
64
|
+
createParams.immutable = params.immutable !== undefined ? params.immutable : existingMemoryExtended.immutable;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
createParams.content = params.content !== undefined ? params.content : existingMemory.content;
|
|
68
|
+
if (memoryType === 'procedural') {
|
|
69
|
+
createParams.task_goal = params.task_goal !== undefined ? params.task_goal : existingMemoryExtended.task_goal;
|
|
70
|
+
createParams.steps = params.steps !== undefined ? params.steps : existingMemoryExtended.steps;
|
|
71
|
+
createParams.reflection_notes = params.reflection_notes !== undefined ? params.reflection_notes : existingMemoryExtended.reflection_notes;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const rememberResult = await remember(client, createParams);
|
|
75
|
+
const memoryItem = {
|
|
76
|
+
id: rememberResult.memory_id,
|
|
77
|
+
content: createParams.content || '',
|
|
78
|
+
type: createParams.type || 'episodic',
|
|
79
|
+
importance: createParams.importance || 0.5,
|
|
80
|
+
created_at: rememberResult.created_at,
|
|
81
|
+
pinned: false,
|
|
82
|
+
privacy_scope: createParams.privacy_scope || 'private',
|
|
83
|
+
tags: createParams.tags,
|
|
84
|
+
source: createParams.source,
|
|
85
|
+
project_id: createParams.project_id,
|
|
86
|
+
metadata: createParams.metadata,
|
|
87
|
+
};
|
|
88
|
+
client.emit('memory:updated', memoryItem);
|
|
89
|
+
return memoryItem;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* 기억 삭제
|
|
93
|
+
*/
|
|
94
|
+
export async function forget(client, memoryId, hard = false) {
|
|
95
|
+
client.ensureConnected();
|
|
96
|
+
const response = await client.httpClient.post('/tools/forget', {
|
|
97
|
+
id: memoryId,
|
|
98
|
+
hard,
|
|
99
|
+
});
|
|
100
|
+
const result = response.data.result;
|
|
101
|
+
client.emit('memory:deleted', memoryId);
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* 기억 고정
|
|
106
|
+
*/
|
|
107
|
+
export async function pin(client, memoryId) {
|
|
108
|
+
client.ensureConnected();
|
|
109
|
+
const response = await client.httpClient.post('/tools/pin', {
|
|
110
|
+
id: memoryId,
|
|
111
|
+
});
|
|
112
|
+
const result = response.data.result;
|
|
113
|
+
client.emit('memory:pinned', memoryId);
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* 기억 고정 해제
|
|
118
|
+
*/
|
|
119
|
+
export async function unpin(client, memoryId) {
|
|
120
|
+
client.ensureConnected();
|
|
121
|
+
const response = await client.httpClient.post('/tools/unpin', {
|
|
122
|
+
id: memoryId,
|
|
123
|
+
});
|
|
124
|
+
const result = response.data.result;
|
|
125
|
+
client.emit('memory:unpinned', memoryId);
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=memory-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-client.js","sourceRoot":"","sources":["../../src/client/memory-client.ts"],"names":[],"mappings":"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"}
|