pi-harness-runtime 1.1.191 → 1.1.192

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 (111) hide show
  1. package/index.ts +9 -3
  2. package/package.json +1 -1
  3. package/packages/a2a-adapter/package.json +1 -1
  4. package/packages/agent-policy/package.json +1 -1
  5. package/packages/architecture-generator/package.json +1 -1
  6. package/packages/auth/package.json +1 -1
  7. package/packages/autonomous-refactor/package.json +1 -1
  8. package/packages/autonomous-runtime/package.json +1 -1
  9. package/packages/cache-strategy/package.json +1 -1
  10. package/packages/capability-registry/package.json +1 -1
  11. package/packages/checkpoint/package.json +1 -1
  12. package/packages/cli-plugin-sdk/package.json +1 -1
  13. package/packages/clipboard/package.json +1 -1
  14. package/packages/clipboard-plugin/package.json +1 -1
  15. package/packages/code-generation/package.json +1 -1
  16. package/packages/code-review/package.json +1 -1
  17. package/packages/codex-adapter/package.json +1 -1
  18. package/packages/codex-watcher/package.json +1 -1
  19. package/packages/config-capture/package.json +1 -1
  20. package/packages/context-compiler/package.json +1 -1
  21. package/packages/context-discovery/package.json +1 -1
  22. package/packages/context-manager/package.json +1 -1
  23. package/packages/cookie-sanitizer/package.json +1 -1
  24. package/packages/cost-optimizer/package.json +1 -1
  25. package/packages/dependency-analyzer/package.json +1 -1
  26. package/packages/django-plugin/package.json +1 -1
  27. package/packages/doc-generator/package.json +1 -1
  28. package/packages/e2e-tester/package.json +1 -1
  29. package/packages/evaluation-engine/package.json +1 -1
  30. package/packages/evaluation-runner/package.json +1 -1
  31. package/packages/event-bus/package.json +1 -1
  32. package/packages/event-store/package.json +1 -1
  33. package/packages/experience-replay/package.json +1 -1
  34. package/packages/feedback-collector/package.json +1 -1
  35. package/packages/file-copy-helper/package.json +1 -1
  36. package/packages/framework-detector/package.json +1 -1
  37. package/packages/framework-plugin-sdk/package.json +1 -1
  38. package/packages/frappe-plugin/package.json +1 -1
  39. package/packages/generic-web-plugin/package.json +1 -1
  40. package/packages/health-monitor/package.json +1 -1
  41. package/packages/intent-analyzer/package.json +1 -1
  42. package/packages/jev-judge/package.json +1 -1
  43. package/packages/knowledge-graph/package.json +1 -1
  44. package/packages/knowledge-retrieval/package.json +1 -1
  45. package/packages/laravel-plugin/package.json +1 -1
  46. package/packages/learning-engine/package.json +1 -1
  47. package/packages/mcp-adapter/package.json +1 -1
  48. package/packages/memory-engine/package.json +1 -1
  49. package/packages/milestone-manager/package.json +1 -1
  50. package/packages/model-registry/package.json +1 -1
  51. package/packages/nextjs-plugin/package.json +1 -1
  52. package/packages/notification/dist/conversation-bridge.d.ts +93 -0
  53. package/packages/notification/dist/conversation-bridge.d.ts.map +1 -0
  54. package/packages/notification/dist/conversation-bridge.js +294 -0
  55. package/packages/notification/dist/conversation-bridge.js.map +1 -0
  56. package/packages/notification/dist/index.d.ts +1 -0
  57. package/packages/notification/dist/index.d.ts.map +1 -1
  58. package/packages/notification/dist/index.js +1 -0
  59. package/packages/notification/dist/index.js.map +1 -1
  60. package/packages/notification/package.json +1 -1
  61. package/packages/notification/src/conversation-bridge.ts +385 -0
  62. package/packages/notification/src/index.ts +4 -0
  63. package/packages/observability/package.json +1 -1
  64. package/packages/okf-indexer/package.json +1 -1
  65. package/packages/paperclip-integration/package.json +1 -1
  66. package/packages/performance-optimizer/package.json +1 -1
  67. package/packages/privilege-broker/package.json +1 -1
  68. package/packages/project-analyzer/package.json +1 -1
  69. package/packages/project-bootstrap/package.json +1 -1
  70. package/packages/projection-engine/package.json +1 -1
  71. package/packages/prompt-compiler/package.json +1 -1
  72. package/packages/prompt-versioning/package.json +1 -1
  73. package/packages/provider-adapter-sdk/package.json +1 -1
  74. package/packages/provider-router/package.json +1 -1
  75. package/packages/provider-selector/package.json +1 -1
  76. package/packages/providers/package.json +1 -1
  77. package/packages/qdrant-skills/package.json +1 -1
  78. package/packages/quota-manager/package.json +1 -1
  79. package/packages/rate-limiter/package.json +1 -1
  80. package/packages/react-vite-plugin/package.json +1 -1
  81. package/packages/release-manager/package.json +1 -1
  82. package/packages/requirement-compiler/package.json +1 -1
  83. package/packages/runtime/package.json +1 -1
  84. package/packages/scheduler/package.json +1 -1
  85. package/packages/scheduler-adapter/package.json +1 -1
  86. package/packages/session/package.json +1 -1
  87. package/packages/session-api/package.json +1 -1
  88. package/packages/session-export/package.json +1 -1
  89. package/packages/shared-context/package.json +1 -1
  90. package/packages/skill-mcp-client/package.json +1 -1
  91. package/packages/skill-registry/package.json +1 -1
  92. package/packages/skills/package.json +1 -1
  93. package/packages/sprint-planner/package.json +1 -1
  94. package/packages/subscription-engine/package.json +1 -1
  95. package/packages/task-compiler/package.json +1 -1
  96. package/packages/telegram/package.json +1 -1
  97. package/packages/tencentdb-memory/package.json +1 -1
  98. package/packages/tencentdb-sync/package.json +1 -1
  99. package/packages/test-data-generator/package.json +1 -1
  100. package/packages/test-generator/package.json +1 -1
  101. package/packages/todo-bd-sync/package.json +1 -1
  102. package/packages/token-estimation/package.json +1 -1
  103. package/packages/token-optimizer/package.json +1 -1
  104. package/packages/trajectory/package.json +1 -1
  105. package/packages/tui/package.json +1 -1
  106. package/packages/types/package.json +1 -1
  107. package/packages/webmcp-tester/package.json +1 -1
  108. package/packages/workflow-events/package.json +1 -1
  109. package/packages/workspace-scanner/package.json +1 -1
  110. package/packages/worktree/package.json +1 -1
  111. package/packages/write-review/package.json +1 -1
