context-vault 3.7.0 → 3.9.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.
Files changed (73) hide show
  1. package/assets/agent-rules.md +28 -1
  2. package/assets/setup-prompt.md +16 -1
  3. package/bin/cli.js +1003 -7
  4. package/dist/auto-memory.d.ts +52 -0
  5. package/dist/auto-memory.d.ts.map +1 -0
  6. package/dist/auto-memory.js +142 -0
  7. package/dist/auto-memory.js.map +1 -0
  8. package/dist/register-tools.d.ts.map +1 -1
  9. package/dist/register-tools.js +2 -0
  10. package/dist/register-tools.js.map +1 -1
  11. package/dist/remote.d.ts +134 -0
  12. package/dist/remote.d.ts.map +1 -0
  13. package/dist/remote.js +242 -0
  14. package/dist/remote.js.map +1 -0
  15. package/dist/remote.test.d.ts +2 -0
  16. package/dist/remote.test.d.ts.map +1 -0
  17. package/dist/remote.test.js +107 -0
  18. package/dist/remote.test.js.map +1 -0
  19. package/dist/stats/recall.d.ts +33 -0
  20. package/dist/stats/recall.d.ts.map +1 -0
  21. package/dist/stats/recall.js +86 -0
  22. package/dist/stats/recall.js.map +1 -0
  23. package/dist/tools/context-status.d.ts.map +1 -1
  24. package/dist/tools/context-status.js +40 -0
  25. package/dist/tools/context-status.js.map +1 -1
  26. package/dist/tools/get-context.d.ts.map +1 -1
  27. package/dist/tools/get-context.js +44 -0
  28. package/dist/tools/get-context.js.map +1 -1
  29. package/dist/tools/publish-to-team.d.ts +11 -0
  30. package/dist/tools/publish-to-team.d.ts.map +1 -0
  31. package/dist/tools/publish-to-team.js +91 -0
  32. package/dist/tools/publish-to-team.js.map +1 -0
  33. package/dist/tools/publish-to-team.test.d.ts +2 -0
  34. package/dist/tools/publish-to-team.test.d.ts.map +1 -0
  35. package/dist/tools/publish-to-team.test.js +95 -0
  36. package/dist/tools/publish-to-team.test.js.map +1 -0
  37. package/dist/tools/recall.d.ts +1 -1
  38. package/dist/tools/recall.d.ts.map +1 -1
  39. package/dist/tools/recall.js +85 -1
  40. package/dist/tools/recall.js.map +1 -1
  41. package/dist/tools/save-context.d.ts +5 -1
  42. package/dist/tools/save-context.d.ts.map +1 -1
  43. package/dist/tools/save-context.js +163 -2
  44. package/dist/tools/save-context.js.map +1 -1
  45. package/dist/tools/session-start.d.ts.map +1 -1
  46. package/dist/tools/session-start.js +90 -86
  47. package/dist/tools/session-start.js.map +1 -1
  48. package/node_modules/@context-vault/core/dist/config.d.ts +3 -1
  49. package/node_modules/@context-vault/core/dist/config.d.ts.map +1 -1
  50. package/node_modules/@context-vault/core/dist/config.js +48 -2
  51. package/node_modules/@context-vault/core/dist/config.js.map +1 -1
  52. package/node_modules/@context-vault/core/dist/main.d.ts +1 -1
  53. package/node_modules/@context-vault/core/dist/main.d.ts.map +1 -1
  54. package/node_modules/@context-vault/core/dist/main.js.map +1 -1
  55. package/node_modules/@context-vault/core/dist/types.d.ts +7 -0
  56. package/node_modules/@context-vault/core/dist/types.d.ts.map +1 -1
  57. package/node_modules/@context-vault/core/package.json +1 -1
  58. package/node_modules/@context-vault/core/src/config.ts +50 -3
  59. package/node_modules/@context-vault/core/src/main.ts +1 -0
  60. package/node_modules/@context-vault/core/src/types.ts +8 -0
  61. package/package.json +2 -2
  62. package/src/auto-memory.ts +169 -0
  63. package/src/register-tools.ts +2 -0
  64. package/src/remote.test.ts +123 -0
  65. package/src/remote.ts +325 -0
  66. package/src/stats/recall.ts +139 -0
  67. package/src/tools/context-status.ts +40 -0
  68. package/src/tools/get-context.ts +44 -0
  69. package/src/tools/publish-to-team.test.ts +115 -0
  70. package/src/tools/publish-to-team.ts +112 -0
  71. package/src/tools/recall.ts +79 -1
  72. package/src/tools/save-context.ts +167 -1
  73. package/src/tools/session-start.ts +88 -100
