@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,155 @@
1
+ /**
2
+ * tool.execute.after hook
3
+ *
4
+ * Captures observations after tool execution.
5
+ */
6
+ import { captureObservation } from '../capture/observation.js';
7
+ import { createDefaultFilter } from '../capture/filtering.js';
8
+ import { classify } from '../capture/classification.js';
9
+ const DEFAULT_CONFIG = {
10
+ observedTools: ['read', 'write', 'edit', 'bash', 'grep', 'glob'],
11
+ minOutputLength: 10,
12
+ maxProcessingTimeMs: 50,
13
+ classifyObservations: true,
14
+ skipTools: []
15
+ };
16
+ /**
17
+ * Tool execution after hook handler
18
+ */
19
+ export class ToolAfterHook {
20
+ mind;
21
+ config;
22
+ filter;
23
+ sessionId;
24
+ projectPath;
25
+ constructor(mind, config = {}) {
26
+ this.mind = mind;
27
+ this.config = { ...DEFAULT_CONFIG, ...config };
28
+ this.filter = createDefaultFilter();
29
+ // Get session info from mind
30
+ const session = mind.getSession();
31
+ this.sessionId = session?.id ?? '';
32
+ this.projectPath = mind.getPath();
33
+ }
34
+ /**
35
+ * Handle tool.execute.after hook
36
+ */
37
+ async handle(input, output) {
38
+ const startTime = Date.now();
39
+ try {
40
+ // Check if we should observe this tool
41
+ if (!this.shouldObserve(input.tool)) {
42
+ return;
43
+ }
44
+ // Build capture input
45
+ const captureInput = this.buildCaptureInput(input, output);
46
+ // Apply noise filter
47
+ if (this.filter.shouldFilter(captureInput)) {
48
+ return;
49
+ }
50
+ // Capture the observation
51
+ const observation = captureObservation(captureInput, {
52
+ defaultConfidence: 0.5
53
+ });
54
+ // Classify if enabled
55
+ if (this.config.classifyObservations) {
56
+ const classification = this.classifyObservation(captureInput);
57
+ observation.type = classification.type;
58
+ observation.confidence = classification.confidence;
59
+ // Apply confidence-based filtering
60
+ if (classification.shouldTombstone) {
61
+ // Don't store, just skip
62
+ return;
63
+ }
64
+ if (classification.shouldFlag) {
65
+ observation.metadata.isFlagged = true;
66
+ observation.metadata.flagReason = `Low confidence: ${classification.confidence.toFixed(2)}`;
67
+ }
68
+ }
69
+ // Store in mind
70
+ await this.mind.observe({
71
+ type: observation.type,
72
+ content: observation.content,
73
+ tool: observation.tool,
74
+ input: observation.input,
75
+ output: observation.output,
76
+ metadata: observation.metadata
77
+ });
78
+ }
79
+ catch (error) {
80
+ // Log but don't throw - hooks must not break tool execution
81
+ console.error('[vmem] ToolAfterHook error:', error);
82
+ }
83
+ // Respect time budget
84
+ const elapsed = Date.now() - startTime;
85
+ if (elapsed > this.config.maxProcessingTimeMs) {
86
+ console.warn(`[vmem] ToolAfterHook took ${elapsed}ms (budget: ${this.config.maxProcessingTimeMs}ms)`);
87
+ }
88
+ }
89
+ /**
90
+ * Check if tool should be observed
91
+ */
92
+ shouldObserve(tool) {
93
+ if (this.config.skipTools.includes(tool)) {
94
+ return false;
95
+ }
96
+ return this.config.observedTools.includes(tool);
97
+ }
98
+ /**
99
+ * Build capture input from hook data
100
+ */
101
+ buildCaptureInput(input, output) {
102
+ const result = output.result;
103
+ // Extract output string
104
+ let outputStr;
105
+ if (typeof result === 'string') {
106
+ outputStr = result;
107
+ }
108
+ else if (result && typeof result === 'object') {
109
+ // Try common output fields
110
+ const obj = result;
111
+ outputStr = obj.stdout ||
112
+ obj.output ||
113
+ obj.content ||
114
+ JSON.stringify(result);
115
+ }
116
+ // Check for exit code
117
+ let exitCode;
118
+ if (result && typeof result === 'object') {
119
+ const obj = result;
120
+ exitCode = obj.exitCode;
121
+ }
122
+ return {
123
+ tool: input.tool,
124
+ input: input.args,
125
+ output: outputStr,
126
+ exitCode,
127
+ sessionId: this.sessionId,
128
+ projectPath: this.projectPath
129
+ };
130
+ }
131
+ /**
132
+ * Classify an observation
133
+ */
134
+ classifyObservation(input) {
135
+ return classify({
136
+ tool: input.tool,
137
+ input: input.input,
138
+ output: input.output,
139
+ exitCode: input.exitCode
140
+ });
141
+ }
142
+ /**
143
+ * Update session ID (call when session changes)
144
+ */
145
+ updateSession(sessionId) {
146
+ this.sessionId = sessionId;
147
+ }
148
+ }
149
+ /**
150
+ * Create tool.after hook handler
151
+ */
152
+ export function createToolAfterHook(mind, config) {
153
+ return new ToolAfterHook(mind, config);
154
+ }
155
+ //# sourceMappingURL=tool-after.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-after.js","sourceRoot":"","sources":["../../src/hooks/tool-after.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { Mind } from './mind.js';
2
+ export { MV2Adapter } from './store/mv2-adapter.js';
3
+ export { TombstoneManager } from './store/tombstone.js';
4
+ export { RulesEngine } from './extract/rules-engine.js';
5
+ export { ContextBuilder } from './context/builder.js';
6
+ export { loadConfig, defaultConfig } from './config.js';
7
+ export * from './types.js';
8
+ export * from './embedding/index.js';
9
+ export * from './procedural/index.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxD,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export { Mind } from './mind.js';
2
+ export { MV2Adapter } from './store/mv2-adapter.js';
3
+ export { TombstoneManager } from './store/tombstone.js';
4
+ export { RulesEngine } from './extract/rules-engine.js';
5
+ export { ContextBuilder } from './context/builder.js';
6
+ export { loadConfig, defaultConfig } from './config.js';
7
+ export * from './types.js';
8
+ export * from './embedding/index.js';
9
+ export * from './procedural/index.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxD,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC"}
package/dist/mind.d.ts ADDED
@@ -0,0 +1,69 @@
1
+ import { Observation, MemoryCard, Session, VmemConfig, SessionSummary, ContextBlock, ContextOptions, TombstoneSource } from './types.js';
2
+ import { ProcedureStore } from './store/procedures.js';
3
+ import { ArchiveManager, ArchiveInfo } from './store/archive.js';
4
+ import { EmbeddingProvider } from './embedding/index.js';
5
+ import { ProcedureSuggester, ProcedureInduction } from './procedural/index.js';
6
+ export declare class Mind {
7
+ private adapter;
8
+ private config;
9
+ private tombstones;
10
+ private memoryCards;
11
+ private procedureStore;
12
+ private archiveManager;
13
+ private contextBuilder;
14
+ private currentSession;
15
+ private embeddingProvider;
16
+ private procedureSuggester;
17
+ private procedureInduction;
18
+ private constructor();
19
+ static open(projectDir: string): Promise<Mind>;
20
+ private ensureEmbeddingReady;
21
+ getEmbeddingProvider(): EmbeddingProvider | null;
22
+ getProcedureStore(): ProcedureStore;
23
+ getProcedureSuggester(): ProcedureSuggester;
24
+ getProcedureInduction(): ProcedureInduction;
25
+ mineProcedures(): Promise<string[]>;
26
+ archive(reason?: string): Promise<string | null>;
27
+ listArchives(): Promise<ArchiveInfo[]>;
28
+ getArchiveStats(): Promise<ReturnType<ArchiveManager['getStats']>>;
29
+ pruneArchives(keepCount: number): Promise<number>;
30
+ observe(observation: {
31
+ type: Observation['type'];
32
+ content: string;
33
+ tool: string;
34
+ input?: Record<string, unknown>;
35
+ output?: string;
36
+ metadata?: Record<string, unknown>;
37
+ }): Promise<string>;
38
+ search(query: string, limit?: number, mode?: 'lex' | 'sem' | 'auto'): Promise<Observation[]>;
39
+ getRecent(limit?: number): Promise<Observation[]>;
40
+ addMemoryCard(card: {
41
+ entity: string;
42
+ slot: string;
43
+ value: string;
44
+ kind: MemoryCard['kind'];
45
+ confidence?: number;
46
+ sourceObservationId?: string;
47
+ versionRelation?: MemoryCard['versionRelation'];
48
+ }): Promise<string>;
49
+ getMemoryCards(): Promise<MemoryCard[]>;
50
+ getMemoryCardsByEntity(entity: string): Promise<MemoryCard[]>;
51
+ getMemoryCardsByKind(kind: MemoryCard['kind']): Promise<MemoryCard[]>;
52
+ tombstone(frameId: string, reason: 'user_request' | 'low_confidence' | 'contradicted' | 'outdated' | 'duplicate' | 'error', source?: TombstoneSource): Promise<void>;
53
+ buildContext(options?: Partial<ContextOptions>): Promise<ContextBlock>;
54
+ startSession(): Promise<Session>;
55
+ endSession(): Promise<SessionSummary | null>;
56
+ getSession(): Session | null;
57
+ getState(): Promise<{
58
+ frameCount: number;
59
+ activeFrameCount: number;
60
+ }>;
61
+ getPath(): string;
62
+ getConfig(): VmemConfig;
63
+ exportMemory(format?: 'json' | 'markdown' | 'plain'): Promise<string>;
64
+ private formatAsMarkdown;
65
+ private formatAsPlain;
66
+ private groupBy;
67
+ close(): Promise<void>;
68
+ }
69
+ //# sourceMappingURL=mind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mind.d.ts","sourceRoot":"","sources":["../src/mind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAKzI,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAiC,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG/E,qBAAa,IAAI;IACf,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,kBAAkB,CAAqB;IAE/C,OAAO;WAgBM,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAmBtC,oBAAoB;IAMlC,oBAAoB,IAAI,iBAAiB,GAAG,IAAI;IAIhD,iBAAiB,IAAI,cAAc;IAInC,qBAAqB,IAAI,kBAAkB;IAI3C,qBAAqB,IAAI,kBAAkB;IAIrC,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAKnC,OAAO,CAAC,MAAM,GAAE,MAAuB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAahE,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAItC,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAIlE,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjD,OAAO,CAAC,WAAW,EAAE;QACzB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,GAAG,OAAO,CAAC,MAAM,CAAC;IA+Cb,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAgB5F,SAAS,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAKrD,aAAa,CAAC,IAAI,EAAE;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,eAAe,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;KACjD,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBb,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAIvC,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAI7D,oBAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAIrE,SAAS,CACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,GAAG,gBAAgB,GAAG,cAAc,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,EAC/F,MAAM,GAAE,eAAwB,GAC/B,OAAO,CAAC,IAAI,CAAC;IAQV,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAQtE,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAkBhC,UAAU,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAgDlD,UAAU,IAAI,OAAO,GAAG,IAAI;IAItB,QAAQ,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;IAI3E,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,UAAU;IAIjB,YAAY,CAAC,MAAM,GAAE,MAAM,GAAG,UAAU,GAAG,OAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAqDnF,OAAO,CAAC,gBAAgB;IAkDxB,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,OAAO;IAUT,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
package/dist/mind.js ADDED
@@ -0,0 +1,368 @@
1
+ import { MV2Adapter } from './store/mv2-adapter.js';
2
+ import { loadConfig } from './config.js';
3
+ import { TombstoneManager } from './store/tombstone.js';
4
+ import { MemoryCardStore } from './store/memorycards.js';
5
+ import { ProcedureStore } from './store/procedures.js';
6
+ import { ArchiveManager } from './store/archive.js';
7
+ import { ContextBuilder } from './context/builder.js';
8
+ import { TransformersEmbeddingProvider } from './embedding/index.js';
9
+ import { ProcedureSuggester, ProcedureInduction } from './procedural/index.js';
10
+ import { uuid } from './utils/uuid.js';
11
+ export class Mind {
12
+ adapter;
13
+ config;
14
+ tombstones;
15
+ memoryCards;
16
+ procedureStore;
17
+ archiveManager;
18
+ contextBuilder;
19
+ currentSession = null;
20
+ embeddingProvider = null;
21
+ procedureSuggester;
22
+ procedureInduction;
23
+ constructor(adapter, config, projectDir) {
24
+ this.adapter = adapter;
25
+ this.config = config;
26
+ this.tombstones = new TombstoneManager(projectDir);
27
+ this.memoryCards = new MemoryCardStore(projectDir);
28
+ this.procedureStore = new ProcedureStore(projectDir);
29
+ this.archiveManager = new ArchiveManager(projectDir);
30
+ this.procedureSuggester = new ProcedureSuggester(this.procedureStore);
31
+ this.procedureInduction = new ProcedureInduction(this.procedureStore);
32
+ this.contextBuilder = new ContextBuilder(config.context);
33
+ }
34
+ static async open(projectDir) {
35
+ const config = await loadConfig(projectDir);
36
+ const adapter = new MV2Adapter(config.memoryPath);
37
+ await adapter.open();
38
+ const mind = new Mind(adapter, config, projectDir);
39
+ if (config.embedding.enabled) {
40
+ mind.embeddingProvider = new TransformersEmbeddingProvider({
41
+ model: config.embedding.model,
42
+ cacheDir: config.embedding.cacheDir,
43
+ dimension: config.embedding.dimension
44
+ });
45
+ }
46
+ return mind;
47
+ }
48
+ async ensureEmbeddingReady() {
49
+ if (this.embeddingProvider && !this.embeddingProvider.isInitialized()) {
50
+ await this.embeddingProvider.initialize();
51
+ }
52
+ }
53
+ getEmbeddingProvider() {
54
+ return this.embeddingProvider;
55
+ }
56
+ getProcedureStore() {
57
+ return this.procedureStore;
58
+ }
59
+ getProcedureSuggester() {
60
+ return this.procedureSuggester;
61
+ }
62
+ getProcedureInduction() {
63
+ return this.procedureInduction;
64
+ }
65
+ async mineProcedures() {
66
+ const observations = await this.adapter.getTimeline(100);
67
+ return this.procedureInduction.mineAndStore(observations);
68
+ }
69
+ async archive(reason = 'user_request') {
70
+ const state = await this.adapter.getState();
71
+ await this.close();
72
+ const archivePath = await this.archiveManager.archive(this.adapter.getPath(), reason, state.frameCount);
73
+ return archivePath;
74
+ }
75
+ async listArchives() {
76
+ return this.archiveManager.listArchives();
77
+ }
78
+ async getArchiveStats() {
79
+ return this.archiveManager.getStats();
80
+ }
81
+ async pruneArchives(keepCount) {
82
+ return this.archiveManager.pruneArchives(keepCount);
83
+ }
84
+ async observe(observation) {
85
+ if (!this.config.capture.enabled) {
86
+ return '';
87
+ }
88
+ if (!this.config.capture.observedTools.includes(observation.tool)) {
89
+ return '';
90
+ }
91
+ if (observation.content.length < this.config.capture.minOutputLength) {
92
+ return '';
93
+ }
94
+ const obs = {
95
+ type: observation.type,
96
+ content: observation.content.slice(0, 4000),
97
+ tool: observation.tool,
98
+ input: observation.input,
99
+ output: observation.output?.slice(0, 10000),
100
+ timestamp: Date.now(),
101
+ sessionId: this.currentSession?.id || '',
102
+ sequenceNumber: (this.currentSession?.stats.totalObservations || 0) + 1,
103
+ source: 'hook-automatic',
104
+ confidence: 0.5,
105
+ metadata: observation.metadata || {}
106
+ };
107
+ let embedding;
108
+ if (this.embeddingProvider && this.config.embedding.enabled) {
109
+ try {
110
+ await this.ensureEmbeddingReady();
111
+ embedding = await this.embeddingProvider.embed(obs.content);
112
+ }
113
+ catch (error) {
114
+ console.error('[vmem] Failed to generate embedding:', error);
115
+ }
116
+ }
117
+ const id = await this.adapter.addObservation(obs, embedding);
118
+ if (this.currentSession) {
119
+ this.currentSession.stats.totalObservations++;
120
+ this.currentSession.lastActivityAt = Date.now();
121
+ }
122
+ return id;
123
+ }
124
+ async search(query, limit, mode) {
125
+ let queryEmbedding;
126
+ if (mode && mode !== 'lex' && this.embeddingProvider) {
127
+ try {
128
+ await this.ensureEmbeddingReady();
129
+ queryEmbedding = await this.embeddingProvider.embed(query);
130
+ }
131
+ catch (error) {
132
+ console.error('[vmem] Failed to generate query embedding:', error);
133
+ }
134
+ }
135
+ const results = await this.adapter.search(query, limit, mode, queryEmbedding);
136
+ return this.tombstones.filterTombstoned(results);
137
+ }
138
+ async getRecent(limit = 20) {
139
+ const observations = await this.adapter.getTimeline(limit);
140
+ return this.tombstones.filterTombstoned(observations);
141
+ }
142
+ async addMemoryCard(card) {
143
+ const id = await this.memoryCards.add({
144
+ entity: card.entity,
145
+ slot: card.slot,
146
+ value: card.value,
147
+ kind: card.kind,
148
+ confidence: card.confidence ?? 0.5,
149
+ sourceObservationId: card.sourceObservationId,
150
+ frameId: card.sourceObservationId || '',
151
+ versionRelation: card.versionRelation
152
+ });
153
+ if (this.currentSession) {
154
+ this.currentSession.stats.memoryCardsCreated++;
155
+ }
156
+ return id;
157
+ }
158
+ async getMemoryCards() {
159
+ return this.memoryCards.getAll();
160
+ }
161
+ async getMemoryCardsByEntity(entity) {
162
+ return this.memoryCards.getByEntity(entity);
163
+ }
164
+ async getMemoryCardsByKind(kind) {
165
+ return this.memoryCards.getByKind(kind);
166
+ }
167
+ async tombstone(frameId, reason, source = 'user') {
168
+ await this.tombstones.add(frameId, reason, source);
169
+ if (this.currentSession) {
170
+ this.currentSession.stats.tombstonesCreated++;
171
+ }
172
+ }
173
+ async buildContext(options) {
174
+ const observations = await this.getRecent(100);
175
+ const cards = await this.memoryCards.getAll();
176
+ const state = await this.adapter.getState();
177
+ return this.contextBuilder.build(observations, cards, state, options);
178
+ }
179
+ async startSession() {
180
+ this.currentSession = {
181
+ id: uuid(),
182
+ status: 'active',
183
+ startedAt: Date.now(),
184
+ lastActivityAt: Date.now(),
185
+ stats: {
186
+ totalObservations: 0,
187
+ memoryCardsCreated: 0,
188
+ memoryCardsUpdated: 0,
189
+ tombstonesCreated: 0,
190
+ errors: 0
191
+ }
192
+ };
193
+ return this.currentSession;
194
+ }
195
+ async endSession() {
196
+ if (!this.currentSession)
197
+ return null;
198
+ this.currentSession.status = 'ended';
199
+ this.currentSession.endedAt = Date.now();
200
+ const observations = await this.getRecent(this.currentSession.stats.totalObservations);
201
+ const cards = await this.memoryCards.getAll();
202
+ const typeCounts = new Map();
203
+ for (const obs of observations) {
204
+ typeCounts.set(obs.type, (typeCounts.get(obs.type) || 0) + 1);
205
+ }
206
+ const topTypes = Array.from(typeCounts.entries())
207
+ .sort((a, b) => b[1] - a[1])
208
+ .slice(0, 5)
209
+ .map(([type, count]) => ({ type: type, count }));
210
+ const decisions = cards.filter(c => c.slot.includes('decision') || c.slot.includes('chose'));
211
+ const preferences = cards.filter(c => c.kind === 'preference');
212
+ const goals = cards.filter(c => c.kind === 'goal' || c.slot.includes('goal'));
213
+ const filesModified = observations
214
+ .filter(o => o.tool === 'write' || o.tool === 'edit')
215
+ .map(o => o.metadata?.filePath)
216
+ .filter(Boolean)
217
+ .filter((v, i, a) => a.indexOf(v) === i);
218
+ const topics = [...new Set(cards.map(c => c.slot))];
219
+ const summary = {
220
+ generatedAt: Date.now(),
221
+ observationCount: this.currentSession.stats.totalObservations,
222
+ topObservationTypes: topTypes,
223
+ keyDecisions: decisions.map(c => c.value),
224
+ preferencesLearned: preferences.map(c => `${c.slot}: ${c.value}`),
225
+ goalsIdentified: goals.map(c => c.value),
226
+ filesModified,
227
+ topics,
228
+ confidence: 0.8
229
+ };
230
+ this.currentSession.summary = summary;
231
+ return summary;
232
+ }
233
+ getSession() {
234
+ return this.currentSession;
235
+ }
236
+ async getState() {
237
+ return this.adapter.getState();
238
+ }
239
+ getPath() {
240
+ return this.adapter.getPath();
241
+ }
242
+ getConfig() {
243
+ return { ...this.config };
244
+ }
245
+ async exportMemory(format = 'json') {
246
+ const observations = await this.getRecent(1000);
247
+ const cards = await this.memoryCards.getAll();
248
+ const procedures = await this.procedureStore.getAll();
249
+ const state = await this.adapter.getState();
250
+ const session = this.getSession();
251
+ const exportData = {
252
+ exportedAt: new Date().toISOString(),
253
+ version: '1.0',
254
+ state: {
255
+ frameCount: state.frameCount,
256
+ activeFrameCount: state.activeFrameCount
257
+ },
258
+ session: session ? {
259
+ id: session.id,
260
+ startedAt: session.startedAt,
261
+ stats: session.stats
262
+ } : null,
263
+ memoryCards: cards,
264
+ observations: observations.map(o => ({
265
+ id: o.id,
266
+ frameId: o.frameId,
267
+ type: o.type,
268
+ content: o.content,
269
+ tool: o.tool,
270
+ timestamp: o.timestamp,
271
+ confidence: o.confidence
272
+ })),
273
+ procedures: procedures.map(p => ({
274
+ id: p.id,
275
+ name: p.name,
276
+ description: p.description,
277
+ successRate: p.successRate,
278
+ executionCount: p.executionCount
279
+ }))
280
+ };
281
+ switch (format) {
282
+ case 'json':
283
+ return JSON.stringify(exportData, null, 2);
284
+ case 'markdown':
285
+ return this.formatAsMarkdown(exportData);
286
+ case 'plain':
287
+ return this.formatAsPlain(exportData);
288
+ default:
289
+ return JSON.stringify(exportData, null, 2);
290
+ }
291
+ }
292
+ formatAsMarkdown(data) {
293
+ const lines = [];
294
+ lines.push(`# Memory Export`);
295
+ lines.push(``);
296
+ lines.push(`**Exported:** ${data.exportedAt}`);
297
+ lines.push(`**Frames:** ${data.state.frameCount} (${data.state.activeFrameCount} active)`);
298
+ lines.push(``);
299
+ if (data.memoryCards.length > 0) {
300
+ lines.push(`## Memory Cards`);
301
+ lines.push(``);
302
+ const byEntity = this.groupBy(data.memoryCards, 'entity');
303
+ for (const [entity, cards] of Object.entries(byEntity)) {
304
+ lines.push(`### ${entity}`);
305
+ for (const card of cards) {
306
+ lines.push(`- **${card.slot}:** ${card.value} _(${(card.confidence * 100).toFixed(0)}%)_`);
307
+ }
308
+ lines.push(``);
309
+ }
310
+ }
311
+ if (data.observations.length > 0) {
312
+ lines.push(`## Recent Observations`);
313
+ lines.push(``);
314
+ const byType = this.groupBy(data.observations, 'type');
315
+ for (const [type, obs] of Object.entries(byType)) {
316
+ lines.push(`### ${type}`);
317
+ for (const o of obs.slice(0, 20)) {
318
+ const date = new Date(o.timestamp).toLocaleDateString();
319
+ lines.push(`- [${date}] ${o.content.slice(0, 100)}...`);
320
+ }
321
+ lines.push(``);
322
+ }
323
+ }
324
+ if (data.procedures.length > 0) {
325
+ lines.push(`## Procedures`);
326
+ lines.push(``);
327
+ for (const p of data.procedures) {
328
+ lines.push(`- **${p.name}** (${(p.successRate * 100).toFixed(0)}% success, ${p.executionCount} uses)`);
329
+ }
330
+ lines.push(``);
331
+ }
332
+ return lines.join('\n');
333
+ }
334
+ formatAsPlain(data) {
335
+ const lines = [];
336
+ lines.push(`Memory Export - ${data.exportedAt}`);
337
+ lines.push(`Frames: ${data.state.frameCount}`);
338
+ lines.push(``);
339
+ if (data.memoryCards.length > 0) {
340
+ lines.push(`MEMORY CARDS:`);
341
+ for (const card of data.memoryCards) {
342
+ lines.push(` ${card.entity}.${card.slot} = ${card.value}`);
343
+ }
344
+ lines.push(``);
345
+ }
346
+ if (data.observations.length > 0) {
347
+ lines.push(`RECENT OBSERVATIONS:`);
348
+ for (const o of data.observations.slice(0, 50)) {
349
+ lines.push(` [${o.type}] ${o.content.slice(0, 80)}`);
350
+ }
351
+ }
352
+ return lines.join('\n');
353
+ }
354
+ groupBy(items, key) {
355
+ const result = {};
356
+ for (const item of items) {
357
+ const k = String(item[key]);
358
+ if (!result[k])
359
+ result[k] = [];
360
+ result[k].push(item);
361
+ }
362
+ return result;
363
+ }
364
+ async close() {
365
+ await this.adapter.close();
366
+ }
367
+ }
368
+ //# sourceMappingURL=mind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mind.js","sourceRoot":"","sources":["../src/mind.ts"],"names":[],"mappings":"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"}