@prmichaelsen/remember-mcp 3.13.0 → 3.14.1

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.
Files changed (62) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/agent/milestones/milestone-17-remember-core-migration.md +140 -0
  3. package/agent/progress.yaml +123 -6
  4. package/agent/tasks/milestone-17-remember-core-migration/task-193-foundation-setup.md +58 -0
  5. package/agent/tasks/milestone-17-remember-core-migration/task-194-migrate-relationship-tools.md +47 -0
  6. package/agent/tasks/milestone-17-remember-core-migration/task-195-migrate-preference-tools.md +34 -0
  7. package/agent/tasks/milestone-17-remember-core-migration/task-196-migrate-memory-tools.md +46 -0
  8. package/agent/tasks/milestone-17-remember-core-migration/task-197-migrate-space-confirmation-tools.md +49 -0
  9. package/agent/tasks/milestone-17-remember-core-migration/task-198-migrate-space-search-moderate.md +46 -0
  10. package/agent/tasks/milestone-17-remember-core-migration/task-199-migrate-delete-memory.md +43 -0
  11. package/agent/tasks/milestone-17-remember-core-migration/task-200-code-cleanup-verification.md +52 -0
  12. package/dist/core-services.d.ts +25 -0
  13. package/dist/server-factory.js +3208 -3978
  14. package/dist/server.js +3708 -4474
  15. package/dist/tools/confirm-publish-moderation.spec.d.ts +3 -2
  16. package/dist/tools/create-memory.d.ts +1 -1
  17. package/dist/tools/query-space.d.ts +1 -1
  18. package/dist/tools/search-space.d.ts +10 -14
  19. package/jest.config.js +11 -0
  20. package/package.json +3 -1
  21. package/src/core-services.ts +50 -0
  22. package/src/tools/confirm-publish-moderation.spec.ts +120 -176
  23. package/src/tools/confirm.ts +70 -1035
  24. package/src/tools/create-memory.ts +16 -67
  25. package/src/tools/create-relationship.ts +13 -181
  26. package/src/tools/delete-memory.ts +7 -72
  27. package/src/tools/delete-relationship.ts +7 -91
  28. package/src/tools/deny.ts +4 -14
  29. package/src/tools/find-similar.ts +16 -110
  30. package/src/tools/get-preferences.ts +3 -8
  31. package/src/tools/moderate.spec.ts +65 -81
  32. package/src/tools/moderate.ts +18 -121
  33. package/src/tools/publish.ts +7 -204
  34. package/src/tools/query-space.ts +28 -140
  35. package/src/tools/retract.ts +7 -185
  36. package/src/tools/revise.ts +4 -136
  37. package/src/tools/search-relationship.ts +17 -116
  38. package/src/tools/search-space.ts +58 -304
  39. package/src/tools/set-preference.ts +3 -8
  40. package/src/tools/update-memory.ts +22 -190
  41. package/src/tools/update-relationship.ts +16 -90
  42. package/src/v2-smoke.e2e.ts +3 -2
  43. package/dist/collections/composite-ids.d.ts +0 -106
  44. package/dist/collections/core-infrastructure.spec.d.ts +0 -11
  45. package/dist/collections/dot-notation.d.ts +0 -106
  46. package/dist/collections/tracking-arrays.d.ts +0 -176
  47. package/dist/constants/content-types.d.ts +0 -61
  48. package/dist/services/confirmation-token.service.d.ts +0 -99
  49. package/dist/services/confirmation-token.service.spec.d.ts +0 -5
  50. package/dist/services/preferences-database.service.d.ts +0 -22
  51. package/dist/services/space-config.service.d.ts +0 -23
  52. package/dist/services/space-config.service.spec.d.ts +0 -2
  53. package/src/collections/composite-ids.ts +0 -193
  54. package/src/collections/core-infrastructure.spec.ts +0 -353
  55. package/src/collections/dot-notation.ts +0 -212
  56. package/src/collections/tracking-arrays.ts +0 -298
  57. package/src/constants/content-types.ts +0 -490
  58. package/src/services/confirmation-token.service.spec.ts +0 -254
  59. package/src/services/confirmation-token.service.ts +0 -328
  60. package/src/services/preferences-database.service.ts +0 -120
  61. package/src/services/space-config.service.spec.ts +0 -102
  62. package/src/services/space-config.service.ts +0 -79
