pi-harness-runtime 1.1.225 → 1.1.227

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.
Files changed (115) hide show
  1. package/harness-startup-status.ts +27 -0
  2. package/index.ts +66 -97
  3. package/package.json +1 -1
  4. package/packages/a2a-adapter/package.json +1 -1
  5. package/packages/agent-policy/dist/extension.d.ts.map +1 -1
  6. package/packages/agent-policy/dist/extension.js +8 -7
  7. package/packages/agent-policy/dist/extension.js.map +1 -1
  8. package/packages/agent-policy/dist/file-logger.d.ts +9 -0
  9. package/packages/agent-policy/dist/file-logger.d.ts.map +1 -0
  10. package/packages/agent-policy/dist/file-logger.js +27 -0
  11. package/packages/agent-policy/dist/file-logger.js.map +1 -0
  12. package/packages/agent-policy/dist/policy-loader.d.ts.map +1 -1
  13. package/packages/agent-policy/dist/policy-loader.js +5 -4
  14. package/packages/agent-policy/dist/policy-loader.js.map +1 -1
  15. package/packages/agent-policy/package.json +1 -1
  16. package/packages/agent-policy/src/extension.ts +8 -7
  17. package/packages/agent-policy/src/file-logger.ts +31 -0
  18. package/packages/agent-policy/src/policy-loader.ts +5 -4
  19. package/packages/architecture-generator/package.json +1 -1
  20. package/packages/auth/package.json +1 -1
  21. package/packages/autonomous-refactor/package.json +1 -1
  22. package/packages/autonomous-runtime/package.json +1 -1
  23. package/packages/cache-strategy/package.json +1 -1
  24. package/packages/capability-registry/package.json +1 -1
  25. package/packages/checkpoint/package.json +1 -1
  26. package/packages/cli-plugin-sdk/package.json +1 -1
  27. package/packages/clipboard/package.json +1 -1
  28. package/packages/clipboard-plugin/package.json +1 -1
  29. package/packages/code-generation/package.json +1 -1
  30. package/packages/code-review/package.json +1 -1
  31. package/packages/codex-adapter/package.json +1 -1
  32. package/packages/codex-watcher/package.json +1 -1
  33. package/packages/config-capture/package.json +1 -1
  34. package/packages/context-compiler/package.json +1 -1
  35. package/packages/context-discovery/package.json +1 -1
  36. package/packages/context-manager/package.json +1 -1
  37. package/packages/cookie-sanitizer/package.json +1 -1
  38. package/packages/cost-optimizer/package.json +1 -1
  39. package/packages/dependency-analyzer/package.json +1 -1
  40. package/packages/django-plugin/package.json +1 -1
  41. package/packages/doc-generator/package.json +1 -1
  42. package/packages/e2e-tester/package.json +1 -1
  43. package/packages/evaluation-engine/package.json +1 -1
  44. package/packages/evaluation-runner/package.json +1 -1
  45. package/packages/event-bus/package.json +1 -1
  46. package/packages/event-store/package.json +1 -1
  47. package/packages/experience-replay/package.json +1 -1
  48. package/packages/feedback-collector/package.json +1 -1
  49. package/packages/file-copy-helper/package.json +1 -1
  50. package/packages/framework-detector/package.json +1 -1
  51. package/packages/framework-plugin-sdk/package.json +1 -1
  52. package/packages/frappe-plugin/package.json +1 -1
  53. package/packages/generic-web-plugin/package.json +1 -1
  54. package/packages/health-monitor/package.json +1 -1
  55. package/packages/intent-analyzer/package.json +1 -1
  56. package/packages/jev-judge/package.json +1 -1
  57. package/packages/knowledge-graph/package.json +1 -1
  58. package/packages/knowledge-retrieval/package.json +1 -1
  59. package/packages/laravel-plugin/package.json +1 -1
  60. package/packages/learning-engine/package.json +1 -1
  61. package/packages/mcp-adapter/package.json +1 -1
  62. package/packages/memory-engine/package.json +1 -1
  63. package/packages/milestone-manager/package.json +1 -1
  64. package/packages/model-registry/package.json +1 -1
  65. package/packages/nextjs-plugin/package.json +1 -1
  66. package/packages/notification/package.json +1 -1
  67. package/packages/observability/package.json +1 -1
  68. package/packages/okf-indexer/package.json +1 -1
  69. package/packages/paperclip-integration/package.json +1 -1
  70. package/packages/performance-optimizer/package.json +1 -1
  71. package/packages/privilege-broker/package.json +1 -1
  72. package/packages/project-analyzer/package.json +1 -1
  73. package/packages/project-bootstrap/package.json +1 -1
  74. package/packages/projection-engine/package.json +1 -1
  75. package/packages/prompt-compiler/package.json +1 -1
  76. package/packages/prompt-versioning/package.json +1 -1
  77. package/packages/provider-adapter-sdk/package.json +1 -1
  78. package/packages/provider-router/package.json +1 -1
  79. package/packages/provider-selector/package.json +1 -1
  80. package/packages/providers/package.json +1 -1
  81. package/packages/qdrant-skills/package.json +1 -1
  82. package/packages/quota-manager/package.json +1 -1
  83. package/packages/rate-limiter/package.json +1 -1
  84. package/packages/react-vite-plugin/package.json +1 -1
  85. package/packages/release-manager/package.json +1 -1
  86. package/packages/requirement-compiler/package.json +1 -1
  87. package/packages/runtime/package.json +1 -1
  88. package/packages/scheduler/package.json +1 -1
  89. package/packages/scheduler-adapter/package.json +1 -1
  90. package/packages/session/package.json +1 -1
  91. package/packages/session-api/package.json +1 -1
  92. package/packages/session-export/package.json +1 -1
  93. package/packages/shared-context/package.json +1 -1
  94. package/packages/skill-mcp-client/package.json +1 -1
  95. package/packages/skill-registry/package.json +1 -1
  96. package/packages/skills/package.json +1 -1
  97. package/packages/sprint-planner/package.json +1 -1
  98. package/packages/subscription-engine/package.json +1 -1
  99. package/packages/task-compiler/package.json +1 -1
  100. package/packages/telegram/package.json +1 -1
  101. package/packages/tencentdb-memory/package.json +1 -1
  102. package/packages/tencentdb-sync/package.json +1 -1
  103. package/packages/test-data-generator/package.json +1 -1
  104. package/packages/test-generator/package.json +1 -1
  105. package/packages/todo-bd-sync/package.json +1 -1
  106. package/packages/token-estimation/package.json +1 -1
  107. package/packages/token-optimizer/package.json +1 -1
  108. package/packages/trajectory/package.json +1 -1
  109. package/packages/tui/package.json +1 -1
  110. package/packages/types/package.json +1 -1
  111. package/packages/webmcp-tester/package.json +1 -1
  112. package/packages/workflow-events/package.json +1 -1
  113. package/packages/workspace-scanner/package.json +1 -1
  114. package/packages/worktree/package.json +1 -1
  115. package/packages/write-review/package.json +1 -1
