pi-harness-runtime 1.1.359 → 1.1.360
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 +35 -19
- 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
|
@@ -331,19 +331,14 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
331
331
|
|
|
332
332
|
logToFile("[PendingQuestion]", `Question created: ${question.requestId} - ${result.questionText?.slice(0, 50)}`);
|
|
333
333
|
|
|
334
|
-
|
|
335
|
-
|
|
334
|
+
_lastNotifiedQuestion = result.questionText;
|
|
335
|
+
waitingForUserSince = new Date();
|
|
336
336
|
|
|
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);
|
|
337
|
+
// Use question.requestId as the jobId for callback matching
|
|
338
|
+
const questionJobId = question.requestId;
|
|
344
339
|
|
|
345
|
-
|
|
346
|
-
|
|
340
|
+
// Update TUI status - use short ID for display
|
|
341
|
+
updateAutoContinueStatus("WAITING", questionJobId.slice(0, 8));
|
|
347
342
|
|
|
348
343
|
// Get task context for additional info
|
|
349
344
|
const taskContext = await getTaskContext().catch(() => ({ total: 0, completed: 0, remaining: [] as string[] }));
|
|
@@ -356,8 +351,9 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
356
351
|
const contextInfo = `Waiting: ${waitMinutes}m | ${taskInfo}`;
|
|
357
352
|
|
|
358
353
|
// Emit WaitingForUserInput to Telegram with Yes/No buttons
|
|
354
|
+
// Uses question.requestId for callback matching
|
|
359
355
|
_nc?.notifyWithApproval("WaitingForUserInput", {
|
|
360
|
-
jobId: `waiting-user-${
|
|
356
|
+
jobId: `waiting-user-${questionJobId}`,
|
|
361
357
|
requirement: result.questionText,
|
|
362
358
|
}, {
|
|
363
359
|
approveLabel: "Continue",
|
|
@@ -366,7 +362,7 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
366
362
|
|
|
367
363
|
// Also send context info as a follow-up message (not in error field)
|
|
368
364
|
_nc?.notify("Info", {
|
|
369
|
-
jobId: `info-${
|
|
365
|
+
jobId: `info-${questionJobId}`,
|
|
370
366
|
requirement: contextInfo,
|
|
371
367
|
}).catch((e) => logToFile("[Notification]", "Info notification failed:", String(e)));
|
|
372
368
|
}
|
|
@@ -1235,24 +1231,44 @@ async function initTelegram(pi: ExtensionAPI): Promise<void> {
|
|
|
1235
1231
|
}
|
|
1236
1232
|
|
|
1237
1233
|
switch (parsed.action) {
|
|
1238
|
-
case CallbackActions.APPROVE:
|
|
1234
|
+
case CallbackActions.APPROVE: {
|
|
1239
1235
|
// User clicked Continue - clear waiting state and resume continuation
|
|
1240
1236
|
logToFile("[TelegramCallback] Approved - user clicked Continue, resuming work");
|
|
1241
1237
|
sharedState.waitingForUserSince = null;
|
|
1242
1238
|
sharedState.updateAutoContinueStatus?.("IDLE");
|
|
1243
|
-
// Resolve pending question with yes
|
|
1244
|
-
sharedState.pqController?.resolve({
|
|
1239
|
+
// Resolve pending question with yes, validating request ID (first-answer-wins)
|
|
1240
|
+
const approved = sharedState.pqController?.resolve({
|
|
1241
|
+
resolution: "yes",
|
|
1242
|
+
by: "user",
|
|
1243
|
+
requestId: parsed.targetId,
|
|
1244
|
+
});
|
|
1245
|
+
if (!approved) {
|
|
1246
|
+
logToFile("[TelegramCallback] WARNING: APPROVE button ignored - stale or mismatched request ID");
|
|
1247
|
+
await acknowledge("Stale button - no pending question to approve");
|
|
1248
|
+
break;
|
|
1249
|
+
}
|
|
1245
1250
|
// Also resume continuation controller
|
|
1246
1251
|
(sharedState.todoContinuationController as any)?.resume?.();
|
|
1247
1252
|
break;
|
|
1248
|
-
|
|
1253
|
+
}
|
|
1254
|
+
case CallbackActions.REJECT: {
|
|
1249
1255
|
// User clicked Not yet - just dismiss, don't resume
|
|
1250
1256
|
logToFile("[TelegramCallback] Rejected - user clicked Not yet, pausing");
|
|
1251
|
-
// Resolve pending question with no
|
|
1252
|
-
sharedState.pqController?.resolve({
|
|
1257
|
+
// Resolve pending question with no, validating request ID (first-answer-wins)
|
|
1258
|
+
const rejected = sharedState.pqController?.resolve({
|
|
1259
|
+
resolution: "no",
|
|
1260
|
+
by: "user",
|
|
1261
|
+
requestId: parsed.targetId,
|
|
1262
|
+
});
|
|
1263
|
+
if (!rejected) {
|
|
1264
|
+
logToFile("[TelegramCallback] WARNING: REJECT button ignored - stale or mismatched request ID");
|
|
1265
|
+
await acknowledge("Stale button - no pending question to reject");
|
|
1266
|
+
break;
|
|
1267
|
+
}
|
|
1253
1268
|
// Explicitly pause the continuation
|
|
1254
1269
|
(sharedState.todoContinuationController as any)?.explicitPause?.();
|
|
1255
1270
|
break;
|
|
1271
|
+
}
|
|
1256
1272
|
default:
|
|
1257
1273
|
// Check for channel toggle actions
|
|
1258
1274
|
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.360",
|
|
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",
|
|
@@ -152,11 +152,15 @@ export declare class PendingQuestionController {
|
|
|
152
152
|
updateDeliveryState(channel: "telegram" | "line", delivered: boolean, error?: string): void;
|
|
153
153
|
/**
|
|
154
154
|
* Resolve the current question
|
|
155
|
+
* @param params Resolution parameters including optional requestId to validate
|
|
156
|
+
* @returns true if resolved, false if rejected (no question or ID mismatch)
|
|
155
157
|
*/
|
|
156
158
|
resolve(params: {
|
|
157
159
|
resolution: "yes" | "no" | "clarification";
|
|
158
160
|
by: "user" | "jev" | "timeout";
|
|
159
|
-
|
|
161
|
+
/** Optional requestId to validate (first-answer-wins) */
|
|
162
|
+
requestId?: string;
|
|
163
|
+
}): boolean;
|
|
160
164
|
/**
|
|
161
165
|
* Cancel the current question (e.g., on session switch)
|
|
162
166
|
*/
|