@jcmrs/opencode-vmem 1.0.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 (140) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/LICENSE +21 -0
  3. package/README.md +172 -0
  4. package/dist/capture/classification.d.ts +37 -0
  5. package/dist/capture/classification.d.ts.map +1 -0
  6. package/dist/capture/classification.js +181 -0
  7. package/dist/capture/classification.js.map +1 -0
  8. package/dist/capture/filtering.d.ts +63 -0
  9. package/dist/capture/filtering.d.ts.map +1 -0
  10. package/dist/capture/filtering.js +195 -0
  11. package/dist/capture/filtering.js.map +1 -0
  12. package/dist/capture/observation.d.ts +28 -0
  13. package/dist/capture/observation.d.ts.map +1 -0
  14. package/dist/capture/observation.js +188 -0
  15. package/dist/capture/observation.js.map +1 -0
  16. package/dist/commands/index.d.ts +38 -0
  17. package/dist/commands/index.d.ts.map +1 -0
  18. package/dist/commands/index.js +375 -0
  19. package/dist/commands/index.js.map +1 -0
  20. package/dist/config.d.ts +5 -0
  21. package/dist/config.d.ts.map +1 -0
  22. package/dist/config.js +41 -0
  23. package/dist/config.js.map +1 -0
  24. package/dist/context/builder.d.ts +19 -0
  25. package/dist/context/builder.d.ts.map +1 -0
  26. package/dist/context/builder.js +209 -0
  27. package/dist/context/builder.js.map +1 -0
  28. package/dist/context/format.d.ts +32 -0
  29. package/dist/context/format.d.ts.map +1 -0
  30. package/dist/context/format.js +211 -0
  31. package/dist/context/format.js.map +1 -0
  32. package/dist/embedding/index.d.ts +3 -0
  33. package/dist/embedding/index.d.ts.map +1 -0
  34. package/dist/embedding/index.js +3 -0
  35. package/dist/embedding/index.js.map +1 -0
  36. package/dist/embedding/provider.d.ts +15 -0
  37. package/dist/embedding/provider.d.ts.map +1 -0
  38. package/dist/embedding/provider.js +19 -0
  39. package/dist/embedding/provider.js.map +1 -0
  40. package/dist/embedding/transformers.d.ts +14 -0
  41. package/dist/embedding/transformers.d.ts.map +1 -0
  42. package/dist/embedding/transformers.js +55 -0
  43. package/dist/embedding/transformers.js.map +1 -0
  44. package/dist/extract/confidence.d.ts +48 -0
  45. package/dist/extract/confidence.d.ts.map +1 -0
  46. package/dist/extract/confidence.js +230 -0
  47. package/dist/extract/confidence.js.map +1 -0
  48. package/dist/extract/llm-extractor.d.ts +35 -0
  49. package/dist/extract/llm-extractor.d.ts.map +1 -0
  50. package/dist/extract/llm-extractor.js +204 -0
  51. package/dist/extract/llm-extractor.js.map +1 -0
  52. package/dist/extract/pipeline.d.ts +44 -0
  53. package/dist/extract/pipeline.d.ts.map +1 -0
  54. package/dist/extract/pipeline.js +171 -0
  55. package/dist/extract/pipeline.js.map +1 -0
  56. package/dist/extract/rules-engine.d.ts +14 -0
  57. package/dist/extract/rules-engine.d.ts.map +1 -0
  58. package/dist/extract/rules-engine.js +314 -0
  59. package/dist/extract/rules-engine.js.map +1 -0
  60. package/dist/extract/summarizer.d.ts +27 -0
  61. package/dist/extract/summarizer.d.ts.map +1 -0
  62. package/dist/extract/summarizer.js +148 -0
  63. package/dist/extract/summarizer.js.map +1 -0
  64. package/dist/hooks/session-idle.d.ts +38 -0
  65. package/dist/hooks/session-idle.d.ts.map +1 -0
  66. package/dist/hooks/session-idle.js +142 -0
  67. package/dist/hooks/session-idle.js.map +1 -0
  68. package/dist/hooks/system-transform.d.ts +41 -0
  69. package/dist/hooks/system-transform.d.ts.map +1 -0
  70. package/dist/hooks/system-transform.js +98 -0
  71. package/dist/hooks/system-transform.js.map +1 -0
  72. package/dist/hooks/tool-after.d.ts +66 -0
  73. package/dist/hooks/tool-after.d.ts.map +1 -0
  74. package/dist/hooks/tool-after.js +155 -0
  75. package/dist/hooks/tool-after.js.map +1 -0
  76. package/dist/index.d.ts +10 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +10 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/mind.d.ts +69 -0
  81. package/dist/mind.d.ts.map +1 -0
  82. package/dist/mind.js +368 -0
  83. package/dist/mind.js.map +1 -0
  84. package/dist/procedural/index.d.ts +4 -0
  85. package/dist/procedural/index.d.ts.map +1 -0
  86. package/dist/procedural/index.js +4 -0
  87. package/dist/procedural/index.js.map +1 -0
  88. package/dist/procedural/induction.d.ts +23 -0
  89. package/dist/procedural/induction.d.ts.map +1 -0
  90. package/dist/procedural/induction.js +104 -0
  91. package/dist/procedural/induction.js.map +1 -0
  92. package/dist/procedural/miner.d.ts +45 -0
  93. package/dist/procedural/miner.d.ts.map +1 -0
  94. package/dist/procedural/miner.js +171 -0
  95. package/dist/procedural/miner.js.map +1 -0
  96. package/dist/procedural/suggester.d.ts +20 -0
  97. package/dist/procedural/suggester.d.ts.map +1 -0
  98. package/dist/procedural/suggester.js +69 -0
  99. package/dist/procedural/suggester.js.map +1 -0
  100. package/dist/store/archive.d.ts +31 -0
  101. package/dist/store/archive.d.ts.map +1 -0
  102. package/dist/store/archive.js +137 -0
  103. package/dist/store/archive.js.map +1 -0
  104. package/dist/store/backup.d.ts +36 -0
  105. package/dist/store/backup.d.ts.map +1 -0
  106. package/dist/store/backup.js +163 -0
  107. package/dist/store/backup.js.map +1 -0
  108. package/dist/store/memorycards.d.ts +31 -0
  109. package/dist/store/memorycards.d.ts.map +1 -0
  110. package/dist/store/memorycards.js +161 -0
  111. package/dist/store/memorycards.js.map +1 -0
  112. package/dist/store/mv2-adapter.d.ts +29 -0
  113. package/dist/store/mv2-adapter.d.ts.map +1 -0
  114. package/dist/store/mv2-adapter.js +359 -0
  115. package/dist/store/mv2-adapter.js.map +1 -0
  116. package/dist/store/procedures.d.ts +79 -0
  117. package/dist/store/procedures.d.ts.map +1 -0
  118. package/dist/store/procedures.js +183 -0
  119. package/dist/store/procedures.js.map +1 -0
  120. package/dist/store/tombstone.d.ts +27 -0
  121. package/dist/store/tombstone.d.ts.map +1 -0
  122. package/dist/store/tombstone.js +136 -0
  123. package/dist/store/tombstone.js.map +1 -0
  124. package/dist/tools/index.d.ts +36 -0
  125. package/dist/tools/index.d.ts.map +1 -0
  126. package/dist/tools/index.js +236 -0
  127. package/dist/tools/index.js.map +1 -0
  128. package/dist/types.d.ts +301 -0
  129. package/dist/types.d.ts.map +1 -0
  130. package/dist/types.js +69 -0
  131. package/dist/types.js.map +1 -0
  132. package/dist/utils/error.d.ts +57 -0
  133. package/dist/utils/error.d.ts.map +1 -0
  134. package/dist/utils/error.js +143 -0
  135. package/dist/utils/error.js.map +1 -0
  136. package/dist/utils/uuid.d.ts +2 -0
  137. package/dist/utils/uuid.d.ts.map +1 -0
  138. package/dist/utils/uuid.js +5 -0
  139. package/dist/utils/uuid.js.map +1 -0
  140. package/package.json +67 -0
