openhorse 0.2.12 → 0.2.13

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 (79) hide show
  1. package/dist/commands/index.d.ts.map +1 -1
  2. package/dist/commands/index.js +597 -12
  3. package/dist/commands/index.js.map +1 -1
  4. package/dist/commands/types.d.ts +3 -1
  5. package/dist/commands/types.d.ts.map +1 -1
  6. package/dist/commands/types.js.map +1 -1
  7. package/dist/core/checkpoint.d.ts +1 -0
  8. package/dist/core/checkpoint.d.ts.map +1 -1
  9. package/dist/core/checkpoint.js +59 -10
  10. package/dist/core/checkpoint.js.map +1 -1
  11. package/dist/core/tool-artifacts.d.ts +10 -0
  12. package/dist/core/tool-artifacts.d.ts.map +1 -1
  13. package/dist/core/tool-artifacts.js +81 -3
  14. package/dist/core/tool-artifacts.js.map +1 -1
  15. package/dist/framework/index.d.ts +2 -2
  16. package/dist/framework/index.d.ts.map +1 -1
  17. package/dist/framework/index.js +5 -1
  18. package/dist/framework/index.js.map +1 -1
  19. package/dist/framework/query.d.ts +87 -2
  20. package/dist/framework/query.d.ts.map +1 -1
  21. package/dist/framework/query.js +281 -14
  22. package/dist/framework/query.js.map +1 -1
  23. package/dist/framework/tool-scheduler.d.ts +9 -0
  24. package/dist/framework/tool-scheduler.d.ts.map +1 -1
  25. package/dist/framework/tool-scheduler.js +34 -0
  26. package/dist/framework/tool-scheduler.js.map +1 -1
  27. package/dist/ink-ui/components/StatusLine.d.ts.map +1 -1
  28. package/dist/ink-ui/components/StatusLine.js +7 -1
  29. package/dist/ink-ui/components/StatusLine.js.map +1 -1
  30. package/dist/runtime/agent-runtime-protocol.d.ts +13 -1
  31. package/dist/runtime/agent-runtime-protocol.d.ts.map +1 -1
  32. package/dist/runtime/agent-runtime-protocol.js +24 -0
  33. package/dist/runtime/agent-runtime-protocol.js.map +1 -1
  34. package/dist/runtime/chat-controller.d.ts +3 -0
  35. package/dist/runtime/chat-controller.d.ts.map +1 -1
  36. package/dist/runtime/chat-controller.js +907 -2
  37. package/dist/runtime/chat-controller.js.map +1 -1
  38. package/dist/runtime/loop-budget.d.ts +5 -0
  39. package/dist/runtime/loop-budget.d.ts.map +1 -0
  40. package/dist/runtime/loop-budget.js +77 -0
  41. package/dist/runtime/loop-budget.js.map +1 -0
  42. package/dist/runtime/ui-events.d.ts +34 -1
  43. package/dist/runtime/ui-events.d.ts.map +1 -1
  44. package/dist/runtime/ui-events.js.map +1 -1
  45. package/dist/services/config-dir.d.ts +2 -0
  46. package/dist/services/config-dir.d.ts.map +1 -1
  47. package/dist/services/config-dir.js +5 -0
  48. package/dist/services/config-dir.js.map +1 -1
  49. package/dist/services/config.d.ts +4 -2
  50. package/dist/services/config.d.ts.map +1 -1
  51. package/dist/services/config.js +19 -0
  52. package/dist/services/config.js.map +1 -1
  53. package/dist/services/global-config.d.ts +17 -0
  54. package/dist/services/global-config.d.ts.map +1 -1
  55. package/dist/services/global-config.js.map +1 -1
  56. package/dist/services/llm.d.ts +16 -0
  57. package/dist/services/llm.d.ts.map +1 -1
  58. package/dist/services/llm.js +56 -11
  59. package/dist/services/llm.js.map +1 -1
  60. package/dist/services/redaction.d.ts +2 -0
  61. package/dist/services/redaction.d.ts.map +1 -0
  62. package/dist/services/redaction.js +27 -0
  63. package/dist/services/redaction.js.map +1 -0
  64. package/dist/services/session-index.d.ts.map +1 -1
  65. package/dist/services/session-index.js +7 -3
  66. package/dist/services/session-index.js.map +1 -1
  67. package/dist/services/session-storage.d.ts +98 -0
  68. package/dist/services/session-storage.d.ts.map +1 -1
  69. package/dist/services/session-storage.js +153 -2
  70. package/dist/services/session-storage.js.map +1 -1
  71. package/dist/services/verification-profile.d.ts +36 -0
  72. package/dist/services/verification-profile.d.ts.map +1 -0
  73. package/dist/services/verification-profile.js +239 -0
  74. package/dist/services/verification-profile.js.map +1 -0
  75. package/dist/services/workspace-state.d.ts +25 -0
  76. package/dist/services/workspace-state.d.ts.map +1 -0
  77. package/dist/services/workspace-state.js +115 -0
  78. package/dist/services/workspace-state.js.map +1 -0
  79. package/package.json +1 -1
