pi-harness-runtime 1.1.359 → 1.1.361
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 +43 -22
- 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/connection-runtime/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/contracts/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/durable-review/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-sink/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/dist/pending-question.d.ts +5 -1
- package/packages/notification/dist/pending-question.d.ts.map +1 -1
- package/packages/notification/dist/pending-question.js +15 -2
- package/packages/notification/dist/pending-question.js.map +1 -1
- package/packages/notification/package.json +1 -1
- package/packages/notification/src/pending-question.ts +23 -3
- 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/permission-mode/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/relay/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/voice-api/package.json +1 -1
- package/packages/webmcp-tester/package.json +1 -1
- package/packages/wiki/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
|
@@ -304,9 +304,14 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
304
304
|
|
|
305
305
|
const content = extractAssistantText(msg);
|
|
306
306
|
|
|
307
|
-
//
|
|
308
|
-
//
|
|
309
|
-
|
|
307
|
+
// Detect new work cycle: check if message contains tool usage
|
|
308
|
+
// Tool calls indicate actual work being done, not just status replies
|
|
309
|
+
const hasToolUsage = Array.isArray(msg.content) &&
|
|
310
|
+
msg.content.some((block) => block.type === "tool_use");
|
|
311
|
+
|
|
312
|
+
// Only reset completion deduplication when new work is detected
|
|
313
|
+
// This prevents repeated notifications after informational replies
|
|
314
|
+
if (hasToolUsage) {
|
|
310
315
|
_completedNotifiedFor = null;
|
|
311
316
|
}
|
|
312
317
|
|
|
@@ -331,19 +336,14 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
331
336
|
|
|
332
337
|
logToFile("[PendingQuestion]", `Question created: ${question.requestId} - ${result.questionText?.slice(0, 50)}`);
|
|
333
338
|
|
|
334
|
-
|
|
335
|
-
|
|
339
|
+
_lastNotifiedQuestion = result.questionText;
|
|
340
|
+
waitingForUserSince = new Date();
|
|
336
341
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
result.questionText.split("").reduce((a, c) => {
|
|
340
|
-
a = ((a << 5) - a) + c.charCodeAt(0);
|
|
341
|
-
return a & a;
|
|
342
|
-
}, 0)
|
|
343
|
-
).toString(36);
|
|
342
|
+
// Use question.requestId as the jobId for callback matching
|
|
343
|
+
const questionJobId = question.requestId;
|
|
344
344
|
|
|
345
|
-
|
|
346
|
-
|
|
345
|
+
// Update TUI status - use short ID for display
|
|
346
|
+
updateAutoContinueStatus("WAITING", questionJobId.slice(0, 8));
|
|
347
347
|
|
|
348
348
|
// Get task context for additional info
|
|
349
349
|
const taskContext = await getTaskContext().catch(() => ({ total: 0, completed: 0, remaining: [] as string[] }));
|
|
@@ -356,8 +356,9 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
356
356
|
const contextInfo = `Waiting: ${waitMinutes}m | ${taskInfo}`;
|
|
357
357
|
|
|
358
358
|
// Emit WaitingForUserInput to Telegram with Yes/No buttons
|
|
359
|
+
// Uses question.requestId for callback matching
|
|
359
360
|
_nc?.notifyWithApproval("WaitingForUserInput", {
|
|
360
|
-
jobId: `waiting-user-${
|
|
361
|
+
jobId: `waiting-user-${questionJobId}`,
|
|
361
362
|
requirement: result.questionText,
|
|
362
363
|
}, {
|
|
363
364
|
approveLabel: "Continue",
|
|
@@ -366,7 +367,7 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
366
367
|
|
|
367
368
|
// Also send context info as a follow-up message (not in error field)
|
|
368
369
|
_nc?.notify("Info", {
|
|
369
|
-
jobId: `info-${
|
|
370
|
+
jobId: `info-${questionJobId}`,
|
|
370
371
|
requirement: contextInfo,
|
|
371
372
|
}).catch((e) => logToFile("[Notification]", "Info notification failed:", String(e)));
|
|
372
373
|
}
|
|
@@ -1235,24 +1236,44 @@ async function initTelegram(pi: ExtensionAPI): Promise<void> {
|
|
|
1235
1236
|
}
|
|
1236
1237
|
|
|
1237
1238
|
switch (parsed.action) {
|
|
1238
|
-
case CallbackActions.APPROVE:
|
|
1239
|
+
case CallbackActions.APPROVE: {
|
|
1239
1240
|
// User clicked Continue - clear waiting state and resume continuation
|
|
1240
1241
|
logToFile("[TelegramCallback] Approved - user clicked Continue, resuming work");
|
|
1241
1242
|
sharedState.waitingForUserSince = null;
|
|
1242
1243
|
sharedState.updateAutoContinueStatus?.("IDLE");
|
|
1243
|
-
// Resolve pending question with yes
|
|
1244
|
-
sharedState.pqController?.resolve({
|
|
1244
|
+
// Resolve pending question with yes, validating request ID (first-answer-wins)
|
|
1245
|
+
const approved = sharedState.pqController?.resolve({
|
|
1246
|
+
resolution: "yes",
|
|
1247
|
+
by: "user",
|
|
1248
|
+
requestId: parsed.targetId,
|
|
1249
|
+
});
|
|
1250
|
+
if (!approved) {
|
|
1251
|
+
logToFile("[TelegramCallback] WARNING: APPROVE button ignored - stale or mismatched request ID");
|
|
1252
|
+
await acknowledge("Stale button - no pending question to approve");
|
|
1253
|
+
break;
|
|
1254
|
+
}
|
|
1245
1255
|
// Also resume continuation controller
|
|
1246
1256
|
(sharedState.todoContinuationController as any)?.resume?.();
|
|
1247
1257
|
break;
|
|
1248
|
-
|
|
1258
|
+
}
|
|
1259
|
+
case CallbackActions.REJECT: {
|
|
1249
1260
|
// User clicked Not yet - just dismiss, don't resume
|
|
1250
1261
|
logToFile("[TelegramCallback] Rejected - user clicked Not yet, pausing");
|
|
1251
|
-
// Resolve pending question with no
|
|
1252
|
-
sharedState.pqController?.resolve({
|
|
1262
|
+
// Resolve pending question with no, validating request ID (first-answer-wins)
|
|
1263
|
+
const rejected = sharedState.pqController?.resolve({
|
|
1264
|
+
resolution: "no",
|
|
1265
|
+
by: "user",
|
|
1266
|
+
requestId: parsed.targetId,
|
|
1267
|
+
});
|
|
1268
|
+
if (!rejected) {
|
|
1269
|
+
logToFile("[TelegramCallback] WARNING: REJECT button ignored - stale or mismatched request ID");
|
|
1270
|
+
await acknowledge("Stale button - no pending question to reject");
|
|
1271
|
+
break;
|
|
1272
|
+
}
|
|
1253
1273
|
// Explicitly pause the continuation
|
|
1254
1274
|
(sharedState.todoContinuationController as any)?.explicitPause?.();
|
|
1255
1275
|
break;
|
|
1276
|
+
}
|
|
1256
1277
|
default:
|
|
1257
1278
|
// Check for channel toggle actions
|
|
1258
1279
|
if (parsed.action === "toggle_telegram") {
|
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.361",
|
|
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",
|