@@ -1,102 +0,0 @@
1
- import { getSpaceConfig, setSpaceConfig, DEFAULT_SPACE_CONFIG } from './space-config.service.js';
2
- import * as firestoreInit from '../firestore/init';
3
-
4
- jest.mock('../firestore/init', () => ({
5
- getDocument: jest.fn(),
6
- setDocument: jest.fn(),
7
- }));
8
-
9
- const mockGetDocument = firestoreInit.getDocument as jest.MockedFunction<typeof firestoreInit.getDocument>;
10
- const mockSetDocument = firestoreInit.setDocument as jest.MockedFunction<typeof firestoreInit.setDocument>;
11
-
12
- describe('SpaceConfigService', () => {
13
- beforeEach(() => {
14
- jest.clearAllMocks();
15
- });
16
-
17
- describe('getSpaceConfig', () => {
18
- it('returns defaults when no Firestore doc exists', async () => {
19
- mockGetDocument.mockResolvedValue(null);
20
-
21
- const config = await getSpaceConfig('public', 'space');
22
-
23
- expect(config).toEqual(DEFAULT_SPACE_CONFIG);
24
- expect(config.require_moderation).toBe(false);
25
- expect(config.default_write_mode).toBe('owner_only');
26
- });
27
-
28
- it('merges stored config with defaults', async () => {
29
- mockGetDocument.mockResolvedValue({ require_moderation: true });
30
-
31
- const config = await getSpaceConfig('moderated-group', 'group');
32
-
33
- expect(config.require_moderation).toBe(true);
34
- expect(config.default_write_mode).toBe('owner_only');
35
- });
36
-
37
- it('uses correct Firestore path for spaces', async () => {
38
- mockGetDocument.mockResolvedValue(null);
39
-
40
- await getSpaceConfig('public', 'space');
41
-
42
- expect(mockGetDocument).toHaveBeenCalledWith('spaces/public/config', 'settings');
43
- });
44
-
45
- it('uses correct Firestore path for groups', async () => {
46
- mockGetDocument.mockResolvedValue(null);
47
-
48
- await getSpaceConfig('team-alpha', 'group');
49
-
50
- expect(mockGetDocument).toHaveBeenCalledWith('groups/team-alpha/config', 'settings');
51
- });
52
-
53
- it('returns defaults on Firestore error', async () => {
54
- mockGetDocument.mockRejectedValue(new Error('Firestore unavailable'));
55
-
56
- const config = await getSpaceConfig('public', 'space');
57
-
58
- expect(config).toEqual(DEFAULT_SPACE_CONFIG);
59
- });
60
- });
61
-
62
- describe('setSpaceConfig', () => {
63
- it('writes to correct Firestore path for spaces', async () => {
64
- mockSetDocument.mockResolvedValue(undefined);
65
-
66
- await setSpaceConfig('public', 'space', { require_moderation: true });
67
-
68
- expect(mockSetDocument).toHaveBeenCalledWith(
69
- 'spaces/public/config',
70
- 'settings',
71
- { require_moderation: true },
72
- { merge: true }
73
- );
74
- });
75
-
76
- it('writes to correct Firestore path for groups', async () => {
77
- mockSetDocument.mockResolvedValue(undefined);
78
-
79
- await setSpaceConfig('team-alpha', 'group', { default_write_mode: 'group_editors' });
80
-
81
- expect(mockSetDocument).toHaveBeenCalledWith(
82
- 'groups/team-alpha/config',
83
- 'settings',
84
- { default_write_mode: 'group_editors' },
85
- { merge: true }
86
- );
87
- });
88
-
89
- it('supports partial config updates', async () => {
90
- mockSetDocument.mockResolvedValue(undefined);
91
-
92
- await setSpaceConfig('public', 'space', { require_moderation: true });
93
-
94
- expect(mockSetDocument).toHaveBeenCalledWith(
95
- 'spaces/public/config',
96
- 'settings',
97
- { require_moderation: true },
98
- { merge: true }
99
- );
100
- });
101
- });
102
- });
@@ -1,79 +0,0 @@
1
- /**
2
- * Space/Group Configuration Service
3
- *
4
- * Per-space and per-group behavioral configuration stored in Firestore.
5
- * Controls moderation requirements, write modes, and other behavioral rules.
6
- */
7
-
8
- import { getDocument, setDocument } from '../firestore/init.js';
9
- import { logger } from '../utils/logger.js';
10
- import type { WriteMode } from '../types/auth.js';
11
-
12
- export interface SpaceConfig {
13
- require_moderation: boolean;
14
- default_write_mode: WriteMode;
15
- }
16
-
17
- export const DEFAULT_SPACE_CONFIG: SpaceConfig = {
18
- require_moderation: false,
19
- default_write_mode: 'owner_only',
20
- };
21
-
22
- /**
23
- * Get the Firestore path for a space or group config document.
24
- */
25
- function getConfigPath(id: string, type: 'space' | 'group'): { collectionPath: string; docId: string } {
26
- const prefix = type === 'space' ? 'spaces' : 'groups';
27
- return {
28
- collectionPath: `${prefix}/${id}/config`,
29
- docId: 'settings',
30
- };
31
- }
32
-
33
- /**
34
- * Get configuration for a space or group.
35
- * Returns defaults merged with any stored config.
36
- */
37
- export async function getSpaceConfig(
38
- id: string,
39
- type: 'space' | 'group'
40
- ): Promise<SpaceConfig> {
41
- try {
42
- const { collectionPath, docId } = getConfigPath(id, type);
43
- const doc = await getDocument(collectionPath, docId);
44
-
45
- if (!doc) {
46
- return { ...DEFAULT_SPACE_CONFIG };
47
- }
48
-
49
- return { ...DEFAULT_SPACE_CONFIG, ...doc };
50
- } catch (error) {
51
- logger.error('Failed to get space config', {
52
- service: 'SpaceConfigService',
53
- id,
54
- type,
55
- error: error instanceof Error ? error.message : String(error),
56
- });
57
- return { ...DEFAULT_SPACE_CONFIG };
58
- }
59
- }
60
-
61
- /**
62
- * Set configuration for a space or group.
63
- * Merges partial config with existing values.
64
- */
65
- export async function setSpaceConfig(
66
- id: string,
67
- type: 'space' | 'group',
68
- config: Partial<SpaceConfig>
69
- ): Promise<void> {
70
- const { collectionPath, docId } = getConfigPath(id, type);
71
- await setDocument(collectionPath, docId, config, { merge: true });
72
-
73
- logger.info('Space config updated', {
74
- service: 'SpaceConfigService',
75
- id,
76
- type,
77
- updatedKeys: Object.keys(config),
78
- });
79
- }