pi-harness-runtime 1.1.274 → 1.1.276
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 +54 -62
- 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/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/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
package/index.ts
CHANGED
|
@@ -377,47 +377,66 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
377
377
|
let pendingUserPromptCount = 0;
|
|
378
378
|
let lastPromptTime = 0;
|
|
379
379
|
let intakeTimer: ReturnType<typeof setTimeout> | null = null;
|
|
380
|
-
let
|
|
380
|
+
let pendingPromptContents: string[] = []; // Accumulate batch prompt contents
|
|
381
381
|
const PROMPT_WINDOW_MS = 2000; // 2 second debounce window
|
|
382
382
|
|
|
383
383
|
// Detect user responses - track prompts for debounced task capture
|
|
384
384
|
pi.on("message_start", async (event) => {
|
|
385
385
|
const msg = event.message as { role?: string } | undefined;
|
|
386
386
|
if (msg?.role === "user") {
|
|
387
|
+
// Normalize content to string (handle array of text blocks)
|
|
388
|
+
let content = "";
|
|
389
|
+
const rawContent = (msg as { content?: string | Array<{ text?: string }> } | undefined)?.content;
|
|
390
|
+
if (Array.isArray(rawContent)) {
|
|
391
|
+
content = rawContent.map((c) => c.text ?? "").join("\n");
|
|
392
|
+
} else if (typeof rawContent === "string") {
|
|
393
|
+
content = rawContent;
|
|
394
|
+
}
|
|
395
|
+
|
|
387
396
|
// Skip harness-generated follow-ups (not real user prompts)
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
397
|
+
if (!content.includes("Please add all tasks to task list todo")) {
|
|
398
|
+
const now = Date.now();
|
|
399
|
+
// Reset batch if window expired
|
|
400
|
+
if (now - lastPromptTime > PROMPT_WINDOW_MS) {
|
|
401
|
+
pendingUserPromptCount = 0;
|
|
402
|
+
pendingPromptContents = [];
|
|
403
|
+
}
|
|
404
|
+
pendingUserPromptCount++;
|
|
405
|
+
pendingPromptContents.push(content);
|
|
406
|
+
lastPromptTime = now;
|
|
407
|
+
logToFile("[auto-continue]", "User prompt arrived, pending count:", String(pendingUserPromptCount));
|
|
408
|
+
|
|
409
|
+
// Clear any pending timer
|
|
410
|
+
if (intakeTimer) {
|
|
411
|
+
clearTimeout(intakeTimer);
|
|
412
|
+
intakeTimer = null;
|
|
413
|
+
}
|
|
404
414
|
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
415
|
+
// Set debounce timer - evaluate after window expires
|
|
416
|
+
if (taskIntakeController && todoContinuationController) {
|
|
417
|
+
const intake = taskIntakeController;
|
|
418
|
+
const controller = todoContinuationController;
|
|
419
|
+
const capturedCount = pendingUserPromptCount;
|
|
420
|
+
const capturedContents = [...pendingPromptContents];
|
|
421
|
+
|
|
422
|
+
intakeTimer = setTimeout(async () => {
|
|
423
|
+
// Only trigger if multiple prompts arrived
|
|
424
|
+
if (capturedCount > 1) {
|
|
425
|
+
pendingUserPromptCount = 0;
|
|
426
|
+
pendingPromptContents = [];
|
|
427
|
+
logToFile("[auto-continue]", "Multiple prompts in queue, evaluating for task capture");
|
|
428
|
+
try {
|
|
429
|
+
// Check if stopped before dispatching
|
|
430
|
+
if (intake.isStopped()) {
|
|
431
|
+
logToFile("[auto-continue]", "Task intake skipped - stopped after evaluation");
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
// Evaluate all prompts in batch
|
|
435
|
+
const combinedContent = capturedContents.join("\n---\n");
|
|
436
|
+
const result = await intake.evaluateWithTodos(combinedContent, controller);
|
|
437
|
+
if (result.actionable && result.action !== "skip") {
|
|
438
|
+
await intake.requestCapture(combinedContent, "harness:task-capture");
|
|
439
|
+
}
|
|
421
440
|
} catch (err) {
|
|
422
441
|
logToFile("[auto-continue]", "Task intake error:", String(err));
|
|
423
442
|
}
|
|
@@ -646,35 +665,8 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
646
665
|
logToFile("[auto-continue]", "User input received, temp pausing");
|
|
647
666
|
}
|
|
648
667
|
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
if (userMessage.trim().length > 10 && taskIntakeController && todoContinuationController && pendingUserPromptCount > 1) {
|
|
652
|
-
const intake = taskIntakeController;
|
|
653
|
-
const controller = todoContinuationController;
|
|
654
|
-
|
|
655
|
-
// Reset count before processing
|
|
656
|
-
pendingUserPromptCount = 0;
|
|
657
|
-
logToFile("[auto-continue]", "Multiple prompts pending, evaluating for task capture");
|
|
658
|
-
|
|
659
|
-
// Get current todos for duplicate detection
|
|
660
|
-
intake.evaluateWithTodos(userMessage, controller).then(async (result) => {
|
|
661
|
-
// Recheck stopped flag AFTER await - user may have paused while Jev was evaluating
|
|
662
|
-
if (intake.isStopped()) {
|
|
663
|
-
logToFile("[auto-continue]", "Task intake skipped - stopped after evaluation");
|
|
664
|
-
return;
|
|
665
|
-
}
|
|
666
|
-
if (result.actionable && result.action !== "skip") {
|
|
667
|
-
logToFile("[auto-continue]", "Task intake result:", JSON.stringify(result));
|
|
668
|
-
// Request capture if actionable using harness custom message
|
|
669
|
-
await intake.requestCapture(userMessage, "harness:task-capture");
|
|
670
|
-
}
|
|
671
|
-
}).catch((err) => {
|
|
672
|
-
logToFile("[auto-continue]", "Task intake error:", String(err));
|
|
673
|
-
});
|
|
674
|
-
} else {
|
|
675
|
-
// Short prompt or single prompt - reset counter to prevent accumulation
|
|
676
|
-
pendingUserPromptCount = 0;
|
|
677
|
-
}
|
|
668
|
+
// Task intake is now handled by debounce timer in message_start handler
|
|
669
|
+
// This ensures single trigger path for multi-prompt detection
|
|
678
670
|
}
|
|
679
671
|
});
|
|
680
672
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-harness/capability-registry",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.276",
|
|
4
4
|
"description": "Capability Registry for pi-harness-runtime — tracks model capabilities and enables capability-based routing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-harness/provider-router",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.276",
|
|
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",
|