@@ -0,0 +1,25 @@
1
+ export interface WorkspaceFileChange {
2
+ path: string;
3
+ status: string;
4
+ sizeBytes?: number;
5
+ mtimeMs?: number;
6
+ }
7
+ export interface WorkspaceSnapshot {
8
+ gitAvailable: boolean;
9
+ dirty: boolean;
10
+ branch?: string;
11
+ fileCount: number;
12
+ files: WorkspaceFileChange[];
13
+ error?: string;
14
+ }
15
+ export interface WorkspaceDelta {
16
+ preExistingFiles: string[];
17
+ filesAfterTurn: string[];
18
+ newFilesByTurn: string[];
19
+ changedByTurn: string[];
20
+ modifiedPreExistingByTurn: string[];
21
+ resolvedByTurn: string[];
22
+ }
23
+ export declare function captureWorkspaceSnapshot(cwd: string): WorkspaceSnapshot;
24
+ export declare function diffWorkspaceSnapshots(before: WorkspaceSnapshot, after: WorkspaceSnapshot): WorkspaceDelta;
25
+ //# sourceMappingURL=workspace-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-state.d.ts","sourceRoot":"","sources":["../../src/services/workspace-state.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,yBAAyB,EAAE,MAAM,EAAE,CAAC;IACpC,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAsCD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CA6CvE;AAYD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,GAAG,cAAc,CAkB1G"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.captureWorkspaceSnapshot = captureWorkspaceSnapshot;
4
+ exports.diffWorkspaceSnapshots = diffWorkspaceSnapshots;
5
+ const child_process_1 = require("child_process");
6
+ const fs_1 = require("fs");
7
+ const path_1 = require("path");
8
+ function runGit(cwd, args) {
9
+ return (0, child_process_1.execFileSync)('git', ['-C', cwd, ...args], {
10
+ encoding: 'utf8',
11
+ stdio: ['ignore', 'pipe', 'pipe'],
12
+ timeout: 5000,
13
+ }).trim();
14
+ }
15
+ function parsePorcelainLine(line) {
16
+ if (line.length < 4)
17
+ return null;
18
+ const status = line.slice(0, 2).trim() || line.slice(0, 2);
19
+ const rawPath = line.slice(2).trim();
20
+ if (!rawPath)
21
+ return null;
22
+ const renameParts = rawPath.split(' -> ');
23
+ const renameTarget = renameParts.length > 1 ? renameParts[renameParts.length - 1] : rawPath;
24
+ return {
25
+ status,
26
+ path: renameTarget.replace(/^"|"$/g, ''),
27
+ };
28
+ }
29
+ function attachFileMetadata(gitRoot, file) {
30
+ try {
31
+ const stat = (0, fs_1.statSync)((0, path_1.join)(gitRoot, file.path));
32
+ return {
33
+ ...file,
34
+ sizeBytes: stat.isFile() ? stat.size : undefined,
35
+ mtimeMs: Math.floor(stat.mtimeMs),
36
+ };
37
+ }
38
+ catch {
39
+ return file;
40
+ }
41
+ }
42
+ function captureWorkspaceSnapshot(cwd) {
43
+ let gitRoot;
44
+ try {
45
+ gitRoot = runGit(cwd, ['rev-parse', '--show-toplevel']);
46
+ }
47
+ catch (error) {
48
+ return {
49
+ gitAvailable: false,
50
+ dirty: false,
51
+ fileCount: 0,
52
+ files: [],
53
+ error: error instanceof Error ? error.message : String(error),
54
+ };
55
+ }
56
+ let branch;
57
+ try {
58
+ branch = runGit(cwd, ['rev-parse', '--abbrev-ref', 'HEAD']) || undefined;
59
+ }
60
+ catch {
61
+ branch = undefined;
62
+ }
63
+ try {
64
+ const output = runGit(cwd, ['status', '--porcelain=v1', '--untracked-files=all']);
65
+ const files = output
66
+ ? output.split('\n').map(parsePorcelainLine).filter(Boolean)
67
+ .map(file => attachFileMetadata(gitRoot, file))
68
+ : [];
69
+ return {
70
+ gitAvailable: true,
71
+ dirty: files.length > 0,
72
+ branch,
73
+ fileCount: files.length,
74
+ files,
75
+ };
76
+ }
77
+ catch (error) {
78
+ return {
79
+ gitAvailable: true,
80
+ dirty: false,
81
+ branch,
82
+ fileCount: 0,
83
+ files: [],
84
+ error: error instanceof Error ? error.message : String(error),
85
+ };
86
+ }
87
+ }
88
+ function fileFingerprint(file) {
89
+ if (!file)
90
+ return '';
91
+ return [
92
+ file.status,
93
+ file.path,
94
+ file.sizeBytes ?? 'missing',
95
+ file.mtimeMs ?? 'missing',
96
+ ].join('\0');
97
+ }
98
+ function diffWorkspaceSnapshots(before, after) {
99
+ const beforeByPath = new Map(before.files.map(file => [file.path, file]));
100
+ const afterByPath = new Map(after.files.map(file => [file.path, file]));
101
+ const beforeSet = new Set(beforeByPath.keys());
102
+ const afterSet = new Set(afterByPath.keys());
103
+ const changedByTurn = [...afterSet]
104
+ .filter(file => !beforeSet.has(file) || fileFingerprint(beforeByPath.get(file)) !== fileFingerprint(afterByPath.get(file)))
105
+ .sort();
106
+ return {
107
+ preExistingFiles: [...beforeSet].sort(),
108
+ filesAfterTurn: [...afterSet].sort(),
109
+ newFilesByTurn: changedByTurn.filter(file => !beforeSet.has(file)).sort(),
110
+ changedByTurn,
111
+ modifiedPreExistingByTurn: changedByTurn.filter(file => beforeSet.has(file)).sort(),
112
+ resolvedByTurn: [...beforeSet].filter(file => !afterSet.has(file)).sort(),
113
+ };
114
+ }
115
+ //# sourceMappingURL=workspace-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-state.js","sourceRoot":"","sources":["../../src/services/workspace-state.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openhorse",
3
- "version": "0.2.12",
3
+ "version": "0.2.13",
4
4
  "description": "OpenHorse - Universal Agent Harness Framework. A complete coding CLI agent with tools, MCP, memory system.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",