pi-harness-runtime 0.10.27 → 0.10.43

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 (133) 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 +19 -0
  5. package/README.md +87 -1
  6. package/config.toml.example +35 -0
  7. package/package.json +5 -3
  8. package/packages/architecture-generator/dist/adr.d.ts +1 -1
  9. package/packages/architecture-generator/dist/adr.d.ts.map +1 -1
  10. package/packages/architecture-generator/dist/adr.js +2 -2
  11. package/packages/architecture-generator/dist/adr.js.map +1 -1
  12. package/packages/architecture-generator/dist/index.d.ts +3 -3
  13. package/packages/architecture-generator/dist/index.js +3 -3
  14. package/packages/architecture-generator/dist/mermaid.d.ts +1 -1
  15. package/packages/architecture-generator/dist/mermaid.d.ts.map +1 -1
  16. package/packages/architecture-generator/dist/mermaid.js +20 -20
  17. package/packages/architecture-generator/dist/mermaid.js.map +1 -1
  18. package/packages/architecture-generator/dist/types.d.ts +2 -2
  19. package/packages/architecture-generator/dist/types.d.ts.map +1 -1
  20. package/packages/architecture-generator/src/adr.ts +16 -16
  21. package/packages/architecture-generator/src/index.ts +3 -3
  22. package/packages/architecture-generator/src/mermaid.ts +48 -54
  23. package/packages/architecture-generator/src/types.ts +15 -15
  24. package/packages/capability-registry/src/types.js +10 -0
  25. package/packages/clipboard/dist/src/copy-sync.d.ts.map +1 -1
  26. package/packages/clipboard/dist/src/copy-sync.js +45 -3
  27. package/packages/clipboard/dist/src/copy-sync.js.map +1 -1
  28. package/packages/clipboard/dist/src/index.d.ts +1 -0
  29. package/packages/clipboard/dist/src/index.d.ts.map +1 -1
  30. package/packages/clipboard/dist/src/index.js +1 -0
  31. package/packages/clipboard/dist/src/index.js.map +1 -1
  32. package/packages/clipboard/dist/src/paste-bridge.d.ts +19 -0
  33. package/packages/clipboard/dist/src/paste-bridge.d.ts.map +1 -0
  34. package/packages/clipboard/dist/src/paste-bridge.js +78 -0
  35. package/packages/clipboard/dist/src/paste-bridge.js.map +1 -0
  36. package/packages/clipboard/src/copy-sync.ts +52 -3
  37. package/packages/clipboard/src/index.ts +1 -0
  38. package/packages/clipboard/src/paste-bridge.ts +86 -0
  39. package/packages/clipboard-plugin/dist/index.d.ts +28 -0
  40. package/packages/clipboard-plugin/dist/index.d.ts.map +1 -0
  41. package/packages/clipboard-plugin/dist/index.js +64 -0
  42. package/packages/clipboard-plugin/dist/index.js.map +1 -0
  43. package/packages/clipboard-plugin/dist/types.d.ts +30 -0
  44. package/packages/clipboard-plugin/dist/types.d.ts.map +1 -0
  45. package/packages/clipboard-plugin/dist/types.js +5 -0
  46. package/packages/clipboard-plugin/dist/types.js.map +1 -0
  47. package/packages/clipboard-plugin/src/index.ts +74 -0
  48. package/packages/clipboard-plugin/src/types.ts +30 -0
  49. package/packages/file-copy-helper/dist/src/extension.js +84 -25
  50. package/packages/file-copy-helper/src/extension.debug.ts +226 -0
  51. package/packages/file-copy-helper/src/extension.ts +89 -59
  52. package/packages/knowledge-graph/dist/graph-extractor.d.ts +1 -1
  53. package/packages/knowledge-graph/dist/graph-extractor.d.ts.map +1 -1
  54. package/packages/knowledge-graph/dist/graph-extractor.js +46 -55
  55. package/packages/knowledge-graph/dist/graph-extractor.js.map +1 -1
  56. package/packages/knowledge-graph/dist/index.d.ts +4 -4
  57. package/packages/knowledge-graph/dist/index.js +4 -4
  58. package/packages/knowledge-graph/dist/mcp-client.d.ts +2 -2
  59. package/packages/knowledge-graph/dist/mcp-client.d.ts.map +1 -1
  60. package/packages/knowledge-graph/dist/mcp-client.js +22 -22
  61. package/packages/knowledge-graph/dist/mcp-client.js.map +1 -1
  62. package/packages/knowledge-graph/dist/provenance-linker.d.ts +1 -1
  63. package/packages/knowledge-graph/dist/provenance-linker.d.ts.map +1 -1
  64. package/packages/knowledge-graph/dist/provenance-linker.js +14 -15
  65. package/packages/knowledge-graph/dist/provenance-linker.js.map +1 -1
  66. package/packages/knowledge-graph/dist/types.d.ts +2 -2
  67. package/packages/knowledge-graph/dist/types.d.ts.map +1 -1
  68. package/packages/knowledge-graph/src/graph-extractor.ts +263 -280
  69. package/packages/knowledge-graph/src/index.ts +4 -4
  70. package/packages/knowledge-graph/src/mcp-client.ts +188 -197
  71. package/packages/knowledge-graph/src/provenance-linker.ts +69 -73
  72. package/packages/knowledge-graph/src/types.ts +46 -46
  73. package/packages/milestone-manager/dist/engine.d.ts +1 -1
  74. package/packages/milestone-manager/dist/engine.d.ts.map +1 -1
  75. package/packages/milestone-manager/dist/engine.js +7 -9
  76. package/packages/milestone-manager/dist/engine.js.map +1 -1
  77. package/packages/milestone-manager/dist/index.d.ts +2 -2
  78. package/packages/milestone-manager/dist/index.js +2 -2
  79. package/packages/milestone-manager/dist/types.d.ts +2 -2
  80. package/packages/milestone-manager/dist/types.d.ts.map +1 -1
  81. package/packages/milestone-manager/src/engine.ts +83 -91
  82. package/packages/milestone-manager/src/index.ts +2 -2
  83. package/packages/milestone-manager/src/types.ts +13 -13
  84. package/packages/notification/dist/adapters/line-adapter.d.ts +17 -0
  85. package/packages/notification/dist/adapters/line-adapter.d.ts.map +1 -0
  86. package/packages/notification/dist/adapters/line-adapter.js +99 -0
  87. package/packages/notification/dist/adapters/line-adapter.js.map +1 -0
  88. package/packages/notification/dist/index.d.ts +1 -0
  89. package/packages/notification/dist/index.d.ts.map +1 -1
  90. package/packages/notification/dist/index.js +1 -0
  91. package/packages/notification/dist/index.js.map +1 -1
  92. package/packages/notification/dist/notification-center.d.ts.map +1 -1
  93. package/packages/notification/dist/notification-center.js +4 -0
  94. package/packages/notification/dist/notification-center.js.map +1 -1
  95. package/packages/notification/dist/types.d.ts +6 -2
  96. package/packages/notification/dist/types.d.ts.map +1 -1
  97. package/packages/notification/src/adapters/line-adapter.ts +119 -0
  98. package/packages/notification/src/index.ts +1 -0
  99. package/packages/notification/src/notification-center.ts +6 -0
  100. package/packages/notification/src/types.ts +7 -2
  101. package/packages/project-bootstrap/dist/bootstrap.d.ts +1 -1
  102. package/packages/project-bootstrap/dist/bootstrap.d.ts.map +1 -1
  103. package/packages/project-bootstrap/dist/bootstrap.js +37 -45
  104. package/packages/project-bootstrap/dist/bootstrap.js.map +1 -1
  105. package/packages/project-bootstrap/dist/frappe.d.ts +1 -1
  106. package/packages/project-bootstrap/dist/frappe.d.ts.map +1 -1
  107. package/packages/project-bootstrap/dist/frappe.js +34 -34
  108. package/packages/project-bootstrap/dist/frappe.js.map +1 -1
  109. package/packages/project-bootstrap/dist/index.d.ts +5 -5
  110. package/packages/project-bootstrap/dist/index.js +5 -5
  111. package/packages/project-bootstrap/dist/minimal.d.ts +1 -1
  112. package/packages/project-bootstrap/dist/minimal.js +13 -13
  113. package/packages/project-bootstrap/dist/minimal.js.map +1 -1
  114. package/packages/project-bootstrap/dist/types.d.ts +1 -1
  115. package/packages/project-bootstrap/dist/types.d.ts.map +1 -1
  116. package/packages/project-bootstrap/dist/typescript.d.ts +1 -1
  117. package/packages/project-bootstrap/dist/typescript.d.ts.map +1 -1
  118. package/packages/project-bootstrap/dist/typescript.js +38 -38
  119. package/packages/project-bootstrap/dist/typescript.js.map +1 -1
  120. package/packages/project-bootstrap/src/bootstrap.ts +121 -136
  121. package/packages/project-bootstrap/src/frappe.ts +65 -71
  122. package/packages/project-bootstrap/src/index.ts +5 -5
  123. package/packages/project-bootstrap/src/minimal.ts +31 -31
  124. package/packages/project-bootstrap/src/types.ts +38 -38
  125. package/packages/project-bootstrap/src/typescript.ts +69 -78
  126. package/packages/provider-router/dist/src/types.js +1 -1
  127. package/packages/write-review/src/index.ts +47 -0
  128. package/packages/write-review/src/injection.ts +21 -1
  129. package/prompts/agents/reviewer.md +57 -0
  130. package/prompts/agents/writer.md +42 -0
  131. package/prompts/slash-commands.md +40 -0
  132. package/prompts/write-review.md +50 -0
  133. package/scripts/copy-plugins.js +56 -0
