openhorse 0.2.6 → 0.2.8

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 (65) hide show
  1. package/dist/commands/index.d.ts.map +1 -1
  2. package/dist/commands/index.js +49 -0
  3. package/dist/commands/index.js.map +1 -1
  4. package/dist/core/checkpoint.d.ts +42 -0
  5. package/dist/core/checkpoint.d.ts.map +1 -0
  6. package/dist/core/checkpoint.js +222 -0
  7. package/dist/core/checkpoint.js.map +1 -0
  8. package/dist/core/tool-artifacts.d.ts.map +1 -1
  9. package/dist/core/tool-artifacts.js +19 -15
  10. package/dist/core/tool-artifacts.js.map +1 -1
  11. package/dist/framework/index.d.ts +1 -0
  12. package/dist/framework/index.d.ts.map +1 -1
  13. package/dist/framework/index.js +5 -1
  14. package/dist/framework/index.js.map +1 -1
  15. package/dist/framework/tool-serializer.d.ts +21 -0
  16. package/dist/framework/tool-serializer.d.ts.map +1 -0
  17. package/dist/framework/tool-serializer.js +68 -0
  18. package/dist/framework/tool-serializer.js.map +1 -0
  19. package/dist/framework/tool.d.ts +5 -1
  20. package/dist/framework/tool.d.ts.map +1 -1
  21. package/dist/framework/tool.js.map +1 -1
  22. package/dist/harness/context-harness.d.ts.map +1 -1
  23. package/dist/harness/context-harness.js +5 -0
  24. package/dist/harness/context-harness.js.map +1 -1
  25. package/dist/harness/evidence.d.ts +5 -0
  26. package/dist/harness/evidence.d.ts.map +1 -1
  27. package/dist/harness/evidence.js +23 -0
  28. package/dist/harness/evidence.js.map +1 -1
  29. package/dist/harness/index.d.ts +1 -1
  30. package/dist/harness/index.d.ts.map +1 -1
  31. package/dist/harness/index.js +2 -1
  32. package/dist/harness/index.js.map +1 -1
  33. package/dist/harness/intent.d.ts.map +1 -1
  34. package/dist/harness/intent.js +8 -0
  35. package/dist/harness/intent.js.map +1 -1
  36. package/dist/harness/types.d.ts +4 -1
  37. package/dist/harness/types.d.ts.map +1 -1
  38. package/dist/memory/storage.d.ts +2 -0
  39. package/dist/memory/storage.d.ts.map +1 -1
  40. package/dist/memory/storage.js +56 -32
  41. package/dist/memory/storage.js.map +1 -1
  42. package/dist/memory/vector-store.d.ts +23 -3
  43. package/dist/memory/vector-store.d.ts.map +1 -1
  44. package/dist/memory/vector-store.js +107 -37
  45. package/dist/memory/vector-store.js.map +1 -1
  46. package/dist/services/concurrent-sessions.d.ts.map +1 -1
  47. package/dist/services/concurrent-sessions.js +6 -7
  48. package/dist/services/concurrent-sessions.js.map +1 -1
  49. package/dist/services/config-dir.d.ts +29 -6
  50. package/dist/services/config-dir.d.ts.map +1 -1
  51. package/dist/services/config-dir.js +118 -17
  52. package/dist/services/config-dir.js.map +1 -1
  53. package/dist/services/doctor.d.ts.map +1 -1
  54. package/dist/services/doctor.js +137 -0
  55. package/dist/services/doctor.js.map +1 -1
  56. package/dist/services/session-storage.d.ts.map +1 -1
  57. package/dist/services/session-storage.js +42 -89
  58. package/dist/services/session-storage.js.map +1 -1
  59. package/dist/services/storage-maintenance.d.ts +53 -0
  60. package/dist/services/storage-maintenance.d.ts.map +1 -0
  61. package/dist/services/storage-maintenance.js +375 -0
  62. package/dist/services/storage-maintenance.js.map +1 -0
  63. package/dist/tools/index.js +9 -9
  64. package/dist/tools/index.js.map +1 -1
  65. package/package.json +1 -1
