pi-harness-runtime 1.1.342 → 1.1.344
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/README.md +9 -0
- package/harness/notification-center.ts +363 -0
- package/index.ts +53 -15
- package/package.json +1 -1
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/agent-policy/package.json +1 -1
- package/packages/architecture-generator/package.json +1 -1
- package/packages/auth/package.json +1 -1
- package/packages/autonomous-refactor/package.json +1 -1
- package/packages/autonomous-runtime/package.json +1 -1
- package/packages/cache-strategy/package.json +1 -1
- package/packages/capability-registry/package.json +1 -1
- package/packages/checkpoint/package.json +1 -1
- package/packages/cli-plugin-sdk/package.json +1 -1
- package/packages/clipboard/package.json +1 -1
- package/packages/clipboard-plugin/package.json +1 -1
- package/packages/code-generation/package.json +1 -1
- package/packages/code-review/package.json +1 -1
- package/packages/codex-adapter/package.json +1 -1
- package/packages/codex-watcher/package.json +1 -1
- package/packages/config-capture/package.json +1 -1
- package/packages/connection-runtime/package.json +1 -1
- package/packages/context-compiler/package.json +1 -1
- package/packages/context-discovery/package.json +1 -1
- package/packages/context-manager/package.json +1 -1
- package/packages/contracts/package.json +1 -1
- package/packages/cookie-sanitizer/package.json +1 -1
- package/packages/cost-optimizer/package.json +1 -1
- package/packages/dependency-analyzer/package.json +1 -1
- package/packages/django-plugin/package.json +1 -1
- package/packages/doc-generator/package.json +1 -1
- package/packages/durable-review/package.json +1 -1
- package/packages/e2e-tester/package.json +1 -1
- package/packages/evaluation-engine/package.json +1 -1
- package/packages/evaluation-runner/package.json +1 -1
- package/packages/event-bus/package.json +1 -1
- package/packages/event-sink/package.json +1 -1
- package/packages/event-store/package.json +1 -1
- package/packages/experience-replay/package.json +1 -1
- package/packages/feedback-collector/package.json +1 -1
- package/packages/file-copy-helper/package.json +1 -1
- package/packages/framework-detector/package.json +1 -1
- package/packages/framework-plugin-sdk/package.json +1 -1
- package/packages/frappe-plugin/package.json +1 -1
- package/packages/generic-web-plugin/package.json +1 -1
- package/packages/health-monitor/package.json +1 -1
- package/packages/intent-analyzer/package.json +1 -1
- package/packages/jev-judge/package.json +1 -1
- package/packages/knowledge-graph/package.json +1 -1
- package/packages/knowledge-retrieval/package.json +1 -1
- package/packages/laravel-plugin/package.json +1 -1
- package/packages/learning-engine/package.json +1 -1
- package/packages/mcp-adapter/package.json +1 -1
- package/packages/memory-engine/package.json +1 -1
- package/packages/milestone-manager/package.json +1 -1
- package/packages/model-registry/package.json +1 -1
- package/packages/nextjs-plugin/package.json +1 -1
- package/packages/notification/dist/notification-center.d.ts +18 -1
- package/packages/notification/dist/notification-center.d.ts.map +1 -1
- package/packages/notification/dist/notification-center.js +49 -0
- package/packages/notification/dist/notification-center.js.map +1 -1
- package/packages/notification/dist/telegram-webhook-handler.d.ts +4 -0
- package/packages/notification/dist/telegram-webhook-handler.d.ts.map +1 -1
- package/packages/notification/dist/telegram-webhook-handler.js +4 -0
- package/packages/notification/dist/telegram-webhook-handler.js.map +1 -1
- package/packages/notification/package.json +1 -1
- package/packages/notification/src/notification-center.ts +69 -13
- package/packages/notification/src/telegram-webhook-handler.ts +4 -0
- 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/dist/telegram.js +8 -1
- package/packages/voice-api/package.json +1 -1
- package/packages/voice-api/src/telegram.ts +9 -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
|
@@ -43,6 +43,7 @@ export interface PendingApproval {
|
|
|
43
43
|
|
|
44
44
|
export class NotificationCenter {
|
|
45
45
|
private adapters: Map<string, ChannelAdapter> = new Map();
|
|
46
|
+
private channelEnabled: Map<string, boolean> = new Map();
|
|
46
47
|
private redactPatterns: RegExp[];
|
|
47
48
|
/** Pending approval requests keyed by jobId */
|
|
48
49
|
private pendingApprovals: Map<string, PendingApproval> = new Map();
|
|
@@ -146,25 +147,80 @@ export class NotificationCenter {
|
|
|
146
147
|
/**
|
|
147
148
|
* Initialize all registered adapters
|
|
148
149
|
*/
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
150
|
+
async initialize(): Promise<void> {
|
|
151
|
+
const adapterEntries = Array.from(this.adapters.entries());
|
|
152
|
+
for (const [id, adapter] of adapterEntries) {
|
|
153
|
+
// Initialize channel enabled state
|
|
154
|
+
this.channelEnabled.set(id, true);
|
|
155
|
+
try {
|
|
156
|
+
const ok = await adapter.initialize();
|
|
157
|
+
if (!ok) {
|
|
158
|
+
logWarn(
|
|
159
|
+
"[NotificationCenter]",
|
|
160
|
+
`Adapter ${id} initialization failed`,
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
} catch (error) {
|
|
155
164
|
logWarn(
|
|
156
165
|
"[NotificationCenter]",
|
|
157
|
-
`Adapter ${id} initialization
|
|
166
|
+
`Adapter ${id} initialization error: ${error}`,
|
|
158
167
|
);
|
|
159
168
|
}
|
|
160
|
-
} catch (error) {
|
|
161
|
-
logWarn(
|
|
162
|
-
"[NotificationCenter]",
|
|
163
|
-
`Adapter ${id} initialization error: ${error}`,
|
|
164
|
-
);
|
|
165
169
|
}
|
|
166
170
|
}
|
|
167
|
-
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Check if a channel is enabled
|
|
174
|
+
*/
|
|
175
|
+
isChannelEnabled(channelId: string): boolean {
|
|
176
|
+
return this.channelEnabled.get(channelId) ?? false;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Set channel enabled/disabled state
|
|
181
|
+
*/
|
|
182
|
+
setChannelEnabled(channelId: string, enabled: boolean): void {
|
|
183
|
+
this.channelEnabled.set(channelId, enabled);
|
|
184
|
+
logWarn("[NotificationCenter]", `Channel ${channelId} ${enabled ? "enabled" : "disabled"}`);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Toggle a channel's enabled state
|
|
189
|
+
*/
|
|
190
|
+
toggleChannel(channelId: string): boolean {
|
|
191
|
+
const current = this.isChannelEnabled(channelId);
|
|
192
|
+
this.setChannelEnabled(channelId, !current);
|
|
193
|
+
return !current;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Build channel toggle buttons for inline keyboard
|
|
198
|
+
*/
|
|
199
|
+
buildToggleButtons(): InlineKeyboardButton[] {
|
|
200
|
+
const buttons: InlineKeyboardButton[] = [];
|
|
201
|
+
|
|
202
|
+
// Add Telegram toggle if adapter exists
|
|
203
|
+
if (this.adapters.has("telegram")) {
|
|
204
|
+
const isEnabled = this.isChannelEnabled("telegram");
|
|
205
|
+
const icon = isEnabled ? "\u2705" : "\u2744";
|
|
206
|
+
buttons.push({
|
|
207
|
+
text: `${icon} Telegram: ${isEnabled ? "ON" : "OFF"}`,
|
|
208
|
+
callbackData: buildCallbackData("toggle_telegram", "settings"),
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// Add LINE toggle if adapter exists
|
|
213
|
+
if (this.adapters.has("line")) {
|
|
214
|
+
const isEnabled = this.isChannelEnabled("line");
|
|
215
|
+
const icon = isEnabled ? "\u2705" : "\u2744";
|
|
216
|
+
buttons.push({
|
|
217
|
+
text: `${icon} LINE: ${isEnabled ? "ON" : "OFF"}`,
|
|
218
|
+
callbackData: buildCallbackData("toggle_line", "settings"),
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
return buttons;
|
|
223
|
+
}
|
|
168
224
|
|
|
169
225
|
/**
|
|
170
226
|
* Set callback handler for Telegram adapters
|
|
@@ -19,6 +19,10 @@ export const CallbackActions = {
|
|
|
19
19
|
REJECT: "reject",
|
|
20
20
|
/** View details action */
|
|
21
21
|
VIEW: "view",
|
|
22
|
+
/** Toggle Telegram notifications */
|
|
23
|
+
TOGGLE_TELEGRAM: "toggle_telegram",
|
|
24
|
+
/** Toggle LINE notifications */
|
|
25
|
+
TOGGLE_LINE: "toggle_line",
|
|
22
26
|
/** Custom action prefix */
|
|
23
27
|
CUSTOM: "custom",
|
|
24
28
|
} as const;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-harness/provider-router",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.344",
|
|
4
4
|
"description": "Enhanced Provider Router for pi-harness-runtime — intelligent routing with capabilities, costs, and quotas",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/provider-router.js",
|
|
@@ -39,8 +39,15 @@ export class TelegramVoiceHandler {
|
|
|
39
39
|
}
|
|
40
40
|
// Construct download URL
|
|
41
41
|
const fileUrl = `${this.apiBase}/file/bot${this.botToken}/${filePath}`;
|
|
42
|
+
// Download audio file
|
|
43
|
+
const response = await fetch(fileUrl);
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
return { success: false, error: `Failed to download audio: ${response.status}` };
|
|
46
|
+
}
|
|
47
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
48
|
+
const audioBuffer = new Uint8Array(arrayBuffer);
|
|
42
49
|
// Transcribe
|
|
43
|
-
const result = await this.transcriber.transcribe(
|
|
50
|
+
const result = await this.transcriber.transcribe(audioBuffer);
|
|
44
51
|
if (result.error) {
|
|
45
52
|
this.onError?.(chatId, new Error(result.error));
|
|
46
53
|
return { success: false, error: result.error };
|
|
@@ -99,8 +99,16 @@ export class TelegramVoiceHandler {
|
|
|
99
99
|
// Construct download URL
|
|
100
100
|
const fileUrl = `${this.apiBase}/file/bot${this.botToken}/${filePath}`;
|
|
101
101
|
|
|
102
|
+
// Download audio file
|
|
103
|
+
const response = await fetch(fileUrl);
|
|
104
|
+
if (!response.ok) {
|
|
105
|
+
return { success: false, error: `Failed to download audio: ${response.status}` };
|
|
106
|
+
}
|
|
107
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
108
|
+
const audioBuffer = new Uint8Array(arrayBuffer);
|
|
109
|
+
|
|
102
110
|
// Transcribe
|
|
103
|
-
const result = await this.transcriber.transcribe(
|
|
111
|
+
const result = await this.transcriber.transcribe(audioBuffer);
|
|
104
112
|
|
|
105
113
|
if (result.error) {
|
|
106
114
|
this.onError?.(chatId, new Error(result.error));
|