@@ -0,0 +1,27 @@
1
+ import { TombstoneEntry, TombstoneReason, TombstoneSource } from '../types.js';
2
+ export declare class TombstoneManager {
3
+ private projectDir;
4
+ private index;
5
+ constructor(projectDir: string);
6
+ private load;
7
+ private save;
8
+ add(frameId: string, reason: TombstoneReason, source?: TombstoneSource, confidence?: number, replacedBy?: string): Promise<void>;
9
+ confirm(frameId: string, notes?: string): Promise<void>;
10
+ revert(frameId: string): Promise<void>;
11
+ remove(frameId: string): Promise<void>;
12
+ isTombstoned(frameId: string): boolean;
13
+ getTombstonedFrameIds(): Set<string>;
14
+ reload(): Promise<void>;
15
+ filterTombstoned<T extends {
16
+ frameId: string;
17
+ }>(items: T[]): T[];
18
+ getPendingReviews(): Promise<TombstoneEntry[]>;
19
+ getStats(): Promise<{
20
+ total: number;
21
+ pending: number;
22
+ confirmed: number;
23
+ reverted: number;
24
+ byReason: Record<TombstoneReason, number>;
25
+ }>;
26
+ }
27
+ //# sourceMappingURL=tombstone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tombstone.d.ts","sourceRoot":"","sources":["../../src/store/tombstone.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI/F,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAA+B;gBAEhC,UAAU,EAAE,MAAM;YAIhB,IAAI;YAoBJ,IAAI;IASZ,GAAG,CACP,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,eAAe,EACvB,MAAM,GAAE,eAAwB,EAChC,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAkBV,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAStC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQtC,qBAAqB,IAAI,GAAG,CAAC,MAAM,CAAC;IAa9B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B,gBAAgB,CAAC,CAAC,SAAS;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;IAK1D,iBAAiB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAQ9C,QAAQ,IAAI,OAAO,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;KAC3C,CAAC;CAgCH"}
@@ -0,0 +1,136 @@
1
+ import { readFile, writeFile, access } from 'fs/promises';
2
+ import { join } from 'path';
3
+ const TOMBSTONE_FILE = 'tombstones.json';
4
+ export class TombstoneManager {
5
+ projectDir;
6
+ index = null;
7
+ constructor(projectDir) {
8
+ this.projectDir = projectDir;
9
+ }
10
+ async load() {
11
+ if (this.index)
12
+ return this.index;
13
+ const filePath = join(this.projectDir, '.opencode', 'memory', TOMBSTONE_FILE);
14
+ try {
15
+ await access(filePath);
16
+ const raw = await readFile(filePath, 'utf-8');
17
+ this.index = JSON.parse(raw);
18
+ }
19
+ catch {
20
+ this.index = {
21
+ version: 1,
22
+ entries: {},
23
+ lastUpdated: Date.now()
24
+ };
25
+ }
26
+ return this.index;
27
+ }
28
+ async save() {
29
+ if (!this.index)
30
+ return;
31
+ const filePath = join(this.projectDir, '.opencode', 'memory', TOMBSTONE_FILE);
32
+ this.index.lastUpdated = Date.now();
33
+ await writeFile(filePath, JSON.stringify(this.index, null, 2), 'utf-8');
34
+ }
35
+ async add(frameId, reason, source = 'user', confidence, replacedBy) {
36
+ const index = await this.load();
37
+ const entry = {
38
+ frameId,
39
+ reason,
40
+ source,
41
+ confidence,
42
+ replacedBy,
43
+ createdAt: Date.now(),
44
+ status: 'pending'
45
+ };
46
+ index.entries[frameId] = entry;
47
+ await this.save();
48
+ }
49
+ async confirm(frameId, notes) {
50
+ const index = await this.load();
51
+ if (index.entries[frameId]) {
52
+ index.entries[frameId].status = 'confirmed';
53
+ if (notes) {
54
+ index.entries[frameId].notes = notes;
55
+ }
56
+ await this.save();
57
+ }
58
+ }
59
+ async revert(frameId) {
60
+ const index = await this.load();
61
+ if (index.entries[frameId]) {
62
+ index.entries[frameId].status = 'reverted';
63
+ await this.save();
64
+ }
65
+ }
66
+ async remove(frameId) {
67
+ const index = await this.load();
68
+ delete index.entries[frameId];
69
+ await this.save();
70
+ }
71
+ isTombstoned(frameId) {
72
+ const index = this.index;
73
+ if (!index)
74
+ return false;
75
+ const entry = index.entries[frameId];
76
+ return entry?.status !== 'reverted';
77
+ }
78
+ getTombstonedFrameIds() {
79
+ const index = this.index;
80
+ if (!index)
81
+ return new Set();
82
+ const ids = new Set();
83
+ for (const [frameId, entry] of Object.entries(index.entries)) {
84
+ if (entry.status !== 'reverted') {
85
+ ids.add(frameId);
86
+ }
87
+ }
88
+ return ids;
89
+ }
90
+ async reload() {
91
+ this.index = null;
92
+ await this.load();
93
+ }
94
+ filterTombstoned(items) {
95
+ const tombstonedIds = this.getTombstonedFrameIds();
96
+ return items.filter(item => !tombstonedIds.has(item.frameId));
97
+ }
98
+ async getPendingReviews() {
99
+ const index = await this.load();
100
+ return Object.values(index.entries)
101
+ .filter(entry => entry.status === 'pending')
102
+ .sort((a, b) => b.createdAt - a.createdAt);
103
+ }
104
+ async getStats() {
105
+ const index = await this.load();
106
+ const entries = Object.values(index.entries);
107
+ const byReason = {
108
+ user_request: 0,
109
+ low_confidence: 0,
110
+ contradicted: 0,
111
+ outdated: 0,
112
+ duplicate: 0,
113
+ error: 0
114
+ };
115
+ let pending = 0;
116
+ let confirmed = 0;
117
+ let reverted = 0;
118
+ for (const entry of entries) {
119
+ byReason[entry.reason]++;
120
+ if (entry.status === 'pending')
121
+ pending++;
122
+ else if (entry.status === 'confirmed')
123
+ confirmed++;
124
+ else if (entry.status === 'reverted')
125
+ reverted++;
126
+ }
127
+ return {
128
+ total: entries.length,
129
+ pending,
130
+ confirmed,
131
+ reverted,
132
+ byReason
133
+ };
134
+ }
135
+ }
136
+ //# sourceMappingURL=tombstone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tombstone.js","sourceRoot":"","sources":["../../src/store/tombstone.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod';
2
+ import { Mind } from '../mind.js';
3
+ export interface ToolContext {
4
+ mind: Mind;
5
+ sessionId: string;
6
+ }
7
+ export interface ToolResult {
8
+ success: boolean;
9
+ message?: string;
10
+ data?: unknown;
11
+ }
12
+ export interface Tool {
13
+ name: string;
14
+ description: string;
15
+ parameters: z.ZodType<any>;
16
+ execute: (params: any, ctx: ToolContext) => Promise<ToolResult>;
17
+ }
18
+ export declare function defineTool(config: {
19
+ name: string;
20
+ description: string;
21
+ parameters: z.ZodType<any>;
22
+ execute: (params: any, ctx: ToolContext) => Promise<ToolResult>;
23
+ }): Tool;
24
+ export declare const mindSearchTool: Tool;
25
+ export declare const mindStateTool: Tool;
26
+ export declare const mindForgetTool: Tool;
27
+ export declare const mindAddCardTool: Tool;
28
+ export declare const mindContextTool: Tool;
29
+ export declare const mindSuggestTool: Tool;
30
+ export declare const allTools: Tool[];
31
+ export declare function getTool(name: string): Tool | undefined;
32
+ export declare function getToolDescriptions(): Array<{
33
+ name: string;
34
+ description: string;
35
+ }>;
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACjE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACjE,GAAG,IAAI,CAEP;AAED,eAAO,MAAM,cAAc,MA+CzB,CAAC;AAEH,eAAO,MAAM,aAAa,MAsCxB,CAAC;AAEH,eAAO,MAAM,cAAc,MA2BzB,CAAC;AAEH,eAAO,MAAM,eAAe,MAiC1B,CAAC;AAEH,eAAO,MAAM,eAAe,MAyB1B,CAAC;AAEH,eAAO,MAAM,eAAe,MAgD1B,CAAC;AAEH,eAAO,MAAM,QAAQ,EAAE,IAAI,EAO1B,CAAC;AAEF,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAEtD;AAED,wBAAgB,mBAAmB,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAElF"}
@@ -0,0 +1,236 @@
1
+ import { z } from 'zod';
2
+ export function defineTool(config) {
3
+ return config;
4
+ }
5
+ export const mindSearchTool = defineTool({
6
+ name: 'mind_search',
7
+ description: `Search the project memory for relevant information.
8
+
9
+ Use this tool when you need to find:
10
+ - Past decisions or discussions
11
+ - User preferences or profile information
12
+ - Project context and history
13
+ - Previous solutions to problems
14
+
15
+ Returns matching observations and memory cards.`,
16
+ parameters: z.object({
17
+ query: z.string().min(3).max(200).describe('Search query (3-200 characters)'),
18
+ limit: z.number().min(1).max(50).default(10).describe('Maximum results to return')
19
+ }),
20
+ execute: async (params, ctx) => {
21
+ try {
22
+ const results = await ctx.mind.search(params.query, params.limit);
23
+ if (results.length === 0) {
24
+ return {
25
+ success: true,
26
+ message: `No memories found matching "${params.query}"`,
27
+ data: { found: false, count: 0, results: [] }
28
+ };
29
+ }
30
+ return {
31
+ success: true,
32
+ data: {
33
+ found: true,
34
+ count: results.length,
35
+ results: results.map(r => ({
36
+ type: r.type,
37
+ content: r.content.slice(0, 200),
38
+ timestamp: new Date(r.timestamp).toISOString(),
39
+ tool: r.tool
40
+ }))
41
+ }
42
+ };
43
+ }
44
+ catch (error) {
45
+ return {
46
+ success: false,
47
+ message: `Search failed: ${error instanceof Error ? error.message : String(error)}`
48
+ };
49
+ }
50
+ }
51
+ });
52
+ export const mindStateTool = defineTool({
53
+ name: 'mind_state',
54
+ description: 'Get current memory system state and statistics.',
55
+ parameters: z.object({
56
+ detailed: z.boolean().default(false).describe('Include detailed statistics')
57
+ }),
58
+ execute: async (params, ctx) => {
59
+ try {
60
+ const state = await ctx.mind.getState();
61
+ const cards = await ctx.mind.getMemoryCards();
62
+ const result = {
63
+ frameCount: state.frameCount,
64
+ activeFrameCount: state.activeFrameCount,
65
+ memoryCardsCount: cards.length
66
+ };
67
+ if (params.detailed) {
68
+ const byEntity = {};
69
+ const byKind = {};
70
+ for (const card of cards) {
71
+ byEntity[card.entity] = (byEntity[card.entity] || 0) + 1;
72
+ byKind[card.kind] = (byKind[card.kind] || 0) + 1;
73
+ }
74
+ result.byEntity = byEntity;
75
+ result.byKind = byKind;
76
+ }
77
+ return { success: true, data: result };
78
+ }
79
+ catch (error) {
80
+ return {
81
+ success: false,
82
+ message: `Failed to get state: ${error instanceof Error ? error.message : String(error)}`
83
+ };
84
+ }
85
+ }
86
+ });
87
+ export const mindForgetTool = defineTool({
88
+ name: 'mind_forget',
89
+ description: `Mark a memory for deletion (tombstone).
90
+
91
+ The memory will be excluded from future context but retained in history.
92
+ Use this to remove incorrect or outdated information.`,
93
+ parameters: z.object({
94
+ frameId: z.string().describe('Frame ID to forget'),
95
+ reason: z.enum(['user_request', 'low_confidence', 'contradicted', 'outdated', 'duplicate', 'error'])
96
+ .default('user_request')
97
+ .describe('Reason for forgetting')
98
+ }),
99
+ execute: async (params, ctx) => {
100
+ try {
101
+ await ctx.mind.tombstone(params.frameId, params.reason, 'user');
102
+ return {
103
+ success: true,
104
+ message: `Memory ${params.frameId} has been tombstoned (${params.reason})`
105
+ };
106
+ }
107
+ catch (error) {
108
+ return {
109
+ success: false,
110
+ message: `Failed to forget: ${error instanceof Error ? error.message : String(error)}`
111
+ };
112
+ }
113
+ }
114
+ });
115
+ export const mindAddCardTool = defineTool({
116
+ name: 'mind_add_card',
117
+ description: `Manually add a memory card.
118
+
119
+ Use this to store extracted knowledge that should persist across sessions.`,
120
+ parameters: z.object({
121
+ entity: z.string().describe('Entity (e.g., "user", "project")'),
122
+ slot: z.string().describe('Slot/attribute (e.g., "employer", "framework")'),
123
+ value: z.string().describe('Value to store'),
124
+ kind: z.enum(['fact', 'preference', 'profile', 'goal']).describe('Memory kind')
125
+ }),
126
+ execute: async (params, ctx) => {
127
+ try {
128
+ const id = await ctx.mind.addMemoryCard({
129
+ entity: params.entity,
130
+ slot: params.slot,
131
+ value: params.value,
132
+ kind: params.kind,
133
+ confidence: 1.0
134
+ });
135
+ return {
136
+ success: true,
137
+ message: `Memory card added: ${params.entity}.${params.slot} = ${params.value}`,
138
+ data: { id }
139
+ };
140
+ }
141
+ catch (error) {
142
+ return {
143
+ success: false,
144
+ message: `Failed to add card: ${error instanceof Error ? error.message : String(error)}`
145
+ };
146
+ }
147
+ }
148
+ });
149
+ export const mindContextTool = defineTool({
150
+ name: 'mind_context',
151
+ description: 'Build and return the current memory context block.',
152
+ parameters: z.object({
153
+ maxTokens: z.number().min(500).max(8000).default(3000).describe('Maximum tokens')
154
+ }),
155
+ execute: async (params, ctx) => {
156
+ try {
157
+ const block = await ctx.mind.buildContext({ maxTokens: params.maxTokens });
158
+ return {
159
+ success: true,
160
+ data: {
161
+ content: block.content,
162
+ tokenCount: block.tokenCount,
163
+ included: block.included
164
+ }
165
+ };
166
+ }
167
+ catch (error) {
168
+ return {
169
+ success: false,
170
+ message: `Failed to build context: ${error instanceof Error ? error.message : String(error)}`
171
+ };
172
+ }
173
+ }
174
+ });
175
+ export const mindSuggestTool = defineTool({
176
+ name: 'mind_suggest',
177
+ description: `Get procedure suggestions for the current context.
178
+
179
+ Returns relevant workflows based on problem type, goals, or file patterns.`,
180
+ parameters: z.object({
181
+ problemType: z.string().optional().describe('Current problem type'),
182
+ goal: z.string().optional().describe('Current goal'),
183
+ files: z.array(z.string()).optional().describe('Relevant files')
184
+ }),
185
+ execute: async (params, ctx) => {
186
+ try {
187
+ const suggester = ctx.mind.getProcedureSuggester();
188
+ const suggestions = await suggester.suggest({
189
+ problemType: params.problemType,
190
+ goal: params.goal,
191
+ files: params.files
192
+ });
193
+ if (suggestions.length === 0) {
194
+ return {
195
+ success: true,
196
+ message: 'No matching procedures found for the current context',
197
+ data: { procedures: [], count: 0 }
198
+ };
199
+ }
200
+ const procedures = suggestions.slice(0, 5).map(s => ({
201
+ id: s.procedure.id,
202
+ name: s.procedure.name,
203
+ description: s.procedure.description,
204
+ relevanceScore: s.relevanceScore.toFixed(2),
205
+ successRate: (s.procedure.successRate * 100).toFixed(0) + '%',
206
+ steps: s.procedure.steps.length
207
+ }));
208
+ return {
209
+ success: true,
210
+ message: `Found ${suggestions.length} matching procedure(s)`,
211
+ data: { procedures, count: suggestions.length }
212
+ };
213
+ }
214
+ catch (error) {
215
+ return {
216
+ success: false,
217
+ message: `Failed to get suggestions: ${error instanceof Error ? error.message : String(error)}`
218
+ };
219
+ }
220
+ }
221
+ });
222
+ export const allTools = [
223
+ mindSearchTool,
224
+ mindStateTool,
225
+ mindForgetTool,
226
+ mindAddCardTool,
227
+ mindContextTool,
228
+ mindSuggestTool
229
+ ];
230
+ export function getTool(name) {
231
+ return allTools.find(t => t.name === name);
232
+ }
233
+ export function getToolDescriptions() {
234
+ return allTools.map(t => ({ name: t.name, description: t.description }));
235
+ }
236
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}