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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/nextjs-plugin",
3
- "version": "1.1.147",
3
+ "version": "1.1.148",
4
4
  "description": "Next.js framework detection and analysis for pi-harness-runtime (RFC-0062)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Email Adapter — RFC-0022
3
+ *
4
+ * Sends notifications via SMTP.
5
+ */
6
+ import type { NotificationPayload, NotificationResult, EmailConfig } from "../types.js";
7
+ import { BaseChannelAdapter } from "../base-adapter.js";
8
+ export declare class EmailAdapter extends BaseChannelAdapter {
9
+ readonly id = "email";
10
+ readonly type = "email";
11
+ constructor(config: EmailConfig);
12
+ initialize(): Promise<boolean>;
13
+ send(payload: NotificationPayload): Promise<NotificationResult>;
14
+ private formatBody;
15
+ private getEmoji;
16
+ }
17
+ //# sourceMappingURL=email-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/email-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA0BxD,qBAAa,YAAa,SAAQ,kBAAkB;IACnD,QAAQ,CAAC,EAAE,WAAW;IACtB,QAAQ,CAAC,IAAI,WAAW;IAExB,YAAY,MAAM,EAAE,WAAW,EAE9B;IAEK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAWnC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0BpE;IAED,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,QAAQ;CAiBhB"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Email Adapter — RFC-0022
3
+ *
4
+ * Sends notifications via SMTP.
5
+ */
6
+ import { BaseChannelAdapter } from "../base-adapter.js";
7
+ // Simple SMTP client using built-in net module
8
+ async function sendSmtpEmail(host, port, user, password, from, to, subject, body, tls = false) {
9
+ // For a production implementation, you'd use a proper SMTP library
10
+ // This is a placeholder that logs the email
11
+ console.log(`[Email] Would send to ${to.join(", ")}`);
12
+ console.log(`[Email] Subject: ${subject}`);
13
+ console.log(`[Email] Body: ${body}`);
14
+ // In practice, you'd use something like:
15
+ // import { createClient } from "nodemailer";
16
+ // const transporter = nodemailer.createTransport({ ... });
17
+ // await transporter.sendMail({ ... });
18
+ }
19
+ export class EmailAdapter extends BaseChannelAdapter {
20
+ id = "email";
21
+ type = "email";
22
+ constructor(config) {
23
+ super({ id: "email", type: "email", enabled: true, config });
24
+ }
25
+ async initialize() {
26
+ // Verify SMTP connection
27
+ try {
28
+ const cfg = this.config.config;
29
+ // In production, verify SMTP credentials
30
+ return Boolean(cfg.smtpHost && cfg.smtpUser && cfg.from && cfg.to.length > 0);
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ async send(payload) {
37
+ try {
38
+ const cfg = this.config.config;
39
+ const subject = `${this.getEmoji(payload.event)} ${payload.title}`;
40
+ const body = this.formatBody(payload);
41
+ await sendSmtpEmail(cfg.smtpHost, cfg.smtpPort, cfg.smtpUser, cfg.smtpPassword, cfg.from, cfg.to, subject, body, cfg.tls);
42
+ return { success: true, channel: this.id };
43
+ }
44
+ catch (error) {
45
+ return {
46
+ success: false,
47
+ channel: this.id,
48
+ error: String(error),
49
+ };
50
+ }
51
+ }
52
+ formatBody(payload) {
53
+ const lines = [
54
+ payload.message,
55
+ "",
56
+ "---",
57
+ `Event: ${payload.event}`,
58
+ `Time: ${payload.timestamp}`,
59
+ ];
60
+ if (payload.details?.taskTitle) {
61
+ lines.push(`Task: ${payload.details.taskTitle}`);
62
+ }
63
+ if (payload.details?.jobId) {
64
+ lines.push(`Job ID: ${payload.details.jobId}`);
65
+ }
66
+ if (payload.details?.error) {
67
+ lines.push("", `Error: ${payload.details.error}`);
68
+ }
69
+ return lines.join("\n");
70
+ }
71
+ getEmoji(event) {
72
+ const map = {
73
+ JobStarted: "[🚀]",
74
+ TaskCompleted: "[✅]",
75
+ TaskFailed: "[❌]",
76
+ QuotaPaused: "[⏸]",
77
+ ResumeScheduled: "[▶]",
78
+ ContextCompacted: "[📦]",
79
+ OutputLimitContinued: "[🔄]",
80
+ E2EFailed: "[🧪]",
81
+ HumanReviewNeeded: "[👤]",
82
+ ReadyForClient: "[🎉]",
83
+ JobCancelled: "[🚫]",
84
+ Error: "[⚠]",
85
+ };
86
+ return map[event] ?? "[📢]";
87
+ }
88
+ }
89
+ //# sourceMappingURL=email-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-adapter.js","sourceRoot":"","sources":["../../src/adapters/email-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,+CAA+C;AAC/C,KAAK,UAAU,aAAa,CAC3B,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,QAAgB,EAChB,IAAY,EACZ,EAAY,EACZ,OAAe,EACf,IAAY,EACZ,GAAG,GAAY,KAAK;IAEpB,mEAAmE;IACnE,4CAA4C;IAC5C,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAErC,yCAAyC;IACzC,6CAA6C;IAC7C,2DAA2D;IAC3D,uCAAuC;AACxC,CAAC;AAED,MAAM,OAAO,YAAa,SAAQ,kBAAkB;IAC1C,EAAE,GAAG,OAAO,CAAC;IACb,IAAI,GAAG,OAAO,CAAC;IAExB,YAAY,MAAmB;QAC9B,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,UAAU;QACf,yBAAyB;QACzB,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAqB,CAAC;YAC9C,yCAAyC;YACzC,OAAO,OAAO,CACb,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAC7D,CAAC;QACH,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,MAAqB,CAAC;YAC9C,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACnE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAEtC,MAAM,aAAa,CAClB,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,EAAE,EACN,OAAO,EACP,IAAI,EACJ,GAAG,CAAC,GAAG,CACP,CAAC;YAEF,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;IAEO,UAAU,CAAC,OAA4B;QAC9C,MAAM,KAAK,GAAG;YACb,OAAO,CAAC,OAAO;YACf,EAAE;YACF,KAAK;YACL,UAAU,OAAO,CAAC,KAAK,EAAE;YACzB,SAAS,OAAO,CAAC,SAAS,EAAE;SAC5B,CAAC;QAEF,IAAI,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAEO,QAAQ,CAAC,KAAmC;QACnD,MAAM,GAAG,GAA2B;YACnC,UAAU,EAAE,MAAM;YAClB,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,gBAAgB,EAAE,MAAM;YACxB,oBAAoB,EAAE,MAAM;YAC5B,SAAS,EAAE,MAAM;YACjB,iBAAiB,EAAE,MAAM;YACzB,cAAc,EAAE,MAAM;YACtB,YAAY,EAAE,MAAM;YACpB,KAAK,EAAE,KAAK;SACZ,CAAC;QACF,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC;IAC7B,CAAC;CACD"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * LINE Adapter — RFC-0022
3
+ *
4
+ * Sends notifications via LINE Messaging API.
5
+ */
6
+ import type { NotificationPayload, NotificationResult, LineConfig } from "../types.js";
7
+ import { BaseChannelAdapter } from "../base-adapter.js";
8
+ export declare class LineAdapter extends BaseChannelAdapter {
9
+ readonly id = "line";
10
+ readonly type = "line";
11
+ constructor(config: LineConfig);
12
+ initialize(): Promise<boolean>;
13
+ send(payload: NotificationPayload): Promise<NotificationResult>;
14
+ private formatMessage;
15
+ private getEmoji;
16
+ }
17
+ //# sourceMappingURL=line-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/line-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,qBAAa,WAAY,SAAQ,kBAAkB;IAClD,QAAQ,CAAC,EAAE,UAAU;IACrB,QAAQ,CAAC,IAAI,UAAU;IAEvB,YAAY,MAAM,EAAE,UAAU,EAE7B;IAEK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAgBnC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0CpE;IAED,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,QAAQ;CAiBhB"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * LINE Adapter — RFC-0022
3
+ *
4
+ * Sends notifications via LINE Messaging API.
5
+ */
6
+ import { BaseChannelAdapter } from "../base-adapter.js";
7
+ export class LineAdapter extends BaseChannelAdapter {
8
+ id = "line";
9
+ type = "line";
10
+ constructor(config) {
11
+ super({ id: "line", type: "line", enabled: true, config });
12
+ }
13
+ async initialize() {
14
+ try {
15
+ const cfg = this.config.config;
16
+ // Verify access token by getting profile
17
+ const response = await fetch("https://api.line.me/v2/bot/profile", {
18
+ headers: {
19
+ Authorization: `Bearer ${cfg.channelAccessToken}`,
20
+ },
21
+ });
22
+ return response.ok;
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ }
28
+ async send(payload) {
29
+ try {
30
+ const cfg = this.config.config;
31
+ const message = this.formatMessage(payload);
32
+ const response = await fetch("https://api.line.me/v2/bot/message/push", {
33
+ method: "POST",
34
+ headers: {
35
+ "Content-Type": "application/json",
36
+ Authorization: `Bearer ${cfg.channelAccessToken}`,
37
+ },
38
+ body: JSON.stringify({
39
+ to: cfg.userId,
40
+ messages: [
41
+ {
42
+ type: "text",
43
+ text: message,
44
+ },
45
+ ],
46
+ }),
47
+ });
48
+ if (!response.ok) {
49
+ const error = await response.text();
50
+ return {
51
+ success: false,
52
+ channel: this.id,
53
+ error: `LINE API error: ${error}`,
54
+ };
55
+ }
56
+ return { success: true, channel: this.id };
57
+ }
58
+ catch (error) {
59
+ return {
60
+ success: false,
61
+ channel: this.id,
62
+ error: String(error),
63
+ };
64
+ }
65
+ }
66
+ formatMessage(payload) {
67
+ const emoji = this.getEmoji(payload.event);
68
+ const title = `${emoji} ${payload.title}`;
69
+ const lines = [title, "", payload.message];
70
+ if (payload.details?.taskTitle) {
71
+ lines.push("", `Task: ${payload.details.taskTitle}`);
72
+ }
73
+ if (payload.details?.jobId) {
74
+ lines.push(`Job: ${payload.details.jobId}`);
75
+ }
76
+ if (payload.details?.error) {
77
+ lines.push("", `Error: ${payload.details.error}`);
78
+ }
79
+ return lines.filter(Boolean).join("\n");
80
+ }
81
+ getEmoji(event) {
82
+ const map = {
83
+ JobStarted: "🚀",
84
+ TaskCompleted: "✅",
85
+ TaskFailed: "❌",
86
+ QuotaPaused: "⏸️",
87
+ ResumeScheduled: "▶️",
88
+ ContextCompacted: "📦",
89
+ OutputLimitContinued: "🔄",
90
+ E2EFailed: "🧪",
91
+ HumanReviewNeeded: "👤",
92
+ ReadyForClient: "🎉",
93
+ JobCancelled: "🚫",
94
+ Error: "⚠️",
95
+ };
96
+ return map[event] ?? "📢";
97
+ }
98
+ }
99
+ //# sourceMappingURL=line-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-adapter.js","sourceRoot":"","sources":["../../src/adapters/line-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,OAAO,WAAY,SAAQ,kBAAkB;IACzC,EAAE,GAAG,MAAM,CAAC;IACZ,IAAI,GAAG,MAAM,CAAC;IAEvB,YAAY,MAAkB;QAC7B,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,UAAU;QACf,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAoB,CAAC;YAC7C,yCAAyC;YACzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC3B,oCAAoC,EACpC;gBACC,OAAO,EAAE;oBACR,aAAa,EAAE,UAAU,GAAG,CAAC,kBAAkB,EAAE;iBACjD;aACD,CACD,CAAC;YACF,OAAO,QAAQ,CAAC,EAAE,CAAC;QACpB,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,MAAoB,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAE5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC3B,yCAAyC,EACzC;gBACC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACR,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,GAAG,CAAC,kBAAkB,EAAE;iBACjD;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACpB,EAAE,EAAE,GAAG,CAAC,MAAM;oBACd,QAAQ,EAAE;wBACT;4BACC,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,OAAO;yBACb;qBACD;iBACD,CAAC;aACF,CACD,CAAC;YAEF,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,mBAAmB,KAAK,EAAE;iBACjC,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;IAEO,aAAa,CAAC,OAA4B;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAE3C,IAAI,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAEO,QAAQ,CAAC,KAAmC;QACnD,MAAM,GAAG,GAA2B;YACnC,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,GAAG;YAClB,UAAU,EAAE,GAAG;YACf,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,IAAI;YACtB,oBAAoB,EAAE,IAAI;YAC1B,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,cAAc,EAAE,IAAI;YACpB,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,IAAI;SACX,CAAC;QACF,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IAC3B,CAAC;CACD"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Ntfy Adapter — RFC-0022
3
+ *
4
+ * Sends notifications via ntfy.sh (or self-hosted ntfy server).
5
+ */
6
+ import type { NotificationPayload, NotificationResult, NtfyConfig } from "../types.js";
7
+ import { BaseChannelAdapter } from "../base-adapter.js";
8
+ export declare class NtfyAdapter extends BaseChannelAdapter {
9
+ readonly id = "ntfy";
10
+ readonly type = "ntfy";
11
+ constructor(config: NtfyConfig);
12
+ initialize(): Promise<boolean>;
13
+ send(payload: NotificationPayload): Promise<NotificationResult>;
14
+ private formatMessage;
15
+ private getTags;
16
+ }
17
+ //# sourceMappingURL=ntfy-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ntfy-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ntfy-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,qBAAa,WAAY,SAAQ,kBAAkB;IAClD,QAAQ,CAAC,EAAE,UAAU;IACrB,QAAQ,CAAC,IAAI,UAAU;IAEvB,YAAY,MAAM,EAAE,UAAU,EAE7B;IAEK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAGnC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsCpE;IAED,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,OAAO;CAiBf"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Ntfy Adapter — RFC-0022
3
+ *
4
+ * Sends notifications via ntfy.sh (or self-hosted ntfy server).
5
+ */
6
+ import { BaseChannelAdapter } from "../base-adapter.js";
7
+ export class NtfyAdapter extends BaseChannelAdapter {
8
+ id = "ntfy";
9
+ type = "ntfy";
10
+ constructor(config) {
11
+ super({ id: "ntfy", type: "ntfy", enabled: true, config });
12
+ }
13
+ async initialize() {
14
+ // Ntfy doesn't require initialization; it's fire-and-forget
15
+ return true;
16
+ }
17
+ async send(payload) {
18
+ try {
19
+ const cfg = this.config.config;
20
+ const message = this.formatMessage(payload);
21
+ const headers = {
22
+ "Content-Type": "text/plain",
23
+ Title: payload.title,
24
+ Tags: this.getTags(payload.event),
25
+ };
26
+ // Add auth if configured
27
+ if (cfg.authToken) {
28
+ headers["Authorization"] = `Bearer ${cfg.authToken}`;
29
+ }
30
+ const response = await fetch(`${cfg.server}/${cfg.topic}`, {
31
+ method: "POST",
32
+ headers,
33
+ body: message,
34
+ });
35
+ if (!response.ok) {
36
+ const error = await response.text();
37
+ return {
38
+ success: false,
39
+ channel: this.id,
40
+ error: `Ntfy error: ${error}`,
41
+ };
42
+ }
43
+ return { success: true, channel: this.id };
44
+ }
45
+ catch (error) {
46
+ return {
47
+ success: false,
48
+ channel: this.id,
49
+ error: String(error),
50
+ };
51
+ }
52
+ }
53
+ formatMessage(payload) {
54
+ const lines = [payload.message];
55
+ if (payload.details?.taskTitle) {
56
+ lines.push(`\nTask: ${payload.details.taskTitle}`);
57
+ }
58
+ if (payload.details?.jobId) {
59
+ lines.push(`Job: ${payload.details.jobId}`);
60
+ }
61
+ if (payload.details?.error) {
62
+ lines.push(`\nError: ${payload.details.error}`);
63
+ }
64
+ return lines.join("");
65
+ }
66
+ getTags(event) {
67
+ const map = {
68
+ JobStarted: "rocket",
69
+ TaskCompleted: "white_check_mark",
70
+ TaskFailed: "x",
71
+ QuotaPaused: "pause_button",
72
+ ResumeScheduled: "play_button",
73
+ ContextCompacted: "package",
74
+ OutputLimitContinued: "repeat",
75
+ E2EFailed: "test_tube",
76
+ HumanReviewNeeded: "bust_in_silhouette",
77
+ ReadyForClient: "tada",
78
+ JobCancelled: "no_entry",
79
+ Error: "warning",
80
+ };
81
+ return map[event] ?? "bell";
82
+ }
83
+ }
84
+ //# sourceMappingURL=ntfy-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ntfy-adapter.js","sourceRoot":"","sources":["../../src/adapters/ntfy-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Telegram Adapter — RFC-0022
3
+ *
4
+ * Sends notifications via Telegram Bot API.
5
+ */
6
+ import type { NotificationPayload, NotificationResult, TelegramCallbackHandler, TelegramConfig } from "../types.js";
7
+ import { BaseChannelAdapter } from "../base-adapter.js";
8
+ export declare class TelegramAdapter extends BaseChannelAdapter {
9
+ readonly id = "telegram";
10
+ readonly type = "telegram";
11
+ private _botUsername;
12
+ private _callbackHandler;
13
+ private _webhookSecret;
14
+ constructor(config: TelegramConfig);
15
+ /**
16
+ * Register a callback handler for inline keyboard button clicks
17
+ */
18
+ setCallbackHandler(handler: TelegramCallbackHandler): void;
19
+ /**
20
+ * Set webhook secret for verification
21
+ */
22
+ setWebhookSecret(secret: string): void;
23
+ get botUsername(): string | undefined;
24
+ initialize(): Promise<boolean>;
25
+ /**
26
+ * Send a message with optional inline keyboard buttons
27
+ */
28
+ send(payload: NotificationPayload): Promise<NotificationResult>;
29
+ /**
30
+ * Build inline keyboard markup from button configuration
31
+ */
32
+ private buildInlineKeyboard;
33
+ /**
34
+ * Process incoming webhook update from Telegram
35
+ */
36
+ handleWebhookUpdate(update: Record<string, unknown>): Promise<void>;
37
+ /**
38
+ * Parse callback query from webhook update
39
+ */
40
+ private parseCallbackQuery;
41
+ /**
42
+ * Answer a callback query to remove loading state
43
+ */
44
+ private answerCallbackQuery;
45
+ /**
46
+ * Setup webhook for receiving updates
47
+ */
48
+ setupWebhook(webhookUrl: string): Promise<boolean>;
49
+ /**
50
+ * Get current webhook info
51
+ */
52
+ getWebhookInfo(): Promise<Record<string, unknown> | null>;
53
+ private formatMessage;
54
+ private getEmoji;
55
+ }
56
+ //# sourceMappingURL=telegram-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/telegram-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAEX,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EAEvB,cAAc,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,qBAAa,eAAgB,SAAQ,kBAAkB;IACvD,QAAQ,CAAC,EAAE,cAAc;IACzB,QAAQ,CAAC,IAAI,cAAc;IAC3B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,cAAc,CAAqB;IAE3C,YAAY,MAAM,EAAE,cAAc,EAEjC;IAED;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAEzD;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAErC;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAEpC;IAEM,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAenC;IAED;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2CpE;IAED;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;OAEG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBxE;IAED;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;YACW,mBAAmB;IAgBjC;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BvD;IAED;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAY9D;IAED,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,QAAQ;CAiBhB"}