@@ -7,80 +7,80 @@
7
7
  // --- Node Types ---
8
8
 
9
9
  export type KnowledgeNodeType =
10
- | "skill" // SKILL.md entry
11
- | "rfc" // RFC document
12
- | "implementation" // IMPLEMENTATION/* entry
13
- | "concept" // Abstract concept
14
- | "api" // API endpoint
15
- | "cli" // CLI command
16
- | "pattern" // Code pattern
17
- | "workflow"; // Workflow/SOP
10
+ | 'skill' // SKILL.md entry
11
+ | 'rfc' // RFC document
12
+ | 'implementation' // IMPLEMENTATION/* entry
13
+ | 'concept' // Abstract concept
14
+ | 'api' // API endpoint
15
+ | 'cli' // CLI command
16
+ | 'pattern' // Code pattern
17
+ | 'workflow'; // Workflow/SOP
18
18
 
19
19
  export interface KnowledgeNode {
20
- id: string; // e.g., "skill:frappe-custom-field-lifecycle"
21
- type: KnowledgeNodeType;
22
- data: {
23
- title: string;
24
- description?: string;
25
- tags: string[];
26
- source?: string; // File path
27
- url?: string; // RFC/IMPLEMENTATION URL
28
- };
20
+ id: string; // e.g., "skill:frappe-custom-field-lifecycle"
21
+ type: KnowledgeNodeType;
22
+ data: {
23
+ title: string;
24
+ description?: string;
25
+ tags: string[];
26
+ source?: string; // File path
27
+ url?: string; // RFC/IMPLEMENTATION URL
28
+ };
29
29
  }