@@ -0,0 +1,91 @@
1
+ import { z } from 'zod';
2
+ import { ok, err } from '../helpers.js';
3
+ import { getRemoteClient, getTeamId } from '../remote.js';
4
+ export const name = 'publish_to_team';
5
+ export const description = 'Publish a local vault entry to a team vault. Wraps the POST /api/vault/publish endpoint. Returns the published entry and any conflict advisory from the server. If the server detects sensitive content, returns an advisory with matched patterns. Use force: true to override.';
6
+ export const inputSchema = {
7
+ entry_id: z
8
+ .string()
9
+ .describe('The ULID of the local entry to publish to the team vault.'),
10
+ team_id: z
11
+ .string()
12
+ .optional()
13
+ .describe('Team ID to publish to. Defaults to the teamId in remote config.'),
14
+ force: z
15
+ .boolean()
16
+ .optional()
17
+ .describe('When true, skip the server-side privacy scan and publish anyway. Use when you have reviewed the content and confirmed it is safe to share.'),
18
+ };
19
+ export async function handler({ entry_id, team_id, force }, ctx, _shared) {
20
+ const remoteClient = getRemoteClient(ctx.config);
21
+ if (!remoteClient) {
22
+ return err('Remote is not configured. Run `context-vault remote setup` first.', 'NOT_CONFIGURED');
23
+ }
24
+ const effectiveTeamId = team_id || getTeamId(ctx.config);
25
+ if (!effectiveTeamId) {
26
+ return err('No team ID specified and none configured. Use `context-vault team join <team-id>` or pass team_id parameter.', 'NO_TEAM');
27
+ }
28
+ const existing = ctx.stmts.getEntryById.get(entry_id);
29
+ if (!existing) {
30
+ return err(`Entry not found locally: ${entry_id}`, 'NOT_FOUND');
31
+ }
32
+ if (existing.category === 'event') {
33
+ return err('Event entries cannot be published to team vaults (private by design).', 'FORBIDDEN');
34
+ }
35
+ const tags = existing.tags ? JSON.parse(existing.tags) : [];
36
+ const meta = existing.meta ? JSON.parse(existing.meta) : {};
37
+ const result = await remoteClient.publishToTeam({
38
+ entryId: entry_id,
39
+ teamId: effectiveTeamId,
40
+ visibility: 'team',
41
+ force: !!force,
42
+ entry: {
43
+ kind: existing.kind,
44
+ title: existing.title,
45
+ body: existing.body,
46
+ tags,
47
+ meta,
48
+ source: existing.source,
49
+ identity_key: existing.identity_key,
50
+ tier: existing.tier,
51
+ category: existing.category,
52
+ },
53
+ });
54
+ if (!result.ok) {
55
+ if (result.status === 422 && result.privacyMatches?.length) {
56
+ return formatPrivacyAdvisory(result.privacyMatches);
57
+ }
58
+ const parts = [`Failed to publish: ${result.error}`];
59
+ if (result.conflict) {
60
+ parts.push('');
61
+ parts.push(`Conflict detected: similar entry by ${result.conflict.existing_author} (${(result.conflict.similarity * 100).toFixed(0)}% match)`);
62
+ parts.push(` Entry ID: ${result.conflict.existing_entry_id}`);
63
+ parts.push(` ${result.conflict.suggestion}`);
64
+ }
65
+ return err(parts.join('\n'), 'PUBLISH_FAILED');
66
+ }
67
+ const parts = [
68
+ `## Published to team`,
69
+ `Entry \`${entry_id}\` published to team \`${effectiveTeamId}\``,
70
+ ];
71
+ if (result.id) {
72
+ parts.push(`Team entry ID: \`${result.id}\``);
73
+ }
74
+ if (result.conflict) {
75
+ parts.push('');
76
+ parts.push(`**Conflict advisory:** Similar entry by ${result.conflict.existing_author} (${(result.conflict.similarity * 100).toFixed(0)}% match)`);
77
+ parts.push(` Entry: \`${result.conflict.existing_entry_id}\``);
78
+ parts.push(` ${result.conflict.suggestion}`);
79
+ }
80
+ return ok(parts.join('\n'));
81
+ }
82
+ function formatPrivacyAdvisory(matches) {
83
+ const lines = ['This entry contains sensitive content that should be removed before sharing:'];
84
+ for (const m of matches) {
85
+ lines.push(`- ${m.type} in ${m.field} (line ${m.line}): ${m.value}`);
86
+ }
87
+ lines.push('');
88
+ lines.push('Remove these and try again, or set force: true to override.');
89
+ return ok(lines.join('\n'));
90
+ }
91
+ //# sourceMappingURL=publish-to-team.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish-to-team.js","sourceRoot":"","sources":["../../src/tools/publish-to-team.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG1D,MAAM,CAAC,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAEtC,MAAM,CAAC,MAAM,WAAW,GACtB,kRAAkR,CAAC;AAErR,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,2DAA2D,CAAC;IACxE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,iEAAiE,CAAC;IAC9E,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,4IAA4I,CAAC;CAC1J,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAuB,EACjD,GAAa,EACb,OAAkB;IAElB,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,GAAG,CAAC,mEAAmE,EAAE,gBAAgB,CAAC,CAAC;IACpG,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,GAAG,CACR,8GAA8G,EAC9G,SAAS,CACV,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAoC,CAAC;IACzF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,GAAG,CAAC,4BAA4B,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,GAAG,CAAC,uEAAuE,EAAE,WAAW,CAAC,CAAC;IACnG,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC;QAC9C,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,eAAe;QACvB,UAAU,EAAE,MAAM;QAClB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI;YACJ,IAAI;YACJ,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;SAC5B;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;YAC3D,OAAO,qBAAqB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,sBAAsB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACrD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,uCAAuC,MAAM,CAAC,QAAQ,CAAC,eAAe,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAC/I,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,sBAAsB;QACtB,WAAW,QAAQ,0BAA0B,eAAe,IAAI;KACjE,CAAC;IACF,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,2CAA2C,MAAM,CAAC,QAAQ,CAAC,eAAe,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACnJ,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,QAAQ,CAAC,iBAAiB,IAAI,CAAC,CAAC;QAChE,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,qBAAqB,CAAC,OAA4E;IACzG,MAAM,KAAK,GAAG,CAAC,8EAA8E,CAAC,CAAC;IAC/F,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC1E,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=publish-to-team.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish-to-team.test.d.ts","sourceRoot":"","sources":["../../src/tools/publish-to-team.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,95 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ vi.mock('../remote.js', () => ({
3
+ getRemoteClient: vi.fn(),
4
+ getTeamId: vi.fn(),
5
+ }));
6
+ vi.mock('../helpers.js', async () => {
7
+ const actual = await vi.importActual('../helpers.js');
8
+ return actual;
9
+ });
10
+ import { handler } from './publish-to-team.js';
11
+ import { getRemoteClient, getTeamId } from '../remote.js';
12
+ function makeCtx(entry) {
13
+ return {
14
+ config: { remote: { enabled: true, url: 'http://test', apiKey: 'k', teamId: 'team-1' } },
15
+ stmts: {
16
+ getEntryById: {
17
+ get: vi.fn().mockReturnValue(entry ?? {
18
+ id: 'entry-1',
19
+ kind: 'insight',
20
+ category: 'knowledge',
21
+ title: 'Test Entry',
22
+ body: 'Some body',
23
+ tags: '["tag1"]',
24
+ meta: '{}',
25
+ source: null,
26
+ identity_key: null,
27
+ tier: 'working',
28
+ }),
29
+ },
30
+ },
31
+ };
32
+ }
33
+ describe('publish_to_team handler', () => {
34
+ beforeEach(() => {
35
+ vi.clearAllMocks();
36
+ getTeamId.mockReturnValue('team-1');
37
+ });
38
+ it('returns formatted advisory on 422 privacy scan failure', async () => {
39
+ const mockClient = {
40
+ publishToTeam: vi.fn().mockResolvedValue({
41
+ ok: false,
42
+ status: 422,
43
+ error: 'Entry contains potentially sensitive content',
44
+ privacyMatches: [
45
+ { type: 'email', value: 'fe***@klarhimmel.se', field: 'body', line: 3 },
46
+ { type: 'api_key', value: 'sk-proj-...abc', field: 'body', line: 7 },
47
+ ],
48
+ }),
49
+ };
50
+ getRemoteClient.mockReturnValue(mockClient);
51
+ const result = await handler({ entry_id: 'entry-1' }, makeCtx(), {});
52
+ expect(result.isError).toBeUndefined();
53
+ const text = result.content[0].text;
54
+ expect(text).toContain('sensitive content');
55
+ expect(text).toContain('email in body (line 3)');
56
+ expect(text).toContain('api_key in body (line 7)');
57
+ expect(text).toContain('force: true');
58
+ });
59
+ it('passes force: true through to the remote client', async () => {
60
+ const mockClient = {
61
+ publishToTeam: vi.fn().mockResolvedValue({
62
+ ok: true,
63
+ id: 'team-entry-1',
64
+ }),
65
+ };
66
+ getRemoteClient.mockReturnValue(mockClient);
67
+ await handler({ entry_id: 'entry-1', force: true }, makeCtx(), {});
68
+ expect(mockClient.publishToTeam).toHaveBeenCalledWith(expect.objectContaining({ force: true }));
69
+ });
70
+ it('passes force: false when not set', async () => {
71
+ const mockClient = {
72
+ publishToTeam: vi.fn().mockResolvedValue({
73
+ ok: true,
74
+ id: 'team-entry-1',
75
+ }),
76
+ };
77
+ getRemoteClient.mockReturnValue(mockClient);
78
+ await handler({ entry_id: 'entry-1' }, makeCtx(), {});
79
+ expect(mockClient.publishToTeam).toHaveBeenCalledWith(expect.objectContaining({ force: false }));
80
+ });
81
+ it('returns error for non-privacy 422 failures', async () => {
82
+ const mockClient = {
83
+ publishToTeam: vi.fn().mockResolvedValue({
84
+ ok: false,
85
+ status: 422,
86
+ error: 'Some other validation error',
87
+ }),
88
+ };
89
+ getRemoteClient.mockReturnValue(mockClient);
90
+ const result = await handler({ entry_id: 'entry-1' }, makeCtx(), {});
91
+ expect(result.isError).toBe(true);
92
+ expect(result.content[0].text).toContain('Failed to publish');
93
+ });
94
+ });
95
+ //# sourceMappingURL=publish-to-team.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish-to-team.test.js","sourceRoot":"","sources":["../../src/tools/publish-to-team.test.ts"],"names":[],"mappings":"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"}
@@ -12,8 +12,8 @@ export declare const inputSchema: {
12
12
  signal_type: z.ZodEnum<{
13
13
  prompt: "prompt";
14
14
  task: "task";
15
- file: "file";
16
15
  error: "error";
16
+ file: "file";
17
17
  }>;
18
18
  bucket: z.ZodOptional<z.ZodString>;
19
19
  session_id: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../../src/tools/recall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA0BnE;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBxD;AAED,eAAO,MAAM,IAAI,WAAW,CAAC;AAE7B,eAAO,MAAM,WAAW,8MACqL,CAAC;AAE9M,eAAO,MAAM,WAAW;;;;;;;;;;;CAmBvB,CAAC;AAEF,wBAAsB,OAAO,CAC3B,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3E,GAAG,EAAE,QAAQ,EACb,EAAE,aAAa,EAAE,EAAE,SAAS,GAC3B,OAAO,CAAC,UAAU,CAAC,CA0MrB;AAoBD,8CAA8C;AAC9C,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
1
+ {"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../../src/tools/recall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA0BnE;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBxD;AAED,eAAO,MAAM,IAAI,WAAW,CAAC;AAE7B,eAAO,MAAM,WAAW,8MACqL,CAAC;AAE9M,eAAO,MAAM,WAAW;;;;;;;;;;;CAmBvB,CAAC;AAEF,wBAAsB,OAAO,CAC3B,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3E,GAAG,EAAE,QAAQ,EACb,EAAE,aAAa,EAAE,EAAE,SAAS,GAC3B,OAAO,CAAC,UAAU,CAAC,CAsRrB;AAoBD,8CAA8C;AAC9C,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
@@ -1,6 +1,8 @@
1
1
  import { z } from 'zod';
2
2
  import { ok } from '../helpers.js';
3
3
  import { isEmbedAvailable } from '@context-vault/core/embed';
4
+ import { getAutoMemory, findAutoMemoryOverlaps } from '../auto-memory.js';
5
+ import { getRemoteClient, getTeamId } from '../remote.js';
4
6
  const SEMANTIC_SIMILARITY_THRESHOLD = 0.6;
5
7
  const CO_RETRIEVAL_WEIGHT_CAP = 50;
6
8
  const STOPWORDS = new Set([
@@ -141,6 +143,64 @@ export async function handler({ signal, signal_type, bucket, session_id, max_hin
141
143
  if (sessionSet)
142
144
  sessionSet.add(row.id);
143
145
  }
146
+ // Remote recall: merge hints from hosted API
147
+ const remoteClient = getRemoteClient(ctx.config);
148
+ if (remoteClient && hints.length < limit) {
149
+ try {
150
+ const remoteHints = await remoteClient.recall({
151
+ signal,
152
+ signal_type,
153
+ bucket,
154
+ max_hints: limit - hints.length,
155
+ });
156
+ const localIds = new Set(hints.map(h => h.id));
157
+ for (const rh of remoteHints) {
158
+ if (hints.length >= limit)
159
+ break;
160
+ if (localIds.has(rh.id))
161
+ continue;
162
+ if (sessionSet && !bypassDedup && sessionSet.has(rh.id)) {
163
+ suppressed++;
164
+ continue;
165
+ }
166
+ hints.push(rh);
167
+ if (sessionSet)
168
+ sessionSet.add(rh.id);
169
+ }
170
+ }
171
+ catch (e) {
172
+ console.warn(`[context-vault] Remote recall failed: ${e.message}`);
173
+ }
174
+ }
175
+ // Team vault recall: include team results if teamId is configured
176
+ const teamId = getTeamId(ctx.config);
177
+ if (remoteClient && teamId && hints.length < limit) {
178
+ try {
179
+ const teamHints = await remoteClient.teamRecall(teamId, {
180
+ signal,
181
+ signal_type,
182
+ bucket,
183
+ max_hints: limit - hints.length,
184
+ });
185
+ const existingIds = new Set(hints.map(h => h.id));
186
+ for (const th of teamHints) {
187
+ if (hints.length >= limit)
188
+ break;
189
+ if (existingIds.has(th.id))
190
+ continue;
191
+ if (sessionSet && !bypassDedup && sessionSet.has(th.id)) {
192
+ suppressed++;
193
+ continue;
194
+ }
195
+ hints.push({ ...th, tags: [...(th.tags || []), '[team]'] });
196
+ if (sessionSet)
197
+ sessionSet.add(th.id);
198
+ }
199
+ }
200
+ catch (e) {
201
+ console.warn(`[context-vault] Team recall failed: ${e.message}`);
202
+ }
203
+ }
144
204
  let method = hints.length > 0 ? 'tag_match' : 'none';
145
205
  // Semantic fallback: when fast-path returns 0 results and signal is not file-based
146
206
  if (hints.length === 0 && signal_type !== 'file' && isEmbedAvailable()) {
@@ -218,10 +278,33 @@ export async function handler({ signal, signal_type, bucket, session_id, max_hin
218
278
  if (hints.length >= 2) {
219
279
  recordCoRetrieval(ctx, hints.map((h) => h.id));
220
280
  }
281
+ // Check for auto-memory overlap to avoid redundant surfacing
282
+ let autoMemoryOverlaps = [];
283
+ try {
284
+ const autoMemory = getAutoMemory();
285
+ if (autoMemory.detected && autoMemory.entries.length > 0) {
286
+ for (const h of hints) {
287
+ const searchText = [h.title, h.summary].filter(Boolean).join(' ');
288
+ const overlaps = findAutoMemoryOverlaps(autoMemory, searchText, 0.3);
289
+ if (overlaps.length > 0) {
290
+ autoMemoryOverlaps.push({
291
+ hint_id: h.id,
292
+ memory_file: overlaps[0].file,
293
+ memory_name: overlaps[0].name,
294
+ });
295
+ }
296
+ }
297
+ }
298
+ }
299
+ catch {
300
+ // Non-fatal
301
+ }
221
302
  // Format output
222
303
  const lines = [`[Vault: ${hints.length} ${hints.length === 1 ? 'entry' : 'entries'} may be relevant]`];
223
304
  for (const h of hints) {
224
- lines.push(`- "${h.title}" (${h.kind}, ${h.relevance})`);
305
+ const overlap = autoMemoryOverlaps.find(o => o.hint_id === h.id);
306
+ const overlapNote = overlap ? ` [also in auto-memory: ${overlap.memory_name}]` : '';
307
+ lines.push(`- "${h.title}" (${h.kind}, ${h.relevance})${overlapNote}`);
225
308
  }
226
309
  lines.push('Use get_context to retrieve full details.');
227
310
  const result = ok(lines.join('\n'));
@@ -231,6 +314,7 @@ export async function handler({ signal, signal_type, bucket, session_id, max_hin
231
314
  signal_keywords: keywords,
232
315
  suppressed,
233
316
  hints,
317
+ auto_memory_overlaps: autoMemoryOverlaps.length > 0 ? autoMemoryOverlaps : undefined,
234
318
  };
235
319
  return result;
236
320
  }
@@ -1 +1 @@
1
- {"version":3,"file":"recall.js","sourceRoot":"","sources":["../../src/tools/recall.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recall.js","sourceRoot":"","sources":["../../src/tools/recall.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,10 @@ export declare const inputSchema: {
33
33
  }>>;
34
34
  encoding_context: z.ZodOptional<z.ZodAny>;
35
35
  indexed: z.ZodOptional<z.ZodBoolean>;
36
+ visibility: z.ZodOptional<z.ZodEnum<{
37
+ team: "team";
38
+ personal: "personal";
39
+ }>>;
36
40
  };
37
- export declare function handler({ id, kind, title, body, tags, meta, folder, source, identity_key, expires_at, supersedes, related_to, source_files, dry_run, similarity_threshold, tier, conflict_resolution, encoding_context, indexed, }: Record<string, any>, ctx: LocalCtx, { ensureIndexed }: SharedCtx): Promise<ToolResult>;
41
+ export declare function handler({ id, kind, title, body, tags, meta, folder, source, identity_key, expires_at, supersedes, related_to, source_files, dry_run, similarity_threshold, tier, conflict_resolution, encoding_context, indexed, visibility, }: Record<string, any>, ctx: LocalCtx, { ensureIndexed }: SharedCtx): Promise<ToolResult>;
38
42
  //# sourceMappingURL=save-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"save-context.d.ts","sourceRoot":"","sources":["../../src/tools/save-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiHnE,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CA+CpE;AAmGD,eAAO,MAAM,IAAI,iBAAiB,CAAC;AAEnC,eAAO,MAAM,WAAW,4PAC8N,CAAC;AAEvP,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoGvB,CAAC;AAEF,wBAAsB,OAAO,CAC3B,EACE,EAAE,EACF,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,OAAO,EACP,oBAAoB,EACpB,IAAI,EACJ,mBAAmB,EACnB,gBAAgB,EAChB,OAAO,GACR,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtB,GAAG,EAAE,QAAQ,EACb,EAAE,aAAa,EAAE,EAAE,SAAS,GAC3B,OAAO,CAAC,UAAU,CAAC,CA2WrB"}
1
+ {"version":3,"file":"save-context.d.ts","sourceRoot":"","sources":["../../src/tools/save-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA4HnE,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CA+CpE;AAmGD,eAAO,MAAM,IAAI,iBAAiB,CAAC;AAEnC,eAAO,MAAM,WAAW,4PAC8N,CAAC;AAEvP,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0GvB,CAAC;AAEF,wBAAsB,OAAO,CAC3B,EACE,EAAE,EACF,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,OAAO,EACP,oBAAoB,EACpB,IAAI,EACJ,mBAAmB,EACnB,gBAAgB,EAChB,OAAO,EACP,UAAU,GACX,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtB,GAAG,EAAE,QAAQ,EACb,EAAE,aAAa,EAAE,EAAE,SAAS,GAC3B,OAAO,CAAC,UAAU,CAAC,CA6frB"}
@@ -2,7 +2,7 @@ import { z } from 'zod';
2
2
  import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'node:fs';
3
3
  import { resolve, basename, join } from 'node:path';
4
4
  import { homedir } from 'node:os';
5
- import { captureAndIndex, updateEntryFile } from '@context-vault/core/capture';
5
+ import { captureAndIndex, updateEntryFile, writeEntry } from '@context-vault/core/capture';
6
6
  import { indexEntry } from '@context-vault/core/index';
7
7
  import { categoryFor, defaultTierFor } from '@context-vault/core/categories';
8
8
  import { normalizeKind, kindToPath } from '@context-vault/core/files';
@@ -11,6 +11,8 @@ import { shouldIndex } from '@context-vault/core/indexing';
11
11
  import { ok, err, errWithHint, ensureVaultExists, ensureValidKind, kindIcon } from '../helpers.js';
12
12
  import { maybeShowFeedbackPrompt } from '../telemetry.js';
13
13
  import { validateRelatedTo } from '../linking.js';
14
+ import { getAutoMemory, findAutoMemoryOverlaps } from '../auto-memory.js';
15
+ import { getRemoteClient, getTeamId } from '../remote.js';
14
16
  import { MAX_BODY_LENGTH, MAX_TITLE_LENGTH, MAX_KIND_LENGTH, MAX_TAG_LENGTH, MAX_TAGS_COUNT, MAX_META_LENGTH, MAX_SOURCE_LENGTH, MAX_IDENTITY_KEY_LENGTH, } from '@context-vault/core/constants';
15
17
  const DEFAULT_SIMILARITY_THRESHOLD = 0.85;
16
18
  const SKIP_THRESHOLD = 0.95;
@@ -29,6 +31,18 @@ function isDualWriteEnabled(config) {
29
31
  return true;
30
32
  }
31
33
  }
34
+ function isDeferredSyncEnabled(config) {
35
+ try {
36
+ const configPath = join(config.dataDir, 'config.json');
37
+ if (!existsSync(configPath))
38
+ return false;
39
+ const fc = JSON.parse(readFileSync(configPath, 'utf-8'));
40
+ return fc.dualWrite?.deferredSync === true;
41
+ }
42
+ catch {
43
+ return false;
44
+ }
45
+ }
32
46
  function dualWriteLocal(entryFilePath, kind) {
33
47
  const cwd = process.cwd();
34
48
  const home = homedir();
@@ -307,8 +321,12 @@ export const inputSchema = {
307
321
  .boolean()
308
322
  .optional()
309
323
  .describe('Whether to index this entry for search (generate embeddings + FTS). Default: auto-determined by indexing config. Set to false to store file + metadata only, skipping embedding generation. Set to true to force indexing regardless of config rules.'),
324
+ visibility: z
325
+ .enum(['personal', 'team'])
326
+ .optional()
327
+ .describe('Where to save: "personal" (default) saves to local + personal remote. "team" publishes to the team vault instead via POST /api/vault/publish. Requires teamId in remote config or a prior `context-vault team join`.'),
310
328
  };
311
- export async function handler({ id, kind, title, body, tags, meta, folder, source, identity_key, expires_at, supersedes, related_to, source_files, dry_run, similarity_threshold, tier, conflict_resolution, encoding_context, indexed, }, ctx, { ensureIndexed }) {
329
+ export async function handler({ id, kind, title, body, tags, meta, folder, source, identity_key, expires_at, supersedes, related_to, source_files, dry_run, similarity_threshold, tier, conflict_resolution, encoding_context, indexed, visibility, }, ctx, { ensureIndexed }) {
312
330
  const { config } = ctx;
313
331
  const suggestMode = conflict_resolution !== 'off';
314
332
  const vaultErr = ensureVaultExists(config);
@@ -403,6 +421,21 @@ export async function handler({ id, kind, title, body, tags, meta, folder, sourc
403
421
  if (isDualWriteEnabled(config) && entry.filePath) {
404
422
  dualWriteLocal(entry.filePath, entry.kind);
405
423
  }
424
+ // Remote sync for updates: fire-and-forget PUT to hosted API
425
+ const updateRemoteClient = getRemoteClient(config);
426
+ if (updateRemoteClient) {
427
+ updateRemoteClient.saveEntry({
428
+ id: entry.id,
429
+ kind: entry.kind,
430
+ title: entry.title,
431
+ body: entry.body,
432
+ tags: entry.tags,
433
+ meta: entry.meta,
434
+ source: entry.source,
435
+ }).catch((e) => {
436
+ console.warn(`[context-vault] Remote sync (update) failed: ${e.message}`);
437
+ });
438
+ }
406
439
  const relPath = entry.filePath
407
440
  ? entry.filePath.replace(config.vaultDir + '/', '')
408
441
  : entry.filePath;
@@ -428,6 +461,63 @@ export async function handler({ id, kind, title, body, tags, meta, folder, sourc
428
461
  if (categoryFor(normalizedKind) === 'entity' && !identity_key) {
429
462
  return err(`Entity kind "${normalizedKind}" requires identity_key`, 'MISSING_IDENTITY_KEY');
430
463
  }
464
+ // ── Deferred sync: file-only write, skip DB entirely ──────────────────
465
+ if (isDeferredSyncEnabled(config)) {
466
+ const category = categoryFor(normalizedKind);
467
+ const effectiveTier = tier ?? defaultTierFor(normalizedKind);
468
+ const mergedMeta = { ...(meta || {}) };
469
+ if (folder)
470
+ mergedMeta.folder = folder;
471
+ const parsedCtx = parseContextParam(encoding_context);
472
+ if (parsedCtx?.structured) {
473
+ mergedMeta.encoding_context = parsedCtx.structured;
474
+ }
475
+ else if (parsedCtx?.text) {
476
+ mergedMeta.encoding_context = parsedCtx.text;
477
+ }
478
+ if (normalizedKind === 'decision') {
479
+ enrichDecisionMeta(mergedMeta, title, body);
480
+ }
481
+ const finalMeta = Object.keys(mergedMeta).length ? mergedMeta : undefined;
482
+ let entry;
483
+ try {
484
+ entry = writeEntry(ctx, {
485
+ kind: normalizedKind,
486
+ title,
487
+ body,
488
+ meta: finalMeta,
489
+ tags,
490
+ source,
491
+ folder,
492
+ identity_key,
493
+ expires_at,
494
+ supersedes,
495
+ related_to,
496
+ source_files,
497
+ tier: effectiveTier,
498
+ indexed: false,
499
+ });
500
+ }
501
+ catch (e) {
502
+ return errWithHint(e instanceof Error ? e.message : String(e), 'SAVE_FAILED', 'context-vault save_context is failing. Check `cat ~/.context-mcp/error.log | tail -5` and help me debug.');
503
+ }
504
+ if (isDualWriteEnabled(config) && entry.filePath) {
505
+ dualWriteLocal(entry.filePath, normalizedKind);
506
+ }
507
+ const relPath = entry.filePath
508
+ ? entry.filePath.replace(config.vaultDir + '/', '')
509
+ : entry.filePath;
510
+ const icon = kindIcon(normalizedKind);
511
+ const parts = [
512
+ `## ✓ Saved (deferred)`,
513
+ `${icon} **${title || '(untitled)'}**`,
514
+ `\`${normalizedKind}\` · **${effectiveTier}**${tags?.length ? ` · ${tags.join(', ')}` : ''}`,
515
+ `\`${entry.id}\` → ${relPath}`,
516
+ '',
517
+ '_Deferred sync: file written, not yet indexed. Run `vault sync` to index._',
518
+ ];
519
+ return ok(parts.join('\n'));
520
+ }
431
521
  // Start reindex in background but don't wait — similarity check
432
522
  // may miss unindexed entries, but the save won't time out
433
523
  await ensureIndexed({ blocking: false });
@@ -546,6 +636,59 @@ export async function handler({ id, kind, title, body, tags, meta, folder, sourc
546
636
  if (isDualWriteEnabled(config) && entry.filePath) {
547
637
  dualWriteLocal(entry.filePath, normalizedKind);
548
638
  }
639
+ // Remote sync: fire-and-forget POST to hosted API
640
+ const remoteClient = getRemoteClient(config);
641
+ if (visibility === 'team') {
642
+ const effectiveTeamId = getTeamId(config);
643
+ if (!remoteClient) {
644
+ console.warn('[context-vault] Team publish skipped: remote not configured');
645
+ }
646
+ else if (!effectiveTeamId) {
647
+ console.warn('[context-vault] Team publish skipped: no teamId configured');
648
+ }
649
+ else if (category === 'event') {
650
+ console.warn('[context-vault] Team publish skipped: events are private');
651
+ }
652
+ else {
653
+ remoteClient.publishToTeam({
654
+ entryId: entry.id,
655
+ teamId: effectiveTeamId,
656
+ visibility: 'team',
657
+ entry: {
658
+ kind: normalizedKind,
659
+ title,
660
+ body,
661
+ tags,
662
+ meta: finalMeta,
663
+ source,
664
+ identity_key,
665
+ tier: effectiveTier,
666
+ category,
667
+ },
668
+ }).catch((e) => {
669
+ console.warn(`[context-vault] Team publish failed: ${e.message}`);
670
+ });
671
+ }
672
+ }
673
+ else if (remoteClient) {
674
+ remoteClient.saveEntry({
675
+ id: entry.id,
676
+ kind: normalizedKind,
677
+ title,
678
+ body,
679
+ tags,
680
+ meta: finalMeta,
681
+ source,
682
+ identity_key,
683
+ expires_at,
684
+ supersedes,
685
+ related_to,
686
+ source_files,
687
+ tier: effectiveTier,
688
+ }).catch((e) => {
689
+ console.warn(`[context-vault] Remote sync failed: ${e.message}`);
690
+ });
691
+ }
549
692
  if (ctx.config?.dataDir) {
550
693
  maybeShowFeedbackPrompt(ctx.config.dataDir);
551
694
  }
@@ -601,6 +744,24 @@ export async function handler({ id, kind, title, body, tags, meta, folder, sourc
601
744
  parts.push(formatSimilarWarning(similarEntries));
602
745
  }
603
746
  }
747
+ // Auto-memory overlap detection (advisory)
748
+ try {
749
+ const autoMemory = getAutoMemory();
750
+ if (autoMemory.detected && autoMemory.entries.length > 0) {
751
+ const searchText = [title, body].filter(Boolean).join(' ');
752
+ const overlaps = findAutoMemoryOverlaps(autoMemory, searchText, 0.3);
753
+ if (overlaps.length > 0) {
754
+ const top = overlaps[0];
755
+ parts.push('');
756
+ parts.push(`### Auto-Memory Overlap`);
757
+ parts.push(`Similar content found in auto-memory: **${top.name}** (\`${top.file}\`, ${top.type} type, ${(top.similarity * 100).toFixed(0)}% overlap)`);
758
+ parts.push(`_This knowledge already exists in your auto-memory. Consider whether vault storage adds cross-project value._`);
759
+ }
760
+ }
761
+ }
762
+ catch {
763
+ // Non-fatal: auto-memory overlap check should not block save
764
+ }
604
765
  const criticalLimit = config.thresholds?.totalEntries?.critical;
605
766
  if (criticalLimit != null) {
606
767
  try {