@@ -0,0 +1,27 @@
1
+ export type HarnessStatus = "wait" | "ok" | "warn" | "err";
2
+
3
+ export interface HarnessMessage {
4
+ id: string;
5
+ label: string;
6
+ text: string;
7
+ status: HarnessStatus;
8
+ details?: string[];
9
+ }
10
+
11
+ /** One store for initialization before, during, and after the widget mounts. */
12
+ export class HarnessStartupStatus {
13
+ readonly messages: HarnessMessage[] = [];
14
+ onChange?: () => void;
15
+
16
+ update(label: string, text: string, status: HarnessStatus = "wait", details?: string[]): void {
17
+ const next = { id: label, label, text, status, details };
18
+ const existing = this.messages.findIndex((message) => message.id === label);
19
+ if (existing === -1) this.messages.push(next);
20
+ else this.messages[existing] = next;
21
+ this.onChange?.();
22
+ }
23
+ }
24
+
25
+ export function harnessStatusMarker(status: HarnessStatus): string {
26
+ return { wait: "[WAIT]", ok: "[OK]", warn: "[WARN]", err: "[ERR]" }[status];
27
+ }
package/index.ts CHANGED
@@ -19,6 +19,7 @@ import type {
19
19
  ExtensionCommandContext,
20
20
  ExtensionContext,
21
21
  } from "@earendil-works/pi-coding-agent";
22
+ import { HarnessStartupStatus, harnessStatusMarker } from "./harness-startup-status.ts";
22
23
  import { UsageTracker } from "./tracker.ts";
23
24
  import { MirrorStore, type MirrorRecord } from "./mirror.ts";
24
25
  import { MiniMaxQuotaScraper } from "./harness/e2e/minimax-quota-scraper.js";
@@ -122,30 +123,12 @@ async function getTaskContext(): Promise<{
122
123
  }
123
124
 
124
125
  // --- Harness Startup Widget Messages (used by init functions) -----------------
125
- interface HarnessMessage {
126
- id: string;
127
- label: string;
128
- text: string;
129
- status: "wait" | "ok" | "err";
130
- details?: string[]; // Multi-line fix instructions for errors
131
- }
132
- const harnessMessages: HarnessMessage[] = [];
133
- const preSessionErrors: HarnessMessage[] = []; // Errors from init functions (before session_start)
134
-
135
- function addHarnessMessage(label: string, text: string, status: "wait" | "ok" | "err" = "wait", details?: string[]) {
136
- const id = `${label}-${Date.now()}`;
137
- const msg: HarnessMessage = { id, label, text, status, details };
138
-
139
- // If session hasn't started yet, store in preSessionErrors
140
- // The session_start handler will merge these into harnessMessages
141
- if (harnessMessages.length === 0) {
142
- preSessionErrors.push(msg);
143
- } else {
144
- harnessMessages.push(msg);
145
- }
146
- }
126
+ const startupStatus = new HarnessStartupStatus();
127
+ const harnessMessages = startupStatus.messages;
128
+ const addHarnessMessage = startupStatus.update.bind(startupStatus);
147
129
 