30
30
 
31
31
  // --- Edge Types ---
32
32
 
33
33
  export type KnowledgeEdgeType =
34
- | "implements" // Skill implements RFC
35
- | "depends_on" // Skill A depends on Skill B
36
- | "supersedes" // New version replaces old
37
- | "related_to" // General relationship
38
- | "authored_by" // Author attribution
39
- | "documents" // RFC/Impl documents a skill
40
- | "references"; // RFC references implementation
34
+ | 'implements' // Skill implements RFC
35
+ | 'depends_on' // Skill A depends on Skill B
36
+ | 'supersedes' // New version replaces old
37
+ | 'related_to' // General relationship
38
+ | 'authored_by' // Author attribution
39
+ | 'documents' // RFC/Impl documents a skill
40
+ | 'references'; // RFC references implementation
41
41
 
42
42
  export interface KnowledgeEdge {
43
- from: string; // Node ID
44
- to: string; // Node ID
45
- type: KnowledgeEdgeType;
46
- metadata?: {
47
- confidence?: number; // 0-1
48
- source?: string; // How was this edge discovered
49
- };
43
+ from: string; // Node ID
44
+ to: string; // Node ID
45
+ type: KnowledgeEdgeType;
46
+ metadata?: {
47
+ confidence?: number; // 0-1
48
+ source?: string; // How was this edge discovered
49
+ };
50
50
  }
