@prmichaelsen/remember-core 0.12.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/README.md +100 -0
- package/dist/collections/composite-ids.d.ts +47 -0
- package/dist/collections/composite-ids.d.ts.map +1 -0
- package/dist/collections/composite-ids.js +97 -0
- package/dist/collections/composite-ids.js.map +1 -0
- package/dist/collections/dot-notation.d.ts +37 -0
- package/dist/collections/dot-notation.d.ts.map +1 -0
- package/dist/collections/dot-notation.js +100 -0
- package/dist/collections/dot-notation.js.map +1 -0
- package/dist/collections/index.d.ts +7 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/collections/index.js +7 -0
- package/dist/collections/index.js.map +1 -0
- package/dist/collections/tracking-arrays.d.ts +28 -0
- package/dist/collections/tracking-arrays.d.ts.map +1 -0
- package/dist/collections/tracking-arrays.js +67 -0
- package/dist/collections/tracking-arrays.js.map +1 -0
- package/dist/config/debug.d.ts +36 -0
- package/dist/config/debug.d.ts.map +1 -0
- package/dist/config/debug.js +48 -0
- package/dist/config/debug.js.map +1 -0
- package/dist/config/environment.d.ts +71 -0
- package/dist/config/environment.d.ts.map +1 -0
- package/dist/config/environment.js +57 -0
- package/dist/config/environment.js.map +1 -0
- package/dist/config/index.d.ts +9 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +27 -0
- package/dist/config/index.js.map +1 -0
- package/dist/constants/content-types.d.ts +60 -0
- package/dist/constants/content-types.d.ts.map +1 -0
- package/dist/constants/content-types.js +450 -0
- package/dist/constants/content-types.js.map +1 -0
- package/dist/constants/index.d.ts +3 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +3 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/database/firestore/index.d.ts +8 -0
- package/dist/database/firestore/index.d.ts.map +1 -0
- package/dist/database/firestore/index.js +10 -0
- package/dist/database/firestore/index.js.map +1 -0
- package/dist/database/firestore/init.d.ts +51 -0
- package/dist/database/firestore/init.d.ts.map +1 -0
- package/dist/database/firestore/init.js +92 -0
- package/dist/database/firestore/init.js.map +1 -0
- package/dist/database/firestore/paths.d.ts +54 -0
- package/dist/database/firestore/paths.d.ts.map +1 -0
- package/dist/database/firestore/paths.js +103 -0
- package/dist/database/firestore/paths.js.map +1 -0
- package/dist/database/weaviate/client.d.ts +68 -0
- package/dist/database/weaviate/client.d.ts.map +1 -0
- package/dist/database/weaviate/client.js +157 -0
- package/dist/database/weaviate/client.js.map +1 -0
- package/dist/database/weaviate/index.d.ts +6 -0
- package/dist/database/weaviate/index.d.ts.map +1 -0
- package/dist/database/weaviate/index.js +9 -0
- package/dist/database/weaviate/index.js.map +1 -0
- package/dist/database/weaviate/schema.d.ts +22 -0
- package/dist/database/weaviate/schema.d.ts.map +1 -0
- package/dist/database/weaviate/schema.js +50 -0
- package/dist/database/weaviate/schema.js.map +1 -0
- package/dist/database/weaviate/space-schema.d.ts +36 -0
- package/dist/database/weaviate/space-schema.d.ts.map +1 -0
- package/dist/database/weaviate/space-schema.js +65 -0
- package/dist/database/weaviate/space-schema.js.map +1 -0
- package/dist/database/weaviate/v2-collections.d.ts +160 -0
- package/dist/database/weaviate/v2-collections.d.ts.map +1 -0
- package/dist/database/weaviate/v2-collections.js +275 -0
- package/dist/database/weaviate/v2-collections.js.map +1 -0
- package/dist/errors/app-errors.d.ts +64 -0
- package/dist/errors/app-errors.d.ts.map +1 -0
- package/dist/errors/app-errors.js +90 -0
- package/dist/errors/app-errors.js.map +1 -0
- package/dist/errors/base.error.d.ts +15 -0
- package/dist/errors/base.error.d.ts.map +1 -0
- package/dist/errors/base.error.js +25 -0
- package/dist/errors/base.error.js.map +1 -0
- package/dist/errors/index.d.ts +19 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +25 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/services/confirmation-token.service.d.ts +56 -0
- package/dist/services/confirmation-token.service.d.ts.map +1 -0
- package/dist/services/confirmation-token.service.js +118 -0
- package/dist/services/confirmation-token.service.js.map +1 -0
- package/dist/services/credentials-provider.d.ts +25 -0
- package/dist/services/credentials-provider.d.ts.map +1 -0
- package/dist/services/credentials-provider.js +31 -0
- package/dist/services/credentials-provider.js.map +1 -0
- package/dist/services/index.d.ts +11 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +17 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/memory.service.d.ts +129 -0
- package/dist/services/memory.service.d.ts.map +1 -0
- package/dist/services/memory.service.js +294 -0
- package/dist/services/memory.service.js.map +1 -0
- package/dist/services/preferences.service.d.ts +27 -0
- package/dist/services/preferences.service.d.ts.map +1 -0
- package/dist/services/preferences.service.js +106 -0
- package/dist/services/preferences.service.js.map +1 -0
- package/dist/services/relationship.service.d.ts +75 -0
- package/dist/services/relationship.service.d.ts.map +1 -0
- package/dist/services/relationship.service.js +211 -0
- package/dist/services/relationship.service.js.map +1 -0
- package/dist/services/space-config.service.d.ts +22 -0
- package/dist/services/space-config.service.d.ts.map +1 -0
- package/dist/services/space-config.service.js +50 -0
- package/dist/services/space-config.service.js.map +1 -0
- package/dist/services/space.service.d.ts +160 -0
- package/dist/services/space.service.d.ts.map +1 -0
- package/dist/services/space.service.js +815 -0
- package/dist/services/space.service.js.map +1 -0
- package/dist/testing/index.d.ts +8 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +8 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/test-data-generator.d.ts +100 -0
- package/dist/testing/test-data-generator.d.ts.map +1 -0
- package/dist/testing/test-data-generator.js +194 -0
- package/dist/testing/test-data-generator.js.map +1 -0
- package/dist/testing/weaviate-mock.d.ts +317 -0
- package/dist/testing/weaviate-mock.d.ts.map +1 -0
- package/dist/testing/weaviate-mock.js +233 -0
- package/dist/testing/weaviate-mock.js.map +1 -0
- package/dist/types/auth.types.d.ts +36 -0
- package/dist/types/auth.types.d.ts.map +1 -0
- package/dist/types/auth.types.js +9 -0
- package/dist/types/auth.types.js.map +1 -0
- package/dist/types/context.types.d.ts +78 -0
- package/dist/types/context.types.d.ts.map +1 -0
- package/dist/types/context.types.js +6 -0
- package/dist/types/context.types.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/llm.types.d.ts +8 -0
- package/dist/types/llm.types.d.ts.map +1 -0
- package/dist/types/llm.types.js +8 -0
- package/dist/types/llm.types.js.map +1 -0
- package/dist/types/memory.types.d.ts +83 -0
- package/dist/types/memory.types.d.ts.map +1 -0
- package/dist/types/memory.types.js +6 -0
- package/dist/types/memory.types.js.map +1 -0
- package/dist/types/preferences.types.d.ts +285 -0
- package/dist/types/preferences.types.d.ts.map +1 -0
- package/dist/types/preferences.types.js +195 -0
- package/dist/types/preferences.types.js.map +1 -0
- package/dist/types/result.types.d.ts +60 -0
- package/dist/types/result.types.d.ts.map +1 -0
- package/dist/types/result.types.js +82 -0
- package/dist/types/result.types.js.map +1 -0
- package/dist/types/search.types.d.ts +49 -0
- package/dist/types/search.types.d.ts.map +1 -0
- package/dist/types/search.types.js +6 -0
- package/dist/types/search.types.js.map +1 -0
- package/dist/types/shared.types.d.ts +91 -0
- package/dist/types/shared.types.d.ts.map +1 -0
- package/dist/types/shared.types.js +57 -0
- package/dist/types/shared.types.js.map +1 -0
- package/dist/types/space.types.d.ts +82 -0
- package/dist/types/space.types.d.ts.map +1 -0
- package/dist/types/space.types.js +18 -0
- package/dist/types/space.types.js.map +1 -0
- package/dist/types/utils.types.d.ts +51 -0
- package/dist/types/utils.types.d.ts.map +1 -0
- package/dist/types/utils.types.js +4 -0
- package/dist/types/utils.types.js.map +1 -0
- package/dist/utils/auth-helpers.d.ts +23 -0
- package/dist/utils/auth-helpers.d.ts.map +1 -0
- package/dist/utils/auth-helpers.js +31 -0
- package/dist/utils/auth-helpers.js.map +1 -0
- package/dist/utils/debug.d.ts +45 -0
- package/dist/utils/debug.d.ts.map +1 -0
- package/dist/utils/debug.js +112 -0
- package/dist/utils/debug.js.map +1 -0
- package/dist/utils/error-handler.d.ts +46 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +63 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/filters.d.ts +42 -0
- package/dist/utils/filters.d.ts.map +1 -0
- package/dist/utils/filters.js +132 -0
- package/dist/utils/filters.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +22 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +68 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +100 -0
package/README.md
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# @prmichaelsen/remember-core
|
|
2
|
+
|
|
3
|
+
Transport-agnostic core SDK for Remember. Extracts business logic from remember-mcp so both remember-mcp-server (MCP transport) and remember-rest-server (REST transport) can share the same services.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @prmichaelsen/remember-core
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { MemoryService, createLogger } from '@prmichaelsen/remember-core';
|
|
15
|
+
import { getWeaviateClient } from '@prmichaelsen/remember-core/database/weaviate';
|
|
16
|
+
|
|
17
|
+
const logger = createLogger({ level: 'info' });
|
|
18
|
+
const client = await getWeaviateClient({ host: 'localhost', port: 8080, scheme: 'http' });
|
|
19
|
+
const collection = client.collections.get(`Memory_users_${userId}`);
|
|
20
|
+
const memoryService = new MemoryService(collection, userId, logger);
|
|
21
|
+
|
|
22
|
+
// Create a memory
|
|
23
|
+
const { memory_id } = await memoryService.create({
|
|
24
|
+
content: 'Remember this important fact',
|
|
25
|
+
type: 'note',
|
|
26
|
+
tags: ['important'],
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
// Search memories
|
|
30
|
+
const results = await memoryService.search({
|
|
31
|
+
query: 'important fact',
|
|
32
|
+
limit: 10,
|
|
33
|
+
});
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Subpath Imports
|
|
37
|
+
|
|
38
|
+
| Import Path | Contents |
|
|
39
|
+
|---|---|
|
|
40
|
+
| `@prmichaelsen/remember-core` | Common types, services, errors, utils |
|
|
41
|
+
| `@prmichaelsen/remember-core/types` | All type definitions and interfaces |
|
|
42
|
+
| `@prmichaelsen/remember-core/services` | Service classes and input/output types |
|
|
43
|
+
| `@prmichaelsen/remember-core/collections` | Composite IDs, tracking arrays, dot notation |
|
|
44
|
+
| `@prmichaelsen/remember-core/constants` | Content types (41 types across 8 categories) |
|
|
45
|
+
| `@prmichaelsen/remember-core/config` | Environment config, debug levels |
|
|
46
|
+
| `@prmichaelsen/remember-core/database/weaviate` | Weaviate client, schema, space collections |
|
|
47
|
+
| `@prmichaelsen/remember-core/database/firestore` | Firestore init, path helpers |
|
|
48
|
+
| `@prmichaelsen/remember-core/errors` | Typed errors (AppError, 8 subclasses) |
|
|
49
|
+
| `@prmichaelsen/remember-core/utils` | Logger, filters, auth helpers, debug |
|
|
50
|
+
| `@prmichaelsen/remember-core/testing` | Weaviate mock, test data generator |
|
|
51
|
+
|
|
52
|
+
## Core Services
|
|
53
|
+
|
|
54
|
+
**MemoryService** — 6 operations: create, search (hybrid), findSimilar (vector), query (semantic), update, delete (soft).
|
|
55
|
+
|
|
56
|
+
**RelationshipService** — 4 operations: create, search, update, delete relationships between memories.
|
|
57
|
+
|
|
58
|
+
**SpaceService** — 8 operations: publish, retract, revise, confirm, deny, moderate, search, query across shared spaces. Two-phase confirmation flow.
|
|
59
|
+
|
|
60
|
+
**PreferencesDatabaseService** — User preference CRUD via Firestore.
|
|
61
|
+
|
|
62
|
+
**ConfirmationTokenService** — Time-limited one-use tokens for sensitive operations (5-minute expiry).
|
|
63
|
+
|
|
64
|
+
## Testing
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npm test # Unit tests (120 tests)
|
|
68
|
+
npm run test:e2e # Integration tests (22 tests)
|
|
69
|
+
npm run typecheck # Type checking
|
|
70
|
+
npm run build # TypeScript compilation
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Migration from remember-mcp
|
|
74
|
+
|
|
75
|
+
See [docs/migration-guide.md](docs/migration-guide.md) for instructions on replacing inline tool handler logic with remember-core service calls.
|
|
76
|
+
|
|
77
|
+
## Architecture
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
remember-core (this package)
|
|
81
|
+
├── types/ Type definitions (Memory, Relationship, Preferences, etc.)
|
|
82
|
+
├── constants/ Content types, enums
|
|
83
|
+
├── config/ Environment loading, debug config
|
|
84
|
+
├── errors/ Typed error hierarchy (8 error kinds)
|
|
85
|
+
├── database/ Weaviate + Firestore initialization
|
|
86
|
+
├── collections/ Weaviate collection utilities
|
|
87
|
+
├── utils/ Logger, filters, auth helpers
|
|
88
|
+
├── services/ Business logic (5 service classes)
|
|
89
|
+
└── testing/ Mock infrastructure for consumers
|
|
90
|
+
|
|
91
|
+
remember-mcp-server (consumer)
|
|
92
|
+
└── MCP tool handlers → thin adapters calling remember-core services
|
|
93
|
+
|
|
94
|
+
remember-rest-server (consumer, planned)
|
|
95
|
+
└── REST routes → thin adapters calling remember-core services
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## License
|
|
99
|
+
|
|
100
|
+
MIT
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composite ID Utilities.
|
|
3
|
+
*
|
|
4
|
+
* Ported from remember-mcp/src/collections/composite-ids.ts.
|
|
5
|
+
* Provides utilities for working with composite IDs in Memory Collection Pattern v2.
|
|
6
|
+
* Format: {userId}.{memoryId}
|
|
7
|
+
*/
|
|
8
|
+
export interface CompositeIdComponents {
|
|
9
|
+
userId: string;
|
|
10
|
+
memoryId: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class InvalidCompositeIdError extends Error {
|
|
13
|
+
constructor(message: string);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Generate a composite ID from user ID and memory ID.
|
|
17
|
+
*
|
|
18
|
+
* @throws {InvalidCompositeIdError} If userId or memoryId contains dots or is empty
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateCompositeId(userId: string, memoryId: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Parse a composite ID into its components.
|
|
23
|
+
*
|
|
24
|
+
* @throws {InvalidCompositeIdError} If format is invalid
|
|
25
|
+
*/
|
|
26
|
+
export declare function parseCompositeId(compositeId: string): CompositeIdComponents;
|
|
27
|
+
/**
|
|
28
|
+
* Check if a string is a valid composite ID.
|
|
29
|
+
*/
|
|
30
|
+
export declare function isCompositeId(id: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Validate a composite ID (returns true or throws).
|
|
33
|
+
*/
|
|
34
|
+
export declare function validateCompositeId(id: string): true;
|
|
35
|
+
/**
|
|
36
|
+
* Extract user ID from a composite ID.
|
|
37
|
+
*/
|
|
38
|
+
export declare function getUserIdFromComposite(compositeId: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* Extract memory ID from a composite ID.
|
|
41
|
+
*/
|
|
42
|
+
export declare function getMemoryIdFromComposite(compositeId: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Check if a composite ID belongs to a specific user.
|
|
45
|
+
*/
|
|
46
|
+
export declare function belongsToUser(compositeId: string, userId: string): boolean;
|
|
47
|
+
//# sourceMappingURL=composite-ids.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composite-ids.d.ts","sourceRoot":"","sources":["../../src/collections/composite-ids.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAc5E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,qBAAqB,CAe3E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAQjD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAGpD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAM1E"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composite ID Utilities.
|
|
3
|
+
*
|
|
4
|
+
* Ported from remember-mcp/src/collections/composite-ids.ts.
|
|
5
|
+
* Provides utilities for working with composite IDs in Memory Collection Pattern v2.
|
|
6
|
+
* Format: {userId}.{memoryId}
|
|
7
|
+
*/
|
|
8
|
+
export class InvalidCompositeIdError extends Error {
|
|
9
|
+
constructor(message) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = 'InvalidCompositeIdError';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Generate a composite ID from user ID and memory ID.
|
|
16
|
+
*
|
|
17
|
+
* @throws {InvalidCompositeIdError} If userId or memoryId contains dots or is empty
|
|
18
|
+
*/
|
|
19
|
+
export function generateCompositeId(userId, memoryId) {
|
|
20
|
+
if (userId.includes('.')) {
|
|
21
|
+
throw new InvalidCompositeIdError(`User ID cannot contain dots: ${userId}`);
|
|
22
|
+
}
|
|
23
|
+
if (memoryId.includes('.')) {
|
|
24
|
+
throw new InvalidCompositeIdError(`Memory ID cannot contain dots: ${memoryId}`);
|
|
25
|
+
}
|
|
26
|
+
if (!userId.trim()) {
|
|
27
|
+
throw new InvalidCompositeIdError('User ID cannot be empty');
|
|
28
|
+
}
|
|
29
|
+
if (!memoryId.trim()) {
|
|
30
|
+
throw new InvalidCompositeIdError('Memory ID cannot be empty');
|
|
31
|
+
}
|
|
32
|
+
return `${userId}.${memoryId}`;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Parse a composite ID into its components.
|
|
36
|
+
*
|
|
37
|
+
* @throws {InvalidCompositeIdError} If format is invalid
|
|
38
|
+
*/
|
|
39
|
+
export function parseCompositeId(compositeId) {
|
|
40
|
+
const parts = compositeId.split('.');
|
|
41
|
+
if (parts.length !== 2) {
|
|
42
|
+
throw new InvalidCompositeIdError(`Invalid composite ID format: ${compositeId}. Expected format: {userId}.{memoryId}`);
|
|
43
|
+
}
|
|
44
|
+
const [userId, memoryId] = parts;
|
|
45
|
+
if (!userId.trim()) {
|
|
46
|
+
throw new InvalidCompositeIdError(`Invalid composite ID: ${compositeId}. User ID is empty`);
|
|
47
|
+
}
|
|
48
|
+
if (!memoryId.trim()) {
|
|
49
|
+
throw new InvalidCompositeIdError(`Invalid composite ID: ${compositeId}. Memory ID is empty`);
|
|
50
|
+
}
|
|
51
|
+
return { userId, memoryId };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if a string is a valid composite ID.
|
|
55
|
+
*/
|
|
56
|
+
export function isCompositeId(id) {
|
|
57
|
+
try {
|
|
58
|
+
parseCompositeId(id);
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (error instanceof InvalidCompositeIdError)
|
|
63
|
+
return false;
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Validate a composite ID (returns true or throws).
|
|
69
|
+
*/
|
|
70
|
+
export function validateCompositeId(id) {
|
|
71
|
+
parseCompositeId(id);
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Extract user ID from a composite ID.
|
|
76
|
+
*/
|
|
77
|
+
export function getUserIdFromComposite(compositeId) {
|
|
78
|
+
return parseCompositeId(compositeId).userId;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Extract memory ID from a composite ID.
|
|
82
|
+
*/
|
|
83
|
+
export function getMemoryIdFromComposite(compositeId) {
|
|
84
|
+
return parseCompositeId(compositeId).memoryId;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Check if a composite ID belongs to a specific user.
|
|
88
|
+
*/
|
|
89
|
+
export function belongsToUser(compositeId, userId) {
|
|
90
|
+
try {
|
|
91
|
+
return parseCompositeId(compositeId).userId === userId;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=composite-ids.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composite-ids.js","sourceRoot":"","sources":["../../src/collections/composite-ids.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,QAAgB;IAClE,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,uBAAuB,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,uBAAuB,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,uBAAuB,CAAC,yBAAyB,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QACrB,MAAM,IAAI,uBAAuB,CAAC,2BAA2B,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,GAAG,MAAM,IAAI,QAAQ,EAAE,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,uBAAuB,CAC/B,gCAAgC,WAAW,wCAAwC,CACpF,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,uBAAuB,CAAC,yBAAyB,WAAW,oBAAoB,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QACrB,MAAM,IAAI,uBAAuB,CAAC,yBAAyB,WAAW,sBAAsB,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,IAAI,CAAC;QACH,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,uBAAuB;YAAE,OAAO,KAAK,CAAC;QAC3D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAU;IAC5C,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAAmB;IACxD,OAAO,gBAAgB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,WAAmB;IAC1D,OAAO,gBAAgB,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB,EAAE,MAAc;IAC/D,IAAI,CAAC;QACH,OAAO,gBAAgB,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dot Notation Collection Utilities.
|
|
3
|
+
*
|
|
4
|
+
* Ported from remember-mcp/src/collections/dot-notation.ts.
|
|
5
|
+
* Utilities for Memory Collection Pattern v2 dot notation collection naming.
|
|
6
|
+
*
|
|
7
|
+
* Collection Types:
|
|
8
|
+
* - USERS: Memory_users_{userId}
|
|
9
|
+
* - SPACES: Memory_spaces_public
|
|
10
|
+
* - GROUPS: Memory_groups_{groupId}
|
|
11
|
+
*/
|
|
12
|
+
export declare enum CollectionType {
|
|
13
|
+
USERS = "USERS",
|
|
14
|
+
SPACES = "SPACES",
|
|
15
|
+
GROUPS = "GROUPS"
|
|
16
|
+
}
|
|
17
|
+
export interface CollectionMetadata {
|
|
18
|
+
type: CollectionType;
|
|
19
|
+
id?: string;
|
|
20
|
+
name: string;
|
|
21
|
+
}
|
|
22
|
+
export declare class InvalidCollectionNameError extends Error {
|
|
23
|
+
constructor(message: string);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get the Weaviate collection name for a given type and optional ID.
|
|
27
|
+
*/
|
|
28
|
+
export declare function getCollectionName(type: CollectionType, id?: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Parse a collection name into its components.
|
|
31
|
+
*/
|
|
32
|
+
export declare function parseCollectionName(name: string): CollectionMetadata;
|
|
33
|
+
export declare function validateCollectionName(name: string): boolean;
|
|
34
|
+
export declare function isUserCollection(name: string): boolean;
|
|
35
|
+
export declare function isSpacesCollection(name: string): boolean;
|
|
36
|
+
export declare function isGroupCollection(name: string): boolean;
|
|
37
|
+
//# sourceMappingURL=dot-notation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dot-notation.d.ts","sourceRoot":"","sources":["../../src/collections/dot-notation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,oBAAY,cAAc;IACxB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAe3E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAuBpE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ5D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMtD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMvD"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dot Notation Collection Utilities.
|
|
3
|
+
*
|
|
4
|
+
* Ported from remember-mcp/src/collections/dot-notation.ts.
|
|
5
|
+
* Utilities for Memory Collection Pattern v2 dot notation collection naming.
|
|
6
|
+
*
|
|
7
|
+
* Collection Types:
|
|
8
|
+
* - USERS: Memory_users_{userId}
|
|
9
|
+
* - SPACES: Memory_spaces_public
|
|
10
|
+
* - GROUPS: Memory_groups_{groupId}
|
|
11
|
+
*/
|
|
12
|
+
export var CollectionType;
|
|
13
|
+
(function (CollectionType) {
|
|
14
|
+
CollectionType["USERS"] = "USERS";
|
|
15
|
+
CollectionType["SPACES"] = "SPACES";
|
|
16
|
+
CollectionType["GROUPS"] = "GROUPS";
|
|
17
|
+
})(CollectionType || (CollectionType = {}));
|
|
18
|
+
export class InvalidCollectionNameError extends Error {
|
|
19
|
+
constructor(message) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.name = 'InvalidCollectionNameError';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get the Weaviate collection name for a given type and optional ID.
|
|
26
|
+
*/
|
|
27
|
+
export function getCollectionName(type, id) {
|
|
28
|
+
switch (type) {
|
|
29
|
+
case CollectionType.USERS:
|
|
30
|
+
if (!id)
|
|
31
|
+
throw new InvalidCollectionNameError('User ID is required for USERS collection type');
|
|
32
|
+
if (id.includes('.'))
|
|
33
|
+
throw new InvalidCollectionNameError(`User ID cannot contain dots: ${id}`);
|
|
34
|
+
return `Memory_users_${id}`;
|
|
35
|
+
case CollectionType.SPACES:
|
|
36
|
+
return 'Memory_spaces_public';
|
|
37
|
+
case CollectionType.GROUPS:
|
|
38
|
+
if (!id)
|
|
39
|
+
throw new InvalidCollectionNameError('Group ID is required for GROUPS collection type');
|
|
40
|
+
if (id.includes('.'))
|
|
41
|
+
throw new InvalidCollectionNameError(`Group ID cannot contain dots: ${id}`);
|
|
42
|
+
return `Memory_groups_${id}`;
|
|
43
|
+
default:
|
|
44
|
+
throw new InvalidCollectionNameError(`Unknown collection type: ${type}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Parse a collection name into its components.
|
|
49
|
+
*/
|
|
50
|
+
export function parseCollectionName(name) {
|
|
51
|
+
const match = name.match(/^Memory_(users|spaces|groups)_(.+)$/);
|
|
52
|
+
if (!match) {
|
|
53
|
+
throw new InvalidCollectionNameError(`Invalid collection name format: ${name}. Expected format: Memory_{type}_{id}`);
|
|
54
|
+
}
|
|
55
|
+
const [, typeStr, idOrPublic] = match;
|
|
56
|
+
switch (typeStr) {
|
|
57
|
+
case 'users':
|
|
58
|
+
return { type: CollectionType.USERS, id: idOrPublic, name };
|
|
59
|
+
case 'spaces':
|
|
60
|
+
if (idOrPublic !== 'public') {
|
|
61
|
+
throw new InvalidCollectionNameError(`Invalid SPACES collection name: ${name}. Expected: Memory_spaces_public`);
|
|
62
|
+
}
|
|
63
|
+
return { type: CollectionType.SPACES, id: undefined, name };
|
|
64
|
+
case 'groups':
|
|
65
|
+
return { type: CollectionType.GROUPS, id: idOrPublic, name };
|
|
66
|
+
default:
|
|
67
|
+
throw new InvalidCollectionNameError(`Unknown collection type: ${typeStr}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export function validateCollectionName(name) {
|
|
71
|
+
try {
|
|
72
|
+
parseCollectionName(name);
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
if (error instanceof InvalidCollectionNameError)
|
|
77
|
+
return false;
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export function isUserCollection(name) {
|
|
82
|
+
try {
|
|
83
|
+
return parseCollectionName(name).type === CollectionType.USERS;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export function isSpacesCollection(name) {
|
|
90
|
+
return name === 'Memory_spaces_public';
|
|
91
|
+
}
|
|
92
|
+
export function isGroupCollection(name) {
|
|
93
|
+
try {
|
|
94
|
+
return parseCollectionName(name).type === CollectionType.GROUPS;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=dot-notation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dot-notation.js","sourceRoot":"","sources":["../../src/collections/dot-notation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collections module barrel exports.
|
|
3
|
+
*/
|
|
4
|
+
export { generateCompositeId, parseCompositeId, isCompositeId, validateCompositeId, getUserIdFromComposite, getMemoryIdFromComposite, belongsToUser, InvalidCompositeIdError, type CompositeIdComponents, } from './composite-ids.js';
|
|
5
|
+
export { addToSpaceIds, removeFromSpaceIds, addToGroupIds, removeFromGroupIds, isPublishedToSpace, isPublishedToGroup, getPublishedLocations, isPublished, getPublishedCount, initializeTracking, addMultipleSpaceIds, addMultipleGroupIds, type MemoryWithTracking, type PublishedLocations, } from './tracking-arrays.js';
|
|
6
|
+
export { CollectionType, getCollectionName, parseCollectionName, validateCollectionName, isUserCollection, isSpacesCollection, isGroupCollection, InvalidCollectionNameError, type CollectionMetadata, } from './dot-notation.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,aAAa,EACb,uBAAuB,EACvB,KAAK,qBAAqB,GAC3B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collections module barrel exports.
|
|
3
|
+
*/
|
|
4
|
+
export { generateCompositeId, parseCompositeId, isCompositeId, validateCompositeId, getUserIdFromComposite, getMemoryIdFromComposite, belongsToUser, InvalidCompositeIdError, } from './composite-ids.js';
|
|
5
|
+
export { addToSpaceIds, removeFromSpaceIds, addToGroupIds, removeFromGroupIds, isPublishedToSpace, isPublishedToGroup, getPublishedLocations, isPublished, getPublishedCount, initializeTracking, addMultipleSpaceIds, addMultipleGroupIds, } from './tracking-arrays.js';
|
|
6
|
+
export { CollectionType, getCollectionName, parseCollectionName, validateCollectionName, isUserCollection, isSpacesCollection, isGroupCollection, InvalidCollectionNameError, } from './dot-notation.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,aAAa,EACb,uBAAuB,GAExB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GAGpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,GAE3B,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracking Array Management.
|
|
3
|
+
*
|
|
4
|
+
* Ported from remember-mcp/src/collections/tracking-arrays.ts.
|
|
5
|
+
* Immutable utilities for managing space_ids and group_ids tracking arrays.
|
|
6
|
+
*/
|
|
7
|
+
export interface MemoryWithTracking {
|
|
8
|
+
space_ids: string[];
|
|
9
|
+
group_ids: string[];
|
|
10
|
+
[key: string]: any;
|
|
11
|
+
}
|
|
12
|
+
export interface PublishedLocations {
|
|
13
|
+
spaces: string[];
|
|
14
|
+
groups: string[];
|
|
15
|
+
}
|
|
16
|
+
export declare function addToSpaceIds<T extends MemoryWithTracking>(memory: T, spaceId: string): T;
|
|
17
|
+
export declare function removeFromSpaceIds<T extends MemoryWithTracking>(memory: T, spaceId: string): T;
|
|
18
|
+
export declare function addToGroupIds<T extends MemoryWithTracking>(memory: T, groupId: string): T;
|
|
19
|
+
export declare function removeFromGroupIds<T extends MemoryWithTracking>(memory: T, groupId: string): T;
|
|
20
|
+
export declare function isPublishedToSpace(memory: MemoryWithTracking, spaceId: string): boolean;
|
|
21
|
+
export declare function isPublishedToGroup(memory: MemoryWithTracking, groupId: string): boolean;
|
|
22
|
+
export declare function getPublishedLocations(memory: MemoryWithTracking): PublishedLocations;
|
|
23
|
+
export declare function isPublished(memory: MemoryWithTracking): boolean;
|
|
24
|
+
export declare function getPublishedCount(memory: MemoryWithTracking): number;
|
|
25
|
+
export declare function initializeTracking<T extends Record<string, any>>(memory: T): T & MemoryWithTracking;
|
|
26
|
+
export declare function addMultipleSpaceIds<T extends MemoryWithTracking>(memory: T, spaceIds: string[]): T;
|
|
27
|
+
export declare function addMultipleGroupIds<T extends MemoryWithTracking>(memory: T, groupIds: string[]): T;
|
|
28
|
+
//# sourceMappingURL=tracking-arrays.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracking-arrays.d.ts","sourceRoot":"","sources":["../../src/collections/tracking-arrays.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,CAAC,SAAS,kBAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,CAGzF;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,kBAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,CAE9F;AAED,wBAAgB,aAAa,CAAC,CAAC,SAAS,kBAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,CAGzF;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,kBAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,CAE9F;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,kBAAkB,GAAG,kBAAkB,CAEpF;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAE/D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAEpE;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAMnG;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,kBAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAUlG;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,kBAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAUlG"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracking Array Management.
|
|
3
|
+
*
|
|
4
|
+
* Ported from remember-mcp/src/collections/tracking-arrays.ts.
|
|
5
|
+
* Immutable utilities for managing space_ids and group_ids tracking arrays.
|
|
6
|
+
*/
|
|
7
|
+
export function addToSpaceIds(memory, spaceId) {
|
|
8
|
+
if (memory.space_ids.includes(spaceId))
|
|
9
|
+
return memory;
|
|
10
|
+
return { ...memory, space_ids: [...memory.space_ids, spaceId] };
|
|
11
|
+
}
|
|
12
|
+
export function removeFromSpaceIds(memory, spaceId) {
|
|
13
|
+
return { ...memory, space_ids: memory.space_ids.filter((id) => id !== spaceId) };
|
|
14
|
+
}
|
|
15
|
+
export function addToGroupIds(memory, groupId) {
|
|
16
|
+
if (memory.group_ids.includes(groupId))
|
|
17
|
+
return memory;
|
|
18
|
+
return { ...memory, group_ids: [...memory.group_ids, groupId] };
|
|
19
|
+
}
|
|
20
|
+
export function removeFromGroupIds(memory, groupId) {
|
|
21
|
+
return { ...memory, group_ids: memory.group_ids.filter((id) => id !== groupId) };
|
|
22
|
+
}
|
|
23
|
+
export function isPublishedToSpace(memory, spaceId) {
|
|
24
|
+
return memory.space_ids.includes(spaceId);
|
|
25
|
+
}
|
|
26
|
+
export function isPublishedToGroup(memory, groupId) {
|
|
27
|
+
return memory.group_ids.includes(groupId);
|
|
28
|
+
}
|
|
29
|
+
export function getPublishedLocations(memory) {
|
|
30
|
+
return { spaces: [...memory.space_ids], groups: [...memory.group_ids] };
|
|
31
|
+
}
|
|
32
|
+
export function isPublished(memory) {
|
|
33
|
+
return memory.space_ids.length > 0 || memory.group_ids.length > 0;
|
|
34
|
+
}
|
|
35
|
+
export function getPublishedCount(memory) {
|
|
36
|
+
return memory.space_ids.length + memory.group_ids.length;
|
|
37
|
+
}
|
|
38
|
+
export function initializeTracking(memory) {
|
|
39
|
+
return {
|
|
40
|
+
...memory,
|
|
41
|
+
space_ids: memory.space_ids || [],
|
|
42
|
+
group_ids: memory.group_ids || [],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export function addMultipleSpaceIds(memory, spaceIds) {
|
|
46
|
+
const existing = new Set(memory.space_ids);
|
|
47
|
+
const merged = [...memory.space_ids];
|
|
48
|
+
for (const spaceId of spaceIds) {
|
|
49
|
+
if (!existing.has(spaceId)) {
|
|
50
|
+
existing.add(spaceId);
|
|
51
|
+
merged.push(spaceId);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return { ...memory, space_ids: merged };
|
|
55
|
+
}
|
|
56
|
+
export function addMultipleGroupIds(memory, groupIds) {
|
|
57
|
+
const existing = new Set(memory.group_ids);
|
|
58
|
+
const merged = [...memory.group_ids];
|
|
59
|
+
for (const groupId of groupIds) {
|
|
60
|
+
if (!existing.has(groupId)) {
|
|
61
|
+
existing.add(groupId);
|
|
62
|
+
merged.push(groupId);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return { ...memory, group_ids: merged };
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=tracking-arrays.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracking-arrays.js","sourceRoot":"","sources":["../../src/collections/tracking-arrays.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug level configuration for remember-core.
|
|
3
|
+
*
|
|
4
|
+
* Ported from remember-mcp/src/config.ts (DebugLevel enum and debugConfig).
|
|
5
|
+
* Controls verbosity of tool and service logging.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Debug levels for tool and service logging.
|
|
9
|
+
*/
|
|
10
|
+
export declare enum DebugLevel {
|
|
11
|
+
NONE = 0,
|
|
12
|
+
ERROR = 1,
|
|
13
|
+
WARN = 2,
|
|
14
|
+
INFO = 3,
|
|
15
|
+
DEBUG = 4,
|
|
16
|
+
TRACE = 5
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Parse a debug level string into a DebugLevel enum value.
|
|
20
|
+
*
|
|
21
|
+
* @param level - String representation (e.g. "DEBUG", "info", "TRACE")
|
|
22
|
+
* @returns Matching DebugLevel, defaults to NONE for unrecognized values
|
|
23
|
+
*/
|
|
24
|
+
export declare function parseDebugLevel(level: string | undefined): DebugLevel;
|
|
25
|
+
/**
|
|
26
|
+
* Create a debug configuration object from a debug level.
|
|
27
|
+
*
|
|
28
|
+
* @param level - The active debug level
|
|
29
|
+
* @returns Object with the level and an `enabled` helper to check if a given level is active
|
|
30
|
+
*/
|
|
31
|
+
export declare function createDebugConfig(level: DebugLevel): {
|
|
32
|
+
level: DebugLevel;
|
|
33
|
+
enabled: (checkLevel: DebugLevel) => boolean;
|
|
34
|
+
};
|
|
35
|
+
export type DebugConfig = ReturnType<typeof createDebugConfig>;
|
|
36
|
+
//# sourceMappingURL=debug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/config/debug.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,oBAAY,UAAU;IACpB,IAAI,IAAI;IACR,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;IACT,KAAK,IAAI;CACV;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAUrE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU;;0BAGzB,UAAU,KAAG,OAAO;EAE7C;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug level configuration for remember-core.
|
|
3
|
+
*
|
|
4
|
+
* Ported from remember-mcp/src/config.ts (DebugLevel enum and debugConfig).
|
|
5
|
+
* Controls verbosity of tool and service logging.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Debug levels for tool and service logging.
|
|
9
|
+
*/
|
|
10
|
+
export var DebugLevel;
|
|
11
|
+
(function (DebugLevel) {
|
|
12
|
+
DebugLevel[DebugLevel["NONE"] = 0] = "NONE";
|
|
13
|
+
DebugLevel[DebugLevel["ERROR"] = 1] = "ERROR";
|
|
14
|
+
DebugLevel[DebugLevel["WARN"] = 2] = "WARN";
|
|
15
|
+
DebugLevel[DebugLevel["INFO"] = 3] = "INFO";
|
|
16
|
+
DebugLevel[DebugLevel["DEBUG"] = 4] = "DEBUG";
|
|
17
|
+
DebugLevel[DebugLevel["TRACE"] = 5] = "TRACE";
|
|
18
|
+
})(DebugLevel || (DebugLevel = {}));
|
|
19
|
+
/**
|
|
20
|
+
* Parse a debug level string into a DebugLevel enum value.
|
|
21
|
+
*
|
|
22
|
+
* @param level - String representation (e.g. "DEBUG", "info", "TRACE")
|
|
23
|
+
* @returns Matching DebugLevel, defaults to NONE for unrecognized values
|
|
24
|
+
*/
|
|
25
|
+
export function parseDebugLevel(level) {
|
|
26
|
+
switch (level?.toUpperCase()) {
|
|
27
|
+
case 'TRACE': return DebugLevel.TRACE;
|
|
28
|
+
case 'DEBUG': return DebugLevel.DEBUG;
|
|
29
|
+
case 'INFO': return DebugLevel.INFO;
|
|
30
|
+
case 'WARN': return DebugLevel.WARN;
|
|
31
|
+
case 'ERROR': return DebugLevel.ERROR;
|
|
32
|
+
case 'NONE': return DebugLevel.NONE;
|
|
33
|
+
default: return DebugLevel.NONE;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Create a debug configuration object from a debug level.
|
|
38
|
+
*
|
|
39
|
+
* @param level - The active debug level
|
|
40
|
+
* @returns Object with the level and an `enabled` helper to check if a given level is active
|
|
41
|
+
*/
|
|
42
|
+
export function createDebugConfig(level) {
|
|
43
|
+
return {
|
|
44
|
+
level,
|
|
45
|
+
enabled: (checkLevel) => level >= checkLevel,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/config/debug.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,UAOX;AAPD,WAAY,UAAU;IACpB,2CAAQ,CAAA;IACR,6CAAS,CAAA;IACT,2CAAQ,CAAA;IACR,2CAAQ,CAAA;IACR,6CAAS,CAAA;IACT,6CAAS,CAAA;AACX,CAAC,EAPW,UAAU,KAAV,UAAU,QAOrB;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAyB;IACvD,QAAQ,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC;QAC7B,KAAK,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC;QACtC,KAAK,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC;QACtC,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC;QACpC,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC;QACpC,KAAK,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC;QACtC,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC;QACpC,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAiB;IACjD,OAAO;QACL,KAAK;QACL,OAAO,EAAE,CAAC,UAAsB,EAAW,EAAE,CAAC,KAAK,IAAI,UAAU;KAClE,CAAC;AACJ,CAAC"}
|