pi-harness-runtime 1.1.351 → 1.1.353
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 +41 -30
- 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/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/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
|
@@ -157,12 +157,17 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
157
157
|
existsSync(`${keysDir}/jev-api-key.txt`) &&
|
|
158
158
|
readFileSync(`${keysDir}/jev-api-key.txt`, "utf8").trim().length > 0;
|
|
159
159
|
|
|
160
|
+
// Create pending question controller - works independently of Jev
|
|
161
|
+
const { createPendingQuestionController } = await import("./packages/notification/dist/index.js");
|
|
162
|
+
const pqController = createPendingQuestionController();
|
|
163
|
+
sharedState.pqController = pqController;
|
|
164
|
+
|
|
160
165
|
if (!hasEnvKey && !hasFileKey) {
|
|
161
|
-
addHarnessMessage("Jev", "API key missing
|
|
162
|
-
"Set TYPESAFE_API_KEY or ~/.pi-harness-runtime/keys/jev-api-key.txt
|
|
166
|
+
addHarnessMessage("Jev", "API key missing; question detection active, auto-continue unavailable", "warn", [
|
|
167
|
+
"Set TYPESAFE_API_KEY or ~/.pi-harness-runtime/keys/jev-api-key.txt to enable auto-continue.",
|
|
163
168
|
]);
|
|
164
|
-
logToFile("[auto-continue]", "No Jev API key found. Set TYPESAFE_API_KEY run: echo \"{api_key}\" > ~/.pi-harness-runtime/keys/jev-api-key.txt");
|
|
165
|
-
return
|
|
169
|
+
logToFile("[auto-continue]", "No Jev API key found, but question detection is active. Set TYPESAFE_API_KEY run: echo \"{api_key}\" > ~/.pi-harness-runtime/keys/jev-api-key.txt");
|
|
170
|
+
// Don't return - question handling still works without Jev
|
|
166
171
|
}
|
|
167
172
|
|
|
168
173
|
// Resolve the actual API key: env takes priority, file is fallback
|
|
@@ -170,9 +175,6 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
170
175
|
readFileSync(`${keysDir}/jev-api-key.txt`, "utf8").trim();
|
|
171
176
|
|
|
172
177
|
const mod = await import("./packages/jev-judge/src/auto-continue.js");
|
|
173
|
-
const { createPendingQuestionController } = await import("./packages/notification/dist/index.js");
|
|
174
|
-
const pqController = createPendingQuestionController();
|
|
175
|
-
sharedState.pqController = pqController;
|
|
176
178
|
|
|
177
179
|
// Track waiting state
|
|
178
180
|
let waitingForUserSince: Date | null = null;
|
|
@@ -276,22 +278,20 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
276
278
|
return content;
|
|
277
279
|
}
|
|
278
280
|
|
|
279
|
-
//
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
if (
|
|
284
|
-
|
|
281
|
+
// Set up pending question callback to dispatch answers to Pi
|
|
282
|
+
pqController.onUserAnswer((question, answer) => {
|
|
283
|
+
logToFile("[PendingQuestion]", `User answered: ${answer} for question ${question.requestId}`);
|
|
284
|
+
// Dispatch answer to Pi if needed
|
|
285
|
+
if (answer === "yes") {
|
|
286
|
+
pi.sendUserMessage("yes", { deliverAs: "steer" }).catch((_e: unknown) =>
|
|
287
|
+
logToFile("[PendingQuestion]", "Failed to send yes to Pi")
|
|
288
|
+
);
|
|
289
|
+
} else if (answer === "no") {
|
|
290
|
+
pi.sendUserMessage("not yet", { deliverAs: "steer" }).catch((_e: unknown) =>
|
|
291
|
+
logToFile("[PendingQuestion]", "Failed to send no to Pi")
|
|
292
|
+
);
|
|
285
293
|
}
|
|
286
|
-
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
// Detect routine continuation questions ("Should I continue?")
|
|
290
|
-
// These should NOT block immediate continuation - let Jev/todo controller decide
|
|
291
|
-
function isRoutineContinuation(question: string): boolean {
|
|
292
|
-
const result = pqController.detectQuestion(question);
|
|
293
|
-
return result.isRoutine ?? false;
|
|
294
|
-
}
|
|
294
|
+
});
|
|
295
295
|
|
|
296
296
|
// Detect when agent asks for continuation
|
|
297
297
|
pi.on("message_end", async (event) => {
|
|
@@ -299,22 +299,33 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
299
299
|
if (!msg || msg.role !== "assistant") return;
|
|
300
300
|
|
|
301
301
|
const content = extractAssistantText(msg);
|
|
302
|
-
const
|
|
302
|
+
const result = pqController.detectQuestion(content);
|
|
303
303
|
|
|
304
304
|
// Only trigger if: we found a question AND it's different from last notification
|
|
305
305
|
// Skip routine continuation questions - let Jev/todo controller decide
|
|
306
|
-
if (
|
|
306
|
+
if (result.detected && result.questionText && result.questionText !== _lastNotifiedQuestion && !waitingForUserSince) {
|
|
307
307
|
// Skip routine continuation - don't block automatic continuation
|
|
308
|
-
if (
|
|
309
|
-
|
|
310
|
-
|
|
308
|
+
if (result.isRoutine) {
|
|
309
|
+
logToFile("[auto-continue]", "Routine continuation detected, not blocking");
|
|
310
|
+
return;
|
|
311
311
|
}
|
|
312
|
-
|
|
312
|
+
|
|
313
|
+
// Create question in controller
|
|
314
|
+
const question = pqController.createQuestion({
|
|
315
|
+
text: result.questionText,
|
|
316
|
+
sessionId: _sessionId,
|
|
317
|
+
workspacePath: _piSessionCwd || "/",
|
|
318
|
+
kind: result.kind || "approval",
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
logToFile("[PendingQuestion]", `Question created: ${question.requestId} - ${result.questionText?.slice(0, 50)}`);
|
|
322
|
+
|
|
323
|
+
_lastNotifiedQuestion = result.questionText;
|
|
313
324
|
waitingForUserSince = new Date();
|
|
314
325
|
|
|
315
326
|
// Create stable jobId from question content hash (callback-safe: digits only)
|
|
316
327
|
const questionHash = Math.abs(
|
|
317
|
-
|
|
328
|
+
result.questionText.split("").reduce((a, c) => {
|
|
318
329
|
a = ((a << 5) - a) + c.charCodeAt(0);
|
|
319
330
|
return a & a;
|
|
320
331
|
}, 0)
|
|
@@ -336,7 +347,7 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
336
347
|
// Emit WaitingForUserInput to Telegram with Yes/No buttons
|
|
337
348
|
_nc?.notifyWithApproval("WaitingForUserInput", {
|
|
338
349
|
jobId: `waiting-user-${questionHash}`,
|
|
339
|
-
requirement:
|
|
350
|
+
requirement: result.questionText,
|
|
340
351
|
}, {
|
|
341
352
|
approveLabel: "Continue",
|
|
342
353
|
rejectLabel: "Not yet",
|
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.353",
|
|
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",
|