pi-harness-runtime 1.1.237 → 1.1.239
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/index.ts +63 -18
- package/package.json +1 -1
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/agent-policy/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/codex-watcher/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/e2e-tester/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/dist/continuation-controller.d.ts +24 -0
- package/packages/jev-judge/dist/continuation-controller.d.ts.map +1 -1
- package/packages/jev-judge/dist/continuation-controller.js +63 -6
- package/packages/jev-judge/dist/continuation-controller.js.map +1 -1
- package/packages/jev-judge/dist/task-intake.d.ts +31 -1
- package/packages/jev-judge/dist/task-intake.d.ts.map +1 -1
- package/packages/jev-judge/dist/task-intake.js +70 -13
- package/packages/jev-judge/dist/task-intake.js.map +1 -1
- package/packages/jev-judge/package.json +1 -1
- package/packages/jev-judge/src/continuation-controller.ts +71 -6
- package/packages/jev-judge/src/task-intake.ts +84 -17
- 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/paperclip-integration/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/package.json +1 -1
- 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/package.json +1 -1
- 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/telegram/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/package.json +1 -1
- package/packages/tui/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/packages/webmcp-tester/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/package.json +1 -1
|
@@ -34,6 +34,8 @@ export interface TaskIntakeResult {
|
|
|
34
34
|
modifiesExisting: boolean;
|
|
35
35
|
/** Recommended action */
|
|
36
36
|
action: "create" | "skip" | "amend" | "investigate";
|
|
37
|
+
/** Existing todo ID if duplicate/modifies */
|
|
38
|
+
existingTodoId?: number;
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
/**
|
|
@@ -47,6 +49,9 @@ export class TaskIntakeController {
|
|
|
47
49
|
private config: Required<TaskIntakeConfig>;
|
|
48
50
|
private lastRequest: string | null = null;
|
|
49
51
|
private lastResult: TaskIntakeResult | null = null;
|
|
52
|
+
// Track recent capture request hashes to prevent self-triggering
|
|
53
|
+
private recentCaptures = new Set<string>();
|
|
54
|
+
private readonly CAPTURE_COOLDOWN_MS = 30000; // Don't re-trigger for same content within 30s
|
|
50
55
|
|
|
51
56
|
constructor(config: TaskIntakeConfig) {
|
|
52
57
|
this.config = {
|
|
@@ -73,6 +78,80 @@ export class TaskIntakeController {
|
|
|
73
78
|
async evaluate(
|
|
74
79
|
userMessage: string,
|
|
75
80
|
existingTodos: string[] = []
|
|
81
|
+
): Promise<TaskIntakeResult> {
|
|
82
|
+
return this._evaluate(userMessage, existingTodos);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Evaluate with actual todo items from continuation controller
|
|
87
|
+
*/
|
|
88
|
+
async evaluateWithTodos(
|
|
89
|
+
userMessage: string,
|
|
90
|
+
controller: { getSnapshot: () => Promise<{ items: Array<{ id: number; subject: string; status: string }> }> }
|
|
91
|
+
): Promise<TaskIntakeResult> {
|
|
92
|
+
// Check for harness-internal messages (prevent self-triggering)
|
|
93
|
+
if (userMessage.includes("[harness:task-capture]")) {
|
|
94
|
+
return {
|
|
95
|
+
actionable: false,
|
|
96
|
+
probability: 0,
|
|
97
|
+
isDuplicate: false,
|
|
98
|
+
modifiesExisting: false,
|
|
99
|
+
action: "skip",
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Check recent captures to prevent rapid re-triggering
|
|
104
|
+
const hash = this.hashMessage(userMessage);
|
|
105
|
+
if (this.recentCaptures.has(hash)) {
|
|
106
|
+
return {
|
|
107
|
+
actionable: false,
|
|
108
|
+
probability: 0,
|
|
109
|
+
isDuplicate: false,
|
|
110
|
+
modifiesExisting: false,
|
|
111
|
+
action: "skip",
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Get actual todos from the continuation controller
|
|
116
|
+
let existingTodos: string[] = [];
|
|
117
|
+
try {
|
|
118
|
+
const snapshot = await controller.getSnapshot();
|
|
119
|
+
existingTodos = snapshot.items
|
|
120
|
+
.filter((i) => i.status !== "completed" && i.status !== "deleted")
|
|
121
|
+
.map((i) => i.subject);
|
|
122
|
+
} catch {
|
|
123
|
+
// Ignore errors, use empty list
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return this._evaluate(userMessage, existingTodos);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Hash a message for deduplication
|
|
131
|
+
*/
|
|
132
|
+
private hashMessage(msg: string): string {
|
|
133
|
+
// Simple hash - just use first 100 chars
|
|
134
|
+
return msg.slice(0, 100).trim();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Record a capture request to prevent re-triggering
|
|
139
|
+
*/
|
|
140
|
+
private _recordCapture(userMessage: string): void {
|
|
141
|
+
const hash = this.hashMessage(userMessage);
|
|
142
|
+
this.recentCaptures.add(hash);
|
|
143
|
+
// Clean up old entries after cooldown
|
|
144
|
+
setTimeout(() => {
|
|
145
|
+
this.recentCaptures.delete(hash);
|
|
146
|
+
}, this.CAPTURE_COOLDOWN_MS);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Internal evaluation logic
|
|
151
|
+
*/
|
|
152
|
+
private async _evaluate(
|
|
153
|
+
userMessage: string,
|
|
154
|
+
existingTodos: string[]
|
|
76
155
|
): Promise<TaskIntakeResult> {
|
|
77
156
|
// Deduplicate identical requests
|
|
78
157
|
if (userMessage === this.lastRequest && this.lastResult) {
|
|
@@ -237,29 +316,17 @@ export class TaskIntakeController {
|
|
|
237
316
|
|
|
238
317
|
/**
|
|
239
318
|
* Dispatch a capture request to the agent
|
|
319
|
+
* @param userMessage - The original user message to capture
|
|
320
|
+
* @param customType - Optional custom type for the message (default: "task-capture")
|
|
240
321
|
*/
|
|
241
322
|
async requestCapture(
|
|
242
323
|
userMessage: string,
|
|
243
|
-
|
|
324
|
+
customType: string = "task-capture"
|
|
244
325
|
): Promise<void> {
|
|
245
|
-
const result = await this.evaluate(userMessage, existingTodos);
|
|
246
|
-
|
|
247
|
-
if (result.action === "skip") {
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
326
|
// Build a message to prompt the agent to create todos
|
|
252
|
-
let message =
|
|
253
|
-
|
|
254
|
-
if (result.isDuplicate) {
|
|
255
|
-
message += "Potential duplicate detected. ";
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
if (result.modifiesExisting) {
|
|
259
|
-
message += "Existing task modification detected. ";
|
|
260
|
-
}
|
|
327
|
+
let message = `[${customType}] Work detected in user request: "${userMessage.slice(0, 200)}"`;
|
|
261
328
|
|
|
262
|
-
message +=
|
|
329
|
+
message += "\n\nPlease capture this work in the todo list if not already tracked.";
|
|
263
330
|
|
|
264
331
|
await this.config.dispatch(message);
|
|
265
332
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-harness/provider-router",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.239",
|
|
4
4
|
"description": "Enhanced Provider Router for pi-harness-runtime — intelligent routing with capabilities, costs, and quotas",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/provider-router.js",
|