@@ -0,0 +1,294 @@
1
+ /**
2
+ * Telegram Conversation Bridge
3
+ *
4
+ * Sends assistant responses and tool activity to Telegram.
5
+ * Hooks into Pi lifecycle events to capture:
6
+ * - message_end: Final assistant responses
7
+ * - agent_end: When agent finishes a turn
8
+ * - agent_settled: When agent fully settles
9
+ *
10
+ * Features:
11
+ * - Deduplication across events
12
+ * - Safe formatting
13
+ * - Delivery status tracking
14
+ */
15
+ /**
16
+ * Conversation Bridge
17
+ *
18
+ * Bridges Pi conversation events to Telegram notifications.
19
+ */
20
+ export class ConversationBridge {
21
+ pi;
22
+ center;
23
+ config;
24
+ pendingMessages = new Map();
25
+ deliveredMessageIds = new Set();
26
+ sessionStartTime = Date.now();
27
+ lastMessageId = null;
28
+ constructor(pi, center, config = {}) {
29
+ this.pi = pi;
30
+ this.center = center;
31
+ this.config = {
32
+ sendAssistantResponses: true,
33
+ sendToolSummaries: true,
34
+ maxMessageLength: 4000,
35
+ minConfidence: 0.5,
36
+ ...config,
37
+ };
38
+ }
39
+ /**
40
+ * Register all lifecycle hooks
41
+ */
42
+ register() {
43
+ console.log("[ConversationBridge] Registering lifecycle hooks...");
44
+ // Session start - reset state
45
+ this.pi.on("session_start", () => {
46
+ this.reset();
47
+ console.log("[ConversationBridge] Session started");
48
+ });
49
+ // Session compact - flush pending messages
50
+ this.pi.on("session_compact", (event) => {
51
+ console.log(`[ConversationBridge] Compaction: ${event.reason} (willRetry=${event.willRetry})`);
52
+ this.flushPendingMessages();
53
+ });
54
+ // Session shutdown - cleanup
55
+ this.pi.on("session_shutdown", () => {
56
+ console.log("[ConversationBridge] Session shutting down");
57
+ this.flushPendingMessages();
58
+ this.stop();
59
+ });
60
+ // Message start - track new message
61
+ this.pi.on("message_start", (event) => {
62
+ const msg = event.message;
63
+ if (msg?.role === "assistant" && msg?.id) {
64
+ this.lastMessageId = msg.id;
65
+ }
66
+ });
67
+ // Message end - capture final assistant response
68
+ this.pi.on("message_end", (event) => {
69
+ const msg = event.message;
70
+ if (msg?.role !== "assistant")
71
+ return;
72
+ const content = this.extractMessageContent(msg);
73
+ if (!content || content.length < 10)
74
+ return; // Skip empty/too short
75
+ const messageId = msg.id ?? `msg-${Date.now()}`;
76
+ // Deduplicate
77
+ if (this.deliveredMessageIds.has(messageId)) {
78
+ console.log(`[ConversationBridge] Skipping duplicate: ${messageId}`);
79
+ return;
80
+ }
81
+ // Check if already pending
82
+ let pending = this.pendingMessages.get(messageId);
83
+ if (!pending) {
84
+ pending = {
85
+ messageId,
86
+ content,
87
+ timestamp: Date.now(),
88
+ events: new Set(),
89
+ };
90
+ this.pendingMessages.set(messageId, pending);
91
+ }
92
+ pending.events.add("message_end");
93
+ console.log(`[ConversationBridge] Assistant message captured: ${messageId.substring(0, 20)}...`);
94
+ });
95
+ // Tool execution end - capture tool summaries
96
+ if (this.config.sendToolSummaries) {
97
+ this.pi.on("tool_execution_end", (event) => {
98
+ const summary = this.formatToolSummary(event);
99
+ if (summary) {
100
+ this.sendToolSummary(summary);
101
+ }
102
+ });
103
+ }
104
+ // Agent settled - finalize and send pending messages
105
+ this.pi.on("agent_settled", () => {
106
+ console.log("[ConversationBridge] Agent settled, finalizing messages...");
107
+ this.finalizePendingMessages();
108
+ });
109
+ console.log("[ConversationBridge] Lifecycle hooks registered");
110
+ }
111
+ /**
112
+ * Extract text content from a message
113
+ */
114
+ extractMessageContent(msg) {
115
+ if (!msg.content)
116
+ return null;
117
+ // Array of content parts
118
+ if (Array.isArray(msg.content)) {
119
+ const texts = [];
120
+ for (const part of msg.content) {
121
+ if (part &&
122
+ typeof part === "object" &&
123
+ "type" in part &&
124
+ part.type === "text" &&
125
+ "text" in part) {
126
+ texts.push(String(part.text));
127
+ }
128
+ }
129
+ return texts.join("\n\n");
130
+ }
131
+ // Simple string
132
+ if (typeof msg.content === "string") {
133
+ return msg.content;
134
+ }
135
+ return null;
136
+ }
137
+ /**
138
+ * Format a tool execution summary
139
+ */
140
+ formatToolSummary(event) {
141
+ const status = event.isError ? "FAILED" : "DONE";
142
+ const resultPreview = this.truncate(JSON.stringify(event.result ?? ""), 100);
143
+ return `[Tool] ${event.toolName}: ${status}${resultPreview ? ` - ${resultPreview}` : ""}`;
144
+ }
145
+ /**
146
+ * Send a tool summary to Telegram
147
+ */
148
+ async sendToolSummary(summary) {
149
+ if (!this.center.hasHealthyChannels())
150
+ return;
151
+ const payload = {
152
+ event: "CodexSessionStarted", // Reusing existing event
153
+ jobId: `tool-${Date.now()}`,
154
+ timestamp: new Date().toISOString(),
155
+ title: "Tool Executed",
156
+ message: summary,
157
+ };
158
+ try {
159
+ const results = await this.center.notify("CodexSessionStarted", {
160
+ jobId: payload.jobId,
161
+ requirement: payload.message,
162
+ });
163
+ for (const result of results) {
164
+ if (result.success) {
165
+ console.log(`[ConversationBridge] Tool summary sent`);
166
+ }
167
+ else {
168
+ console.warn(`[ConversationBridge] Tool summary failed: ${result.error}`);
169
+ }
170
+ }
171
+ }
172
+ catch (err) {
173
+ console.error("[ConversationBridge] Failed to send tool summary:", err);
174
+ }
175
+ }
176
+ /**
177
+ * Finalize and send pending messages (called on agent_settled)
178
+ */
179
+ async finalizePendingMessages() {
180
+ for (const [messageId, pending] of this.pendingMessages) {
181
+ if (this.deliveredMessageIds.has(messageId))
182
+ continue;
183
+ // Send the message
184
+ await this.sendAssistantResponse(pending.content, messageId);
185
+ this.deliveredMessageIds.add(messageId);
186
+ this.pendingMessages.delete(messageId);
187
+ }
188
+ }
189
+ /**
190
+ * Flush pending messages without sending (on compaction)
191
+ */
192
+ flushPendingMessages() {
193
+ console.log(`[ConversationBridge] Flushing ${this.pendingMessages.size} pending messages`);
194
+ this.pendingMessages.clear();
195
+ }
196
+ /**
197
+ * Send an assistant response to Telegram
198
+ */
199
+ async sendAssistantResponse(content, messageId) {
200
+ if (!this.center.hasHealthyChannels()) {
201
+ console.log("[ConversationBridge] No healthy channels, skipping");
202
+ return;
203
+ }
204
+ // Chunk if too long
205
+ const chunks = this.chunkMessage(content);
206
+ for (let i = 0; i < chunks.length; i++) {
207
+ const chunk = chunks[i];
208
+ const chunkSuffix = chunks.length > 1 ? ` [${i + 1}/${chunks.length}]` : "";
209
+ const payload = {
210
+ event: "CodexSessionStarted", // Reusing event type
211
+ jobId: `msg-${messageId}`,
212
+ timestamp: new Date().toISOString(),
213
+ title: "Assistant Response",
214
+ message: chunk + chunkSuffix,
215
+ };
216
+ try {
217
+ const results = await this.center.notify("CodexSessionStarted", {
218
+ jobId: payload.jobId,
219
+ requirement: payload.message,
220
+ });
221
+ for (const result of results) {
222
+ if (result.success) {
223
+ console.log(`[ConversationBridge] Response chunk ${i + 1}/${chunks.length} sent`);
224
+ }
225
+ else {
226
+ console.warn(`[ConversationBridge] Response chunk failed: ${result.error}`);
227
+ }
228
+ }
229
+ }
230
+ catch (err) {
231
+ console.error("[ConversationBridge] Failed to send response:", err);
232
+ }
233
+ }
234
+ }
235
+ /**
236
+ * Chunk a message into smaller parts
237
+ */
238
+ chunkMessage(message) {
239
+ if (message.length <= this.config.maxMessageLength) {
240
+ return [message];
241
+ }
242
+ const chunks = [];
243
+ const sentences = message.match(/[^.!?]+[.!?]+/g) || [message];
244
+ let currentChunk = "";
245
+ for (const sentence of sentences) {
246
+ if ((currentChunk + sentence).length > this.config.maxMessageLength) {
247
+ if (currentChunk) {
248
+ chunks.push(currentChunk.trim());
249
+ }
250
+ currentChunk = sentence;
251
+ }
252
+ else {
253
+ currentChunk += sentence;
254
+ }
255
+ }
256
+ if (currentChunk) {
257
+ chunks.push(currentChunk.trim());
258
+ }
259
+ return chunks;
260
+ }
261
+ /**
262
+ * Truncate a string
263
+ */
264
+ truncate(str, maxLen) {
265
+ if (str.length <= maxLen)
266
+ return str;
267
+ return str.substring(0, maxLen - 3) + "...";
268
+ }
269
+ /**
270
+ * Reset state for new session
271
+ */
272
+ reset() {
273
+ this.pendingMessages.clear();
274
+ this.deliveredMessageIds.clear();
275
+ this.lastMessageId = null;
276
+ this.sessionStartTime = Date.now();
277
+ }
278
+ /**
279
+ * Stop the bridge (cleanup)
280
+ */
281
+ stop() {
282
+ console.log("[ConversationBridge] Stopped");
283
+ // Cleanup will happen on shutdown
284
+ }
285
+ }
286
+ /**
287
+ * Create and register a conversation bridge
288
+ */
289
+ export function createConversationBridge(pi, center, config) {
290
+ const bridge = new ConversationBridge(pi, center, config);
291
+ bridge.register();
292
+ return bridge;
293
+ }
294
+ //# sourceMappingURL=conversation-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-bridge.js","sourceRoot":"","sources":["../src/conversation-bridge.ts"],"names":[],"mappings":"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"}
@@ -12,4 +12,5 @@ export { LineAdapter } from "./adapters/line-adapter.js";
12
12
  export { TelegramAdapter } from "./adapters/telegram-adapter.js";