51
51
 
52
52
  // --- Graph ---
53
53
 
54
54
  export interface KnowledgeGraph {
55
- nodes: KnowledgeNode[];
56
- edges: KnowledgeEdge[];
55
+ nodes: KnowledgeNode[];
56
+ edges: KnowledgeEdge[];
57
57
  }
58
58
 
59
59
  export interface ProvenanceData {
60
- implements?: string; // RFC number (e.g., "RFC-0106")
61
- related_implementation?: string; // IMPLEMENTATION path
62
- author?: string;
63
- version?: string;
60
+ implements?: string; // RFC number (e.g., "RFC-0106")
61
+ related_implementation?: string; // IMPLEMENTATION path
62
+ author?: string;
63
+ version?: string;
64
64
  }
65
65
 
66
66
  // --- Search ---
67
67
 
68
68
  export interface SearchResult {
69
- node: KnowledgeNode;
70
- score: number;
71
- highlights?: string[];
69
+ node: KnowledgeNode;
70
+ score: number;
71
+ highlights?: string[];
72
72
  }
73
73
 
74
74
  export interface SearchOptions {
75
- limit?: number;
76
- type?: KnowledgeNodeType;
77
- tags?: string[];
75
+ limit?: number;
76
+ type?: KnowledgeNodeType;
77
+ tags?: string[];
78
78
  }
79
79
 
80
80
  // --- Config ---
81
81
 
82
82
  export interface TencentDBConfig {
83
- knowledgeUrl: string; // http://{host}:8424
84
- userKey: string;
85
- serviceId: string;
83
+ knowledgeUrl: string; // http://{host}:8424
84
+ userKey: string;
85
+ serviceId: string;
86
86
  }
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Track milestones and calculate status.
5
5
  */
6
- import type { Milestone, MilestoneStatus, MilestoneManagerOptions } from "./types.js";
6
+ import type { Milestone, MilestoneStatus, MilestoneManagerOptions } from './types.js';
7
7
  /**
8
8
  * Calculate milestone status based on progress and time
9
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,SAAS,EACT,eAAe,EACf,uBAAuB,EACvB,MAAM,YAAY,CAAC;AAOpB;;GAEG;AACH,wBAAgB,wBAAwB,CACvC,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE,uBAA4B,GACnC,eAAe,CAmCjB;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,OAAO,CAA0B;IAEzC,YAAY,OAAO,GAAE,uBAA4B,EAEhD;IAED,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAEvC;IAED,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEhC;IAED,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAE9C;IAED,cAAc,IAAI,SAAS,EAAE,CAE5B;IAED,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAK5D;IAED,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAKjD;IAED,mBAAmB,IAAI,SAAS,EAAE,CAIjC;IAED,mBAAmB,IAAI,SAAS,EAAE,CAIjC;CACD"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAOtF;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE,uBAA4B,GACpC,eAAe,CAiCjB;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,OAAO,CAA0B;IAEzC,YAAY,OAAO,GAAE,uBAA4B,EAEhD;IAED,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAEvC;IAED,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEhC;IAED,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAE9C;IAED,cAAc,IAAI,SAAS,EAAE,CAE5B;IAED,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAK5D;IAED,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAGjD;IAED,mBAAmB,IAAI,SAAS,EAAE,CAIjC;IAED,mBAAmB,IAAI,SAAS,EAAE,CAIjC;CACF"}
@@ -15,14 +15,14 @@ export function calculateMilestoneStatus(milestone, options = {}) {
15
15
  const totalItems = milestone.items.length;
16
16
  const completedItems = milestone.completedItems;
17
17
  if (completedItems >= totalItems) {
18
- return "completed";
18
+ return 'completed';
19
19
  }
20
20
  // Check if past target date
21
21
  const targetDate = new Date(milestone.targetDate);
22
22
  const today = new Date();
23
23
  const daysPast = Math.floor((today.getTime() - targetDate.getTime()) / (1000 * 60 * 60 * 24));
24
24
  if (opts.missedThreshold && daysPast > opts.missedThreshold) {
25
- return "missed";
25
+ return 'missed';
26
26
  }
27
27
  // Check progress percentage
28
28
  const progressPct = totalItems > 0 ? (completedItems / totalItems) * 100 : 0;
@@ -33,9 +33,9 @@ export function calculateMilestoneStatus(milestone, options = {}) {
33
33
  const daysElapsed = Math.max(0, Math.min(totalDays, totalDays - daysPast));
34
34
  const expectedPct = (daysElapsed / totalDays) * 100;
35
35
  if (progressPct < expectedPct * (1 - opts.atRiskThreshold / 100)) {
36
- return "at-risk";
36
+ return 'at-risk';
37
37
  }
38
- return "on-track";
38
+ return 'on-track';
39
39
  }
40
40
  /**
41
41
  * Milestone Manager
@@ -66,15 +66,13 @@ export class MilestoneManager {
66
66
  }
67
67
  getStatus(id) {
68
68
  const milestone = this.milestones.get(id);
69
- return milestone
70
- ? calculateMilestoneStatus(milestone, this.options)
71
- : undefined;
69
+ return milestone ? calculateMilestoneStatus(milestone, this.options) : undefined;
72
70
  }
73
71
  getAtRiskMilestones() {
74
- return this.listMilestones().filter((m) => calculateMilestoneStatus(m, this.options) === "at-risk");
72
+ return this.listMilestones().filter(m => calculateMilestoneStatus(m, this.options) === 'at-risk');
75
73
  }
76
74
  getMissedMilestones() {
77
- return this.listMilestones().filter((m) => calculateMilestoneStatus(m, this.options) === "missed");
75
+ return this.listMilestones().filter(m => calculateMilestoneStatus(m, this.options) === 'missed');
78
76
  }
79
77
  }
80
78
  //# sourceMappingURL=engine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Milestone Manager - RFC-0075
3
3
  */
