@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.
- package/CHANGELOG.md +83 -0
- package/LICENSE +21 -0
- package/README.md +172 -0
- package/dist/capture/classification.d.ts +37 -0
- package/dist/capture/classification.d.ts.map +1 -0
- package/dist/capture/classification.js +181 -0
- package/dist/capture/classification.js.map +1 -0
- package/dist/capture/filtering.d.ts +63 -0
- package/dist/capture/filtering.d.ts.map +1 -0
- package/dist/capture/filtering.js +195 -0
- package/dist/capture/filtering.js.map +1 -0
- package/dist/capture/observation.d.ts +28 -0
- package/dist/capture/observation.d.ts.map +1 -0
- package/dist/capture/observation.js +188 -0
- package/dist/capture/observation.js.map +1 -0
- package/dist/commands/index.d.ts +38 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +375 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +41 -0
- package/dist/config.js.map +1 -0
- package/dist/context/builder.d.ts +19 -0
- package/dist/context/builder.d.ts.map +1 -0
- package/dist/context/builder.js +209 -0
- package/dist/context/builder.js.map +1 -0
- package/dist/context/format.d.ts +32 -0
- package/dist/context/format.d.ts.map +1 -0
- package/dist/context/format.js +211 -0
- package/dist/context/format.js.map +1 -0
- package/dist/embedding/index.d.ts +3 -0
- package/dist/embedding/index.d.ts.map +1 -0
- package/dist/embedding/index.js +3 -0
- package/dist/embedding/index.js.map +1 -0
- package/dist/embedding/provider.d.ts +15 -0
- package/dist/embedding/provider.d.ts.map +1 -0
- package/dist/embedding/provider.js +19 -0
- package/dist/embedding/provider.js.map +1 -0
- package/dist/embedding/transformers.d.ts +14 -0
- package/dist/embedding/transformers.d.ts.map +1 -0
- package/dist/embedding/transformers.js +55 -0
- package/dist/embedding/transformers.js.map +1 -0
- package/dist/extract/confidence.d.ts +48 -0
- package/dist/extract/confidence.d.ts.map +1 -0
- package/dist/extract/confidence.js +230 -0
- package/dist/extract/confidence.js.map +1 -0
- package/dist/extract/llm-extractor.d.ts +35 -0
- package/dist/extract/llm-extractor.d.ts.map +1 -0
- package/dist/extract/llm-extractor.js +204 -0
- package/dist/extract/llm-extractor.js.map +1 -0
- package/dist/extract/pipeline.d.ts +44 -0
- package/dist/extract/pipeline.d.ts.map +1 -0
- package/dist/extract/pipeline.js +171 -0
- package/dist/extract/pipeline.js.map +1 -0
- package/dist/extract/rules-engine.d.ts +14 -0
- package/dist/extract/rules-engine.d.ts.map +1 -0
- package/dist/extract/rules-engine.js +314 -0
- package/dist/extract/rules-engine.js.map +1 -0
- package/dist/extract/summarizer.d.ts +27 -0
- package/dist/extract/summarizer.d.ts.map +1 -0
- package/dist/extract/summarizer.js +148 -0
- package/dist/extract/summarizer.js.map +1 -0
- package/dist/hooks/session-idle.d.ts +38 -0
- package/dist/hooks/session-idle.d.ts.map +1 -0
- package/dist/hooks/session-idle.js +142 -0
- package/dist/hooks/session-idle.js.map +1 -0
- package/dist/hooks/system-transform.d.ts +41 -0
- package/dist/hooks/system-transform.d.ts.map +1 -0
- package/dist/hooks/system-transform.js +98 -0
- package/dist/hooks/system-transform.js.map +1 -0
- package/dist/hooks/tool-after.d.ts +66 -0
- package/dist/hooks/tool-after.d.ts.map +1 -0
- package/dist/hooks/tool-after.js +155 -0
- package/dist/hooks/tool-after.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/mind.d.ts +69 -0
- package/dist/mind.d.ts.map +1 -0
- package/dist/mind.js +368 -0
- package/dist/mind.js.map +1 -0
- package/dist/procedural/index.d.ts +4 -0
- package/dist/procedural/index.d.ts.map +1 -0
- package/dist/procedural/index.js +4 -0
- package/dist/procedural/index.js.map +1 -0
- package/dist/procedural/induction.d.ts +23 -0
- package/dist/procedural/induction.d.ts.map +1 -0
- package/dist/procedural/induction.js +104 -0
- package/dist/procedural/induction.js.map +1 -0
- package/dist/procedural/miner.d.ts +45 -0
- package/dist/procedural/miner.d.ts.map +1 -0
- package/dist/procedural/miner.js +171 -0
- package/dist/procedural/miner.js.map +1 -0
- package/dist/procedural/suggester.d.ts +20 -0
- package/dist/procedural/suggester.d.ts.map +1 -0
- package/dist/procedural/suggester.js +69 -0
- package/dist/procedural/suggester.js.map +1 -0
- package/dist/store/archive.d.ts +31 -0
- package/dist/store/archive.d.ts.map +1 -0
- package/dist/store/archive.js +137 -0
- package/dist/store/archive.js.map +1 -0
- package/dist/store/backup.d.ts +36 -0
- package/dist/store/backup.d.ts.map +1 -0
- package/dist/store/backup.js +163 -0
- package/dist/store/backup.js.map +1 -0
- package/dist/store/memorycards.d.ts +31 -0
- package/dist/store/memorycards.d.ts.map +1 -0
- package/dist/store/memorycards.js +161 -0
- package/dist/store/memorycards.js.map +1 -0
- package/dist/store/mv2-adapter.d.ts +29 -0
- package/dist/store/mv2-adapter.d.ts.map +1 -0
- package/dist/store/mv2-adapter.js +359 -0
- package/dist/store/mv2-adapter.js.map +1 -0
- package/dist/store/procedures.d.ts +79 -0
- package/dist/store/procedures.d.ts.map +1 -0
- package/dist/store/procedures.js +183 -0
- package/dist/store/procedures.js.map +1 -0
- package/dist/store/tombstone.d.ts +27 -0
- package/dist/store/tombstone.d.ts.map +1 -0
- package/dist/store/tombstone.js +136 -0
- package/dist/store/tombstone.js.map +1 -0
- package/dist/tools/index.d.ts +36 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +236 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types.d.ts +301 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +69 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/error.d.ts +57 -0
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/error.js +143 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/uuid.d.ts +2 -0
- package/dist/utils/uuid.d.ts.map +1 -0
- package/dist/utils/uuid.js +5 -0
- package/dist/utils/uuid.js.map +1 -0
- 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":"AAAA;;;;GAIG;AAuBH,MAAM,eAAe,GAA6B;IAChD,gBAAgB,EAAE,IAAI;IACtB,eAAe,EAAE,KAAK;IACtB,iBAAiB,EAAE,GAAG;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAmB,EACnB,UAA0B,EAAE;IAE5B,MAAM,IAAI,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,EAAE,CAAC;IAEhD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAEtC,OAAO;QACL,IAAI;QACJ,OAAO;QACP,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;QACjC,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC;QAC1D,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,gBAAgB;QACxB,UAAU,EAAE,IAAI,CAAC,iBAAiB;QAClC,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,KAAmB;IACvC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAEzC,cAAc;IACd,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QAEzC,iBAAiB;QACjB,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;YAC3F,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,oBAAoB;QACpB,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;YACzF,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,sBAAsB;QACtB,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;YACxE,OAAO,sBAAsB,CAAC;QAChC,CAAC;QAED,gBAAgB;QAChB,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YACzE,OAAO,aAAa,CAAC;QACvB,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,WAAW,CAAC;QACrB,KAAK,OAAO;YACV,OAAO,YAAY,CAAC;QACtB,KAAK,MAAM;YACT,OAAO,WAAW,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,aAAa,CAAC;QACvB;YACE,OAAO,gBAAgB,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,KAAmB,EAAE,SAAiB;IAC5D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,eAAe;IACf,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IAE9B,gBAAgB;IAChB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,YAAY,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,KAA8B,EAAE,IAAY;IAClE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,KAAK,OAAO,CAAC;QACb,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,MAAc;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAEvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE9C,wBAAwB;IACxB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,OAAO,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,KAAmB;IACxC,MAAM,QAAQ,GAAwB;QACpC,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC;IAEF,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,UAAU,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1E,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC3C,CAAC;QACD,IAAI,SAAS,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACxE,mCAAmC;YACnC,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;QACzC,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IACrC,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IACrC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,KAA+B;IACpD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,MAAM,SAAS,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAE/B,sCAAsC;IACtC,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAC5F,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,MAAe,EAAE,YAAoB,KAAK;IAChE,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,MAAM,CAAC;IAC9C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,iBAAiB,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,IAAY,EAAE,QAAkB;IACnD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -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"}
|