13
13
  export { maskString, maskValue, maskObject, maskPayload, isSensitiveField, } from "./mask-secrets.js";
14
14
  export { filterTelegramContent, getSafeNotificationLog, } from "./telegram-content-filter.js";
15
+ export { ConversationBridge, createConversationBridge, } from "./conversation-bridge.js";
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACN,UAAU,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,gBAAgB,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,qBAAqB,EACrB,sBAAsB,GACtB,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACN,UAAU,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,gBAAgB,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,qBAAqB,EACrB,sBAAsB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,kBAAkB,EAClB,wBAAwB,GACxB,MAAM,0BAA0B,CAAC"}
@@ -12,4 +12,5 @@ export { LineAdapter } from "./adapters/line-adapter.js";
12
12
  export { TelegramAdapter } from "./adapters/telegram-adapter.js";
13
13
  export { maskString, maskValue, maskObject, maskPayload, isSensitiveField, } from "./mask-secrets.js";
14
14
  export { filterTelegramContent, getSafeNotificationLog, } from "./telegram-content-filter.js";
15
+ export { ConversationBridge, createConversationBridge, } from "./conversation-bridge.js";
15
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACN,UAAU,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,gBAAgB,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,qBAAqB,EACrB,sBAAsB,GACtB,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACN,UAAU,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,gBAAgB,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,qBAAqB,EACrB,sBAAsB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,kBAAkB,EAClB,wBAAwB,GACxB,MAAM,0BAA0B,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/notification",
3
- "version": "1.1.191",
3
+ "version": "1.1.192",
4
4
  "description": "pi-harness-runtime — notification",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",