pi-harness-runtime 1.1.95 → 1.1.97

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 (226) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/harness/loop-runtime.ts +3 -0
  3. package/index.ts +130 -29
  4. package/package.json +2 -1
  5. package/packages/a2a-adapter/package.json +1 -1
  6. package/packages/architecture-generator/package.json +1 -1
  7. package/packages/auth/package.json +1 -1
  8. package/packages/autonomous-refactor/package.json +1 -1
  9. package/packages/autonomous-runtime/package.json +1 -1
  10. package/packages/cache-strategy/package.json +1 -1
  11. package/packages/capability-registry/package.json +1 -1
  12. package/packages/checkpoint/package.json +1 -1
  13. package/packages/cli-plugin-sdk/package.json +1 -1
  14. package/packages/clipboard/package.json +1 -1
  15. package/packages/clipboard-plugin/package.json +1 -1
  16. package/packages/code-generation/package.json +1 -1
  17. package/packages/code-review/package.json +1 -1
  18. package/packages/codex-adapter/package.json +1 -1
  19. package/packages/config-capture/package.json +1 -1
  20. package/packages/context-compiler/package.json +1 -1
  21. package/packages/context-discovery/package.json +1 -1
  22. package/packages/context-manager/package.json +1 -1
  23. package/packages/cookie-sanitizer/package.json +1 -1
  24. package/packages/cost-optimizer/package.json +1 -1
  25. package/packages/dependency-analyzer/package.json +1 -1
  26. package/packages/django-plugin/package.json +1 -1
  27. package/packages/doc-generator/package.json +1 -1
  28. package/packages/evaluation-engine/package.json +1 -1
  29. package/packages/evaluation-runner/package.json +1 -1
  30. package/packages/event-bus/package.json +1 -1
  31. package/packages/event-store/package.json +1 -1
  32. package/packages/experience-replay/package.json +1 -1
  33. package/packages/feedback-collector/package.json +1 -1
  34. package/packages/file-copy-helper/package.json +1 -1
  35. package/packages/framework-detector/package.json +1 -1
  36. package/packages/framework-plugin-sdk/package.json +1 -1
  37. package/packages/frappe-plugin/package.json +1 -1
  38. package/packages/generic-web-plugin/package.json +1 -1
  39. package/packages/health-monitor/package.json +1 -1
  40. package/packages/intent-analyzer/package.json +1 -1
  41. package/packages/jev-judge/package.json +1 -1
  42. package/packages/knowledge-graph/package.json +1 -1
  43. package/packages/knowledge-retrieval/package.json +1 -1
  44. package/packages/laravel-plugin/package.json +1 -1
  45. package/packages/learning-engine/package.json +1 -1
  46. package/packages/mcp-adapter/package.json +1 -1
  47. package/packages/memory-engine/package.json +1 -1
  48. package/packages/milestone-manager/package.json +1 -1
  49. package/packages/model-registry/package.json +1 -1
  50. package/packages/nextjs-plugin/package.json +1 -1
  51. package/packages/notification/package.json +1 -1
  52. package/packages/observability/package.json +1 -1
  53. package/packages/okf-indexer/package.json +1 -1
  54. package/packages/performance-optimizer/package.json +1 -1
  55. package/packages/privilege-broker/package.json +1 -1
  56. package/packages/project-analyzer/package.json +1 -1
  57. package/packages/project-bootstrap/package.json +1 -1
  58. package/packages/projection-engine/package.json +1 -1
  59. package/packages/prompt-compiler/package.json +1 -1
  60. package/packages/prompt-versioning/package.json +1 -1
  61. package/packages/provider-adapter-sdk/package.json +1 -1
  62. package/packages/provider-router/package.json +1 -1
  63. package/packages/provider-selector/package.json +1 -1
  64. package/packages/providers/package.json +1 -1
  65. package/packages/qdrant-skills/dist/client.d.ts +51 -0
  66. package/packages/qdrant-skills/dist/client.d.ts.map +1 -0
  67. package/packages/qdrant-skills/dist/client.js +105 -0
  68. package/packages/qdrant-skills/dist/client.js.map +1 -0
  69. package/packages/qdrant-skills/dist/embedder.d.ts +39 -0
  70. package/packages/qdrant-skills/dist/embedder.d.ts.map +1 -0
  71. package/packages/qdrant-skills/dist/embedder.js +101 -0
  72. package/packages/qdrant-skills/dist/embedder.js.map +1 -0
  73. package/packages/qdrant-skills/dist/index.d.ts +25 -0
  74. package/packages/qdrant-skills/dist/index.d.ts.map +1 -0
  75. package/packages/qdrant-skills/dist/index.js +25 -0
  76. package/packages/qdrant-skills/dist/index.js.map +1 -0
  77. package/packages/qdrant-skills/package.json +27 -0
  78. package/packages/qdrant-skills/src/client.ts +178 -0
  79. package/packages/qdrant-skills/src/embedder.ts +137 -0
  80. package/packages/qdrant-skills/src/index.ts +42 -0
  81. package/packages/quota-manager/package.json +1 -1
  82. package/packages/rate-limiter/package.json +1 -1
  83. package/packages/react-vite-plugin/package.json +1 -1
  84. package/packages/release-manager/package.json +1 -1
  85. package/packages/requirement-compiler/package.json +1 -1
  86. package/packages/runtime/package.json +1 -1
  87. package/packages/scheduler/package.json +1 -1
  88. package/packages/scheduler-adapter/package.json +1 -1
  89. package/packages/session/package.json +1 -1
  90. package/packages/session-api/package.json +1 -1
  91. package/packages/session-export/package.json +1 -1
  92. package/packages/shared-context/package.json +1 -1
  93. package/packages/skill-mcp-client/package.json +1 -1
  94. package/packages/skill-registry/package.json +1 -1
  95. package/packages/skills/dist/index.d.ts +40 -0
  96. package/packages/skills/dist/index.d.ts.map +1 -0
  97. package/packages/skills/dist/index.js +84 -0
  98. package/packages/skills/dist/index.js.map +1 -0
  99. package/packages/skills/dist/linter.d.ts +38 -0
  100. package/packages/skills/dist/linter.d.ts.map +1 -0
  101. package/packages/skills/dist/linter.js +323 -0
  102. package/packages/skills/dist/linter.js.map +1 -0
  103. package/packages/skills/dist/loader.d.ts +74 -0
  104. package/packages/skills/dist/loader.d.ts.map +1 -0
  105. package/packages/skills/dist/loader.js +280 -0
  106. package/packages/skills/dist/loader.js.map +1 -0
  107. package/packages/skills/dist/parser.d.ts +32 -0
  108. package/packages/skills/dist/parser.d.ts.map +1 -0
  109. package/packages/skills/dist/parser.js +459 -0
  110. package/packages/skills/dist/parser.js.map +1 -0
  111. package/packages/skills/dist/scanner.d.ts +33 -0
  112. package/packages/skills/dist/scanner.d.ts.map +1 -0
  113. package/packages/skills/dist/scanner.js +257 -0
  114. package/packages/skills/dist/scanner.js.map +1 -0
  115. package/packages/skills/dist/skill-commands.d.ts +33 -0
  116. package/packages/skills/dist/skill-commands.d.ts.map +1 -0
  117. package/packages/skills/dist/skill-commands.js +239 -0
  118. package/packages/skills/dist/skill-commands.js.map +1 -0
  119. package/packages/skills/dist/skill-tool.d.ts +120 -0
  120. package/packages/skills/dist/skill-tool.d.ts.map +1 -0
  121. package/packages/skills/dist/skill-tool.js +239 -0
  122. package/packages/skills/dist/skill-tool.js.map +1 -0
  123. package/packages/skills/dist/skill-versioning.d.ts +123 -0
  124. package/packages/skills/dist/skill-versioning.d.ts.map +1 -0
  125. package/packages/skills/dist/skill-versioning.js +240 -0
  126. package/packages/skills/dist/skill-versioning.js.map +1 -0
  127. package/packages/skills/dist/types.d.ts +226 -0
  128. package/packages/skills/dist/types.d.ts.map +1 -0
  129. package/packages/skills/dist/types.js +21 -0
  130. package/packages/skills/dist/types.js.map +1 -0
  131. package/packages/skills/package.json +46 -0
  132. package/packages/skills/src/index.ts +95 -0
  133. package/packages/skills/src/linter.ts +371 -0
  134. package/packages/skills/src/loader.ts +335 -0
  135. package/packages/skills/src/parser.ts +548 -0
  136. package/packages/skills/src/scanner.ts +322 -0
  137. package/packages/skills/src/skill-commands.ts +318 -0
  138. package/packages/skills/src/skill-tool.ts +324 -0
  139. package/packages/skills/src/skill-versioning.ts +345 -0
  140. package/packages/skills/src/types.ts +259 -0
  141. package/packages/skills/test/init-skills.test.ts +118 -0
  142. package/packages/sprint-planner/package.json +1 -1
  143. package/packages/subscription-engine/package.json +1 -1
  144. package/packages/task-compiler/package.json +1 -1
  145. package/packages/tencentdb-memory/package.json +1 -1
  146. package/packages/tencentdb-sync/package.json +1 -1
  147. package/packages/test-data-generator/package.json +1 -1
  148. package/packages/test-generator/package.json +1 -1
  149. package/packages/todo-bd-sync/package.json +1 -1
  150. package/packages/token-estimation/package.json +1 -1
  151. package/packages/token-optimizer/package.json +1 -1
  152. package/packages/trajectory/dist/src/curator.d.ts +189 -0
  153. package/packages/trajectory/dist/src/curator.d.ts.map +1 -0
  154. package/packages/trajectory/dist/src/curator.js +340 -0
  155. package/packages/trajectory/dist/src/curator.js.map +1 -0
  156. package/packages/trajectory/dist/src/journey-renderer.d.ts +53 -0
  157. package/packages/trajectory/dist/src/journey-renderer.d.ts.map +1 -0
  158. package/packages/trajectory/dist/src/journey-renderer.js +324 -0
  159. package/packages/trajectory/dist/src/journey-renderer.js.map +1 -0
  160. package/packages/trajectory/dist/src/learning-graph.d.ts +159 -0
  161. package/packages/trajectory/dist/src/learning-graph.d.ts.map +1 -0
  162. package/packages/trajectory/dist/src/learning-graph.js +258 -0
  163. package/packages/trajectory/dist/src/learning-graph.js.map +1 -0
  164. package/packages/trajectory/dist/src/memory-store.d.ts +146 -0
  165. package/packages/trajectory/dist/src/memory-store.d.ts.map +1 -0
  166. package/packages/trajectory/dist/src/memory-store.js +472 -0
  167. package/packages/trajectory/dist/src/memory-store.js.map +1 -0
  168. package/packages/trajectory/dist/src/review-fork.d.ts +164 -0
  169. package/packages/trajectory/dist/src/review-fork.d.ts.map +1 -0
  170. package/packages/trajectory/dist/src/review-fork.js +332 -0
  171. package/packages/trajectory/dist/src/review-fork.js.map +1 -0
  172. package/packages/trajectory/dist/src/write-approval.d.ts +136 -0
  173. package/packages/trajectory/dist/src/write-approval.d.ts.map +1 -0
  174. package/packages/trajectory/dist/src/write-approval.js +281 -0
  175. package/packages/trajectory/dist/src/write-approval.js.map +1 -0
  176. package/packages/trajectory/package.json +1 -1
  177. package/packages/trajectory/src/curator.ts +485 -0
  178. package/packages/trajectory/src/journey-renderer.ts +399 -0
  179. package/packages/trajectory/src/learning-graph.ts +363 -0
  180. package/packages/trajectory/src/memory-store.ts +578 -0
  181. package/packages/trajectory/src/review-fork.ts +450 -0
  182. package/packages/trajectory/src/write-approval.ts +372 -0
  183. package/packages/tui/package.json +1 -1
  184. package/packages/types/package.json +1 -1
  185. package/packages/workflow-events/package.json +1 -1
  186. package/packages/workspace-scanner/package.json +1 -1
  187. package/packages/worktree/package.json +1 -1
  188. package/packages/write-review/dist/blackboard.d.ts +98 -0
  189. package/packages/write-review/dist/blackboard.d.ts.map +1 -0
  190. package/packages/write-review/dist/blackboard.js +289 -0
  191. package/packages/write-review/dist/blackboard.js.map +1 -0
  192. package/packages/write-review/dist/event-bus.d.ts +106 -0
  193. package/packages/write-review/dist/event-bus.d.ts.map +1 -0
  194. package/packages/write-review/dist/event-bus.js +294 -0
  195. package/packages/write-review/dist/event-bus.js.map +1 -0
  196. package/packages/write-review/dist/gate.d.ts +37 -0
  197. package/packages/write-review/dist/gate.d.ts.map +1 -0
  198. package/packages/write-review/dist/gate.js +138 -0
  199. package/packages/write-review/dist/gate.js.map +1 -0
  200. package/packages/write-review/dist/index.d.ts +22 -0
  201. package/packages/write-review/dist/index.d.ts.map +1 -0
  202. package/packages/write-review/dist/index.js +60 -0
  203. package/packages/write-review/dist/index.js.map +1 -0
  204. package/packages/write-review/dist/injection.d.ts +40 -0
  205. package/packages/write-review/dist/injection.d.ts.map +1 -0
  206. package/packages/write-review/dist/injection.js +179 -0
  207. package/packages/write-review/dist/injection.js.map +1 -0
  208. package/packages/write-review/dist/review.d.ts +54 -0
  209. package/packages/write-review/dist/review.d.ts.map +1 -0
  210. package/packages/write-review/dist/review.js +154 -0
  211. package/packages/write-review/dist/review.js.map +1 -0
  212. package/packages/write-review/dist/trigger.d.ts +39 -0
  213. package/packages/write-review/dist/trigger.d.ts.map +1 -0
  214. package/packages/write-review/dist/trigger.js +107 -0
  215. package/packages/write-review/dist/trigger.js.map +1 -0
  216. package/packages/write-review/dist/types.d.ts +78 -0
  217. package/packages/write-review/dist/types.d.ts.map +1 -0
  218. package/packages/write-review/dist/types.js +26 -0
  219. package/packages/write-review/dist/types.js.map +1 -0
  220. package/packages/write-review/package.json +1 -1
  221. package/packages/write-review/src/event-bus.ts +351 -0
  222. package/packages/write-review/src/index.ts +1 -0
  223. package/packages/write-review/src/injection.ts +25 -3
  224. package/proactive-compact.ts +51 -7
  225. package/scripts/sync-skills.ts +275 -0
  226. package/scripts/sync-to-qdrant.ts +398 -0