@@ -0,0 +1,375 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.collectStorageReport = collectStorageReport;
7
+ exports.cleanupStorage = cleanupStorage;
8
+ exports.repairProjectMetadata = repairProjectMetadata;
9
+ exports.formatStorageReport = formatStorageReport;
10
+ exports.formatStorageCleanupResult = formatStorageCleanupResult;
11
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
12
+ const fs_1 = require("fs");
13
+ const path_1 = require("path");
14
+ const config_dir_1 = require("./config-dir");
15
+ const HASH_PROJECT_RE = /^[a-f0-9]{16}$/;
16
+ const TEMP_PROJECT_RE = /^(private-tmp-|private-var-folders-.*openhorse-|tmp-openhorse-|test-project$)/;
17
+ function collectStorageReport() {
18
+ const configHome = (0, config_dir_1.getConfigHome)();
19
+ const projectsDir = (0, config_dir_1.getProjectsDir)();
20
+ const projects = listProjectSummaries(projectsDir);
21
+ const validProjectKeys = new Set(projects
22
+ .filter(project => !HASH_PROJECT_RE.test(project.projectKey) && !TEMP_PROJECT_RE.test(project.projectKey))
23
+ .map(project => project.projectKey));
24
+ const vectorProjects = inspectVectorProjects(configHome, validProjectKeys);
25
+ const issues = [];
26
+ const legacySessions = (0, path_1.join)(configHome, 'sessions');
27
+ const legacyMemory = (0, path_1.join)(configHome, 'memory');
28
+ if ((0, fs_1.existsSync)(legacySessions)) {
29
+ issues.push({
30
+ kind: 'legacy-global-sessions',
31
+ path: legacySessions,
32
+ summary: 'Legacy global sessions directory exists',
33
+ bytes: dirSize(legacySessions),
34
+ canCleanup: true,
35
+ });
36
+ }
37
+ if ((0, fs_1.existsSync)(legacyMemory)) {
38
+ issues.push({
39
+ kind: 'legacy-global-memory',
40
+ path: legacyMemory,
41
+ summary: 'Legacy global memory directory exists',
42
+ bytes: dirSize(legacyMemory),
43
+ canCleanup: true,
44
+ });
45
+ }
46
+ for (const project of projects) {
47
+ if (HASH_PROJECT_RE.test(project.projectKey)) {
48
+ issues.push({
49
+ kind: 'legacy-hash-project',
50
+ path: project.path,
51
+ projectKey: project.projectKey,
52
+ summary: 'Legacy hash project storage directory',
53
+ bytes: project.bytes,
54
+ canCleanup: true,
55
+ });
56
+ continue;
57
+ }
58
+ if (TEMP_PROJECT_RE.test(project.projectKey)) {
59
+ issues.push({
60
+ kind: 'temp-project',
61
+ path: project.path,
62
+ projectKey: project.projectKey,
63
+ summary: 'Test or temporary project storage directory',
64
+ bytes: project.bytes,
65
+ canCleanup: true,
66
+ });
67
+ continue;
68
+ }
69
+ if (project.bytes === 0) {
70
+ issues.push({
71
+ kind: 'empty-project',
72
+ path: project.path,
73
+ projectKey: project.projectKey,
74
+ summary: 'Empty project storage directory',
75
+ bytes: 0,
76
+ canCleanup: true,
77
+ });
78
+ continue;
79
+ }
80
+ if (!project.hasMetadata) {
81
+ issues.push({
82
+ kind: 'missing-project-metadata',
83
+ path: (0, config_dir_1.getProjectMetadataPath)(project.projectPath || project.path),
84
+ projectKey: project.projectKey,
85
+ summary: 'Project metadata file is missing',
86
+ bytes: project.bytes,
87
+ canCleanup: false,
88
+ });
89
+ }
90
+ else if (project.projectPath && (0, config_dir_1.getCanonicalProjectKey)(project.projectPath) !== project.projectKey) {
91
+ issues.push({
92
+ kind: 'invalid-project-metadata',
93
+ path: (0, config_dir_1.getProjectMetadataPath)(project.projectPath),
94
+ projectKey: project.projectKey,
95
+ summary: 'Project metadata does not match the canonical project key',
96
+ bytes: project.bytes,
97
+ canCleanup: false,
98
+ });
99
+ }
100
+ }
101
+ for (const vectorProject of vectorProjects) {
102
+ if (!vectorProject.orphan)
103
+ continue;
104
+ issues.push({
105
+ kind: 'vector-orphan-project',
106
+ projectKey: vectorProject.project,
107
+ summary: `Vector DB has ${vectorProject.rows} row(s) for a missing project`,
108
+ canCleanup: true,
109
+ });
110
+ }
111
+ return {
112
+ configHome,
113
+ projectsDir,
114
+ projects,
115
+ vectorProjects,
116
+ issues,
117
+ totalBytes: dirSize(configHome),
118
+ };
119
+ }
120
+ function cleanupStorage(options = {}) {
121
+ const opts = {
122
+ dryRun: options.dryRun ?? false,
123
+ includeLegacy: options.includeLegacy ?? true,
124
+ includeTemp: options.includeTemp ?? true,
125
+ includeEmpty: options.includeEmpty ?? true,
126
+ includeVectorOrphans: options.includeVectorOrphans ?? true,
127
+ };
128
+ const report = collectStorageReport();
129
+ const deletedPaths = [];
130
+ const skippedPaths = [];
131
+ let vectorDeletedRows = 0;
132
+ for (const issue of report.issues) {
133
+ const shouldDeletePath = (opts.includeLegacy && (issue.kind === 'legacy-global-sessions' || issue.kind === 'legacy-global-memory' || issue.kind === 'legacy-hash-project')) ||
134
+ (opts.includeTemp && issue.kind === 'temp-project') ||
135
+ (opts.includeEmpty && issue.kind === 'empty-project');
136
+ if (shouldDeletePath && issue.path) {
137
+ if (!opts.dryRun) {
138
+ (0, fs_1.rmSync)(issue.path, { recursive: true, force: true });
139
+ }
140
+ deletedPaths.push(issue.path);
141
+ continue;
142
+ }
143
+ if (opts.includeVectorOrphans && issue.kind === 'vector-orphan-project' && issue.projectKey) {
144
+ const deleted = deleteVectorProjectRows(report.configHome, issue.projectKey, opts.dryRun);
145
+ vectorDeletedRows += deleted;
146
+ continue;
147
+ }
148
+ if (issue.canCleanup) {
149
+ skippedPaths.push(issue.path || issue.projectKey || issue.kind);
150
+ }
151
+ }
152
+ if (!opts.dryRun) {
153
+ repairProjectMetadata();
154
+ }
155
+ return {
156
+ dryRun: opts.dryRun,
157
+ deletedPaths,
158
+ skippedPaths,
159
+ vectorDeletedRows,
160
+ issues: report.issues,
161
+ };
162
+ }
163
+ function repairProjectMetadata() {
164
+ const projectsDir = (0, config_dir_1.getProjectsDir)();
165
+ const repaired = [];
166
+ const skipped = [];
167
+ if (!(0, fs_1.existsSync)(projectsDir)) {
168
+ (0, fs_1.mkdirSync)(projectsDir, { recursive: true, mode: 0o700 });
169
+ return { repaired, skipped };
170
+ }
171
+ for (const entry of (0, fs_1.readdirSync)(projectsDir)) {
172
+ if (HASH_PROJECT_RE.test(entry) || TEMP_PROJECT_RE.test(entry)) {
173
+ skipped.push(entry);
174
+ continue;
175
+ }
176
+ const projectDir = (0, path_1.join)(projectsDir, entry);
177
+ if (!safeIsDirectory(projectDir))
178
+ continue;
179
+ const projectPath = inferProjectPath(projectDir);
180
+ if (!projectPath) {
181
+ skipped.push(entry);
182
+ continue;
183
+ }
184
+ (0, config_dir_1.updateProjectMetadata)(projectPath);
185
+ repaired.push(entry);
186
+ }
187
+ return { repaired, skipped };
188
+ }
189
+ function formatStorageReport(report) {
190
+ const lines = [
191
+ 'OpenHorse Storage',
192
+ '─'.repeat(40),
193
+ `Config ${report.configHome}`,
194
+ `Projects ${report.projects.length}`,
195
+ `Size ${formatBytes(report.totalBytes)}`,
196
+ `Issues ${report.issues.length}`,
197
+ '',
198
+ ];
199
+ if (report.issues.length === 0) {
200
+ lines.push('✓ Storage layout is clean');
201
+ }
202
+ else {
203
+ for (const issue of report.issues) {
204
+ const size = issue.bytes !== undefined ? ` ${formatBytes(issue.bytes)}` : '';
205
+ const target = issue.path || issue.projectKey || '';
206
+ lines.push(`! ${issue.kind}${size}`);
207
+ lines.push(` ${issue.summary}`);
208
+ if (target)
209
+ lines.push(` ${target}`);
210
+ }
211
+ }
212
+ if (report.vectorProjects.length > 0) {
213
+ lines.push('', 'Vector Projects');
214
+ for (const project of report.vectorProjects.slice(0, 12)) {
215
+ lines.push(` ${project.orphan ? '!' : '✓'} ${project.project} ${project.rows} rows`);
216
+ }
217
+ }
218
+ return lines.join('\n');
219
+ }
220
+ function formatStorageCleanupResult(result) {
221
+ const lines = [
222
+ result.dryRun ? 'OpenHorse Storage Cleanup (dry run)' : 'OpenHorse Storage Cleanup',
223
+ '─'.repeat(40),
224
+ `Paths ${result.deletedPaths.length}`,
225
+ `Vector rows ${result.vectorDeletedRows}`,
226
+ ];
227
+ for (const path of result.deletedPaths.slice(0, 20)) {
228
+ lines.push(` ${result.dryRun ? 'would delete' : 'deleted'} ${path}`);
229
+ }
230
+ if (result.deletedPaths.length > 20) {
231
+ lines.push(` ... ${result.deletedPaths.length - 20} more`);
232
+ }
233
+ if (result.skippedPaths.length > 0) {
234
+ lines.push(`Skipped ${result.skippedPaths.length}`);
235
+ }
236
+ return lines.join('\n');
237
+ }
238
+ function listProjectSummaries(projectsDir) {
239
+ if (!(0, fs_1.existsSync)(projectsDir))
240
+ return [];
241
+ const summaries = [];
242
+ for (const projectKey of (0, fs_1.readdirSync)(projectsDir)) {
243
+ const projectDir = (0, path_1.join)(projectsDir, projectKey);
244
+ if (!safeIsDirectory(projectDir))
245
+ continue;
246
+ const projectPath = inferProjectPath(projectDir);
247
+ const metadata = projectPath ? (0, config_dir_1.readProjectMetadata)(projectPath) : null;
248
+ const sessionsDir = (0, path_1.join)(projectDir, 'sessions');
249
+ const sessions = (0, fs_1.existsSync)(sessionsDir)
250
+ ? (0, fs_1.readdirSync)(sessionsDir).filter(file => file.endsWith('.json') && !file.endsWith('.harness.json') && !file.endsWith('.index.json')).length
251
+ : 0;
252
+ summaries.push({
253
+ projectKey,
254
+ path: projectDir,
255
+ bytes: dirSize(projectDir),
256
+ hasMetadata: !!metadata,
257
+ projectPath,
258
+ sessions,
259
+ });
260
+ }
261
+ return summaries.sort((a, b) => b.bytes - a.bytes || a.projectKey.localeCompare(b.projectKey));
262
+ }
263
+ function inferProjectPath(projectDir) {
264
+ const metadataPath = (0, path_1.join)(projectDir, 'project.json');
265
+ try {
266
+ const parsed = JSON.parse((0, fs_1.readFileSync)(metadataPath, 'utf8'));
267
+ if (typeof parsed.projectPath === 'string' && parsed.projectPath) {
268
+ return parsed.projectPath;
269
+ }
270
+ }
271
+ catch {
272
+ // Fall through to session metadata.
273
+ }
274
+ const sessionsDir = (0, path_1.join)(projectDir, 'sessions');
275
+ if (!(0, fs_1.existsSync)(sessionsDir))
276
+ return undefined;
277
+ for (const file of (0, fs_1.readdirSync)(sessionsDir)) {
278
+ if (!file.endsWith('.json') || file.endsWith('.harness.json') || file.endsWith('.index.json'))
279
+ continue;
280
+ try {
281
+ const parsed = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(sessionsDir, file), 'utf8'));
282
+ if (typeof parsed.projectPath === 'string' && parsed.projectPath) {
283
+ return parsed.projectPath;
284
+ }
285
+ }
286
+ catch {
287
+ // Try the next session file.
288
+ }
289
+ }
290
+ return undefined;
291
+ }
292
+ function inspectVectorProjects(configHome, validProjectKeys) {
293
+ const dbPath = (0, path_1.join)(configHome, 'vector.db');
294
+ if (!(0, fs_1.existsSync)(dbPath))
295
+ return [];
296
+ let db = null;
297
+ try {
298
+ db = new better_sqlite3_1.default(dbPath, { readonly: true });
299
+ const hasMemories = db.prepare("SELECT name FROM sqlite_master WHERE name = 'memories'").get();
300
+ if (!hasMemories)
301
+ return [];
302
+ const rows = db.prepare(`
303
+ SELECT COALESCE(project, 'global') as project, COUNT(*) as rows
304
+ FROM memories
305
+ GROUP BY COALESCE(project, 'global')
306
+ ORDER BY rows DESC, project ASC
307
+ `).all();
308
+ return rows.map(row => ({
309
+ project: row.project,
310
+ rows: row.rows,
311
+ orphan: row.project !== 'global' && !validProjectKeys.has(row.project),
312
+ }));
313
+ }
314
+ catch {
315
+ return [];
316
+ }
317
+ finally {
318
+ db?.close();
319
+ }
320
+ }
321
+ function deleteVectorProjectRows(configHome, project, dryRun) {
322
+ const dbPath = (0, path_1.join)(configHome, 'vector.db');
323
+ if (!(0, fs_1.existsSync)(dbPath))
324
+ return 0;
325
+ const db = new better_sqlite3_1.default(dbPath);
326
+ try {
327
+ const hasMemories = db.prepare("SELECT name FROM sqlite_master WHERE name = 'memories'").get();
328
+ if (!hasMemories)
329
+ return 0;
330
+ const ids = db.prepare('SELECT id FROM memories WHERE project = ?').all(project).map(row => row.id);
331
+ if (dryRun || ids.length === 0)
332
+ return ids.length;
333
+ const placeholders = ids.map(() => '?').join(', ');
334
+ if (db.prepare("SELECT name FROM sqlite_master WHERE name = 'vec_memories'").get() && db.prepare("SELECT name FROM sqlite_master WHERE name = 'memory_vectors'").get()) {
335
+ db.prepare(`DELETE FROM vec_memories WHERE rowid IN (SELECT vector_rowid FROM memory_vectors WHERE memory_id IN (${placeholders}))`).run(...ids);
336
+ db.prepare(`DELETE FROM memory_vectors WHERE memory_id IN (${placeholders})`).run(...ids);
337
+ }
338
+ db.prepare(`DELETE FROM memories WHERE id IN (${placeholders})`).run(...ids);
339
+ return ids.length;
340
+ }
341
+ finally {
342
+ db.close();
343
+ }
344
+ }
345
+ function dirSize(target) {
346
+ if (!(0, fs_1.existsSync)(target))
347
+ return 0;
348
+ try {
349
+ const stat = (0, fs_1.statSync)(target);
350
+ if (stat.isFile())
351
+ return stat.size;
352
+ if (!stat.isDirectory())
353
+ return 0;
354
+ return (0, fs_1.readdirSync)(target).reduce((sum, entry) => sum + dirSize((0, path_1.join)(target, entry)), 0);
355
+ }
356
+ catch {
357
+ return 0;
358
+ }
359
+ }
360
+ function safeIsDirectory(target) {
361
+ try {
362
+ return (0, fs_1.statSync)(target).isDirectory();
363
+ }
364
+ catch {
365
+ return false;
366
+ }
367
+ }
368
+ function formatBytes(bytes) {
369
+ if (bytes < 1024)
370
+ return `${bytes}B`;
371
+ if (bytes < 1024 * 1024)
372
+ return `${(bytes / 1024).toFixed(1)}KB`;
373
+ return `${(bytes / 1024 / 1024).toFixed(1)}MB`;
374
+ }
375
+ //# sourceMappingURL=storage-maintenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-maintenance.js","sourceRoot":"","sources":["../../src/services/storage-maintenance.ts"],"names":[],"mappings":"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"}
@@ -66,7 +66,7 @@ exports.TOOLS = [
66
66
  },
