pi-harness-runtime 1.1.147 → 1.1.148

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 (142) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/package.json +3 -2
  3. package/packages/a2a-adapter/package.json +1 -1
  4. package/packages/architecture-generator/package.json +1 -1
  5. package/packages/auth/package.json +1 -1
  6. package/packages/autonomous-refactor/package.json +1 -1
  7. package/packages/autonomous-runtime/package.json +1 -1
  8. package/packages/cache-strategy/package.json +1 -1
  9. package/packages/capability-registry/package.json +1 -1
  10. package/packages/checkpoint/package.json +1 -1
  11. package/packages/cli-plugin-sdk/package.json +1 -1
  12. package/packages/clipboard/package.json +1 -1
  13. package/packages/clipboard-plugin/package.json +1 -1
  14. package/packages/code-generation/package.json +1 -1
  15. package/packages/code-review/package.json +1 -1
  16. package/packages/codex-adapter/package.json +1 -1
  17. package/packages/codex-watcher/package.json +1 -1
  18. package/packages/config-capture/package.json +1 -1
  19. package/packages/context-compiler/package.json +1 -1
  20. package/packages/context-discovery/package.json +1 -1
  21. package/packages/context-manager/package.json +1 -1
  22. package/packages/cookie-sanitizer/package.json +1 -1
  23. package/packages/cost-optimizer/package.json +1 -1
  24. package/packages/dependency-analyzer/package.json +1 -1
  25. package/packages/django-plugin/package.json +1 -1
  26. package/packages/doc-generator/package.json +1 -1
  27. package/packages/evaluation-engine/package.json +1 -1
  28. package/packages/evaluation-runner/package.json +1 -1
  29. package/packages/event-bus/package.json +1 -1
  30. package/packages/event-store/package.json +1 -1
  31. package/packages/experience-replay/package.json +1 -1
  32. package/packages/feedback-collector/package.json +1 -1
  33. package/packages/file-copy-helper/dist/src/extension.js +186 -0
  34. package/packages/file-copy-helper/package.json +1 -1
  35. package/packages/framework-detector/package.json +1 -1
  36. package/packages/framework-plugin-sdk/package.json +1 -1
  37. package/packages/frappe-plugin/package.json +1 -1
  38. package/packages/generic-web-plugin/package.json +1 -1
  39. package/packages/health-monitor/package.json +1 -1
  40. package/packages/intent-analyzer/package.json +1 -1
  41. package/packages/jev-judge/package.json +1 -1
  42. package/packages/knowledge-graph/package.json +1 -1
  43. package/packages/knowledge-retrieval/package.json +1 -1
  44. package/packages/laravel-plugin/package.json +1 -1
  45. package/packages/learning-engine/package.json +1 -1
  46. package/packages/mcp-adapter/package.json +1 -1
  47. package/packages/memory-engine/package.json +1 -1
  48. package/packages/milestone-manager/package.json +1 -1
  49. package/packages/model-registry/package.json +1 -1
  50. package/packages/nextjs-plugin/package.json +1 -1
  51. package/packages/notification/dist/adapters/email-adapter.d.ts +17 -0
  52. package/packages/notification/dist/adapters/email-adapter.d.ts.map +1 -0
  53. package/packages/notification/dist/adapters/email-adapter.js +89 -0
  54. package/packages/notification/dist/adapters/email-adapter.js.map +1 -0
  55. package/packages/notification/dist/adapters/line-adapter.d.ts +17 -0
  56. package/packages/notification/dist/adapters/line-adapter.d.ts.map +1 -0
  57. package/packages/notification/dist/adapters/line-adapter.js +99 -0
  58. package/packages/notification/dist/adapters/line-adapter.js.map +1 -0
  59. package/packages/notification/dist/adapters/ntfy-adapter.d.ts +17 -0
  60. package/packages/notification/dist/adapters/ntfy-adapter.d.ts.map +1 -0
  61. package/packages/notification/dist/adapters/ntfy-adapter.js +84 -0
  62. package/packages/notification/dist/adapters/ntfy-adapter.js.map +1 -0
  63. package/packages/notification/dist/adapters/telegram-adapter.d.ts +56 -0
  64. package/packages/notification/dist/adapters/telegram-adapter.d.ts.map +1 -0
  65. package/packages/notification/dist/adapters/telegram-adapter.js +251 -0
  66. package/packages/notification/dist/adapters/telegram-adapter.js.map +1 -0
  67. package/packages/notification/dist/adapters/webhook-adapter.d.ts +15 -0
  68. package/packages/notification/dist/adapters/webhook-adapter.d.ts.map +1 -0
  69. package/packages/notification/dist/adapters/webhook-adapter.js +64 -0
  70. package/packages/notification/dist/adapters/webhook-adapter.js.map +1 -0
  71. package/packages/notification/dist/base-adapter.d.ts +36 -0
  72. package/packages/notification/dist/base-adapter.d.ts.map +1 -0
  73. package/packages/notification/dist/base-adapter.js +39 -0
  74. package/packages/notification/dist/base-adapter.js.map +1 -0
  75. package/packages/notification/dist/index.d.ts +12 -0
  76. package/packages/notification/dist/index.d.ts.map +1 -0
  77. package/packages/notification/dist/index.js +12 -0
  78. package/packages/notification/dist/index.js.map +1 -0
  79. package/packages/notification/dist/notification-center.d.ts +89 -0
  80. package/packages/notification/dist/notification-center.d.ts.map +1 -0
  81. package/packages/notification/dist/notification-center.js +356 -0
  82. package/packages/notification/dist/notification-center.js.map +1 -0
  83. package/packages/notification/dist/notification-policy.d.ts +66 -0
  84. package/packages/notification/dist/notification-policy.d.ts.map +1 -0
  85. package/packages/notification/dist/notification-policy.js +153 -0
  86. package/packages/notification/dist/notification-policy.js.map +1 -0
  87. package/packages/notification/dist/telegram-webhook-handler.d.ts +86 -0
  88. package/packages/notification/dist/telegram-webhook-handler.d.ts.map +1 -0
  89. package/packages/notification/dist/telegram-webhook-handler.js +149 -0
  90. package/packages/notification/dist/telegram-webhook-handler.js.map +1 -0
  91. package/packages/notification/dist/types.d.ts +106 -0
  92. package/packages/notification/dist/types.d.ts.map +1 -0
  93. package/packages/notification/dist/types.js +7 -0
  94. package/packages/notification/dist/types.js.map +1 -0
  95. package/packages/notification/package.json +1 -1
  96. package/packages/observability/package.json +1 -1
  97. package/packages/okf-indexer/package.json +1 -1
  98. package/packages/paperclip-integration/package.json +1 -1
  99. package/packages/performance-optimizer/package.json +1 -1
  100. package/packages/privilege-broker/package.json +1 -1
  101. package/packages/project-analyzer/package.json +1 -1
  102. package/packages/project-bootstrap/package.json +1 -1
  103. package/packages/projection-engine/package.json +1 -1
  104. package/packages/prompt-compiler/package.json +1 -1
  105. package/packages/prompt-versioning/package.json +1 -1
  106. package/packages/provider-adapter-sdk/package.json +1 -1
  107. package/packages/provider-router/package.json +1 -1
  108. package/packages/provider-selector/package.json +1 -1
  109. package/packages/providers/package.json +1 -1
  110. package/packages/qdrant-skills/package.json +1 -1
  111. package/packages/quota-manager/package.json +1 -1
  112. package/packages/rate-limiter/package.json +1 -1
  113. package/packages/react-vite-plugin/package.json +1 -1
  114. package/packages/release-manager/package.json +1 -1
  115. package/packages/requirement-compiler/package.json +1 -1
  116. package/packages/runtime/package.json +1 -1
  117. package/packages/scheduler/package.json +1 -1
  118. package/packages/scheduler-adapter/package.json +1 -1
  119. package/packages/session/package.json +1 -1
  120. package/packages/session-api/package.json +1 -1
  121. package/packages/session-export/package.json +1 -1
  122. package/packages/shared-context/package.json +1 -1
  123. package/packages/skill-mcp-client/package.json +1 -1
  124. package/packages/skill-registry/package.json +1 -1
  125. package/packages/skills/package.json +1 -1
  126. package/packages/sprint-planner/package.json +1 -1
  127. package/packages/subscription-engine/package.json +1 -1
  128. package/packages/task-compiler/package.json +1 -1
  129. package/packages/tencentdb-memory/package.json +1 -1
  130. package/packages/tencentdb-sync/package.json +1 -1
  131. package/packages/test-data-generator/package.json +1 -1
  132. package/packages/test-generator/package.json +1 -1
  133. package/packages/todo-bd-sync/package.json +1 -1
  134. package/packages/token-estimation/package.json +1 -1
  135. package/packages/token-optimizer/package.json +1 -1
  136. package/packages/trajectory/package.json +1 -1
  137. package/packages/tui/package.json +1 -1
  138. package/packages/types/package.json +1 -1
  139. package/packages/workflow-events/package.json +1 -1
  140. package/packages/workspace-scanner/package.json +1 -1
  141. package/packages/worktree/package.json +1 -1
  142. package/packages/write-review/package.json +1 -1
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Telegram Adapter — RFC-0022
3
+ *
4
+ * Sends notifications via Telegram Bot API.
5
+ */
6
+ import { BaseChannelAdapter } from "../base-adapter.js";
7
+ export class TelegramAdapter extends BaseChannelAdapter {
8
+ id = "telegram";
9
+ type = "telegram";
10
+ _botUsername;
11
+ _callbackHandler;
12
+ _webhookSecret;
13
+ constructor(config) {
14
+ super({ id: "telegram", type: "telegram", enabled: true, config });
15
+ }
16
+ /**
17
+ * Register a callback handler for inline keyboard button clicks
18
+ */
19
+ setCallbackHandler(handler) {
20
+ this._callbackHandler = handler;
21
+ }
22
+ /**
23
+ * Set webhook secret for verification
24
+ */
25
+ setWebhookSecret(secret) {
26
+ this._webhookSecret = secret;
27
+ }
28
+ get botUsername() {
29
+ return this._botUsername;
30
+ }
31
+ async initialize() {
32
+ try {
33
+ const cfg = this.config.config;
34
+ const response = await fetch(`https://api.telegram.org/bot${cfg.botToken}/getMe`);
35
+ if (!response.ok)
36
+ return false;
37
+ const data = (await response.json());
38
+ if (data.ok && data.result?.username) {
39
+ this._botUsername = data.result.username;
40
+ }
41
+ return data.ok;
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ }
47
+ /**
48
+ * Send a message with optional inline keyboard buttons
49
+ */
50
+ async send(payload) {
51
+ try {
52
+ const cfg = this.config.config;
53
+ const message = this.formatMessage(payload);
54
+ // Build request body
55
+ const body = {
56
+ chat_id: cfg.chatId,
57
+ text: message,
58
+ parse_mode: cfg.parseMode ?? "MarkdownV2",
59
+ };
60
+ // Add inline keyboard if enabled and buttons are configured
61
+ if (cfg.enableInlineKeyboard && (cfg.actionButtons?.length ?? 0) > 0) {
62
+ body.reply_markup = this.buildInlineKeyboard(cfg.actionButtons);
63
+ }
64
+ const response = await fetch(`https://api.telegram.org/bot${cfg.botToken}/sendMessage`, {
65
+ method: "POST",
66
+ headers: { "Content-Type": "application/json" },
67
+ body: JSON.stringify(body),
68
+ });
69
+ if (!response.ok) {
70
+ const error = await response.text();
71
+ return {
72
+ success: false,
73
+ channel: this.id,
74
+ error: `Telegram API error: ${error}`,
75
+ };
76
+ }
77
+ return { success: true, channel: this.id };
78
+ }
79
+ catch (error) {
80
+ return {
81
+ success: false,
82
+ channel: this.id,
83
+ error: String(error),
84
+ };
85
+ }
86
+ }
87
+ /**
88
+ * Build inline keyboard markup from button configuration
89
+ */
90
+ buildInlineKeyboard(buttons) {
91
+ // Group buttons into rows of up to 3 buttons each (Telegram limit)
92
+ const ROW_SIZE = 3;
93
+ const rows = [];
94
+ for (let i = 0; i < buttons.length; i += ROW_SIZE) {
95
+ const row = buttons.slice(i, i + ROW_SIZE).map((btn) => ({
96
+ text: btn.text,
97
+ ...(btn.url ? { url: btn.url } : { callback_data: btn.callbackData }),
98
+ }));
99
+ rows.push(row);
100
+ }
101
+ return { inline_keyboard: rows };
102
+ }
103
+ /**
104
+ * Process incoming webhook update from Telegram
105
+ */
106
+ async handleWebhookUpdate(update) {
107
+ // Verify secret token if set
108
+ if (this._webhookSecret) {
109
+ const secretToken = update.secret_token;
110
+ if (secretToken !== this._webhookSecret) {
111
+ console.error("[TelegramAdapter] Invalid webhook secret");
112
+ return;
113
+ }
114
+ }
115
+ // Handle callback query (button click)
116
+ const callbackQuery = update.callback_query;
117
+ if (callbackQuery && this._callbackHandler) {
118
+ const query = this.parseCallbackQuery(callbackQuery);
119
+ if (query) {
120
+ await this._callbackHandler(query.data, query);
121
+ await this.answerCallbackQuery(query.id);
122
+ }
123
+ }
124
+ // Handle regular messages (future: user can type commands)
125
+ const message = update.message;
126
+ if (message) {
127
+ console.log("[TelegramAdapter] Received message:", message.text);
128
+ }
129
+ }
130
+ /**
131
+ * Parse callback query from webhook update
132
+ */
133
+ parseCallbackQuery(raw) {
134
+ try {
135
+ const from = raw.from;
136
+ const message = raw.message;
137
+ const chat = message?.chat;
138
+ return {
139
+ id: String(raw.id),
140
+ from: {
141
+ id: Number(from?.id),
142
+ is_bot: Boolean(from?.is_bot),
143
+ first_name: String(from?.first_name ?? ""),
144
+ username: from?.username ? String(from.username) : undefined,
145
+ },
146
+ chat_instance: String(raw.chat_instance ?? ""),
147
+ data: String(raw.data ?? ""),
148
+ message: message
149
+ ? {
150
+ chat: { id: Number(chat?.id) },
151
+ message_id: Number(message?.message_id),
152
+ }
153
+ : undefined,
154
+ };
155
+ }
156
+ catch {
157
+ console.error("[TelegramAdapter] Failed to parse callback query");
158
+ return null;
159
+ }
160
+ }
161
+ /**
162
+ * Answer a callback query to remove loading state
163
+ */
164
+ async answerCallbackQuery(callbackQueryId) {
165
+ try {
166
+ const cfg = this.config.config;
167
+ await fetch(`https://api.telegram.org/bot${cfg.botToken}/answerCallbackQuery`, {
168
+ method: "POST",
169
+ headers: { "Content-Type": "application/json" },
170
+ body: JSON.stringify({ callback_query_id: callbackQueryId }),
171
+ });
172
+ }
173
+ catch (error) {
174
+ console.error("[TelegramAdapter] Failed to answer callback query:", error);
175
+ }
176
+ }
177
+ /**
178
+ * Setup webhook for receiving updates
179
+ */
180
+ async setupWebhook(webhookUrl) {
181
+ try {
182
+ const cfg = this.config.config;
183
+ const response = await fetch(`https://api.telegram.org/bot${cfg.botToken}/setWebhook`, {
184
+ method: "POST",
185
+ headers: { "Content-Type": "application/json" },
186
+ body: JSON.stringify({
187
+ url: webhookUrl,
188
+ secret_token: this._webhookSecret,
189
+ }),
190
+ });
191
+ if (!response.ok) {
192
+ console.error("[TelegramAdapter] Webhook setup failed:", await response.text());
193
+ return false;
194
+ }
195
+ console.log(`[TelegramAdapter] Webhook set to: ${webhookUrl}`);
196
+ return true;
197
+ }
198
+ catch (error) {
199
+ console.error("[TelegramAdapter] Webhook setup error:", error);
200
+ return false;
201
+ }
202
+ }
203
+ /**
204
+ * Get current webhook info
205
+ */
206
+ async getWebhookInfo() {
207
+ try {
208
+ const cfg = this.config.config;
209
+ const response = await fetch(`https://api.telegram.org/bot${cfg.botToken}/getWebhookInfo`);
210
+ if (!response.ok)
211
+ return null;
212
+ return (await response.json());
213
+ }
214
+ catch {
215
+ return null;
216
+ }
217
+ }
218
+ formatMessage(payload) {
219
+ const emoji = this.getEmoji(payload.event);
220
+ const title = `${emoji} ${payload.title}`;
221
+ const lines = [title, "", payload.message];
222
+ if (payload.details?.taskTitle) {
223
+ lines.push("", `Task: ${payload.details.taskTitle}`);
224
+ }
225
+ if (payload.details?.jobId) {
226
+ lines.push(`Job: ${payload.details.jobId}`);
227
+ }
228
+ if (payload.details?.error) {
229
+ lines.push("", `Error: ${payload.details.error}`);
230
+ }
231
+ return lines.filter(Boolean).join("\n");
232
+ }
233
+ getEmoji(event) {
234
+ const map = {
235
+ JobStarted: "🚀",
236
+ TaskCompleted: "✅",
237
+ TaskFailed: "❌",
238
+ QuotaPaused: "⏸️",
239
+ ResumeScheduled: "▶️",
240
+ ContextCompacted: "📦",
241
+ OutputLimitContinued: "🔄",
242
+ E2EFailed: "🧪",
243
+ HumanReviewNeeded: "👤",
244
+ ReadyForClient: "🎉",
245
+ JobCancelled: "🚫",
246
+ Error: "⚠️",
247
+ };
248
+ return map[event] ?? "📢";
249
+ }
250
+ }
251
+ //# sourceMappingURL=telegram-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram-adapter.js","sourceRoot":"","sources":["../../src/adapters/telegram-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Webhook Adapter — RFC-0022
3
+ *
4
+ * Sends notifications to a generic webhook endpoint.
5
+ */
6
+ import type { NotificationPayload, NotificationResult, WebhookConfig } from "../types.js";
7
+ import { BaseChannelAdapter } from "../base-adapter.js";
8
+ export declare class WebhookAdapter extends BaseChannelAdapter {
9
+ readonly id = "webhook";
10
+ readonly type = "webhook";
11
+ constructor(config: WebhookConfig);
12
+ initialize(): Promise<boolean>;
13
+ send(payload: NotificationPayload): Promise<NotificationResult>;
14
+ }
15
+ //# sourceMappingURL=webhook-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/webhook-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,qBAAa,cAAe,SAAQ,kBAAkB;IACrD,QAAQ,CAAC,EAAE,aAAa;IACxB,QAAQ,CAAC,IAAI,aAAa;IAE1B,YAAY,MAAM,EAAE,aAAa,EAEhC;IAEK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAOnC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2CpE;CACD"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Webhook Adapter — RFC-0022
3
+ *
4
+ * Sends notifications to a generic webhook endpoint.
5
+ */
6
+ import { BaseChannelAdapter } from "../base-adapter.js";
7
+ export class WebhookAdapter extends BaseChannelAdapter {
8
+ id = "webhook";
9
+ type = "webhook";
10
+ constructor(config) {
11
+ super({ id: "webhook", type: "webhook", enabled: true, config });
12
+ }
13
+ async initialize() {
14
+ try {
15
+ const cfg = this.config.config;
16
+ return Boolean(cfg.url && cfg.url.startsWith("http"));
17
+ }
18
+ catch {
19
+ return false;
20
+ }
21
+ }
22
+ async send(payload) {
23
+ try {
24
+ const cfg = this.config.config;
25
+ const headers = {
26
+ "Content-Type": "application/json",
27
+ ...(cfg.headers ?? {}),
28
+ };
29
+ // Add auth token if configured
30
+ if (cfg.authToken) {
31
+ headers["Authorization"] = `Bearer ${cfg.authToken}`;
32
+ }
33
+ const response = await fetch(cfg.url, {
34
+ method: cfg.method ?? "POST",
35
+ headers,
36
+ body: JSON.stringify({
37
+ event: payload.event,
38
+ jobId: payload.jobId,
39
+ timestamp: payload.timestamp,
40
+ title: payload.title,
41
+ message: payload.message,
42
+ details: payload.details,
43
+ }),
44
+ });
45
+ if (!response.ok) {
46
+ const error = await response.text();
47
+ return {
48
+ success: false,
49
+ channel: this.id,
50
+ error: `Webhook error ${response.status}: ${error}`,
51
+ };
52
+ }
53
+ return { success: true, channel: this.id };
54
+ }
55
+ catch (error) {
56
+ return {
57
+ success: false,
58
+ channel: this.id,
59
+ error: String(error),
60
+ };
61
+ }
62
+ }
63
+ }
64
+ //# sourceMappingURL=webhook-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-adapter.js","sourceRoot":"","sources":["../../src/adapters/webhook-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,OAAO,cAAe,SAAQ,kBAAkB;IAC5C,EAAE,GAAG,SAAS,CAAC;IACf,IAAI,GAAG,SAAS,CAAC;IAE1B,YAAY,MAAqB;QAChC,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,UAAU;QACf,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAuB,CAAC;YAChD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAA4B;QACtC,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAuB,CAAC;YAChD,MAAM,OAAO,GAA2B;gBACvC,cAAc,EAAE,kBAAkB;gBAClC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;aACtB,CAAC;YAEF,+BAA+B;YAC/B,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBACnB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,GAAG,CAAC,SAAS,EAAE,CAAC;YACtD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;gBACrC,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,MAAM;gBAC5B,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;iBACxB,CAAC;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAClB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpC,OAAO;oBACN,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,IAAI,CAAC,EAAE;oBAChB,KAAK,EAAE,iBAAiB,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE;iBACnD,CAAC;YACH,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,IAAI,CAAC,EAAE;gBAChB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;aACpB,CAAC;QACH,CAAC;IACF,CAAC;CACD"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Notification Base Adapter — RFC-0022
3
+ *
4
+ * Abstract base class for all notification channel adapters.
5
+ */
6
+ import type { NotificationPayload, NotificationChannelConfig, NotificationResult } from "./types.js";
7
+ export interface ChannelAdapter {
8
+ readonly id: string;
9
+ readonly type: string;
10
+ /**
11
+ * Initialize the adapter (e.g., verify credentials)
12
+ */
13
+ initialize(): Promise<boolean>;
14
+ /**
15
+ * Send a notification
16
+ */
17
+ send(payload: NotificationPayload): Promise<NotificationResult>;
18
+ /**
19
+ * Check if the adapter is properly configured
20
+ */
21
+ isConfigured(): boolean;
22
+ }
23
+ export declare abstract class BaseChannelAdapter implements ChannelAdapter {
24
+ protected config: NotificationChannelConfig;
25
+ abstract readonly id: string;
26
+ abstract readonly type: string;
27
+ constructor(config: NotificationChannelConfig);
28
+ abstract initialize(): Promise<boolean>;
29
+ abstract send(payload: NotificationPayload): Promise<NotificationResult>;
30
+ isConfigured(): boolean;
31
+ /**
32
+ * Redact sensitive data from payload before sending
33
+ */
34
+ protected redact(payload: NotificationPayload, patterns: RegExp[]): NotificationPayload;
35
+ }
36
+ //# sourceMappingURL=base-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../src/base-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,EAClB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEhE;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC;CACxB;AAED,8BAAsB,kBAAmB,YAAW,cAAc;IAIrD,SAAS,CAAC,MAAM,EAAE,yBAAyB;IAHvD,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAE/B,YAAsB,MAAM,EAAE,yBAAyB,EAAI;IAE3D,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEzE,YAAY,IAAI,OAAO,CAEtB;IAED;;OAEG;IACH,SAAS,CAAC,MAAM,CACf,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,MAAM,EAAE,GAChB,mBAAmB,CAsBrB;CACD"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Notification Base Adapter — RFC-0022
3
+ *
4
+ * Abstract base class for all notification channel adapters.
5
+ */
6
+ export class BaseChannelAdapter {
7
+ config;
8
+ constructor(config) {
9
+ this.config = config;
10
+ }
11
+ isConfigured() {
12
+ return this.config.enabled;
13
+ }
14
+ /**
15
+ * Redact sensitive data from payload before sending
16
+ */
17
+ redact(payload, patterns) {
18
+ if (patterns.length === 0)
19
+ return payload;
20
+ const redacted = [];
21
+ const details = payload.details ? { ...payload.details } : {};
22
+ for (const [key, value] of Object.entries(details)) {
23
+ const valStr = String(value);
24
+ for (const pattern of patterns) {
25
+ if (pattern.test(valStr)) {
26
+ redacted.push(key);
27
+ details[key] = "[REDACTED]";
28
+ break;
29
+ }
30
+ }
31
+ }
32
+ return {
33
+ ...payload,
34
+ details,
35
+ redacted: redacted.length > 0 ? redacted : undefined,
36
+ };
37
+ }
38
+ }
39
+ //# sourceMappingURL=base-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-adapter.js","sourceRoot":"","sources":["../src/base-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4BH,MAAM,OAAgB,kBAAkB;IAIjB,MAAM;IAA5B,YAAsB,MAAiC;sBAAjC,MAAM;IAA8B,CAAC;IAK3D,YAAY;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED;;OAEG;IACO,MAAM,CACf,OAA4B,EAC5B,QAAkB;QAElB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC;QAE1C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE9D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAChC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClB,OAAmC,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;oBACzD,MAAM;gBACP,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO;YACN,GAAG,OAAO;YACV,OAAO;YACP,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;SACpD,CAAC;IACH,CAAC;CACD"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Notification Center (RFC-0029)
3
+ *
4
+ * Unified notification system for the harness runtime.
5
+ */
6
+ export * from "./notification-center.js";
7
+ export * from "./base-adapter.js";
8
+ export * from "./types.js";
9
+ export * from "./telegram-webhook-handler.js";
10
+ export { LineAdapter } from "./adapters/line-adapter.js";
11
+ export { TelegramAdapter } from "./adapters/telegram-adapter.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Notification Center (RFC-0029)
3
+ *
4
+ * Unified notification system for the harness runtime.
5
+ */
6
+ export * from "./notification-center.js";
7
+ export * from "./base-adapter.js";
8
+ export * from "./types.js";
9
+ export * from "./telegram-webhook-handler.js";
10
+ export { LineAdapter } from "./adapters/line-adapter.js";
11
+ export { TelegramAdapter } from "./adapters/telegram-adapter.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Notification Center — RFC-0022
3
+ *
4
+ * Main orchestration class for sending notifications across multiple channels.
5
+ *
6
+ * Security Rules (RFC-0022):
7
+ * - Do not send raw cookies, passwords, provider tokens
8
+ * - Redact sensitive data before sending
9
+ * - Notification failure does not crash runtime
10
+ */
11
+ import type { NotificationEvent, NotificationConfig, NotificationChannelConfig, NotificationResult, NotificationContext, TelegramCallbackHandler } from "./types.js";
12
+ import { TelegramAdapter } from "./adapters/telegram-adapter.js";
13
+ export declare class NotificationCenter {
14
+ private adapters;
15
+ private redactPatterns;
16
+ constructor(config?: NotificationConfig);
17
+ /**
18
+ * Register a new adapter
19
+ */
20
+ registerAdapter(config: NotificationChannelConfig): boolean;
21
+ /**
22
+ * Initialize all registered adapters
23
+ */
24
+ initialize(): Promise<void>;
25
+ /**
26
+ * Send a notification to all configured channels
27
+ */
28
+ notify(event: NotificationEvent, context: NotificationContext): Promise<NotificationResult[]>;
29
+ /**
30
+ * Send notification to a specific channel
31
+ */
32
+ notifyChannel(channelId: string, event: NotificationEvent, context: NotificationContext): Promise<NotificationResult>;
33
+ /**
34
+ * Check if any notifications are configured
35
+ */
36
+ hasChannels(): boolean;
37
+ /**
38
+ * List all configured channels
39
+ */
40
+ listChannels(): string[];
41
+ /**
42
+ * Get Telegram bot username if configured
43
+ */
44
+ getTelegramBotUsername(): string | undefined;
45
+ /**
46
+ * Get Telegram adapter for advanced operations (webhook setup, etc.)
47
+ */
48
+ getTelegramAdapter(): TelegramAdapter | undefined;
49
+ /**
50
+ * Set callback handler for Telegram inline keyboard button clicks
51
+ */
52
+ setTelegramCallbackHandler(handler: TelegramCallbackHandler): void;
53
+ /**
54
+ * Set webhook secret for Telegram updates verification
55
+ */
56
+ setTelegramWebhookSecret(secret: string): void;
57
+ /**
58
+ * Setup Telegram webhook for receiving updates
59
+ */
60
+ setupTelegramWebhook(webhookUrl: string): Promise<boolean>;
61
+ /**
62
+ * Send notification with interactive Yes/No buttons
63
+ */
64
+ notifyWithApproval(event: NotificationEvent, context: NotificationContext, options?: {
65
+ /** Custom button labels */
66
+ approveLabel?: string;
67
+ rejectLabel?: string;
68
+ /** Additional details for the message */
69
+ additionalDetails?: Record<string, unknown>;
70
+ }): Promise<NotificationResult[]>;
71
+ /**
72
+ * Send interactive notification with custom buttons
73
+ */
74
+ notifyWithButtons(event: NotificationEvent, context: NotificationContext, buttons: Array<{
75
+ text: string;
76
+ action: string;
77
+ targetId: string;
78
+ url?: string;
79
+ }>, options?: {
80
+ /** Additional details for the message */
81
+ additionalDetails?: Record<string, unknown>;
82
+ }): Promise<NotificationResult[]>;
83
+ private createAdapter;
84
+ private buildPayload;
85
+ private getEventContent;
86
+ private redact;
87
+ private getDefaultRedactPatterns;
88
+ }
89
+ //# sourceMappingURL=notification-center.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-center.d.ts","sourceRoot":"","sources":["../src/notification-center.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAEX,iBAAiB,EAEjB,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EAEvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAOjE,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,cAAc,CAAW;IAEjC,YAAY,MAAM,CAAC,EAAE,kBAAkB,EAWtC;IAED;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAa1D;IAED;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBhC;IAED;;OAEG;IACG,MAAM,CACX,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC1B,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAwB/B;IAED;;OAEG;IACG,aAAa,CAClB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CAY7B;IAED;;OAEG;IACH,WAAW,IAAI,OAAO,CAErB;IAED;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE,CAEvB;IAED;;OAEG;IACH,sBAAsB,IAAI,MAAM,GAAG,SAAS,CAM3C;IAED;;OAEG;IACH,kBAAkB,IAAI,eAAe,GAAG,SAAS,CAMhD;IAED;;OAEG;IACH,0BAA0B,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAKjE;IAED;;OAEG;IACH,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAK7C;IAED;;OAEG;IACG,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAM/D;IAED;;OAEG;IACG,kBAAkB,CACvB,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE;QACT,2BAA2B;QAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,yCAAyC;QACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC5C,GACC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA8B/B;IAED;;OAEG;IACG,iBAAiB,CACtB,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAChF,OAAO,CAAC,EAAE;QACT,yCAAyC;QACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC5C,GACC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA0B/B;IAID,OAAO,CAAC,aAAa;IA6BrB,OAAO,CAAC,YAAY;IA+BpB,OAAO,CAAC,eAAe;IA2EvB,OAAO,CAAC,MAAM;IAed,OAAO,CAAC,wBAAwB;CAWhC"}