pi-harness-runtime 0.10.26 β†’ 0.10.42

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 (150) hide show
  1. package/.pi/plugins/herdr-clipboard/herdr-plugin.toml +22 -0
  2. package/.pi/plugins/herdr-clipboard/start-bridge.sh +29 -0
  3. package/.pi/plugins/herdr-clipboard/tmux-watch.sh +39 -0
  4. package/CHANGELOG.md +41 -0
  5. package/README.md +87 -1
  6. package/config.toml.example +35 -0
  7. package/package.json +6 -4
  8. package/packages/architecture-generator/dist/adr.d.ts +15 -0
  9. package/packages/architecture-generator/dist/adr.d.ts.map +1 -0
  10. package/packages/architecture-generator/dist/adr.js +42 -0
  11. package/packages/architecture-generator/dist/adr.js.map +1 -0
  12. package/packages/architecture-generator/dist/index.d.ts +9 -0
  13. package/packages/architecture-generator/dist/index.d.ts.map +1 -0
  14. package/packages/architecture-generator/dist/index.js +9 -0
  15. package/packages/architecture-generator/dist/index.js.map +1 -0
  16. package/packages/architecture-generator/dist/mermaid.d.ts +30 -0
  17. package/packages/architecture-generator/dist/mermaid.d.ts.map +1 -0
  18. package/packages/architecture-generator/dist/mermaid.js +58 -0
  19. package/packages/architecture-generator/dist/mermaid.js.map +1 -0
  20. package/packages/architecture-generator/dist/types.d.ts +30 -0
  21. package/packages/architecture-generator/dist/types.d.ts.map +1 -0
  22. package/packages/architecture-generator/dist/types.js +7 -0
  23. package/packages/architecture-generator/dist/types.js.map +1 -0
  24. package/packages/architecture-generator/src/adr.ts +51 -0
  25. package/packages/architecture-generator/src/index.ts +9 -0
  26. package/packages/architecture-generator/src/mermaid.ts +76 -0
  27. package/packages/architecture-generator/src/types.ts +30 -0
  28. package/packages/capability-registry/src/types.js +10 -0
  29. package/packages/clipboard/dist/src/copy-sync.d.ts.map +1 -1
  30. package/packages/clipboard/dist/src/copy-sync.js +45 -3
  31. package/packages/clipboard/dist/src/copy-sync.js.map +1 -1
  32. package/packages/clipboard/dist/src/index.d.ts +1 -0
  33. package/packages/clipboard/dist/src/index.d.ts.map +1 -1
  34. package/packages/clipboard/dist/src/index.js +1 -0
  35. package/packages/clipboard/dist/src/index.js.map +1 -1
  36. package/packages/clipboard/dist/src/paste-bridge.d.ts +19 -0
  37. package/packages/clipboard/dist/src/paste-bridge.d.ts.map +1 -0
  38. package/packages/clipboard/dist/src/paste-bridge.js +78 -0
  39. package/packages/clipboard/dist/src/paste-bridge.js.map +1 -0
  40. package/packages/clipboard/src/copy-sync.ts +52 -3
  41. package/packages/clipboard/src/index.ts +1 -0
  42. package/packages/clipboard/src/paste-bridge.ts +86 -0
  43. package/packages/clipboard-plugin/dist/index.d.ts +28 -0
  44. package/packages/clipboard-plugin/dist/index.d.ts.map +1 -0
  45. package/packages/clipboard-plugin/dist/index.js +64 -0
  46. package/packages/clipboard-plugin/dist/index.js.map +1 -0
  47. package/packages/clipboard-plugin/dist/types.d.ts +30 -0
  48. package/packages/clipboard-plugin/dist/types.d.ts.map +1 -0
  49. package/packages/clipboard-plugin/dist/types.js +5 -0
  50. package/packages/clipboard-plugin/dist/types.js.map +1 -0
  51. package/packages/clipboard-plugin/src/index.ts +74 -0
  52. package/packages/clipboard-plugin/src/types.ts +30 -0
  53. package/packages/file-copy-helper/dist/src/extension.js +84 -25
  54. package/packages/file-copy-helper/src/extension.debug.ts +226 -0
  55. package/packages/file-copy-helper/src/extension.ts +89 -59
  56. package/packages/knowledge-graph/dist/graph-extractor.d.ts +27 -0
  57. package/packages/knowledge-graph/dist/graph-extractor.d.ts.map +1 -0
  58. package/packages/knowledge-graph/dist/graph-extractor.js +276 -0
  59. package/packages/knowledge-graph/dist/graph-extractor.js.map +1 -0
  60. package/packages/knowledge-graph/dist/index.d.ts +27 -0
  61. package/packages/knowledge-graph/dist/index.d.ts.map +1 -0
  62. package/packages/knowledge-graph/dist/index.js +27 -0
  63. package/packages/knowledge-graph/dist/index.js.map +1 -0
  64. package/packages/knowledge-graph/dist/mcp-client.d.ts +38 -0
  65. package/packages/knowledge-graph/dist/mcp-client.d.ts.map +1 -0
  66. package/packages/knowledge-graph/dist/mcp-client.js +157 -0
  67. package/packages/knowledge-graph/dist/mcp-client.js.map +1 -0
  68. package/packages/knowledge-graph/dist/provenance-linker.d.ts +19 -0
  69. package/packages/knowledge-graph/dist/provenance-linker.d.ts.map +1 -0
  70. package/packages/knowledge-graph/dist/provenance-linker.js +91 -0
  71. package/packages/knowledge-graph/dist/provenance-linker.js.map +1 -0
  72. package/packages/knowledge-graph/dist/types.d.ts +53 -0
  73. package/packages/knowledge-graph/dist/types.d.ts.map +1 -0
  74. package/packages/knowledge-graph/dist/types.js +7 -0
  75. package/packages/knowledge-graph/dist/types.js.map +1 -0
  76. package/packages/knowledge-graph/src/graph-extractor.ts +338 -0
  77. package/packages/knowledge-graph/src/index.ts +27 -0
  78. package/packages/knowledge-graph/src/mcp-client.ts +237 -0
  79. package/packages/knowledge-graph/src/provenance-linker.ts +101 -0
  80. package/packages/knowledge-graph/src/types.ts +86 -0
  81. package/packages/milestone-manager/dist/engine.d.ts +27 -0
  82. package/packages/milestone-manager/dist/engine.d.ts.map +1 -0
  83. package/packages/milestone-manager/dist/engine.js +78 -0
  84. package/packages/milestone-manager/dist/engine.js.map +1 -0
  85. package/packages/milestone-manager/dist/index.d.ts +6 -0
  86. package/packages/milestone-manager/dist/index.d.ts.map +1 -0
  87. package/packages/milestone-manager/dist/index.js +6 -0
  88. package/packages/milestone-manager/dist/index.js.map +1 -0
  89. package/packages/milestone-manager/dist/types.d.ts +25 -0
  90. package/packages/milestone-manager/dist/types.d.ts.map +1 -0
  91. package/packages/milestone-manager/dist/types.js +7 -0
  92. package/packages/milestone-manager/dist/types.js.map +1 -0
  93. package/packages/milestone-manager/src/engine.ts +105 -0
  94. package/packages/milestone-manager/src/index.ts +6 -0
  95. package/packages/milestone-manager/src/types.ts +28 -0
  96. package/packages/notification/dist/adapters/line-adapter.d.ts +17 -0
  97. package/packages/notification/dist/adapters/line-adapter.d.ts.map +1 -0
  98. package/packages/notification/dist/adapters/line-adapter.js +99 -0
  99. package/packages/notification/dist/adapters/line-adapter.js.map +1 -0
  100. package/packages/notification/dist/index.d.ts +1 -0
  101. package/packages/notification/dist/index.d.ts.map +1 -1
  102. package/packages/notification/dist/index.js +1 -0
  103. package/packages/notification/dist/index.js.map +1 -1
  104. package/packages/notification/dist/notification-center.d.ts.map +1 -1
  105. package/packages/notification/dist/notification-center.js +4 -0
  106. package/packages/notification/dist/notification-center.js.map +1 -1
  107. package/packages/notification/dist/types.d.ts +6 -2
  108. package/packages/notification/dist/types.d.ts.map +1 -1
  109. package/packages/notification/src/adapters/line-adapter.ts +119 -0
  110. package/packages/notification/src/index.ts +1 -0
  111. package/packages/notification/src/notification-center.ts +6 -0
  112. package/packages/notification/src/types.ts +7 -2
  113. package/packages/project-bootstrap/dist/bootstrap.d.ts +23 -0
  114. package/packages/project-bootstrap/dist/bootstrap.d.ts.map +1 -0
  115. package/packages/project-bootstrap/dist/bootstrap.js +128 -0
  116. package/packages/project-bootstrap/dist/bootstrap.js.map +1 -0
  117. package/packages/project-bootstrap/dist/frappe.d.ts +8 -0
  118. package/packages/project-bootstrap/dist/frappe.d.ts.map +1 -0
  119. package/packages/project-bootstrap/dist/frappe.js +82 -0
  120. package/packages/project-bootstrap/dist/frappe.js.map +1 -0
  121. package/packages/project-bootstrap/dist/index.d.ts +27 -0
  122. package/packages/project-bootstrap/dist/index.d.ts.map +1 -0
  123. package/packages/project-bootstrap/dist/index.js +27 -0
  124. package/packages/project-bootstrap/dist/index.js.map +1 -0
  125. package/packages/project-bootstrap/dist/minimal.d.ts +8 -0
  126. package/packages/project-bootstrap/dist/minimal.d.ts.map +1 -0
  127. package/packages/project-bootstrap/dist/minimal.js +35 -0
  128. package/packages/project-bootstrap/dist/minimal.js.map +1 -0
  129. package/packages/project-bootstrap/dist/types.d.ts +61 -0
  130. package/packages/project-bootstrap/dist/types.d.ts.map +1 -0
  131. package/packages/project-bootstrap/dist/types.js +7 -0
  132. package/packages/project-bootstrap/dist/types.js.map +1 -0
  133. package/packages/project-bootstrap/dist/typescript.d.ts +8 -0
  134. package/packages/project-bootstrap/dist/typescript.d.ts.map +1 -0
  135. package/packages/project-bootstrap/dist/typescript.js +103 -0
  136. package/packages/project-bootstrap/dist/typescript.js.map +1 -0
  137. package/packages/project-bootstrap/src/bootstrap.ts +166 -0
  138. package/packages/project-bootstrap/src/frappe.ts +97 -0
  139. package/packages/project-bootstrap/src/index.ts +27 -0
  140. package/packages/project-bootstrap/src/minimal.ts +45 -0
  141. package/packages/project-bootstrap/src/types.ts +66 -0
  142. package/packages/project-bootstrap/src/typescript.ts +114 -0
  143. package/packages/provider-router/dist/src/types.js +1 -1
  144. package/packages/write-review/src/index.ts +47 -0
  145. package/packages/write-review/src/injection.ts +21 -1
  146. package/prompts/agents/reviewer.md +57 -0
  147. package/prompts/agents/writer.md +42 -0
  148. package/prompts/slash-commands.md +40 -0
  149. package/prompts/write-review.md +50 -0
  150. package/scripts/copy-plugins.js +56 -0
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Milestone Manager - RFC-0075
3
+ *
4
+ * Track milestones and calculate status.
5
+ */
6
+
7
+ import type { Milestone, MilestoneStatus, MilestoneManagerOptions } from './types.js';
8
+
9
+ const DEFAULT_OPTIONS: MilestoneManagerOptions = {
10
+ atRiskThreshold: 80,
11
+ missedThreshold: 0,
12
+ };
13
+
14
+ /**
15
+ * Calculate milestone status based on progress and time
16
+ */
17
+ export function calculateMilestoneStatus(
18
+ milestone: Milestone,
19
+ options: MilestoneManagerOptions = {}
20
+ ): MilestoneStatus {
21
+ const opts = { ...DEFAULT_OPTIONS, ...options };
22
+ const totalItems = milestone.items.length;
23
+ const completedItems = milestone.completedItems;
24
+
25
+ if (completedItems >= totalItems) {
26
+ return 'completed';
27
+ }
28
+
29
+ // Check if past target date
30
+ const targetDate = new Date(milestone.targetDate);
31
+ const today = new Date();
32
+ const daysPast = Math.floor((today.getTime() - targetDate.getTime()) / (1000 * 60 * 60 * 24));
33
+
34
+ if (opts.missedThreshold && daysPast > opts.missedThreshold) {
35
+ return 'missed';
36
+ }
37
+
38
+ // Check progress percentage
39
+ const progressPct = totalItems > 0 ? (completedItems / totalItems) * 100 : 0;
40
+
41
+ // Calculate expected progress based on time
42
+ const startDate = new Date(milestone.targetDate);
43
+ startDate.setDate(startDate.getDate() - 14); // Assume 2-week sprints
44
+ const totalDays = 14;
45
+ const daysElapsed = Math.max(0, Math.min(totalDays, totalDays - daysPast));
46
+ const expectedPct = (daysElapsed / totalDays) * 100;
47
+
48
+ if (progressPct < expectedPct * (1 - opts.atRiskThreshold! / 100)) {
49
+ return 'at-risk';
50
+ }
51
+
52
+ return 'on-track';
53
+ }
54
+
55
+ /**
56
+ * Milestone Manager
57
+ */
58
+ export class MilestoneManager {
59
+ private milestones: Map<string, Milestone> = new Map();
60
+ private options: MilestoneManagerOptions;
61
+
62
+ constructor(options: MilestoneManagerOptions = {}) {
63
+ this.options = { ...DEFAULT_OPTIONS, ...options };
64
+ }
65
+
66
+ addMilestone(milestone: Milestone): void {
67
+ this.milestones.set(milestone.id, milestone);
68
+ }
69
+
70
+ removeMilestone(id: string): void {
71
+ this.milestones.delete(id);
72
+ }
73
+
74
+ getMilestone(id: string): Milestone | undefined {
75
+ return this.milestones.get(id);
76
+ }
77
+
78
+ listMilestones(): Milestone[] {
79
+ return [...this.milestones.values()];
80
+ }
81
+
82
+ updateMilestone(id: string, update: Partial<Milestone>): void {
83
+ const milestone = this.milestones.get(id);
84
+ if (milestone) {
85
+ this.milestones.set(id, { ...milestone, ...update });
86
+ }
87
+ }
88
+
89
+ getStatus(id: string): MilestoneStatus | undefined {
90
+ const milestone = this.milestones.get(id);
91
+ return milestone ? calculateMilestoneStatus(milestone, this.options) : undefined;
92
+ }
93
+
94
+ getAtRiskMilestones(): Milestone[] {
95
+ return this.listMilestones().filter(
96
+ m => calculateMilestoneStatus(m, this.options) === 'at-risk'
97
+ );
98
+ }
99
+
100
+ getMissedMilestones(): Milestone[] {
101
+ return this.listMilestones().filter(
102
+ m => calculateMilestoneStatus(m, this.options) === 'missed'
103
+ );
104
+ }
105
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Milestone Manager - RFC-0075
3
+ */
4
+
5
+ export * from './types.js';
6
+ export * from './engine.js';
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Milestone Manager - RFC-0075
3
+ *
4
+ * Track milestones against progress and alert when items are at risk.
5
+ */
6
+
7
+ export type MilestoneStatus = 'on-track' | 'at-risk' | 'missed' | 'completed';
8
+
9
+ export interface Milestone {
10
+ id: string;
11
+ title: string;
12
+ targetDate: string;
13
+ description?: string;
14
+ items: string[]; // Item IDs (e.g., task IDs, issue IDs)
15
+ status: MilestoneStatus;
16
+ completedItems: number;
17
+ }
18
+
19
+ export interface MilestoneManagerOptions {
20
+ atRiskThreshold?: number; // Percentage (default: 80%)
21
+ missedThreshold?: number; // Days past target (default: 0)
22
+ }
23
+
24
+ export interface MilestoneUpdate {
25
+ itemId: string;
26
+ status: 'added' | 'completed' | 'removed';
27
+ milestoneId: string;
28
+ }
@@ -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"}
@@ -6,4 +6,5 @@
6
6
  export * from "./notification-center.js";
7
7
  export * from "./base-adapter.js";
8
8
  export * from "./types.js";
9
+ export { LineAdapter } from "./adapters/line-adapter.js";
9
10
  //# 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"}
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,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC"}
@@ -6,4 +6,5 @@
6
6
  export * from "./notification-center.js";
7
7
  export * from "./base-adapter.js";
8
8
  export * from "./types.js";
9
+ export { LineAdapter } from "./adapters/line-adapter.js";
9
10
  //# 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"}
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,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"notification-center.d.ts","sourceRoot":"","sources":["../src/notification-center.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACX,iBAAiB,EAEjB,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,YAAY,CAAC;AAOpB,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;IAID,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,eAAe;IA+DvB,OAAO,CAAC,MAAM;IAed,OAAO,CAAC,wBAAwB;CAUhC"}
1
+ {"version":3,"file":"notification-center.d.ts","sourceRoot":"","sources":["../src/notification-center.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACX,iBAAiB,EAEjB,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,YAAY,CAAC;AAQpB,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;IAID,OAAO,CAAC,aAAa;IA6BrB,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,eAAe;IA+DvB,OAAO,CAAC,MAAM;IAed,OAAO,CAAC,wBAAwB;CAWhC"}
@@ -9,6 +9,7 @@
9
9
  * - Notification failure does not crash runtime
10
10
  */
11
11
  import { TelegramAdapter } from "./adapters/telegram-adapter.js";
12
+ import { LineAdapter } from "./adapters/line-adapter.js";
12
13
  import { NtfyAdapter } from "./adapters/ntfy-adapter.js";
13
14
  import { EmailAdapter } from "./adapters/email-adapter.js";
14
15
  import { WebhookAdapter } from "./adapters/webhook-adapter.js";
@@ -125,6 +126,8 @@ export class NotificationCenter {
125
126
  return new EmailAdapter(config.config);
126
127
  case "webhook":
127
128
  return new WebhookAdapter(config.config);
129
+ case "line":
130
+ return new LineAdapter(config.config);
128
131
  default:
129
132
  return null;
130
133
  }
@@ -217,6 +220,7 @@ export class NotificationCenter {
217
220
  getDefaultRedactPatterns() {
218
221
  return [
219
222
  /Bearer\s+[\w-]+/gi, // Bearer tokens
223
+ /channel[_-]?access[_-]?token["\s:=]+[^\s,}]+/gi, // LINE channel access token
220
224
  /password["\s:=]+[^\s,}]+/gi, // passwords
221
225
  /cookie["\s:=]+[^\s,}]+/gi, // cookies
222
226
  /secret["\s:=]+[^\s,}]+/gi, // secrets
@@ -1 +1 @@
1
- {"version":3,"file":"notification-center.js","sourceRoot":"","sources":["../src/notification-center.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notification-center.js","sourceRoot":"","sources":["../src/notification-center.ts"],"names":[],"mappings":"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"}
@@ -22,9 +22,9 @@ export interface NotificationChannelConfig {
22
22
  id: string;
23
23
  type: NotificationChannelType;
24
24
  enabled: boolean;
25
- config: TelegramConfig | NtfyConfig | EmailConfig | WebhookConfig;
25
+ config: TelegramConfig | NtfyConfig | EmailConfig | WebhookConfig | LineConfig;
26
26
  }
27
- export type NotificationChannelType = "telegram" | "ntfy" | "email" | "webhook";
27
+ export type NotificationChannelType = "telegram" | "ntfy" | "email" | "webhook" | "line";
28
28
  export interface TelegramConfig {
29
29
  botToken: string;
30
30
  chatId: string;
@@ -50,6 +50,10 @@ export interface WebhookConfig {
50
50
  headers?: Record<string, string>;
51
51
  authToken?: string;
52
52
  }
53
+ export interface LineConfig {
54
+ channelAccessToken: string;
55
+ userId: string;
56
+ }
53
57
  export interface NotificationResult {
54
58
  success: boolean;
55
59
  channel: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,iBAAiB,GAC1B,YAAY,GACZ,eAAe,GACf,YAAY,GACZ,aAAa,GACb,iBAAiB,GACjB,kBAAkB,GAClB,sBAAsB,GACtB,WAAW,GACX,mBAAmB,GACnB,gBAAgB,GAChB,cAAc,GACd,OAAO,CAAC;AAEX,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IAClC,QAAQ,EAAE,yBAAyB,EAAE,CAAC;IAEtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,uBAAuB,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,cAAc,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,CAAC;CAClE;AAED,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhF,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,UAAU,CAAC;CAC/C;AAED,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,iBAAiB,GAC1B,YAAY,GACZ,eAAe,GACf,YAAY,GACZ,aAAa,GACb,iBAAiB,GACjB,kBAAkB,GAClB,sBAAsB,GACtB,WAAW,GACX,mBAAmB,GACnB,gBAAgB,GAChB,cAAc,GACd,OAAO,CAAC;AAEX,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IAClC,QAAQ,EAAE,yBAAyB,EAAE,CAAC;IAEtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,uBAAuB,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,cAAc,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,UAAU,CAAC;CAC/E;AAED,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzF,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,UAAU,CAAC;CAC/C;AAED,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * LINE Adapter β€” RFC-0022
3
+ *
4
+ * Sends notifications via LINE Messaging API.
5
+ */
6
+
7
+ import type {
8
+ NotificationPayload,
9
+ NotificationResult,
10
+ LineConfig,
11
+ } from "../types.js";
12
+ import { BaseChannelAdapter } from "../base-adapter.js";
13
+
14
+ export class LineAdapter extends BaseChannelAdapter {
15
+ readonly id = "line";
16
+ readonly type = "line";
17
+
18
+ constructor(config: LineConfig) {
19
+ super({ id: "line", type: "line", enabled: true, config });
20
+ }
21
+
22
+ async initialize(): Promise<boolean> {
23
+ try {
24
+ const cfg = this.config.config as LineConfig;
25
+ // Verify access token by getting profile
26
+ const response = await fetch(
27
+ "https://api.line.me/v2/bot/profile",
28
+ {
29
+ headers: {
30
+ Authorization: `Bearer ${cfg.channelAccessToken}`,
31
+ },
32
+ },
33
+ );
34
+ return response.ok;
35
+ } catch {
36
+ return false;
37
+ }
38
+ }
39
+
40
+ async send(payload: NotificationPayload): Promise<NotificationResult> {
41
+ try {
42
+ const cfg = this.config.config as LineConfig;
43
+ const message = this.formatMessage(payload);
44
+
45
+ const response = await fetch(
46
+ "https://api.line.me/v2/bot/message/push",
47
+ {
48
+ method: "POST",
49
+ headers: {
50
+ "Content-Type": "application/json",
51
+ Authorization: `Bearer ${cfg.channelAccessToken}`,
52
+ },
53
+ body: JSON.stringify({
54
+ to: cfg.userId,
55
+ messages: [
56
+ {
57
+ type: "text",
58
+ text: message,
59
+ },
60
+ ],
61
+ }),
62
+ },
63
+ );
64
+
65
+ if (!response.ok) {
66
+ const error = await response.text();
67
+ return {
68
+ success: false,
69
+ channel: this.id,
70
+ error: `LINE API error: ${error}`,
71
+ };
72
+ }
73
+
74
+ return { success: true, channel: this.id };
75
+ } catch (error) {
76
+ return {
77
+ success: false,
78
+ channel: this.id,
79
+ error: String(error),
80
+ };
81
+ }
82
+ }
83
+
84
+ private formatMessage(payload: NotificationPayload): string {
85
+ const emoji = this.getEmoji(payload.event);
86
+ const title = `${emoji} ${payload.title}`;
87
+ const lines = [title, "", payload.message];
88
+
89
+ if (payload.details?.taskTitle) {
90
+ lines.push("", `Task: ${payload.details.taskTitle}`);
91
+ }
92
+ if (payload.details?.jobId) {
93
+ lines.push(`Job: ${payload.details.jobId}`);
94
+ }
95
+ if (payload.details?.error) {
96
+ lines.push("", `Error: ${payload.details.error}`);
97
+ }
98
+
99
+ return lines.filter(Boolean).join("\n");
100
+ }
101
+
102
+ private getEmoji(event: NotificationPayload["event"]): string {
103
+ const map: Record<string, string> = {
104
+ JobStarted: "πŸš€",
105
+ TaskCompleted: "βœ…",
106
+ TaskFailed: "❌",
107
+ QuotaPaused: "⏸️",
108
+ ResumeScheduled: "▢️",
109
+ ContextCompacted: "πŸ“¦",
110
+ OutputLimitContinued: "πŸ”„",
111
+ E2EFailed: "πŸ§ͺ",
112
+ HumanReviewNeeded: "πŸ‘€",
113
+ ReadyForClient: "πŸŽ‰",
114
+ JobCancelled: "🚫",
115
+ Error: "⚠️",
116
+ };
117
+ return map[event] ?? "πŸ“’";
118
+ }
119
+ }
@@ -7,3 +7,4 @@
7
7
  export * from "./notification-center.js";
8
8
  export * from "./base-adapter.js";
9
9
  export * from "./types.js";
10
+ export { LineAdapter } from "./adapters/line-adapter.js";
@@ -19,6 +19,7 @@ import type {
19
19
  } from "./types.js";
20
20
  import type { ChannelAdapter } from "./base-adapter.js";
21
21
  import { TelegramAdapter } from "./adapters/telegram-adapter.js";
22
+ import { LineAdapter } from "./adapters/line-adapter.js";
22
23
  import { NtfyAdapter } from "./adapters/ntfy-adapter.js";
23
24
  import { EmailAdapter } from "./adapters/email-adapter.js";
24
25
  import { WebhookAdapter } from "./adapters/webhook-adapter.js";
@@ -168,6 +169,10 @@ export class NotificationCenter {
168
169
  return new WebhookAdapter(
169
170
  config.config as import("./types.js").WebhookConfig,
170
171
  );
172
+ case "line":
173
+ return new LineAdapter(
174
+ config.config as import("./types.js").LineConfig,
175
+ );
171
176
  default:
172
177
  return null;
173
178
  }
@@ -276,6 +281,7 @@ export class NotificationCenter {
276
281
  private getDefaultRedactPatterns(): RegExp[] {
277
282
  return [
278
283
  /Bearer\s+[\w-]+/gi, // Bearer tokens
284
+ /channel[_-]?access[_-]?token["\s:=]+[^\s,}]+/gi, // LINE channel access token
279
285
  /password["\s:=]+[^\s,}]+/gi, // passwords
280
286
  /cookie["\s:=]+[^\s,}]+/gi, // cookies
281
287
  /secret["\s:=]+[^\s,}]+/gi, // secrets
@@ -40,10 +40,10 @@ export interface NotificationChannelConfig {
40
40
  id: string;
41
41
  type: NotificationChannelType;
42
42
  enabled: boolean;
43
- config: TelegramConfig | NtfyConfig | EmailConfig | WebhookConfig;
43
+ config: TelegramConfig | NtfyConfig | EmailConfig | WebhookConfig | LineConfig;
44
44
  }
45
45
 
46
- export type NotificationChannelType = "telegram" | "ntfy" | "email" | "webhook";
46
+ export type NotificationChannelType = "telegram" | "ntfy" | "email" | "webhook" | "line";
47
47
 
48
48
  export interface TelegramConfig {
49
49
  botToken: string;
@@ -74,6 +74,11 @@ export interface WebhookConfig {
74
74
  authToken?: string;
75
75
  }
76
76
 
77
+ export interface LineConfig {
78
+ channelAccessToken: string;
79
+ userId: string;
80
+ }
81
+
77
82
  export interface NotificationResult {
78
83
  success: boolean;
79
84
  channel: string;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Project Bootstrap - RFC-0072
3
+ *
4
+ * Main bootstrap orchestration.
5
+ */
6
+ import type { ProjectSpec, BootstrapOptions, BootstrapResult, ValidationError, Template } from './types.js';
7
+ /**
8
+ * Validate a project spec
9
+ */
10
+ export declare function validateSpec(spec: ProjectSpec): ValidationError[];
11
+ /**
12
+ * Get template for a spec
13
+ */
14
+ export declare function getTemplateForSpec(spec: ProjectSpec, override?: string): Template;
15
+ /**
16
+ * Bootstrap a project from a spec
17
+ */
18
+ export declare function bootstrap(spec: ProjectSpec, targetDir: string, options?: BootstrapOptions): Promise<BootstrapResult>;
19
+ /**
20
+ * Detect framework and suggest a spec
21
+ */
22
+ export declare function detectAndSuggest(projectRoot: string): Promise<ProjectSpec | null>;
23
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,QAAQ,EACT,MAAM,YAAY,CAAC;AAYpB;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,eAAe,EAAE,CAgBjE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAejF;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAwC1B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA8C7B"}