67
67
  required: ['path'],
68
68
  },
69
- execute: async (args) => {
69
+ execute: async (args, context) => {
70
70
  // Ensure path is a valid string
71
71
  const path = args.path;
72
72
  if (!path || typeof path !== 'string') {
@@ -102,7 +102,7 @@ exports.TOOLS = [
102
102
  },
103
103
  required: ['path', 'content'],
104
104
  },
105
- execute: async (args) => {
105
+ execute: async (args, context) => {
106
106
  // Ensure path and content are valid strings
107
107
  const path = args.path;
108
108
  const content = args.content;
@@ -411,7 +411,7 @@ exports.TOOLS = [
411
411
  },
412
412
  required: ['name', 'type', 'content'],
413
413
  },
414
- execute: async (args) => {
414
+ execute: async (args, context) => {
415
415
  const name = args.name;
416
416
  const type = args.type;
417
417
  const content = args.content;
@@ -426,7 +426,7 @@ exports.TOOLS = [
426
426
  return { success: false, output: '', error: 'memory_save requires a content parameter' };
427
427
  }
428
428
  try {
429
- const projectPath = process.cwd();
429
+ const projectPath = context?.cwd || process.cwd();
430
430
  const entry = {
431
431
  name,
432
432
  type,
@@ -476,9 +476,9 @@ exports.TOOLS = [
476
476
  },
477
477
  required: [],
478
478
  },
479
- execute: async (args) => {
479
+ execute: async (args, context) => {
480
480
  try {
481
- const projectPath = process.cwd();
481
+ const projectPath = context?.cwd || process.cwd();
482
482
  const query = args.query || '';
483
483
  const type = args.type;
484
484
  let memories;
@@ -561,13 +561,13 @@ exports.TOOLS = [
561
561
  },
562
562
  required: ['name'],
563
563
  },
564
- execute: async (args) => {
564
+ execute: async (args, context) => {
565
565
  const name = args.name;
566
566
  if (!name || typeof name !== 'string') {
567
567
  return { success: false, output: '', error: 'memory_forget requires a name parameter' };
568
568
  }
569
569
  try {
570
- const projectPath = process.cwd();
570
+ const projectPath = context?.cwd || process.cwd();
571
571
  const existing = (0, memory_1.loadMemory)(name, projectPath);
572
572
  if (!existing) {
573
573
  return { success: false, output: '', error: `Memory not found: ${name}` };
@@ -576,7 +576,7 @@ exports.TOOLS = [
576
576
  if ((0, semantic_search_1.isSemanticEnabled)()) {
577
577
  try {
578
578
  const { getVectorStore } = require('../memory/vector-store');
579
- getVectorStore().delete(name);
579
+ getVectorStore().delete(name, projectPath);
580
580
  }
581
581
  catch {
582
582
  // Vector store cleanup is best-effort