@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,195 @@
1
+ /**
2
+ * Noise filtering for observation capture
3
+ *
4
+ * Filters out low-value observations to reduce memory bloat.
5
+ */
6
+ /**
7
+ * Default filter rules
8
+ *
9
+ * Returns true if the observation should be FILTERED OUT (skipped)
10
+ */
11
+ const DEFAULT_FILTERS = [
12
+ {
13
+ name: 'empty_output',
14
+ description: 'Filter observations with no meaningful output',
15
+ test: (input) => {
16
+ if (!input.output)
17
+ return true;
18
+ const trimmed = input.output.trim();
19
+ return trimmed.length === 0 || trimmed === 'undefined' || trimmed === 'null';
20
+ }
21
+ },
22
+ {
23
+ name: 'very_short_output',
24
+ description: 'Filter observations with very short output (< 10 chars)',
25
+ test: (input) => {
26
+ if (!input.output)
27
+ return false;
28
+ return input.output.trim().length < 10;
29
+ }
30
+ },
31
+ {
32
+ name: 'binary_file',
33
+ description: 'Filter reads of binary files',
34
+ test: (input) => {
35
+ if (input.tool !== 'read')
36
+ return false;
37
+ const path = input.input?.filePath;
38
+ if (!path)
39
+ return false;
40
+ const binaryExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.ico', '.woff', '.woff2', '.ttf', '.eot', '.pdf', '.zip', '.gz'];
41
+ return binaryExtensions.some(ext => path.toLowerCase().endsWith(ext));
42
+ }
43
+ },
44
+ {
45
+ name: 'lock_file',
46
+ description: 'Filter operations on lock files',
47
+ test: (input) => {
48
+ const path = input.input?.filePath || '';
49
+ const lockPatterns = ['.lock', '-lock', 'package-lock.json', 'yarn.lock', 'pnpm-lock.yaml'];
50
+ return lockPatterns.some(p => path.toLowerCase().includes(p));
51
+ }
52
+ },
53
+ {
54
+ name: 'node_modules',
55
+ description: 'Filter operations inside node_modules',
56
+ test: (input) => {
57
+ const path = input.input?.filePath || '';
58
+ return path.includes('node_modules');
59
+ }
60
+ },
61
+ {
62
+ name: '.git_directory',
63
+ description: 'Filter operations inside .git directory',
64
+ test: (input) => {
65
+ const path = input.input?.filePath || '';
66
+ return path.includes('.git/') || path === '.git';
67
+ }
68
+ },
69
+ {
70
+ name: 'glob_too_many_results',
71
+ description: 'Filter glob results with too many matches',
72
+ test: (input) => {
73
+ if (input.tool !== 'glob')
74
+ return false;
75
+ if (!input.output)
76
+ return false;
77
+ // Count newlines as proxy for result count
78
+ const lineCount = (input.output.match(/\n/g) || []).length;
79
+ return lineCount > 100;
80
+ }
81
+ },
82
+ {
83
+ name: 'echo_command',
84
+ description: 'Filter simple echo commands',
85
+ test: (input) => {
86
+ if (input.tool !== 'bash')
87
+ return false;
88
+ const cmd = input.input?.command || '';
89
+ return /^\s*echo\s+/i.test(cmd.trim());
90
+ }
91
+ },
92
+ {
93
+ name: 'exit_code_nonzero',
94
+ description: 'Filter failed commands (optional, controlled by config)',
95
+ test: (input) => {
96
+ // This filter is advisory - it may be disabled in config
97
+ return input.exitCode !== undefined && input.exitCode !== 0;
98
+ }
99
+ }
100
+ ];
101
+ export class ObservationFilter {
102
+ filters;
103
+ disabledFilters;
104
+ constructor(options = {}) {
105
+ this.filters = options.filters ?? [...DEFAULT_FILTERS];
106
+ this.disabledFilters = new Set(options.disabledFilters ?? []);
107
+ // By default, disable the exit_code filter (we want to capture errors)
108
+ if (!options.disabledFilters) {
109
+ this.disabledFilters.add('exit_code_nonzero');
110
+ }
111
+ }
112
+ /**
113
+ * Check if an observation should be filtered out
114
+ *
115
+ * @returns true if the observation should be skipped
116
+ */
117
+ shouldFilter(input) {
118
+ for (const filter of this.filters) {
119
+ if (this.disabledFilters.has(filter.name)) {
120
+ continue;
121
+ }
122
+ try {
123
+ if (filter.test(input)) {
124
+ return true;
125
+ }
126
+ }
127
+ catch (error) {
128
+ // If filter throws, don't filter
129
+ console.error(`[vmem] Filter "${filter.name}" threw error:`, error);
130
+ }
131
+ }
132
+ return false;
133
+ }
134
+ /**
135
+ * Get the reason why an observation was filtered
136
+ *
137
+ * @returns filter name if filtered, null otherwise
138
+ */
139
+ getFilterReason(input) {
140
+ for (const filter of this.filters) {
141
+ if (this.disabledFilters.has(filter.name)) {
142
+ continue;
143
+ }
144
+ try {
145
+ if (filter.test(input)) {
146
+ return filter.name;
147
+ }
148
+ }
149
+ catch {
150
+ // Ignore
151
+ }
152
+ }
153
+ return null;
154
+ }
155
+ /**
156
+ * Add a custom filter
157
+ */
158
+ addFilter(filter) {
159
+ this.filters.push(filter);
160
+ }
161
+ /**
162
+ * Remove a filter by name
163
+ */
164
+ removeFilter(name) {
165
+ this.filters = this.filters.filter(f => f.name !== name);
166
+ }
167
+ /**
168
+ * Enable a previously disabled filter
169
+ */
170
+ enableFilter(name) {
171
+ this.disabledFilters.delete(name);
172
+ }
173
+ /**
174
+ * Disable a filter
175
+ */
176
+ disableFilter(name) {
177
+ this.disabledFilters.add(name);
178
+ }
179
+ /**
180
+ * Get list of active filter names
181
+ */
182
+ getActiveFilters() {
183
+ return this.filters
184
+ .filter(f => !this.disabledFilters.has(f.name))
185
+ .map(f => f.name);
186
+ }
187
+ }
188
+ /**
189
+ * Create default observation filter
190
+ */
191
+ export function createDefaultFilter() {
192
+ return new ObservationFilter();
193
+ }
194
+ export { DEFAULT_FILTERS };
195
+ //# sourceMappingURL=filtering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filtering.js","sourceRoot":"","sources":["../../src/capture/filtering.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Observation capture module
3
+ *
4
+ * Responsible for creating Observation objects from tool executions.
5
+ */
6
+ import { Observation } from '../types.js';
7
+ export interface CaptureInput {
8
+ tool: string;
9
+ input?: Record<string, unknown>;
10
+ output?: string;
11
+ exitCode?: number;
12
+ duration?: number;
13
+ sessionId: string;
14
+ projectPath: string;
15
+ }
16
+ export interface CaptureOptions {
17
+ /** Maximum content length (default: 4000) */
18
+ maxContentLength?: number;
19
+ /** Maximum output length (default: 10000) */
20
+ maxOutputLength?: number;
21
+ /** Default confidence for captured observations */
22
+ defaultConfidence?: number;
23
+ }
24
+ /**
25
+ * Create an observation from a tool execution
26
+ */
27
+ export declare function captureObservation(input: CaptureInput, options?: CaptureOptions): Omit<Observation, 'id' | 'frameId' | 'sequenceNumber'>;
28
+ //# sourceMappingURL=observation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../../src/capture/observation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAwC,MAAM,aAAa,CAAC;AAEhF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAQD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,cAAmB,GAC3B,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,SAAS,GAAG,gBAAgB,CAAC,CAmBxD"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Observation capture module
3
+ *
4
+ * Responsible for creating Observation objects from tool executions.
5
+ */
6
+ const DEFAULT_OPTIONS = {
7
+ maxContentLength: 4000,
8
+ maxOutputLength: 10000,
9
+ defaultConfidence: 0.5
10
+ };
11
+ /**
12
+ * Create an observation from a tool execution
13
+ */
14
+ export function captureObservation(input, options = {}) {
15
+ const opts = { ...DEFAULT_OPTIONS, ...options };
16
+ const type = classifyType(input);
17
+ const content = extractContent(input, opts.maxContentLength);
18
+ const metadata = buildMetadata(input);
19
+ return {
20
+ type,
21
+ content,
22
+ tool: input.tool,
23
+ input: sanitizeInput(input.input),
24
+ output: truncateOutput(input.output, opts.maxOutputLength),
25
+ timestamp: Date.now(),
26
+ sessionId: input.sessionId,
27
+ source: 'hook-automatic',
28
+ confidence: opts.defaultConfidence,
29
+ metadata
30
+ };
31
+ }
32
+ /**
33
+ * Classify the observation type based on tool and output
34
+ */
35
+ function classifyType(input) {
36
+ const { tool, output, exitCode } = input;
37
+ // Error cases
38
+ if (exitCode !== undefined && exitCode !== 0) {
39
+ return 'error';
40
+ }
41
+ if (output) {
42
+ const lowerOutput = output.toLowerCase();
43
+ // Error patterns
44
+ if (containsAny(lowerOutput, ['error:', 'failed:', 'exception:', 'cannot ', 'unable to '])) {
45
+ return 'error';
46
+ }
47
+ // Decision patterns
48
+ if (containsAny(lowerOutput, ['decided', 'chose', 'selected', 'will use', 'going with'])) {
49
+ return 'decision';
50
+ }
51
+ // Preference patterns
52
+ if (containsAny(lowerOutput, ['prefer', 'like', 'dislike', 'favorite'])) {
53
+ return 'preference_expressed';
54
+ }
55
+ // Goal patterns
56
+ if (containsAny(lowerOutput, ['goal:', 'objective:', 'aim:', 'target:'])) {
57
+ return 'goal_stated';
58
+ }
59
+ }
60
+ // Tool-based classification
61
+ switch (tool) {
62
+ case 'read':
63
+ case 'glob':
64
+ case 'grep':
65
+ return 'file_read';
66
+ case 'write':
67
+ return 'file_write';
68
+ case 'edit':
69
+ return 'file_edit';
70
+ case 'bash':
71
+ return 'command_run';
72
+ default:
73
+ return 'tool_execution';
74
+ }
75
+ }
76
+ /**
77
+ * Extract content from tool execution
78
+ */
79
+ function extractContent(input, maxLength) {
80
+ const parts = [];
81
+ // Tool context
82
+ parts.push(`[${input.tool}]`);
83
+ // Input summary
84
+ if (input.input) {
85
+ const inputSummary = summarizeInput(input.input, input.tool);
86
+ if (inputSummary) {
87
+ parts.push(inputSummary);
88
+ }
89
+ }
90
+ // Output summary
91
+ if (input.output) {
92
+ const outputSummary = summarizeOutput(input.output);
93
+ if (outputSummary) {
94
+ parts.push(outputSummary);
95
+ }
96
+ }
97
+ return parts.join(' ').slice(0, maxLength);
98
+ }
99
+ /**
100
+ * Summarize input for content
101
+ */
102
+ function summarizeInput(input, tool) {
103
+ switch (tool) {
104
+ case 'read':
105
+ return input.filePath ? `Reading ${input.filePath}` : '';
106
+ case 'write':
107
+ case 'edit':
108
+ return input.filePath ? `${tool === 'write' ? 'Creating' : 'Editing'} ${input.filePath}` : '';
109
+ case 'bash':
110
+ return input.command ? `Running: ${input.command}` : '';
111
+ case 'glob':
112
+ return input.pattern ? `Finding files matching ${input.pattern}` : '';
113
+ case 'grep':
114
+ return input.pattern ? `Searching for ${input.pattern}` : '';
115
+ default:
116
+ return '';
117
+ }
118
+ }
119
+ /**
120
+ * Summarize output for content
121
+ */
122
+ function summarizeOutput(output) {
123
+ const lines = output.split('\n').filter(l => l.trim());
124
+ if (lines.length === 0)
125
+ return '';
126
+ if (lines.length <= 3)
127
+ return lines.join(' ');
128
+ // First meaningful line
129
+ const firstLine = lines[0].trim();
130
+ return firstLine.length > 100 ? firstLine.slice(0, 100) + '...' : firstLine;
131
+ }
132
+ /**
133
+ * Build metadata from capture input
134
+ */
135
+ function buildMetadata(input) {
136
+ const metadata = {
137
+ projectPath: input.projectPath
138
+ };
139
+ if (input.input) {
140
+ if ('filePath' in input.input && typeof input.input.filePath === 'string') {
141
+ metadata.filePath = input.input.filePath;
142
+ }
143
+ if ('command' in input.input && typeof input.input.command === 'string') {
144
+ // Store command in custom metadata
145
+ metadata.command = input.input.command;
146
+ }
147
+ }
148
+ if (input.duration !== undefined) {
149
+ metadata.duration = input.duration;
150
+ }
151
+ if (input.exitCode !== undefined) {
152
+ metadata.exitCode = input.exitCode;
153
+ }
154
+ return metadata;
155
+ }
156
+ /**
157
+ * Sanitize input to remove sensitive data
158
+ */
159
+ function sanitizeInput(input) {
160
+ if (!input)
161
+ return undefined;
162
+ const sanitized = { ...input };
163
+ // Remove potentially sensitive fields
164
+ const sensitiveKeys = ['password', 'token', 'secret', 'apiKey', 'api_key', 'authorization'];
165
+ for (const key of sensitiveKeys) {
166
+ if (key in sanitized) {
167
+ sanitized[key] = '[REDACTED]';
168
+ }
169
+ }
170
+ return sanitized;
171
+ }
172
+ /**
173
+ * Truncate output to maximum length
174
+ */
175
+ function truncateOutput(output, maxLength = 10000) {
176
+ if (!output)
177
+ return undefined;
178
+ if (output.length <= maxLength)
179
+ return output;
180
+ return output.slice(0, maxLength) + '... [truncated]';
181
+ }
182
+ /**
183
+ * Check if text contains any of the patterns
184
+ */
185
+ function containsAny(text, patterns) {
186
+ return patterns.some(p => text.includes(p));
187
+ }
188
+ //# sourceMappingURL=observation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation.js","sourceRoot":"","sources":["../../src/capture/observation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { Mind } from '../mind.js';
2
+ export interface CommandContext {
3
+ mind: Mind;
4
+ sessionId: string;
5
+ args: Record<string, unknown>;
6
+ }
7
+ export interface CommandResult {
8
+ success: boolean;
9
+ output: string;
10
+ }
11
+ export interface Command {
12
+ name: string;
13
+ description: string;
14
+ usage: string;
15
+ handler: (ctx: CommandContext) => Promise<CommandResult>;
16
+ }
17
+ export declare function defineCommand(config: {
18
+ name: string;
19
+ description: string;
20
+ usage: string;
21
+ handler: (ctx: CommandContext) => Promise<CommandResult>;
22
+ }): Command;
23
+ export declare const mindStatsCommand: Command;
24
+ export declare const mindSearchCommand: Command;
25
+ export declare const mindContextCommand: Command;
26
+ export declare const mindForgetCommand: Command;
27
+ export declare const mindAddCommand: Command;
28
+ export declare const mindCardsCommand: Command;
29
+ export declare const mindHelpCommand: Command;
30
+ export declare const mindExportCommand: Command;
31
+ export declare const mindArchiveCommand: Command;
32
+ export declare const allCommands: Command[];
33
+ export declare function getCommand(name: string): Command | undefined;
34
+ export declare function getCommandList(): Array<{
35
+ name: string;
36
+ description: string;
37
+ }>;
38
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;CAC1D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;CAC1D,GAAG,OAAO,CAEV;AAED,eAAO,MAAM,gBAAgB,SA6C3B,CAAC;AAEH,eAAO,MAAM,iBAAiB,SA6C5B,CAAC;AAEH,eAAO,MAAM,kBAAkB,SA2B7B,CAAC;AAEH,eAAO,MAAM,iBAAiB,SAiC5B,CAAC;AAEH,eAAO,MAAM,cAAc,SAsCzB,CAAC;AAEH,eAAO,MAAM,gBAAgB,SA6C3B,CAAC;AAEH,eAAO,MAAM,eAAe,SAoB1B,CAAC;AAEH,eAAO,MAAM,iBAAiB,SAsC5B,CAAC;AAEH,eAAO,MAAM,kBAAkB,SA4E7B,CAAC;AAEH,eAAO,MAAM,WAAW,EAAE,OAAO,EAUhC,CAAC;AAEF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAE5D;AAED,wBAAgB,cAAc,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAE7E"}