pi-harness-runtime 1.1.183 → 1.1.185
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/CHANGELOG.md +7 -0
- package/harness/glm-quota-countdown.ts +9 -1
- package/harness/honcho-init.ts +745 -0
- package/harness/honcho-memory.ts +290 -97
- package/harness/service-commands.ts +28 -3
- package/index.ts +191 -63
- package/package.json +1 -1
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/agent-policy/dist/extension.d.ts.map +1 -1
- package/packages/agent-policy/dist/extension.js +16 -9
- package/packages/agent-policy/dist/extension.js.map +1 -1
- package/packages/agent-policy/dist/policy-loader.d.ts.map +1 -1
- package/packages/agent-policy/dist/policy-loader.js +5 -16
- package/packages/agent-policy/dist/policy-loader.js.map +1 -1
- package/packages/agent-policy/package.json +1 -1
- package/packages/agent-policy/src/extension.ts +16 -9
- package/packages/agent-policy/src/policy-loader.ts +5 -22
- package/packages/agent-policy/test/interlock.test.ts +101 -0
- 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/dist/adapters/telegram-adapter.d.ts +1 -1
- package/packages/notification/dist/adapters/telegram-adapter.d.ts.map +1 -1
- package/packages/notification/dist/adapters/telegram-adapter.js +34 -21
- package/packages/notification/dist/adapters/telegram-adapter.js.map +1 -1
- package/packages/notification/package.json +1 -1
- package/packages/notification/src/adapters/telegram-adapter.ts +37 -21
- 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
|
@@ -158,18 +158,87 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
158
158
|
let autoContinueTimer: NodeJS.Timeout | null = null;
|
|
159
159
|
let _inferenceInProgress = false; // Track for overlap prevention
|
|
160
160
|
let _sessionId = Date.now().toString(36); // Track session for cancellation
|
|
161
|
+
let _lastNotifiedQuestion = ""; // Track last question to prevent repeat notifications
|
|
162
|
+
|
|
163
|
+
// UI status for auto-continue (captured from session_start ctx)
|
|
164
|
+
let _setAutoContinueStatus: ((text: string | undefined) => void) | null = null;
|
|
165
|
+
let _currentAutoContinueState = ""; // Track current state for deduplication
|
|
166
|
+
|
|
167
|
+
// Auto-continue state labels
|
|
168
|
+
const AC_STATE = {
|
|
169
|
+
IDLE: "",
|
|
170
|
+
WAITING: "WAIT",
|
|
171
|
+
CHECKING: "CHECK",
|
|
172
|
+
CONTINUING: "RUN",
|
|
173
|
+
ERROR: "WARN",
|
|
174
|
+
} as const;
|
|
175
|
+
|
|
176
|
+
// Status message for each state
|
|
177
|
+
const AC_STATE_MESSAGES = {
|
|
178
|
+
IDLE: "",
|
|
179
|
+
WAITING: "Awaiting your response",
|
|
180
|
+
CHECKING: "Evaluating continuation",
|
|
181
|
+
CONTINUING: "Continuing autonomously",
|
|
182
|
+
ERROR: "Auto-continue unavailable",
|
|
183
|
+
} as const;
|
|
184
|
+
|
|
185
|
+
// Update auto-continue status in TUI footer
|
|
186
|
+
function updateAutoContinueStatus(state: keyof typeof AC_STATE_MESSAGES, requestId?: string): void {
|
|
187
|
+
if (!_setAutoContinueStatus) return;
|
|
188
|
+
|
|
189
|
+
const message = AC_STATE_MESSAGES[state];
|
|
190
|
+
if (state === "IDLE") {
|
|
191
|
+
// Clear status
|
|
192
|
+
_setAutoContinueStatus(undefined);
|
|
193
|
+
_currentAutoContinueState = "";
|
|
194
|
+
} else {
|
|
195
|
+
const statusText = requestId
|
|
196
|
+
? `[${AC_STATE[state]}] ${message} | ${requestId}`
|
|
197
|
+
: `[${AC_STATE[state]}] ${message}`;
|
|
198
|
+
|
|
199
|
+
// Only update if state changed (prevent flicker)
|
|
200
|
+
if (statusText !== _currentAutoContinueState) {
|
|
201
|
+
_setAutoContinueStatus(statusText);
|
|
202
|
+
_currentAutoContinueState = statusText;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
161
206
|
|
|
162
|
-
//
|
|
163
|
-
pi.on("
|
|
164
|
-
|
|
165
|
-
|
|
207
|
+
// Capture UI context from session_start
|
|
208
|
+
pi.on("session_start", (_event, ctx) => {
|
|
209
|
+
if (ctx.hasUI && ctx.ui) {
|
|
210
|
+
_setAutoContinueStatus = ctx.ui.setStatus.bind(ctx.ui, "harness-auto-continue");
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
// Clear status and cancel background work on session shutdown
|
|
215
|
+
pi.on("session_shutdown", () => {
|
|
216
|
+
// Cancel the auto-continue interval
|
|
217
|
+
if (autoContinueTimer) {
|
|
218
|
+
clearInterval(autoContinueTimer);
|
|
219
|
+
autoContinueTimer = null;
|
|
220
|
+
}
|
|
166
221
|
|
|
167
|
-
//
|
|
222
|
+
// Clear UI binding and status
|
|
223
|
+
if (_setAutoContinueStatus) {
|
|
224
|
+
_setAutoContinueStatus(undefined);
|
|
225
|
+
_setAutoContinueStatus = null;
|
|
226
|
+
}
|
|
227
|
+
_currentAutoContinueState = "";
|
|
228
|
+
|
|
229
|
+
// Reset state
|
|
230
|
+
waitingForUserSince = null;
|
|
231
|
+
_lastNotifiedQuestion = "";
|
|
232
|
+
_inferenceInProgress = false;
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
// Extract assistant message text and detect actual confirmation requests
|
|
236
|
+
function extractAssistantText(msg: { role?: string; content?: string | Array<{ type?: string; text?: string }> } | undefined): string {
|
|
237
|
+
if (!msg) return "";
|
|
168
238
|
let content = "";
|
|
169
239
|
if (typeof msg.content === "string") {
|
|
170
240
|
content = msg.content;
|
|
171
241
|
} else if (Array.isArray(msg.content)) {
|
|
172
|
-
// Extract text from TextContent blocks only; ignore thinking/tool calls
|
|
173
242
|
content = msg.content
|
|
174
243
|
.filter((block): block is { type: "text"; text: string } =>
|
|
175
244
|
block.type === "text" && typeof block.text === "string"
|
|
@@ -177,15 +246,65 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
177
246
|
.map(block => block.text)
|
|
178
247
|
.join("\n");
|
|
179
248
|
}
|
|
180
|
-
|
|
249
|
+
return content;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Detect actual confirmation requests (questions, not progress statements)
|
|
253
|
+
// Must be a question ending with ? AND contain both a request word AND user intent
|
|
254
|
+
function detectConfirmationRequest(text: string): string | null {
|
|
255
|
+
// Find questions ending with ? and check each
|
|
256
|
+
// Use regex to match question sentences (ending with ?)
|
|
257
|
+
const questionPattern = /([^?]*\?)/g;
|
|
258
|
+
const matches = text.matchAll(questionPattern);
|
|
259
|
+
|
|
260
|
+
for (const match of matches) {
|
|
261
|
+
const sentence = match[1].trim();
|
|
262
|
+
const lower = sentence.toLowerCase();
|
|
263
|
+
|
|
264
|
+
// Must contain request words AND user intent words
|
|
265
|
+
const hasRequest = /\b(continue|proceed|next|wait|pause|stop|hold|resume|repeat|rephrase|clarify|explain)\b/i.test(lower);
|
|
266
|
+
const hasUserIntent = /\b(should|would|could|shall|may i|do you|would you|should i|could we|can i|can we|would like)\b/i.test(lower);
|
|
267
|
+
|
|
268
|
+
if (hasRequest && hasUserIntent) {
|
|
269
|
+
// Return the question for deduplication (with the ? preserved)
|
|
270
|
+
return sentence;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
181
273
|
|
|
182
|
-
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// Detect when agent asks for continuation
|
|
278
|
+
pi.on("message_end", async (event) => {
|
|
279
|
+
const msg = event.message as { role?: string; content?: string | Array<{ type?: string; text?: string }> } | undefined;
|
|
280
|
+
if (!msg || msg.role !== "assistant") return;
|
|
281
|
+
|
|
282
|
+
const content = extractAssistantText(msg);
|
|
283
|
+
const detectedQuestion = detectConfirmationRequest(content);
|
|
284
|
+
|
|
285
|
+
// Only trigger if: we found a question AND it's different from last notification
|
|
286
|
+
if (detectedQuestion && detectedQuestion !== _lastNotifiedQuestion && !waitingForUserSince) {
|
|
287
|
+
_lastNotifiedQuestion = detectedQuestion;
|
|
183
288
|
waitingForUserSince = new Date();
|
|
184
|
-
|
|
185
|
-
//
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
289
|
+
|
|
290
|
+
// Create stable jobId from question content hash (callback-safe: digits only)
|
|
291
|
+
const questionHash = Math.abs(
|
|
292
|
+
detectedQuestion.split("").reduce((a, c) => {
|
|
293
|
+
a = ((a << 5) - a) + c.charCodeAt(0);
|
|
294
|
+
return a & a;
|
|
295
|
+
}, 0)
|
|
296
|
+
).toString(36);
|
|
297
|
+
|
|
298
|
+
// Update TUI status - use short ID for display
|
|
299
|
+
updateAutoContinueStatus("WAITING", questionHash);
|
|
300
|
+
|
|
301
|
+
// Emit WaitingForUserInput to Telegram with Yes/No buttons
|
|
302
|
+
_nc?.notifyWithApproval("WaitingForUserInput", {
|
|
303
|
+
jobId: `waiting-user-${questionHash}`,
|
|
304
|
+
requirement: detectedQuestion,
|
|
305
|
+
}, {
|
|
306
|
+
approveLabel: "Continue",
|
|
307
|
+
rejectLabel: "Not yet",
|
|
189
308
|
});
|
|
190
309
|
}
|
|
191
310
|
});
|
|
@@ -196,8 +315,9 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
196
315
|
if (msg?.role === "user") {
|
|
197
316
|
lastUserMessage = new Date();
|
|
198
317
|
if (waitingForUserSince) {
|
|
199
|
-
console.log("[auto-continue] User responded, cancelling wait");
|
|
200
318
|
waitingForUserSince = null;
|
|
319
|
+
_lastNotifiedQuestion = "";
|
|
320
|
+
updateAutoContinueStatus("IDLE");
|
|
201
321
|
}
|
|
202
322
|
}
|
|
203
323
|
});
|
|
@@ -209,7 +329,6 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
209
329
|
const checkAndAutoContinue = async () => {
|
|
210
330
|
// Prevent overlap if inference is already in progress
|
|
211
331
|
if (_inferenceInProgress) {
|
|
212
|
-
console.log("[auto-continue] Inference in progress, skipping this check");
|
|
213
332
|
return;
|
|
214
333
|
}
|
|
215
334
|
|
|
@@ -217,11 +336,19 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
217
336
|
|
|
218
337
|
// Capture session ID at check time for post-inference validation
|
|
219
338
|
const checkSessionId = _sessionId;
|
|
339
|
+
// Use same hash algorithm as detection
|
|
340
|
+
const questionHash = _lastNotifiedQuestion
|
|
341
|
+
? Math.abs(_lastNotifiedQuestion.split("").reduce((a, c) => {
|
|
342
|
+
a = ((a << 5) - a) + c.charCodeAt(0);
|
|
343
|
+
return a & a;
|
|
344
|
+
}, 0)).toString(36)
|
|
345
|
+
: "";
|
|
220
346
|
|
|
221
347
|
const waitMinutes = (Date.now() - waitingForUserSince.getTime()) / 60000;
|
|
222
348
|
if (waitMinutes < MIN_WAIT_MINUTES) return;
|
|
223
349
|
|
|
224
|
-
|
|
350
|
+
// Update status to checking
|
|
351
|
+
updateAutoContinueStatus("CHECKING", questionHash);
|
|
225
352
|
|
|
226
353
|
try {
|
|
227
354
|
// Mark inference as in progress to prevent overlap
|
|
@@ -238,7 +365,6 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
238
365
|
|
|
239
366
|
// Guard against empty task list
|
|
240
367
|
if (taskContext.total === 0) {
|
|
241
|
-
console.log("[auto-continue] No tasks to decide on — skipping");
|
|
242
368
|
_inferenceInProgress = false;
|
|
243
369
|
return;
|
|
244
370
|
}
|
|
@@ -254,49 +380,47 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
|
254
380
|
|
|
255
381
|
// Check session validity and user response before applying
|
|
256
382
|
if (checkSessionId !== _sessionId) {
|
|
257
|
-
console.log("[auto-continue] Session changed during inference — cancelling");
|
|
258
383
|
_inferenceInProgress = false;
|
|
384
|
+
updateAutoContinueStatus("IDLE");
|
|
259
385
|
return;
|
|
260
386
|
}
|
|
261
387
|
|
|
262
388
|
if (!waitingForUserSince) {
|
|
263
|
-
console.log("[auto-continue] User responded during inference — cancelling");
|
|
264
389
|
_inferenceInProgress = false;
|
|
390
|
+
updateAutoContinueStatus("IDLE");
|
|
265
391
|
return;
|
|
266
392
|
}
|
|
267
393
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
394
|
+
if (decision.action === "proceed" || decision.action === "proceed_with_caution") {
|
|
395
|
+
// Update status to continuing
|
|
396
|
+
updateAutoContinueStatus("CONTINUING", questionHash);
|
|
271
397
|
|
|
272
|
-
if (decision.action === "proceed") {
|
|
273
398
|
// Send steer message to continue
|
|
274
399
|
pi.sendUserMessage(
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
pi.sendUserMessage(
|
|
283
|
-
"User is unavailable. Proceeding with caution - will log each significant step.\n" +
|
|
284
|
-
`Risk level: ${decision.riskLevel}\n` +
|
|
285
|
-
"Continue with remaining tasks, reporting progress.",
|
|
400
|
+
decision.action === "proceed"
|
|
401
|
+
? "User is unavailable. Based on task progress and low risk, proceeding autonomously.\n" +
|
|
402
|
+
`Decision: ${decision.reasoning}\n` +
|
|
403
|
+
"Continue with remaining tasks."
|
|
404
|
+
: "User is unavailable. Proceeding with caution - will log each significant step.\n" +
|
|
405
|
+
`Risk level: ${decision.riskLevel}\n` +
|
|
406
|
+
"Continue with remaining tasks, reporting progress.",
|
|
286
407
|
{ deliverAs: "steer" },
|
|
287
408
|
);
|
|
288
409
|
waitingForUserSince = null;
|
|
410
|
+
_lastNotifiedQuestion = "";
|
|
411
|
+
|
|
412
|
+
// Clear status after short delay
|
|
413
|
+
setTimeout(() => updateAutoContinueStatus("IDLE"), 2000);
|
|
289
414
|
}
|
|
290
|
-
|
|
291
|
-
} catch
|
|
292
|
-
|
|
415
|
+
_inferenceInProgress = false;
|
|
416
|
+
} catch {
|
|
417
|
+
_inferenceInProgress = false;
|
|
418
|
+
updateAutoContinueStatus("ERROR");
|
|
293
419
|
}
|
|
294
420
|
};
|
|
295
421
|
|
|
296
422
|
// Start periodic check
|
|
297
423
|
autoContinueTimer = setInterval(checkAndAutoContinue, AUTO_CONTINUE_INTERVAL_MS);
|
|
298
|
-
|
|
299
|
-
console.error("[auto-continue] Jev Auto-Continue initialized");
|
|
300
424
|
} catch {
|
|
301
425
|
// auto-continue not available
|
|
302
426
|
}
|
|
@@ -403,6 +527,11 @@ async function initTelegram(): Promise<void> {
|
|
|
403
527
|
center,
|
|
404
528
|
notify: (event: string, ctx: Record<string, unknown>) =>
|
|
405
529
|
center.notify(event as never, ctx as never),
|
|
530
|
+
notifyWithApproval: (
|
|
531
|
+
event: string,
|
|
532
|
+
ctx: Record<string, unknown>,
|
|
533
|
+
options?: { approveLabel?: string; rejectLabel?: string },
|
|
534
|
+
) => center.notifyWithApproval(event as never, ctx as never, options as never),
|
|
406
535
|
};
|
|
407
536
|
|
|
408
537
|
// Wire to GLMQuotaCountdown so it sends Telegram alerts
|
|
@@ -430,13 +559,11 @@ async function initTelegram(): Promise<void> {
|
|
|
430
559
|
// - Deduplication by message ID
|
|
431
560
|
// - Bounded context injection with provenance
|
|
432
561
|
|
|
433
|
-
/** Module-level Honcho memory instance */
|
|
434
|
-
let _honchoMemory: import("./harness/honcho-memory.js").HonchoMemory | null = null;
|
|
435
|
-
|
|
436
562
|
async function initHoncho(pi: ExtensionAPI): Promise<void> {
|
|
437
|
-
// Import
|
|
438
|
-
await import("./harness/honcho-
|
|
563
|
+
// Import new Honcho integration module
|
|
564
|
+
const { initHoncho: honchoInit, registerHonchoLifecycle } = await import("./harness/honcho-init.js");
|
|
439
565
|
|
|
566
|
+
// Check for API key
|
|
440
567
|
const { readFileSync, existsSync } = await import("node:fs");
|
|
441
568
|
const home = process.env.HOME || process.env.USERPROFILE || "/home/frappe";
|
|
442
569
|
const keyPath = `${home}/.pi-harness-runtime/keys/honcho-api-key.txt`;
|
|
@@ -455,26 +582,19 @@ async function initHoncho(pi: ExtensionAPI): Promise<void> {
|
|
|
455
582
|
}
|
|
456
583
|
|
|
457
584
|
try {
|
|
458
|
-
// Register
|
|
459
|
-
pi.on
|
|
460
|
-
|
|
461
|
-
version: 1 as const,
|
|
462
|
-
name: "honcho",
|
|
463
|
-
definition: {
|
|
464
|
-
url: "https://mcp.honcho.dev",
|
|
465
|
-
auth: "bearer" as const,
|
|
466
|
-
bearerToken: apiKey,
|
|
467
|
-
},
|
|
468
|
-
};
|
|
585
|
+
// Register lifecycle hooks using the new integration
|
|
586
|
+
// SAFETY: pi.on accepts these event names at runtime
|
|
587
|
+
registerHonchoLifecycle(pi as unknown as { on: (event: string, handler: (...args: unknown[]) => void | Promise<void>) => void });
|
|
469
588
|
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
console.log("[honcho] MCP registration emitted (awaiting adapter ack)");
|
|
474
|
-
});
|
|
589
|
+
// Initialize Honcho with the API key and pi.events
|
|
590
|
+
// SAFETY: pi.events implements the required on/emit interface
|
|
591
|
+
const result = await honchoInit({ apiKey, piEvents: pi.events });
|
|
475
592
|
|
|
476
|
-
|
|
477
|
-
|
|
593
|
+
if (result) {
|
|
594
|
+
logStartup("[pi-harness] Honcho integration ready");
|
|
595
|
+
} else {
|
|
596
|
+
logStartup("[pi-harness] Honcho: initialization returned null");
|
|
597
|
+
}
|
|
478
598
|
} catch (err) {
|
|
479
599
|
logStartup("[pi-harness] Honcho: init failed:", err instanceof Error ? err.message : String(err));
|
|
480
600
|
}
|
|
@@ -1023,7 +1143,15 @@ interface HarnessSession {
|
|
|
1023
1143
|
let currentSession: HarnessSession | null = null;
|
|
1024
1144
|
|
|
1025
1145
|
/** Singleton notification center — set by initTelegram(), used by all emit helpers */
|
|
1026
|
-
let _nc: {
|
|
1146
|
+
let _nc: {
|
|
1147
|
+
center: unknown;
|
|
1148
|
+
notify: (event: string, ctx: Record<string, unknown>) => Promise<unknown>;
|
|
1149
|
+
notifyWithApproval: (
|
|
1150
|
+
event: string,
|
|
1151
|
+
ctx: Record<string, unknown>,
|
|
1152
|
+
options?: { approveLabel?: string; rejectLabel?: string },
|
|
1153
|
+
) => Promise<unknown>;
|
|
1154
|
+
} | null = null;
|
|
1027
1155
|
|
|
1028
1156
|
/**
|
|
1029
1157
|
* Fire a Telegram notification event. Silently skips if Telegram is not configured.
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,YAAY,EAIb,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EACV,iBAAiB,EAElB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,YAAY,EAIb,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EACV,iBAAiB,EAElB,MAAM,YAAY,CAAC;AAcpB;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,iBAAiB,GACxB,IAAI,CAiTN;AAmED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAiBtD"}
|
|
@@ -10,6 +10,7 @@ import { PolicyLoader } from "./policy-loader.js";
|
|
|
10
10
|
import { getPolicyStore } from "./policy-store.js";
|
|
11
11
|
import { renderSystemContract, renderFullRules, } from "./policy-renderer.js";
|
|
12
12
|
import { classifyToolCall } from "./types.js";
|
|
13
|
+
import { randomUUID } from "node:crypto";
|
|
13
14
|
// ---------------------------------------------------------------------------
|
|
14
15
|
// Extension Registration
|
|
15
16
|
// ---------------------------------------------------------------------------
|
|
@@ -23,6 +24,7 @@ export function registerAgentPolicy(pi, config) {
|
|
|
23
24
|
});
|
|
24
25
|
const store = getPolicyStore();
|
|
25
26
|
const toolClassifier = config.toolClassifier ?? classifyToolCall;
|
|
27
|
+
const fallbackSessionId = `policy-${randomUUID()}`;
|
|
26
28
|
// Track if pi-lens is available
|
|
27
29
|
let piLensAvailable = false;
|
|
28
30
|
// Check for pi-lens availability on session start
|
|
@@ -39,7 +41,7 @@ export function registerAgentPolicy(pi, config) {
|
|
|
39
41
|
try {
|
|
40
42
|
const manifest = await loader.load(cwd);
|
|
41
43
|
// Record delivery in store
|
|
42
|
-
const sessionId = getSessionIdFromCtx(ctx);
|
|
44
|
+
const sessionId = getSessionIdFromCtx(ctx, fallbackSessionId);
|
|
43
45
|
const receipt = store.noteDelivered(sessionId, manifest, "system_prompt");
|
|
44
46
|
// Render and inject contract
|
|
45
47
|
const contract = renderSystemContract(manifest);
|
|
@@ -74,13 +76,13 @@ Use harness_rules to check policy status.
|
|
|
74
76
|
return {};
|
|
75
77
|
}
|
|
76
78
|
const cwd = getCwdFromContext(ctx);
|
|
77
|
-
const sessionId = getSessionIdFromCtx(ctx);
|
|
79
|
+
const sessionId = getSessionIdFromCtx(ctx, fallbackSessionId);
|
|
78
80
|
const targetPath = capability.affectedPaths?.[0];
|
|
79
81
|
try {
|
|
80
82
|
const manifest = await loader.loadForTarget(cwd, targetPath);
|
|
81
83
|
const receipt = store.getReceipt(sessionId, manifest.projectRoot);
|
|
82
84
|
// Check if current revision is covered
|
|
83
|
-
if (!receipt || receipt.revision !== manifest.revision) {
|
|
85
|
+
if (config.requireReceiptBeforeMutation && (!receipt || receipt.revision !== manifest.revision)) {
|
|
84
86
|
const blockReason = receipt
|
|
85
87
|
? `Policy revision changed (expected ${manifest.revision}, received ${receipt.revision})`
|
|
86
88
|
: `Policy revision ${manifest.revision} not yet delivered`;
|
|
@@ -151,8 +153,8 @@ Use harness_rules to check policy status.
|
|
|
151
153
|
required: ["action"],
|
|
152
154
|
},
|
|
153
155
|
async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
|
|
154
|
-
const cwd = ctx
|
|
155
|
-
const sessionId = getSessionIdFromCtx(ctx);
|
|
156
|
+
const cwd = getCwdFromContext(ctx);
|
|
157
|
+
const sessionId = getSessionIdFromCtx(ctx, fallbackSessionId);
|
|
156
158
|
try {
|
|
157
159
|
const input = params;
|
|
158
160
|
switch (input.action) {
|
|
@@ -253,7 +255,7 @@ Use harness_rules to check policy status.
|
|
|
253
255
|
// session_start: Initialize session tracking
|
|
254
256
|
// ---------------------------------------------------------------------------
|
|
255
257
|
pi.on("session_start", (_event, ctx) => {
|
|
256
|
-
const sessionId = getSessionIdFromCtx(ctx);
|
|
258
|
+
const sessionId = getSessionIdFromCtx(ctx, fallbackSessionId);
|
|
257
259
|
const cwd = getCwdFromContext(ctx);
|
|
258
260
|
console.log(`[agent-policy] Session started: ${sessionId} in ${cwd}`);
|
|
259
261
|
});
|
|
@@ -271,16 +273,21 @@ Use harness_rules to check policy status.
|
|
|
271
273
|
/**
|
|
272
274
|
* Extract session ID from context.
|
|
273
275
|
*/
|
|
274
|
-
function getSessionIdFromCtx(ctx) {
|
|
276
|
+
function getSessionIdFromCtx(ctx, fallbackSessionId) {
|
|
275
277
|
const ctxObj = ctx;
|
|
278
|
+
const manager = ctxObj?.sessionManager;
|
|
279
|
+
const managedId = manager?.getSessionId?.();
|
|
280
|
+
if (typeof managedId === "string" && managedId) {
|
|
281
|
+
return managedId;
|
|
282
|
+
}
|
|
276
283
|
if (typeof ctxObj?.sessionId === "string") {
|
|
277
284
|
return ctxObj.sessionId;
|
|
278
285
|
}
|
|
279
286
|
if (typeof ctxObj?.id === "string") {
|
|
280
287
|
return ctxObj.id;
|
|
281
288
|
}
|
|
282
|
-
//
|
|
283
|
-
return
|
|
289
|
+
// Legacy hosts without session identity must reuse the registration's ID.
|
|
290
|
+
return fallbackSessionId;
|
|
284
291
|
}
|
|
285
292
|
/**
|
|
286
293
|
* Extract working directory from context.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy-loader.d.ts","sourceRoot":"","sources":["../src/policy-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,YAAY,CAAC;AAgC/D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,gBAAgB,EAAE,GAAG,CAAC;IACtB,6CAA6C;IAC7C,oBAAoB,CAAC,EAAE,GAAG,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,oBAAoB,CAAQ;IACpC,OAAO,CAAC,KAAK,CAA0E;IACvF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IAErC,YAAY,MAAM,EAAE,kBAAkB,EAGrC;IAED;;OAEG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAWvD;IAED;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"policy-loader.d.ts","sourceRoot":"","sources":["../src/policy-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,YAAY,CAAC;AAgC/D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,gBAAgB,EAAE,GAAG,CAAC;IACtB,6CAA6C;IAC7C,oBAAoB,CAAC,EAAE,GAAG,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,oBAAoB,CAAQ;IACpC,OAAO,CAAC,KAAK,CAA0E;IACvF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IAErC,YAAY,MAAM,EAAE,kBAAkB,EAGrC;IAED;;OAEG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAWvD;IAED;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAMrF;IAED;;OAEG;IACH,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAM1C;IAED;;OAEG;YACW,aAAa;IAsC3B;;OAEG;YACW,gBAAgB;IAkD9B;;OAEG;YACW,gBAAgB;IA8C9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAmBrB;;OAEG;IACH,OAAO,CAAC,UAAU;IAoBlB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS7C;CACF;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAwBjD"}
|
|
@@ -61,22 +61,11 @@ export class PolicyLoader {
|
|
|
61
61
|
* Load policy for a specific target file (considers scoped rules).
|
|
62
62
|
*/
|
|
63
63
|
async loadForTarget(projectRoot, targetPath) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
//
|
|
68
|
-
|
|
69
|
-
const scope = this.inferScope(relativePath);
|
|
70
|
-
const manifest = await this.load(projectRoot);
|
|
71
|
-
// Filter sources to only those applicable to this scope
|
|
72
|
-
if (scope) {
|
|
73
|
-
manifest.sources = manifest.sources.filter(s => s.scope === "" || scope.startsWith(s.scope) || s.scope.startsWith(scope));
|
|
74
|
-
// Recompute revision if sources changed
|
|
75
|
-
if (manifest.sources.length > 0) {
|
|
76
|
-
manifest.revision = this.computeRevision(manifest.sources);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return manifest;
|
|
64
|
+
// The current loader collects only project-root and ancestor rules, all of
|
|
65
|
+
// which apply to every target. Use the same manifest as harness_rules.
|
|
66
|
+
// Filtering here mutated the cached manifest, dropped ancestor rules, and
|
|
67
|
+
// hashed advisory sources that load() deliberately excludes from revision.
|
|
68
|
+
return this.load(projectRoot);
|
|
80
69
|
}
|
|
81
70
|
/**
|
|
82
71
|
* Invalidate cache for a project root.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy-loader.js","sourceRoot":"","sources":["../src/policy-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG7D,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,eAAe,GAAG;IACtB,WAAW,EAAO,gCAAgC;IAClD,UAAU,EAAQ,WAAW;IAC7B,kBAAkB,EAAE,WAAW;IAC/B,WAAW,EAAO,WAAW;IAC7B,iBAAiB,EAAE,wCAAwC;CACnD,CAAC;AAEX;;GAEG;AACH,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B;;GAEG;AACH,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,CAAU,CAAC;AAgBnF;;GAEG;AACH,MAAM,OAAO,YAAY;IACf,gBAAgB,CAAM;IACtB,oBAAoB,CAAQ;IAC5B,KAAK,GAAgE,IAAI,GAAG,EAAE,CAAC;IACtE,YAAY,GAAG,IAAI,CAAC,CAAC,oCAAoC;IAE1E,YAAY,MAA0B;QACpC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAChD,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,IAAI,EAAE,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,WAAmB;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAExC,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/D,OAAO,MAAM,CAAC,QAAQ,CAAC;QACzB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,WAAmB,EAAE,UAAmB;QAC1D,
|
|
1
|
+
{"version":3,"file":"policy-loader.js","sourceRoot":"","sources":["../src/policy-loader.ts"],"names":[],"mappings":"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"}
|