148
130
  async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
131
+ addHarnessMessage("Jev", "initializing", "wait");
149
132
  try {
150
133
  // Check if Jev API key is available (env var or keys file)
151
134
  const homedir = process.env.HOME || process.env.USERPROFILE || "/home/frappe";
@@ -158,19 +141,21 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
158
141
  }
159
142
 
160
143
  const hasEnvKey =
161
- process.env.TYPESAFE_API_KEY || process.env.OPENROUTER_API_KEY;
144
+ process.env.TYPESAFE_API_KEY?.trim() || process.env.OPENROUTER_API_KEY?.trim();
162
145
  const hasFileKey =
163
146
  existsSync(`${keysDir}/jev-api-key.txt`) &&
164
- readFileSync(`${keysDir}/jev-api-key.txt`, "utf8").trim().length > 10;
147
+ readFileSync(`${keysDir}/jev-api-key.txt`, "utf8").trim().length > 0;
165
148
 
166
149
  if (!hasEnvKey && !hasFileKey) {
150
+ addHarnessMessage("Jev", "API key missing or empty; auto-continue unavailable", "warn", [
151
+ "Set TYPESAFE_API_KEY or ~/.pi-harness-runtime/keys/jev-api-key.txt, then reload Pi.",
152
+ ]);
167
153
  logToFile("[auto-continue]", "No Jev API key found. Set TYPESAFE_API_KEY run: echo \"{api_key}\" > ~/.pi-harness-runtime/keys/jev-api-key.txt");
168
154
  return;
169
155
  }
170
156
 
171
157
  // Resolve the actual API key: env takes priority, file is fallback
172
- const resolvedApiKey = process.env.TYPESAFE_API_KEY ||
173
- process.env.OPENROUTER_API_KEY ||
158
+ const resolvedApiKey = hasEnvKey ||
174
159
  readFileSync(`${keysDir}/jev-api-key.txt`, "utf8").trim();
175
160
 
176
161
  const mod = await import("./packages/jev-judge/src/auto-continue.js");
@@ -450,13 +435,17 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
450
435
  } catch {
451
436
  _inferenceInProgress = false;
452
437
  updateAutoContinueStatus("ERROR");
438
+ addHarnessMessage("Jev", "auto-continue evaluation failed", "err");
453
439
  }
454
440
  };
455
441
 
456
442
  // Start periodic check
457
443
  autoContinueTimer = setInterval(checkAndAutoContinue, AUTO_CONTINUE_INTERVAL_MS);
444
+ addHarnessMessage("Jev", "auto-continue configured (API not yet verified)", "ok");
458
445
  } catch {
459
- // auto-continue not available
446
+ addHarnessMessage("Jev", "auto-continue initialization failed", "err", [
447
+ "Check Jev package installation and key-file permissions, then reload Pi.",
448
+ ]);
460
449
  }
461
450
  }
462
451
 
