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.
- package/CHANGELOG.md +33 -0
- package/harness/loop-runtime.ts +3 -0
- package/index.ts +130 -29
- package/package.json +2 -1
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/architecture-generator/package.json +1 -1
- package/packages/auth/package.json +1 -1
- package/packages/autonomous-refactor/package.json +1 -1
- package/packages/autonomous-runtime/package.json +1 -1
- package/packages/cache-strategy/package.json +1 -1
- package/packages/capability-registry/package.json +1 -1
- package/packages/checkpoint/package.json +1 -1
- package/packages/cli-plugin-sdk/package.json +1 -1
- package/packages/clipboard/package.json +1 -1
- package/packages/clipboard-plugin/package.json +1 -1
- package/packages/code-generation/package.json +1 -1
- package/packages/code-review/package.json +1 -1
- package/packages/codex-adapter/package.json +1 -1
- package/packages/config-capture/package.json +1 -1
- package/packages/context-compiler/package.json +1 -1
- package/packages/context-discovery/package.json +1 -1
- package/packages/context-manager/package.json +1 -1
- package/packages/cookie-sanitizer/package.json +1 -1
- package/packages/cost-optimizer/package.json +1 -1
- package/packages/dependency-analyzer/package.json +1 -1
- package/packages/django-plugin/package.json +1 -1
- package/packages/doc-generator/package.json +1 -1
- package/packages/evaluation-engine/package.json +1 -1
- package/packages/evaluation-runner/package.json +1 -1
- package/packages/event-bus/package.json +1 -1
- package/packages/event-store/package.json +1 -1
- package/packages/experience-replay/package.json +1 -1
- package/packages/feedback-collector/package.json +1 -1
- package/packages/file-copy-helper/package.json +1 -1
- package/packages/framework-detector/package.json +1 -1
- package/packages/framework-plugin-sdk/package.json +1 -1
- package/packages/frappe-plugin/package.json +1 -1
- package/packages/generic-web-plugin/package.json +1 -1
- package/packages/health-monitor/package.json +1 -1
- package/packages/intent-analyzer/package.json +1 -1
- package/packages/jev-judge/package.json +1 -1
- package/packages/knowledge-graph/package.json +1 -1
- package/packages/knowledge-retrieval/package.json +1 -1
- package/packages/laravel-plugin/package.json +1 -1
- package/packages/learning-engine/package.json +1 -1
- package/packages/mcp-adapter/package.json +1 -1
- package/packages/memory-engine/package.json +1 -1
- package/packages/milestone-manager/package.json +1 -1
- package/packages/model-registry/package.json +1 -1
- package/packages/nextjs-plugin/package.json +1 -1
- package/packages/notification/package.json +1 -1
- package/packages/observability/package.json +1 -1
- package/packages/okf-indexer/package.json +1 -1
- package/packages/performance-optimizer/package.json +1 -1
- package/packages/privilege-broker/package.json +1 -1
- package/packages/project-analyzer/package.json +1 -1
- package/packages/project-bootstrap/package.json +1 -1
- package/packages/projection-engine/package.json +1 -1
- package/packages/prompt-compiler/package.json +1 -1
- package/packages/prompt-versioning/package.json +1 -1
- package/packages/provider-adapter-sdk/package.json +1 -1
- package/packages/provider-router/package.json +1 -1
- package/packages/provider-selector/package.json +1 -1
- package/packages/providers/package.json +1 -1
- package/packages/qdrant-skills/dist/client.d.ts +51 -0
- package/packages/qdrant-skills/dist/client.d.ts.map +1 -0
- package/packages/qdrant-skills/dist/client.js +105 -0
- package/packages/qdrant-skills/dist/client.js.map +1 -0
- package/packages/qdrant-skills/dist/embedder.d.ts +39 -0
- package/packages/qdrant-skills/dist/embedder.d.ts.map +1 -0
- package/packages/qdrant-skills/dist/embedder.js +101 -0
- package/packages/qdrant-skills/dist/embedder.js.map +1 -0
- package/packages/qdrant-skills/dist/index.d.ts +25 -0
- package/packages/qdrant-skills/dist/index.d.ts.map +1 -0
- package/packages/qdrant-skills/dist/index.js +25 -0
- package/packages/qdrant-skills/dist/index.js.map +1 -0
- package/packages/qdrant-skills/package.json +27 -0
- package/packages/qdrant-skills/src/client.ts +178 -0
- package/packages/qdrant-skills/src/embedder.ts +137 -0
- package/packages/qdrant-skills/src/index.ts +42 -0
- package/packages/quota-manager/package.json +1 -1
- package/packages/rate-limiter/package.json +1 -1
- package/packages/react-vite-plugin/package.json +1 -1
- package/packages/release-manager/package.json +1 -1
- package/packages/requirement-compiler/package.json +1 -1
- package/packages/runtime/package.json +1 -1
- package/packages/scheduler/package.json +1 -1
- package/packages/scheduler-adapter/package.json +1 -1
- package/packages/session/package.json +1 -1
- package/packages/session-api/package.json +1 -1
- package/packages/session-export/package.json +1 -1
- package/packages/shared-context/package.json +1 -1
- package/packages/skill-mcp-client/package.json +1 -1
- package/packages/skill-registry/package.json +1 -1
- package/packages/skills/dist/index.d.ts +40 -0
- package/packages/skills/dist/index.d.ts.map +1 -0
- package/packages/skills/dist/index.js +84 -0
- package/packages/skills/dist/index.js.map +1 -0
- package/packages/skills/dist/linter.d.ts +38 -0
- package/packages/skills/dist/linter.d.ts.map +1 -0
- package/packages/skills/dist/linter.js +323 -0
- package/packages/skills/dist/linter.js.map +1 -0
- package/packages/skills/dist/loader.d.ts +74 -0
- package/packages/skills/dist/loader.d.ts.map +1 -0
- package/packages/skills/dist/loader.js +280 -0
- package/packages/skills/dist/loader.js.map +1 -0
- package/packages/skills/dist/parser.d.ts +32 -0
- package/packages/skills/dist/parser.d.ts.map +1 -0
- package/packages/skills/dist/parser.js +459 -0
- package/packages/skills/dist/parser.js.map +1 -0
- package/packages/skills/dist/scanner.d.ts +33 -0
- package/packages/skills/dist/scanner.d.ts.map +1 -0
- package/packages/skills/dist/scanner.js +257 -0
- package/packages/skills/dist/scanner.js.map +1 -0
- package/packages/skills/dist/skill-commands.d.ts +33 -0
- package/packages/skills/dist/skill-commands.d.ts.map +1 -0
- package/packages/skills/dist/skill-commands.js +239 -0
- package/packages/skills/dist/skill-commands.js.map +1 -0
- package/packages/skills/dist/skill-tool.d.ts +120 -0
- package/packages/skills/dist/skill-tool.d.ts.map +1 -0
- package/packages/skills/dist/skill-tool.js +239 -0
- package/packages/skills/dist/skill-tool.js.map +1 -0
- package/packages/skills/dist/skill-versioning.d.ts +123 -0
- package/packages/skills/dist/skill-versioning.d.ts.map +1 -0
- package/packages/skills/dist/skill-versioning.js +240 -0
- package/packages/skills/dist/skill-versioning.js.map +1 -0
- package/packages/skills/dist/types.d.ts +226 -0
- package/packages/skills/dist/types.d.ts.map +1 -0
- package/packages/skills/dist/types.js +21 -0
- package/packages/skills/dist/types.js.map +1 -0
- package/packages/skills/package.json +46 -0
- package/packages/skills/src/index.ts +95 -0
- package/packages/skills/src/linter.ts +371 -0
- package/packages/skills/src/loader.ts +335 -0
- package/packages/skills/src/parser.ts +548 -0
- package/packages/skills/src/scanner.ts +322 -0
- package/packages/skills/src/skill-commands.ts +318 -0
- package/packages/skills/src/skill-tool.ts +324 -0
- package/packages/skills/src/skill-versioning.ts +345 -0
- package/packages/skills/src/types.ts +259 -0
- package/packages/skills/test/init-skills.test.ts +118 -0
- package/packages/sprint-planner/package.json +1 -1
- package/packages/subscription-engine/package.json +1 -1
- package/packages/task-compiler/package.json +1 -1
- package/packages/tencentdb-memory/package.json +1 -1
- package/packages/tencentdb-sync/package.json +1 -1
- package/packages/test-data-generator/package.json +1 -1
- package/packages/test-generator/package.json +1 -1
- package/packages/todo-bd-sync/package.json +1 -1
- package/packages/token-estimation/package.json +1 -1
- package/packages/token-optimizer/package.json +1 -1
- package/packages/trajectory/dist/src/curator.d.ts +189 -0
- package/packages/trajectory/dist/src/curator.d.ts.map +1 -0
- package/packages/trajectory/dist/src/curator.js +340 -0
- package/packages/trajectory/dist/src/curator.js.map +1 -0
- package/packages/trajectory/dist/src/journey-renderer.d.ts +53 -0
- package/packages/trajectory/dist/src/journey-renderer.d.ts.map +1 -0
- package/packages/trajectory/dist/src/journey-renderer.js +324 -0
- package/packages/trajectory/dist/src/journey-renderer.js.map +1 -0
- package/packages/trajectory/dist/src/learning-graph.d.ts +159 -0
- package/packages/trajectory/dist/src/learning-graph.d.ts.map +1 -0
- package/packages/trajectory/dist/src/learning-graph.js +258 -0
- package/packages/trajectory/dist/src/learning-graph.js.map +1 -0
- package/packages/trajectory/dist/src/memory-store.d.ts +146 -0
- package/packages/trajectory/dist/src/memory-store.d.ts.map +1 -0
- package/packages/trajectory/dist/src/memory-store.js +472 -0
- package/packages/trajectory/dist/src/memory-store.js.map +1 -0
- package/packages/trajectory/dist/src/review-fork.d.ts +164 -0
- package/packages/trajectory/dist/src/review-fork.d.ts.map +1 -0
- package/packages/trajectory/dist/src/review-fork.js +332 -0
- package/packages/trajectory/dist/src/review-fork.js.map +1 -0
- package/packages/trajectory/dist/src/write-approval.d.ts +136 -0
- package/packages/trajectory/dist/src/write-approval.d.ts.map +1 -0
- package/packages/trajectory/dist/src/write-approval.js +281 -0
- package/packages/trajectory/dist/src/write-approval.js.map +1 -0
- package/packages/trajectory/package.json +1 -1
- package/packages/trajectory/src/curator.ts +485 -0
- package/packages/trajectory/src/journey-renderer.ts +399 -0
- package/packages/trajectory/src/learning-graph.ts +363 -0
- package/packages/trajectory/src/memory-store.ts +578 -0
- package/packages/trajectory/src/review-fork.ts +450 -0
- package/packages/trajectory/src/write-approval.ts +372 -0
- package/packages/tui/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/packages/workflow-events/package.json +1 -1
- package/packages/workspace-scanner/package.json +1 -1
- package/packages/worktree/package.json +1 -1
- package/packages/write-review/dist/blackboard.d.ts +98 -0
- package/packages/write-review/dist/blackboard.d.ts.map +1 -0
- package/packages/write-review/dist/blackboard.js +289 -0
- package/packages/write-review/dist/blackboard.js.map +1 -0
- package/packages/write-review/dist/event-bus.d.ts +106 -0
- package/packages/write-review/dist/event-bus.d.ts.map +1 -0
- package/packages/write-review/dist/event-bus.js +294 -0
- package/packages/write-review/dist/event-bus.js.map +1 -0
- package/packages/write-review/dist/gate.d.ts +37 -0
- package/packages/write-review/dist/gate.d.ts.map +1 -0
- package/packages/write-review/dist/gate.js +138 -0
- package/packages/write-review/dist/gate.js.map +1 -0
- package/packages/write-review/dist/index.d.ts +22 -0
- package/packages/write-review/dist/index.d.ts.map +1 -0
- package/packages/write-review/dist/index.js +60 -0
- package/packages/write-review/dist/index.js.map +1 -0
- package/packages/write-review/dist/injection.d.ts +40 -0
- package/packages/write-review/dist/injection.d.ts.map +1 -0
- package/packages/write-review/dist/injection.js +179 -0
- package/packages/write-review/dist/injection.js.map +1 -0
- package/packages/write-review/dist/review.d.ts +54 -0
- package/packages/write-review/dist/review.d.ts.map +1 -0
- package/packages/write-review/dist/review.js +154 -0
- package/packages/write-review/dist/review.js.map +1 -0
- package/packages/write-review/dist/trigger.d.ts +39 -0
- package/packages/write-review/dist/trigger.d.ts.map +1 -0
- package/packages/write-review/dist/trigger.js +107 -0
- package/packages/write-review/dist/trigger.js.map +1 -0
- package/packages/write-review/dist/types.d.ts +78 -0
- package/packages/write-review/dist/types.d.ts.map +1 -0
- package/packages/write-review/dist/types.js +26 -0
- package/packages/write-review/dist/types.js.map +1 -0
- package/packages/write-review/package.json +1 -1
- package/packages/write-review/src/event-bus.ts +351 -0
- package/packages/write-review/src/index.ts +1 -0
- package/packages/write-review/src/injection.ts +25 -3
- package/proactive-compact.ts +51 -7
- package/scripts/sync-skills.ts +275 -0
- 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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"}
|