@@ -0,0 +1,332 @@
1
+ /**
2
+ * Background Review Fork
3
+ *
4
+ * Background review that analyzes trajectories and suggests:
5
+ * - Memory entries to persist
6
+ * - Skills to create/update
7
+ * - User preferences to learn
8
+ *
9
+ * Based on Hermes Agent's closed learning loop.
10
+ */
11
+ /**
12
+ * Default background review configuration
13
+ */
14
+ export const DEFAULT_REVIEW_CONFIG = {
15
+ enabled: true,
16
+ nudgeInterval: 5,
17
+ reasoningEffort: "medium",
18
+ routeToCheaperModel: true,
19
+ writeApproval: false,
20
+ deferWhenGpuBusy: true,
21
+ deferMaxAgeSeconds: 1800,
22
+ };
23
+ /**
24
+ * Background Review Fork
25
+ */
26
+ export class BackgroundReviewFork {
27
+ config;
28
+ cycleCount = 0;
29
+ queuedReview = null;
30
+ handlers = new Set();
31
+ pendingSuggestions = [];
32
+ constructor(config) {
33
+ this.config = { ...DEFAULT_REVIEW_CONFIG, ...config };
34
+ }
35
+ /**
36
+ * Update configuration
37
+ */
38
+ updateConfig(config) {
39
+ this.config = { ...this.config, ...config };
40
+ }
41
+ /**
42
+ * Register event handler
43
+ */
44
+ on(handler) {
45
+ this.handlers.add(handler);
46
+ return () => this.handlers.delete(handler);
47
+ }
48
+ /**
49
+ * Emit event to all handlers
50
+ */
51
+ emit(event) {
52
+ for (const handler of this.handlers) {
53
+ try {
54
+ handler(event);
55
+ }
56
+ catch (err) {
57
+ console.error("[BackgroundReviewFork] Handler error:", err);
58
+ }
59
+ }
60
+ }
61
+ /**
62
+ * Process cycle end - check if review should run
63
+ */
64
+ onCycleEnd(trajectory) {
65
+ if (!this.config.enabled)
66
+ return;
67
+ this.cycleCount++;
68
+ // Check if we should run review now
69
+ if (this.cycleCount >= this.config.nudgeInterval) {
70
+ this.cycleCount = 0;
71
+ this.runReview(trajectory);
72
+ }
73
+ else {
74
+ // Queue for later
75
+ this.queuedReview = trajectory;
76
+ }
77
+ }
78
+ /**
79
+ * Run review on trajectory
80
+ */
81
+ async runReview(trajectory) {
82
+ this.emit({ type: "review.started", trajectoryId: trajectory.id });
83
+ try {
84
+ const result = await this.analyzeTrajectory(trajectory);
85
+ // Emit completion
86
+ this.emit({ type: "review.completed", result });
87
+ // Create suggestions
88
+ for (const suggestion of result.suggestions) {
89
+ this.emit({ type: "suggestion.created", suggestion });
90
+ this.pendingSuggestions.push(suggestion);
91
+ }
92
+ // Clear queued review
93
+ this.queuedReview = null;
94
+ return result;
95
+ }
96
+ catch (err) {
97
+ const errorMsg = err instanceof Error ? err.message : String(err);
98
+ this.emit({ type: "review.error", error: errorMsg, trajectoryId: trajectory.id });
99
+ throw err;
100
+ }
101
+ }
102
+ /**
103
+ * Analyze trajectory and generate suggestions
104
+ */
105
+ async analyzeTrajectory(trajectory) {
106
+ const suggestions = [];
107
+ const patterns = [];
108
+ const corrections = [];
109
+ // Analyze verdict
110
+ if (trajectory.verdict === "blocked") {
111
+ // Blocked cycles might need memory about blockers
112
+ suggestions.push({
113
+ id: `mem_blocked_${Date.now()}`,
114
+ type: "memory",
115
+ priority: "high",
116
+ content: `Blocked cycle: ${trajectory.taskRequest}. Reason: ${trajectory.reason}`,
117
+ reason: "Remember what caused blocks to avoid them",
118
+ trajectoryId: trajectory.id,
119
+ });
120
+ }
121
+ // Analyze iterations
122
+ if (trajectory.iterations > 5) {
123
+ // High iteration count might indicate pattern to optimize
124
+ suggestions.push({
125
+ id: `pat_high_iter_${Date.now()}`,
126
+ type: "pattern",
127
+ priority: "medium",
128
+ content: `High iteration pattern: ${trajectory.taskRequest.slice(0, 100)}...`,
129
+ reason: "Investigate why this task took many iterations",
130
+ trajectoryId: trajectory.id,
131
+ });
132
+ }
133
+ // Analyze files
134
+ if (trajectory.files.length > 0) {
135
+ // Check for repeated files across iterations
136
+ const fileCount = {};
137
+ for (const file of trajectory.files) {
138
+ fileCount[file] = (fileCount[file] || 0) + 1;
139
+ }
140
+ // Files with high counts might need conventions
141
+ for (const [file, count] of Object.entries(fileCount)) {
142
+ if (count > 3) {
143
+ suggestions.push({
144
+ id: `conv_${Date.now()}`,
145
+ type: "memory",
146
+ priority: "low",
147
+ content: `Conventions for ${file}: Review patterns established in recent cycles`,
148
+ reason: `File ${file} appears frequently (${count}x)`,
149
+ trajectoryId: trajectory.id,
150
+ });
151
+ }
152
+ }
153
+ }
154
+ // Analyze comments for patterns
155
+ for (const comment of trajectory.comments) {
156
+ // Detect corrections (repeated comments)
157
+ const commentText = comment.comment.toLowerCase();
158
+ if (commentText.includes("same") || commentText.includes("again") || commentText.includes("repeated")) {
159
+ corrections.push(comment.comment);
160
+ }
161
+ // Detect severity patterns
162
+ if (comment.severity === "major" || comment.severity === "critical") {
163
+ patterns.push(`high-severity: ${comment.comment.slice(0, 100)}`);
164
+ }
165
+ }
166
+ // Generate skill suggestion for complex tasks
167
+ if (trajectory.iterations >= 3 && trajectory.verdict === "approved") {
168
+ suggestions.push({
169
+ id: `skill_${Date.now()}`,
170
+ type: "skill_create",
171
+ priority: "medium",
172
+ content: this.generateSkillFromTrajectory(trajectory),
173
+ reason: "Complex task that succeeded - capture the pattern",
174
+ trajectoryId: trajectory.id,
175
+ });
176
+ }
177
+ // Analyze for user preferences
178
+ if (trajectory.summary) {
179
+ const userPrefs = this.extractUserPreferences(trajectory.summary);
180
+ for (const pref of userPrefs) {
181
+ suggestions.push({
182
+ id: `user_${Date.now()}`,
183
+ type: "user_profile",
184
+ priority: "low",
185
+ content: pref,
186
+ reason: "Detected from cycle summary",
187
+ trajectoryId: trajectory.id,
188
+ });
189
+ }
190
+ }
191
+ return {
192
+ trajectoryId: trajectory.id,
193
+ suggestions,
194
+ patterns,
195
+ corrections,
196
+ timestamp: Date.now(),
197
+ };
198
+ }
199
+ /**
200
+ * Generate skill content from trajectory
201
+ */
202
+ generateSkillFromTrajectory(trajectory) {
203
+ const lines = [];
204
+ // Extract task type from request
205
+ const taskType = this.extractTaskType(trajectory.taskRequest);
206
+ lines.push(`---\n`);
207
+ lines.push(`name: ${taskType}-pattern\n`);
208
+ lines.push(`description: ${trajectory.taskRequest.slice(0, 200)}\n`);
209
+ lines.push(`author: curator\n`);
210
+ lines.push(`confidence: 0.7\n`);
211
+ lines.push(`triggers:\n`);
212
+ lines.push(` - "${taskType}"\n`);
213
+ lines.push(` - "${trajectory.taskRequest.slice(0, 50)}"\n`);
214
+ lines.push(`---\n\n`);
215
+ lines.push(`# ${taskType} Pattern\n\n`);
216
+ lines.push(`## When to Use\n`);
217
+ lines.push(`Task: ${trajectory.taskRequest}\n\n`);
218
+ lines.push(`## Procedure\n`);
219
+ lines.push(`1. ${trajectory.plan.split("\n")[0] || "Plan based on task analysis"}\n\n`);
220
+ lines.push(`## Key Files\n`);
221
+ for (const file of trajectory.files.slice(0, 5)) {
222
+ lines.push(`- ${file}\n`);
223
+ }
224
+ lines.push(`\n`);
225
+ lines.push(`## Notes\n`);
226
+ lines.push(`Iterations: ${trajectory.iterations}\n`);
227
+ lines.push(`Duration: ${Math.round(trajectory.durationMs / 1000 / 60)} minutes\n\n`);
228
+ if (trajectory.comments.length > 0) {
229
+ lines.push(`## Common Issues\n`);
230
+ for (const comment of trajectory.comments.slice(0, 3)) {
231
+ lines.push(`- ${comment.comment}\n`);
232
+ }
233
+ }
234
+ return lines.join("");
235
+ }
236
+ /**
237
+ * Extract task type from request
238
+ */
239
+ extractTaskType(request) {
240
+ const lower = request.toLowerCase();
241
+ if (lower.includes("test"))
242
+ return "testing";
243
+ if (lower.includes("fix") || lower.includes("bug"))
244
+ return "bugfix";
245
+ if (lower.includes("refactor"))
246
+ return "refactoring";
247
+ if (lower.includes("api"))
248
+ return "api-development";
249
+ if (lower.includes("config") || lower.includes("setup"))
250
+ return "configuration";
251
+ if (lower.includes("deploy"))
252
+ return "deployment";
253
+ return "general-task";
254
+ }
255
+ /**
256
+ * Extract user preferences from summary
257
+ */
258
+ extractUserPreferences(summary) {
259
+ const prefs = [];
260
+ const lower = summary.toLowerCase();
261
+ // Detection patterns
262
+ if (lower.includes("prefer") || lower.includes("like") || lower.includes("want")) {
263
+ prefs.push(`Prefers concise responses where possible`);
264
+ }
265
+ if (lower.includes("style") || lower.includes("format")) {
266
+ prefs.push(`Has specific code style preferences`);
267
+ }
268
+ if (lower.includes("error") || lower.includes("fix")) {
269
+ prefs.push(`Focuses on fixing issues thoroughly`);
270
+ }
271
+ return prefs;
272
+ }
273
+ /**
274
+ * Get pending suggestions
275
+ */
276
+ getPendingSuggestions() {
277
+ return [...this.pendingSuggestions];
278
+ }
279
+ /**
280
+ * Approve suggestion
281
+ */
282
+ approveSuggestion(suggestionId) {
283
+ const index = this.pendingSuggestions.findIndex((s) => s.id === suggestionId);
284
+ if (index < 0)
285
+ return null;
286
+ const suggestion = this.pendingSuggestions[index];
287
+ this.pendingSuggestions.splice(index, 1);
288
+ this.emit({ type: "suggestion.approved", suggestion });
289
+ return suggestion;
290
+ }
291
+ /**
292
+ * Reject suggestion
293
+ */
294
+ rejectSuggestion(suggestionId) {
295
+ const index = this.pendingSuggestions.findIndex((s) => s.id === suggestionId);
296
+ if (index < 0)
297
+ return null;
298
+ const suggestion = this.pendingSuggestions[index];
299
+ this.pendingSuggestions.splice(index, 1);
300
+ this.emit({ type: "suggestion.rejected", suggestion });
301
+ return suggestion;
302
+ }
303
+ /**
304
+ * Clear all pending suggestions
305
+ */
306
+ clearSuggestions() {
307
+ this.pendingSuggestions = [];
308
+ }
309
+ /**
310
+ * Get review stats
311
+ */
312
+ getStats() {
313
+ return {
314
+ cycleCount: this.cycleCount,
315
+ pendingCount: this.pendingSuggestions.length,
316
+ enabled: this.config.enabled,
317
+ nudgeInterval: this.config.nudgeInterval,
318
+ };
319
+ }
320
+ }
321
+ // Global instance
322
+ let globalReviewFork = null;
323
+ export function getGlobalReviewFork() {
324
+ if (!globalReviewFork) {
325
+ globalReviewFork = new BackgroundReviewFork();
326
+ }
327
+ return globalReviewFork;
328
+ }
329
+ export function createReviewFork(config) {
330
+ return new BackgroundReviewFork(config);
331
+ }
332
+ //# sourceMappingURL=review-fork.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-fork.js","sourceRoot":"","sources":["../../src/review-fork.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Write Approval Gate
3
+ *
4
+ * Stage writes (memory, skills) for human review before they land.
5
+ * Based on Hermes Agent's consent-aware learning loop.
6
+ */
7
+ /**
8
+ * Pending write types
9
+ */
10
+ export type PendingWriteType = "memory_add" | "memory_replace" | "memory_remove" | "skill_create" | "skill_patch" | "skill_delete" | "skill_file_write" | "skill_file_remove" | "user_profile_add";
11
+ /**
12
+ * Pending write action
13
+ */
14
+ export interface PendingWriteAction {
15
+ type: PendingWriteType;
16
+ target: string;
17
+ content?: string;
18
+ oldContent?: string;
19
+ metadata?: Record<string, unknown>;
20
+ }
21
+ /**
22
+ * Pending write record
23
+ */
24
+ export interface PendingWrite {
25
+ id: string;
26
+ action: PendingWriteAction;
27
+ author: "agent" | "user" | "curator";
28
+ timestamp: number;
29
+ summary: string;
30
+ details?: string;
31
+ }
32
+ /**
33
+ * Write approval configuration
34
+ */
35
+ export interface WriteApprovalConfig {
36
+ /** Enable write approval */
37
+ enabled: boolean;
38
+ /** Directory to store pending writes */
39
+ pendingDir: string;
40
+ /** Max pending writes before warning */
41
+ maxPending: number;
42
+ }
43
+ /**
44
+ * Default configuration
45
+ */
46
+ export declare const DEFAULT_APPROVAL_CONFIG: WriteApprovalConfig;
47
+ /**
48
+ * Write Approval Gate
49
+ */
50
+ export declare class WriteApprovalGate {
51
+ private config;
52
+ private pending;
53
+ constructor(config?: Partial<WriteApprovalConfig>);
54
+ /**
55
+ * Load pending writes from disk
56
+ */
57
+ private load;
58
+ /**
59
+ * Save pending writes to disk
60
+ */
61
+ private save;
62
+ /**
63
+ * Stage a write for approval
64
+ */
65
+ stage(action: PendingWriteAction, author: "agent" | "user" | "curator"): PendingWrite;
66
+ /**
67
+ * Generate one-line summary for action
68
+ */
69
+ private generateSummary;
70
+ /**
71
+ * Generate details (diff) for action
72
+ */
73
+ private generateDetails;
74
+ /**
75
+ * Approve a pending write
76
+ */
77
+ approve(writeId: string): PendingWrite | null;
78
+ /**
79
+ * Approve all pending writes
80
+ */
81
+ approveAll(): PendingWrite[];
82
+ /**
83
+ * Reject a pending write
84
+ */
85
+ reject(writeId: string): PendingWrite | null;
86
+ /**
87
+ * Reject all pending writes
88
+ */
89
+ rejectAll(): PendingWrite[];
90
+ /**
91
+ * Get all pending writes
92
+ */
93
+ list(): PendingWrite[];
94
+ /**
95
+ * Get pending writes by type
96
+ */
97
+ listByType(type: PendingWriteType): PendingWrite[];
98
+ /**
99
+ * Get pending writes by author
100
+ */
101
+ listByAuthor(author: "agent" | "user" | "curator"): PendingWrite[];
102
+ /**
103
+ * Get pending count
104
+ */
105
+ count(): number;
106
+ /**
107
+ * Check if approval is required
108
+ */
109
+ requiresApproval(): boolean;
110
+ /**
111
+ * Update configuration
112
+ */
113
+ updateConfig(config: Partial<WriteApprovalConfig>): void;
114
+ /**
115
+ * Get configuration
116
+ */
117
+ getConfig(): WriteApprovalConfig;
118
+ /**
119
+ * Format pending writes for display
120
+ */
121
+ formatList(): string;
122
+ /**
123
+ * Get age string for timestamp
124
+ */
125
+ private getAgeString;
126
+ }
127
+ export declare function getGlobalApprovalGate(): WriteApprovalGate;
128
+ export declare function createApprovalGate(config?: Partial<WriteApprovalConfig>): WriteApprovalGate;
129
+ /**
130
+ * Helper to stage write with auto-approval if disabled
131
+ */
132
+ export declare function stageWrite(action: PendingWriteAction, author: "agent" | "user" | "curator", autoApprove?: boolean): {
133
+ staged: boolean;
134
+ write?: PendingWrite;
135
+ };
136
+ //# sourceMappingURL=write-approval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-approval.d.ts","sourceRoot":"","sources":["../../src/write-approval.ts"],"names":[],"mappings":"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"}