4
- export * from "./types.js";
5
- export * from "./engine.js";
4
+ export * from './types.js';
5
+ export * from './engine.js';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Milestone Manager - RFC-0075
3
3
  */
4
- export * from "./types.js";
5
- export * from "./engine.js";
4
+ export * from './types.js';
5
+ export * from './engine.js';
6
6
  //# sourceMappingURL=index.js.map
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Track milestones against progress and alert when items are at risk.
5
5
  */
6
- export type MilestoneStatus = "on-track" | "at-risk" | "missed" | "completed";
6
+ export type MilestoneStatus = 'on-track' | 'at-risk' | 'missed' | 'completed';
7
7
  export interface Milestone {
8
8
  id: string;
9
9
  title: string;
@@ -19,7 +19,7 @@ export interface MilestoneManagerOptions {
19
19
  }
20
20
  export interface MilestoneUpdate {
21
21
  itemId: string;
22
- status: "added" | "completed" | "removed";
22
+ status: 'added' | 'completed' | 'removed';
23
23
  milestoneId: string;
24
24
  }
25
25
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9E,MAAM,WAAW,SAAS;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9E,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -4,110 +4,102 @@
4
4
  * Track milestones and calculate status.
5
5
  */
6
6
 
7
- import type {
8
- Milestone,
9
- MilestoneStatus,
10
- MilestoneManagerOptions,
11
- } from "./types.js";
7
+ import type { Milestone, MilestoneStatus, MilestoneManagerOptions } from './types.js';
12
8
 
13
9
  const DEFAULT_OPTIONS: MilestoneManagerOptions = {
14
- atRiskThreshold: 80,
15
- missedThreshold: 0,
10
+ atRiskThreshold: 80,
11
+ missedThreshold: 0,
16
12
  };
17
13
 
18
14
  /**
19
15
  * Calculate milestone status based on progress and time
20
16
  */
21
17
  export function calculateMilestoneStatus(
22
- milestone: Milestone,
23
- options: MilestoneManagerOptions = {},
18
+ milestone: Milestone,
19
+ options: MilestoneManagerOptions = {}
24
20
  ): MilestoneStatus {
25
- const opts = { ...DEFAULT_OPTIONS, ...options };
26
- const totalItems = milestone.items.length;
27
- const completedItems = milestone.completedItems;
28
-
29
- if (completedItems >= totalItems) {
30
- return "completed";
31
- }
32
-
33
- // Check if past target date
34
- const targetDate = new Date(milestone.targetDate);
35
- const today = new Date();
36
- const daysPast = Math.floor(
37
- (today.getTime() - targetDate.getTime()) / (1000 * 60 * 60 * 24),
38
- );
39
-
40
- if (opts.missedThreshold && daysPast > opts.missedThreshold) {
41
- return "missed";
42
- }
43
-
44
- // Check progress percentage
45
- const progressPct = totalItems > 0 ? (completedItems / totalItems) * 100 : 0;
46
-
47
- // Calculate expected progress based on time
48
- const startDate = new Date(milestone.targetDate);
49
- startDate.setDate(startDate.getDate() - 14); // Assume 2-week sprints
50
- const totalDays = 14;
51
- const daysElapsed = Math.max(0, Math.min(totalDays, totalDays - daysPast));
52
- const expectedPct = (daysElapsed / totalDays) * 100;
53
-
54
- if (progressPct < expectedPct * (1 - opts.atRiskThreshold! / 100)) {
55
- return "at-risk";
56
- }
57
-
58
- return "on-track";
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';
59
53
  }
60
54
 
61
55
  /**
62
56
  * Milestone Manager
63
57
  */
64
58
  export class MilestoneManager {
65
- private milestones: Map<string, Milestone> = new Map();
66
- private options: MilestoneManagerOptions;
67
-
68
- constructor(options: MilestoneManagerOptions = {}) {
69
- this.options = { ...DEFAULT_OPTIONS, ...options };
70
- }
71
-
72
- addMilestone(milestone: Milestone): void {
73
- this.milestones.set(milestone.id, milestone);
74
- }
75
-
76
- removeMilestone(id: string): void {
77
- this.milestones.delete(id);
78
- }
79
-
80
- getMilestone(id: string): Milestone | undefined {
81
- return this.milestones.get(id);
82
- }
83
-
84
- listMilestones(): Milestone[] {
85
- return [...this.milestones.values()];
86
- }
87
-
88
- updateMilestone(id: string, update: Partial<Milestone>): void {
89
- const milestone = this.milestones.get(id);
90
- if (milestone) {
91
- this.milestones.set(id, { ...milestone, ...update });
92
- }
93
- }
94
-
95
- getStatus(id: string): MilestoneStatus | undefined {
96
- const milestone = this.milestones.get(id);
97
- return milestone
98
- ? calculateMilestoneStatus(milestone, this.options)
99
- : undefined;
100
- }
101
-
102
- getAtRiskMilestones(): Milestone[] {
103
- return this.listMilestones().filter(
104
- (m) => calculateMilestoneStatus(m, this.options) === "at-risk",
105
- );
106
- }
107
-
108
- getMissedMilestones(): Milestone[] {
109
- return this.listMilestones().filter(
110
- (m) => calculateMilestoneStatus(m, this.options) === "missed",
111
- );
112
- }
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
+ }
113
105
  }