@@ -485,6 +474,7 @@ async function initConfigCapture(pi: ExtensionAPI): Promise<void> {
485
474
  // --- qdrant-vector-search: Semantic skill search via Qdrant -------------------
486
475
  // Check config and report status — right after Jev for discoverability
487
476
  async function initQdrant(): Promise<void> {
477
+ addHarnessMessage("Qdrant", "checking configuration", "wait");
488
478
  try {
489
479
  const { getQdrantConfig } = await import("./packages/skills/src/loader.js");
490
480
  const cfg = getQdrantConfig();
@@ -494,23 +484,27 @@ async function initQdrant(): Promise<void> {
494
484
  const embeddingKey = getOpenAIApiKey();
495
485
  if (embeddingKey) {
496
486
  logStartup("[pi-harness] Qdrant vector search ready");
487
+ addHarnessMessage("Qdrant", "configured (connection not yet verified)", "ok");
497
488
  } else {
498
489
  logStartup("[pi-harness] Qdrant ready (no embedding key — skills won't be vector-indexed)");
490
+ addHarnessMessage("Qdrant", "embedding key missing; vector indexing unavailable", "warn");
499
491
  logStartup('[pi-harness] For vector search: echo "{openai-api-key}" > ~/.pi-harness-runtime/keys/openai-api-key.txt');
500
492
  }
501
493
  } else {
502
494
  logStartup("[pi-harness] Qdrant not configured. Set keys to enable vector skill search:");
495
+ addHarnessMessage("Qdrant", "not configured", "warn");
503
496
  logStartup(` echo "{cluster-url}" > ~/.pi-harness-runtime/keys/qdrant-cluster-url.txt`);
504
497
  logStartup(` echo "{api-key}" > ~/.pi-harness-runtime/keys/qdrant-api-key.txt`);
505
498
  }
506
499
  } catch {
507
- // qdrant-skills not available
500
+ addHarnessMessage("Qdrant", "initialization failed", "err");
508
501
  }
509
502
  }
510
503
 
511
504
  // --- telegram-notifications: Telegram bot for harness event notifications ------------
512
505
  // Sends Telegram messages when jobs complete, tasks finish, or human input is needed.
513
506
  async function initTelegram(pi: ExtensionAPI): Promise<void> {
507
+ addHarnessMessage("Telegram", "initializing", "wait");
514
508
  try {
515
509
  const {
516
510
  NotificationCenter,
@@ -530,10 +524,10 @@ async function initTelegram(pi: ExtensionAPI): Promise<void> {
530
524
  logStartup("[pi-harness] 3. echo \"{token}\" > ~/.pi-harness-runtime/keys/telegram-bot-token.txt");
531
525
  logStartup("[pi-harness] 4. echo \"{chat-id}\" > ~/.pi-harness-runtime/keys/telegram-chat-id.txt");
532
526
  logStartup("[pi-harness] 5. Reload pi — then DM @PiHarnessRuntimeBot to verify");
533
- addHarnessMessage("Telegram", "not configured", "err", [
527
+ addHarnessMessage("Telegram", "credentials missing; notifications unavailable", "warn", [
534
528
  "echo \"<TOKEN>\" > keys/telegram-bot-token.txt",
535
529
  "echo \"<CHAT_ID>\" > keys/telegram-chat-id.txt",
536
- "Then: pi restart",
530
+ "Then reload Pi.",
537
531
  ]);
538
532
  return;
539
533
  }
@@ -543,6 +537,9 @@ async function initTelegram(pi: ExtensionAPI): Promise<void> {
543
537
 
544
538
  if (!botToken || !chatId) {
545
539
  logStartup("[pi-harness] Telegram: bot token or chat ID is empty — skipping");
540
+ addHarnessMessage("Telegram", "bot token or chat ID is empty; notifications unavailable", "warn", [
541
+ "Fill telegram-bot-token.txt and telegram-chat-id.txt in ~/.pi-harness-runtime/keys/, then reload Pi.",
542
+ ]);
546
543
  return;
547
544
  }
548
545
 
@@ -559,8 +556,11 @@ async function initTelegram(pi: ExtensionAPI): Promise<void> {
559
556
  });
560
557
 
561
558
  await center.initialize();
562
- if (!center.hasChannels()) {
559
+ if (!center.hasHealthyChannels()) {
563
560
  logStartup("[pi-harness] Telegram: initialization failed — skipping");
561
+ addHarnessMessage("Telegram", "bot verification failed; notifications unavailable", "err", [
562
+ "Check the bot token and network access, then reload Pi.",
563
+ ]);
564
564
  return;
565
565
  }
566
566
 
@@ -609,13 +609,17 @@ async function initTelegram(pi: ExtensionAPI): Promise<void> {
609
609
 
610
610
  // Log the actual bot username (fetched from Telegram API via getMe)
611
611
  const botUsername = center.getTelegramBotUsername();
612
+ addHarnessMessage("Telegram", "bot verified (chat delivery not tested)", "ok");
612
613
  if (botUsername) {
613
614
  logStartup(`[pi-harness] Telegram (@${botUsername}) ready — DM the bot to receive alerts`);
614
615
  } else {
615
616
  logStartup(`[pi-harness] Telegram notifications ready`);
616
617
  }
617
618
  } catch (err) {
618
- logStartup("[pi-harness] Telegram: init failed:", err instanceof Error ? err.message : String(err));
619
+ logStartup("[pi-harness] Telegram: init failed (check installation, credentials, and network)");
620
+ addHarnessMessage("Telegram", "initialization failed; notifications unavailable", "err", [
621
+ "Check package installation, key-file permissions, and network access, then reload Pi.",
622
+ ]);
619
623
  }
620
624
  }
621
625
 
@@ -627,6 +631,8 @@ async function initTelegram(pi: ExtensionAPI): Promise<void> {
627
631
  // - Bounded context injection with provenance
628
632
 
629
633
  async function initHoncho(pi: ExtensionAPI): Promise<void> {
634
+ addHarnessMessage("Honcho", "initializing", "wait");
635
+ try {
630
636
  // Import new Honcho integration module
631
637
  const { initHoncho: honchoInit, registerHonchoLifecycle } = await import("./harness/honcho-init.js");
632
638
 
@@ -639,10 +645,10 @@ async function initHoncho(pi: ExtensionAPI): Promise<void> {
639
645
  logStartup("[pi-harness] Honcho not configured:");
640
646
  logStartup("[pi-harness] Get key: https://app.honcho.dev/api-keys");
641
647
  logStartup(`[pi-harness] Then: echo "{api-key}" > ~/.pi-harness-runtime/keys/honcho-api-key.txt`);
642
- addHarnessMessage("Honcho", "API key missing", "err", [
648
+ addHarnessMessage("Honcho", "API key missing", "warn", [
643
649
  "Get key: https://app.honcho.dev/api-keys",
644
650
  "echo \"<KEY>\" > keys/honcho-api-key.txt",
645
- "Then: pi restart",
651
+ "Then reload Pi.",
646
652
  ]);
647
653
  return;
648
654
  }
@@ -650,14 +656,13 @@ async function initHoncho(pi: ExtensionAPI): Promise<void> {
650
656
  const apiKey = readFileSync(keyPath, "utf8").trim();
651
657
  if (!apiKey) {
652
658
  logStartup("[pi-harness] Honcho: API key is empty — skipping");
653
- addHarnessMessage("Honcho", "API key empty", "err", [
659
+ addHarnessMessage("Honcho", "API key empty", "warn", [
654
660
  "echo \"<KEY>\" > keys/honcho-api-key.txt",
655
- "Then: pi restart",
661
+ "Then reload Pi.",
656
662
  ]);
657
663
  return;
658
664
  }
659
665
 
660
- try {
661
666
  // Register lifecycle hooks using the new integration
662
667
  // SAFETY: pi.on accepts these event names at runtime
663
668
  registerHonchoLifecycle(pi as unknown as { on: (event: string, handler: (...args: unknown[]) => void | Promise<void>) => void });
@@ -668,8 +673,10 @@ async function initHoncho(pi: ExtensionAPI): Promise<void> {
668
673
 
669
674
  if (result) {
670
675
  logStartup("[pi-harness] Honcho integration ready");
676
+ addHarnessMessage("Honcho", "initialized", "ok");
671
677
  } else {
672
678
  logStartup("[pi-harness] Honcho: initialization returned null");
679
+ addHarnessMessage("Honcho", "initialization returned no client", "err");
673
680
  }
674
681
  } catch (err) {
675
682
  logStartup("[pi-harness] Honcho: init failed:", err instanceof Error ? err.message : String(err));
@@ -1100,6 +1107,7 @@ async function initLoopCompletions(pi: ExtensionAPI): Promise<void> {
1100
1107
  * - Scan skills from ~/.pi-harness-runtime/skills/
1101
1108
  */
1102
1109
  async function initHermesSkills(pi: ExtensionAPI): Promise<void> {
1110
+ addHarnessMessage("Skills", "initializing", "wait");
1103
1111
  try {
1104
1112
  // Dynamically import to avoid circular deps
1105
1113
  const { initSkills } =
@@ -1108,6 +1116,7 @@ async function initHermesSkills(pi: ExtensionAPI): Promise<void> {
1108
1116
  // Scan skills from default locations
1109
1117
  const result = initSkills();
1110
1118
  logStartup(`[pi-harness] Scanned ${result.skills.length} skills`);
1119
+ addHarnessMessage("Skills", `${result.skills.length} discovered`, "ok");
1111
1120
 
1112
1121
  // Register /skill commands
1113
1122
  try {
@@ -1147,6 +1156,7 @@ async function initHermesSkills(pi: ExtensionAPI): Promise<void> {
1147
1156
 
1148
1157
  } catch (err) {
1149
1158
  logStartup(`[pi-harness] Failed to initialize skills:`, err instanceof Error ? err.message : String(err));
1159
+ addHarnessMessage("Skills", "initialization failed", "err");
1150
1160
  }
1151
1161
  }
1152
1162
 
@@ -1604,7 +1614,7 @@ export default function (pi: ExtensionAPI) {
1604
1614
  void initSshDetachInterceptor(pi);
1605
1615
 
1606
1616
  // --- jev-auto-continue: Agent autonomous decision when user unavailable -----
1607
- void initAutoContinue(pi);
1617
+ asyncInitPromises.push(initAutoContinue(pi));
1608
1618
 
1609
1619
  // Register todo-driven continuation controller
1610
1620
  createTodoContinuation(pi);
@@ -3080,24 +3090,12 @@ Run \`bd ready\` to see current bd issues.
3080
3090
  // - Tree characters like Todos (├─ └─)
3081
3091
  // - Trailing spacer line for breathing room
3082
3092
  const HARNESS_WIDGET_KEY = "pi-harness-startup";
3083
- interface HarnessMessage {
3084
- id: string;
3085
- label: string;
3086
- text: string;
3087
- status: "wait" | "ok" | "err";
3088
- details?: string[]; // Multi-line fix instructions for errors
3089
- }
3090
- const harnessMessages: HarnessMessage[] = [];
3091
3093
  let startupVisible = true;
3092
3094
  let harnessTUI: { requestRender: (forced?: boolean) => void } | null = null;
3093
3095
  let harnessWidgetRegistered = false;
3094
3096
  let sessionGeneration = 0;
3095
3097
 
3096
- function addHarnessMessage(label: string, text: string, status: "wait" | "ok" | "err" = "wait", details?: string[]) {
3097
- const id = `${label}-${Date.now()}`;
3098
- harnessMessages.push({ id, label, text, status, details });
3099
- harnessTUI?.requestRender();
3100
- }
3098
+ startupStatus.onChange = () => harnessTUI?.requestRender();
3101
3099
 
3102
3100
  function hideHarnessBlock() {
3103
3101
  startupVisible = false;
@@ -3131,7 +3129,7 @@ Run \`bd ready\` to see current bd issues.
3131
3129
 
3132
3130
  for (let i = 0; i < harnessMessages.length; i++) {
3133
3131
  const msg = harnessMessages[i];
3134
- const marker = msg.status === "ok" ? "[OK]" : msg.status === "err" ? "[ERR]" : "[WAIT]";
3132
+ const marker = harnessStatusMarker(msg.status);
3135
3133
  const isLast = i === harnessMessages.length - 1;
3136
3134
  const treeChar = isLast ? "└─" : "├─";
3137
3135
  let text = `${treeChar} ${marker} ${msg.label}: ${msg.text}`;
@@ -3139,7 +3137,7 @@ Run \`bd ready\` to see current bd issues.
3139
3137
  lines.push(text);
3140
3138
 
3141
3139
  // Add fix instructions for errors (indented)
3142
- if (msg.status === "err" && msg.details && msg.details.length > 0) {
3140
+ if ((msg.status === "err" || msg.status === "warn") && msg.details && msg.details.length > 0) {
3143
3141
  for (const detail of msg.details) {
3144
3142
  const detailLine = `${isLast ? " " : "│ "} Fix: ${detail}`;
3145
3143
  lines.push(truncateToWidth(detailLine, width));
@@ -3170,7 +3168,7 @@ Run \`bd ready\` to see current bd issues.
3170
3168
  sessionGeneration++;
3171
3169
  const mySession = sessionGeneration;
3172
3170
  startupVisible = true;
3173
- harnessMessages.length = 0;
3171
+ // Service states survive session changes; initialization runs once per extension load.
3174
3172
  harnessWidgetRegistered = false; // Reset for new session
3175
3173
 
3176
3174
  // --- Install harness widget (like Todos with placement: "aboveEditor") -------
@@ -3189,13 +3187,7 @@ Run \`bd ready\` to see current bd issues.
3189
3187
  );
3190
3188
  harnessWidgetRegistered = true;
3191
3189
 
3192
- // Merge pre-session errors into harnessMessages
3193
- for (const err of preSessionErrors) {
3194
- harnessMessages.push(err);
3195
- }
3196
- preSessionErrors.length = 0; // Clear pre-session errors
3197
-
3198
- harnessTUI?.requestRender(); // Show widget with error messages
3190
+ harnessTUI?.requestRender();
3199
3191
  } else {
3200
3192
  harnessTUI?.requestRender();
3201
3193
  }
@@ -3203,42 +3195,19 @@ Run \`bd ready\` to see current bd issues.
3203
3195
  // Add initial harness message
3204
3196
  addHarnessMessage("Harness Runtime", `v${HARNESS_VERSION} initializing`, "wait");
3205
3197
 
3206
- // Wait for async inits to complete, then update status
3207
- const startupTimeout = new Promise<void>((resolve) => {
3208
- setTimeout(resolve, 5000);
3209
- });
3210
- Promise.race([
3211
- Promise.allSettled(asyncInitPromises),
3212
- startupTimeout,
3213
- ]).then(() => {
3214
- // Fence: ignore if session changed or already hidden
3215
- if (mySession !== sessionGeneration || !startupVisible) return;
3216
-
3217
- // Update Runtime status
3218
- const runtimeMsg = harnessMessages.find((m) => m.label === "Harness Runtime");
3219
- if (runtimeMsg) {
3220
- runtimeMsg.status = "ok";
3221
- runtimeMsg.text = `v${HARNESS_VERSION} initialized`;
3222
- }
3223
-
3224
- // Add service messages from startup
3225
- for (const msg of startupMessages) {
3226
- if (msg.includes("Qdrant") && msg.includes("ready")) {
3227
- addHarnessMessage("Qdrant", "connected", "ok");
3228
- }
3229
- if (msg.includes("Telegram") && msg.includes("ready")) {
3230
- addHarnessMessage("Telegram", "verified", "ok");
3231
- }
3232
- if (msg.includes("Honcho")) {
3233
- addHarnessMessage("Honcho", "registered", "ok");
3234
- }
3235
- if (msg.includes("Scanned") && msg.includes("skills")) {
3236
- const match = msg.match(/Scanned (\d+)/);
3237
- if (match) {
3238
- addHarnessMessage("Skills", `${match[1]} discovered`, "ok");
3239
- }
3240
- }
3241
- }
3198
+ // A timeout is not success. Keep accepting late service updates.
3199
+ const startupTimeout = setTimeout(() => {
3200
+ if (mySession !== sessionGeneration) return;
3201
+ addHarnessMessage("Harness Runtime", `v${HARNESS_VERSION} waiting for service initialization`, "warn");
3202
+ }, 5000);
3203
+ Promise.allSettled(asyncInitPromises).then((results) => {
3204
+ clearTimeout(startupTimeout);
3205
+ if (mySession !== sessionGeneration) return;
3206
+ const degraded = results.some((result) => result.status === "rejected") ||
3207
+ harnessMessages.some((msg) => msg.label !== "Harness Runtime" && msg.status !== "ok");
3208
+ addHarnessMessage("Harness Runtime",
3209
+ `v${HARNESS_VERSION} ${degraded ? "initialized with unavailable services" : "initialized"}`,
3210
+ degraded ? "warn" : "ok");
3242
3211
  });
3243
3212
  });
3244
3213
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-harness-runtime",
3
- "version": "1.1.225",
3
+ "version": "1.1.227",
4
4
  "description": "[BETA] Codex-style /usage status + autonomous coding harness for pi. Not production ready — expect breaking changes.",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/a2a-adapter",
3
- "version": "1.1.225",
3
+ "version": "1.1.227",
4
4
  "type": "module",
5
5
  "description": "Google Agent-to-Agent (A2A) protocol adapter for pi-harness",
6
6
  "main": "dist/index.js",
@@ -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;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"}
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;AAepB;;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"}
@@ -7,6 +7,7 @@
7
7
  * - harness_rules tool: retrieve and acknowledge rules
8
8
  */
9
9
  import { PolicyLoader } from "./policy-loader.js";
10
+ import { logError, logInfo } from "./file-logger.js";
10
11
  import { getPolicyStore } from "./policy-store.js";
11
12
  import { renderSystemContract, renderFullRules, } from "./policy-renderer.js";
12
13
  import { classifyToolCall } from "./types.js";
@@ -48,12 +49,12 @@ export function registerAgentPolicy(pi, config) {
48
49
  // Build augmented system prompt
49
50
  const augmentedPrompt = event.systemPrompt + "\n\n" + contract;
50
51
  // Log for debugging
51
- console.log(`[agent-policy] Delivered policy ${manifest.revision} to session ${receipt.sessionId}`);
52
+ logInfo("[agent-policy]", `Delivered policy ${manifest.revision} to session ${receipt.sessionId}`);
52
53
  return { systemPrompt: augmentedPrompt };
53
54
  }
54
55
  catch (err) {
55
56
  const errorMessage = err instanceof Error ? err.message : String(err);
56
- console.error(`[agent-policy] Failed to load policy: ${errorMessage}`);
57
+ logError("[agent-policy]", `Failed to load policy: ${errorMessage}`);
57
58
  // Return minimal contract on failure - don't block startup
58
59
  const fallbackContract = `
59
60
  PI-HARNESS POLICY coverage=degraded
@@ -86,7 +87,7 @@ Use harness_rules to check policy status.
86
87
  const blockReason = receipt
87
88
  ? `Policy revision changed (expected ${manifest.revision}, received ${receipt.revision})`
88
89
  : `Policy revision ${manifest.revision} not yet delivered`;
89
- console.log(`[agent-policy] Blocked ${toolName}: ${blockReason}`);
90
+ logInfo("[agent-policy]", `Blocked ${toolName}: ${blockReason}`);
90
91
  const reason = `[POLICY REQUIRED] ${blockReason}\n\n` +
91
92
  `To proceed, you must acknowledge the harness rules:\n` +
92
93
  `1. Run: harness_rules({ action: "manifest" })\n` +
@@ -110,7 +111,7 @@ Use harness_rules to check policy status.
110
111
  }
111
112
  catch (err) {
112
113
  const errorMessage = err instanceof Error ? err.message : String(err);
113
- console.error(`[agent-policy] Policy check failed: ${errorMessage}`);
114
+ logError("[agent-policy]", `Policy check failed: ${errorMessage}`);
114
115
  // On error, fail open for the command but log the issue
115
116
  // This matches pi-lens's total handler guard behavior
116
117
  return {};
@@ -239,7 +240,7 @@ Use harness_rules to check policy status.
239
240
  }
240
241
  catch (err) {
241
242
  const errorMessage = err instanceof Error ? err.message : String(err);
242
- console.error(`[agent-policy] harness_rules failed: ${errorMessage}`);
243
+ logError("[agent-policy]", `harness_rules failed: ${errorMessage}`);
243
244
  return {
244
245
  content: [{
245
246
  type: "text",
@@ -257,7 +258,7 @@ Use harness_rules to check policy status.
257
258
  pi.on("session_start", (_event, ctx) => {
258
259
  const sessionId = getSessionIdFromCtx(ctx, fallbackSessionId);
259
260
  const cwd = getCwdFromContext(ctx);
260
- console.log(`[agent-policy] Session started: ${sessionId} in ${cwd}`);
261
+ logInfo("[agent-policy]", `Session started: ${sessionId} in ${cwd}`);
261
262
  });
262
263
  // ---------------------------------------------------------------------------
263
264
  // agent_end: Cleanup
@@ -265,7 +266,7 @@ Use harness_rules to check policy status.
265
266
  pi.on("agent_end", () => {
266
267
  // Cleanup is silent - verbose logging is noisy in TUI
267
268
  });
268
- console.log("[agent-policy] Registered agent policy runtime");
269
+ logInfo("[agent-policy]", "Registered agent policy runtime");
269
270
  }
270
271
  // ---------------------------------------------------------------------------
271
272
  // Helpers
@@ -1 +1 @@
1
- {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * File logger for agent-policy package
3
+ * Routes console output to file to avoid TUI interference
4
+ */
5
+ export declare function logToFile(prefix: string, ...parts: unknown[]): void;
6
+ export declare function logError(prefix: string, msg: string): void;
7
+ export declare function logInfo(prefix: string, ...parts: unknown[]): void;
8
+ export declare function logWarn(prefix: string, msg: string): void;
9
+ //# sourceMappingURL=file-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-logger.d.ts","sourceRoot":"","sources":["../src/file-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CASnE;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAE1D;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAEjE;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzD"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * File logger for agent-policy package
3
+ * Routes console output to file to avoid TUI interference
4
+ */
5
+ import { appendFileSync } from "node:fs";
6
+ const LOG_FILE = "/tmp/pi-harness-agent-policy.log";
7
+ export function logToFile(prefix, ...parts) {
8
+ try {
9
+ const msg = parts
10
+ .map((p) => (typeof p === "string" ? p : JSON.stringify(p)))
11
+ .join(" ");
12
+ appendFileSync(LOG_FILE, `[${new Date().toISOString()}] ${prefix} ${msg}\n`);
13
+ }
14
+ catch {
15
+ // Silently fail if logging fails
16
+ }
17
+ }
18
+ export function logError(prefix, msg) {
19
+ logToFile(prefix, msg);
20
+ }
21
+ export function logInfo(prefix, ...parts) {
22
+ logToFile(prefix, ...parts);
23
+ }
24
+ export function logWarn(prefix, msg) {
25
+ logToFile(prefix, msg);
26
+ }
27
+ //# sourceMappingURL=file-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-logger.js","sourceRoot":"","sources":["../src/file-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AAEpD,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,GAAG,KAAgB;IAC5D,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,KAAK;aACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,cAAc,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACR,iCAAiC;IAClC,CAAC;AACF,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAc,EAAE,GAAW;IACnD,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,GAAG,KAAgB;IAC1D,SAAS,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,GAAW;IAClD,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACxB,CAAC"}
@@ -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,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"}
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;AAiC/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"}
@@ -10,6 +10,7 @@
10
10
  import { createHash } from "node:crypto";
11
11
  import { existsSync, readFileSync } from "node:fs";
12
12
  import { dirname, join, relative, resolve } from "node:path";
13
+ import { logError, logInfo, logWarn } from "./file-logger.js";
13
14
  // ---------------------------------------------------------------------------
14
15
  // Constants
15
16
  // ---------------------------------------------------------------------------
@@ -157,7 +158,7 @@ export class PolicyLoader {
157
158
  });
158
159
  }
159
160
  catch (err) {
160
- console.error(`Failed to load additional rules from ${rulesPath}: ${err}`);
161
+ logError("[agent-policy]", `Failed to load additional rules from ${rulesPath}: ${err}`);
161
162
  }
162
163
  }
163
164
  }
@@ -191,7 +192,7 @@ export class PolicyLoader {
191
192
  });
192
193
  }
193
194
  catch (err) {
194
- console.error(`Failed to load project rule ${filePath}: ${err}`);
195
+ logError("[agent-policy]", `Failed to load project rule ${filePath}: ${err}`);
195
196
  }
196
197
  }
197
198
  }
@@ -323,10 +324,10 @@ export function createPolicyLoader() {
323
324
  // Log which file we're using (for debugging)
324
325
  const usingFile = harnessRulesPath.toString().includes("AGENTS") ? "AGENTS.md" : "RULES.md";
325
326
  if (existsSync(harnessRulesPath)) {
326
- console.log(`[agent-policy] Using harness rules: ${usingFile}`);
327
+ logInfo("[agent-policy]", `Using harness rules: ${usingFile}`);
327
328
  }
328
329
  else {
329
- console.warn(`[agent-policy] WARNING: Neither AGENTS.md nor RULES.md found in package root`);
330
+ logWarn("[agent-policy]", `WARNING: Neither AGENTS.md nor RULES.md found in package root`);
330
331
  }
331
332
  return new PolicyLoader({
332
333
  harnessRulesPath,