@@ -2,5 +2,5 @@
2
2
  * Milestone Manager - RFC-0075
3
3
  */
4
4
 
5
- export * from "./types.js";
6
- export * from "./engine.js";
5
+ export * from './types.js';
6
+ export * from './engine.js';
@@ -4,25 +4,25 @@
4
4
  * Track milestones against progress and alert when items are at risk.
5
5
  */
6
6
 
7
- export type MilestoneStatus = "on-track" | "at-risk" | "missed" | "completed";
7
+ export type MilestoneStatus = 'on-track' | 'at-risk' | 'missed' | 'completed';
8
8
 
9
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;
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
17
  }
18
18
 
19
19
  export interface MilestoneManagerOptions {
20
- atRiskThreshold?: number; // Percentage (default: 80%)
21
- missedThreshold?: number; // Days past target (default: 0)
20
+ atRiskThreshold?: number; // Percentage (default: 80%)
21
+ missedThreshold?: number; // Days past target (default: 0)
22
22
  }
23
23
 
24
24
  export interface MilestoneUpdate {
25
- itemId: string;
26
- status: "added" | "completed" | "removed";
27
- milestoneId: string;
25
+ itemId: string;
26
+ status: 'added' | 'completed' | 'removed';
27
+ milestoneId: string;
28
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"}