pi-harness-runtime 1.1.396 → 1.1.398

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 (236) hide show
  1. package/AGENTS.md +54 -7
  2. package/harness/notification-events.ts +6 -6
  3. package/index.ts +1 -1
  4. package/package.json +1 -1
  5. package/packages/a2a-adapter/package.json +1 -1
  6. package/packages/agent-policy/package.json +1 -1
  7. package/packages/architecture-generator/package.json +1 -1
  8. package/packages/auth/package.json +1 -1
  9. package/packages/autonomous-refactor/package.json +1 -1
  10. package/packages/autonomous-runtime/package.json +1 -1
  11. package/packages/cache-strategy/package.json +1 -1
  12. package/packages/capability-registry/package.json +1 -1
  13. package/packages/checkpoint/package.json +1 -1
  14. package/packages/cli-plugin-sdk/package.json +1 -1
  15. package/packages/clipboard/package.json +1 -1
  16. package/packages/clipboard-plugin/package.json +1 -1
  17. package/packages/code-generation/package.json +1 -1
  18. package/packages/code-review/package.json +1 -1
  19. package/packages/codex-adapter/package.json +1 -1
  20. package/packages/codex-watcher/package.json +1 -1
  21. package/packages/config-capture/package.json +1 -1
  22. package/packages/connection-runtime/package.json +1 -1
  23. package/packages/context-compiler/package.json +1 -1
  24. package/packages/context-discovery/package.json +1 -1
  25. package/packages/context-manager/package.json +1 -1
  26. package/packages/contracts/package.json +1 -1
  27. package/packages/cookie-sanitizer/package.json +1 -1
  28. package/packages/cost-optimizer/package.json +1 -1
  29. package/packages/dependency-analyzer/package.json +1 -1
  30. package/packages/django-plugin/package.json +1 -1
  31. package/packages/doc-generator/package.json +1 -1
  32. package/packages/durable-review/package.json +1 -1
  33. package/packages/e2e-tester/package.json +1 -1
  34. package/packages/evaluation-engine/package.json +1 -1
  35. package/packages/evaluation-runner/package.json +1 -1
  36. package/packages/event-bus/package.json +1 -1
  37. package/packages/event-sink/package.json +1 -1
  38. package/packages/event-store/package.json +1 -1
  39. package/packages/experience-replay/package.json +1 -1
  40. package/packages/feedback-collector/package.json +1 -1
  41. package/packages/file-copy-helper/package.json +1 -1
  42. package/packages/framework-detector/package.json +1 -1
  43. package/packages/framework-plugin-sdk/package.json +1 -1
  44. package/packages/frappe-plugin/package.json +1 -1
  45. package/packages/generic-web-plugin/package.json +1 -1
  46. package/packages/health-monitor/package.json +1 -1
  47. package/packages/intent-analyzer/package.json +1 -1
  48. package/packages/jev-judge/package.json +1 -1
  49. package/packages/knowledge-graph/package.json +1 -1
  50. package/packages/knowledge-retrieval/package.json +1 -1
  51. package/packages/laravel-plugin/package.json +1 -1
  52. package/packages/learning-engine/package.json +1 -1
  53. package/packages/logging/README.md +41 -6
  54. package/packages/logging/dist/classification.d.ts +65 -0
  55. package/packages/logging/dist/classification.d.ts.map +1 -0
  56. package/packages/logging/dist/classification.js +155 -0
  57. package/packages/logging/dist/classification.js.map +1 -0
  58. package/packages/logging/dist/config.d.ts +9 -0
  59. package/packages/logging/dist/config.d.ts.map +1 -1
  60. package/packages/logging/dist/config.js +40 -3
  61. package/packages/logging/dist/config.js.map +1 -1
  62. package/packages/logging/dist/index.d.ts +9 -1
  63. package/packages/logging/dist/index.d.ts.map +1 -1
  64. package/packages/logging/dist/index.js +10 -1
  65. package/packages/logging/dist/index.js.map +1 -1
  66. package/packages/logging/dist/ingest/schema.d.ts +60 -0
  67. package/packages/logging/dist/ingest/schema.d.ts.map +1 -0
  68. package/packages/logging/dist/ingest/schema.js +245 -0
  69. package/packages/logging/dist/ingest/schema.js.map +1 -0
  70. package/packages/logging/dist/installation.d.ts +32 -0
  71. package/packages/logging/dist/installation.d.ts.map +1 -0
  72. package/packages/logging/dist/installation.js +64 -0
  73. package/packages/logging/dist/installation.js.map +1 -0
  74. package/packages/logging/dist/sensitive-keys.d.ts +12 -0
  75. package/packages/logging/dist/sensitive-keys.d.ts.map +1 -0
  76. package/packages/logging/dist/sensitive-keys.js +39 -0
  77. package/packages/logging/dist/sensitive-keys.js.map +1 -0
  78. package/packages/logging/dist/server/credentials.d.ts +85 -0
  79. package/packages/logging/dist/server/credentials.d.ts.map +1 -0
  80. package/packages/logging/dist/server/credentials.js +147 -0
  81. package/packages/logging/dist/server/credentials.js.map +1 -0
  82. package/packages/logging/dist/server/http.d.ts +36 -0
  83. package/packages/logging/dist/server/http.d.ts.map +1 -0
  84. package/packages/logging/dist/server/http.js +139 -0
  85. package/packages/logging/dist/server/http.js.map +1 -0
  86. package/packages/logging/dist/server/index-store.d.ts +95 -0
  87. package/packages/logging/dist/server/index-store.d.ts.map +1 -0
  88. package/packages/logging/dist/server/index-store.js +190 -0
  89. package/packages/logging/dist/server/index-store.js.map +1 -0
  90. package/packages/logging/dist/server/index.d.ts +22 -0
  91. package/packages/logging/dist/server/index.d.ts.map +1 -0
  92. package/packages/logging/dist/server/index.js +15 -0
  93. package/packages/logging/dist/server/index.js.map +1 -0
  94. package/packages/logging/dist/server/keys.d.ts +22 -0
  95. package/packages/logging/dist/server/keys.d.ts.map +1 -0
  96. package/packages/logging/dist/server/keys.js +24 -0
  97. package/packages/logging/dist/server/keys.js.map +1 -0
  98. package/packages/logging/dist/server/outbox-worker.d.ts +55 -0
  99. package/packages/logging/dist/server/outbox-worker.d.ts.map +1 -0
  100. package/packages/logging/dist/server/outbox-worker.js +95 -0
  101. package/packages/logging/dist/server/outbox-worker.js.map +1 -0
  102. package/packages/logging/dist/server/outbox.d.ts +112 -0
  103. package/packages/logging/dist/server/outbox.d.ts.map +1 -0
  104. package/packages/logging/dist/server/outbox.js +247 -0
  105. package/packages/logging/dist/server/outbox.js.map +1 -0
  106. package/packages/logging/dist/server/service.d.ts +83 -0
  107. package/packages/logging/dist/server/service.d.ts.map +1 -0
  108. package/packages/logging/dist/server/service.js +144 -0
  109. package/packages/logging/dist/server/service.js.map +1 -0
  110. package/packages/logging/dist/shipper.d.ts +20 -4
  111. package/packages/logging/dist/shipper.d.ts.map +1 -1
  112. package/packages/logging/dist/shipper.js +31 -5
  113. package/packages/logging/dist/shipper.js.map +1 -1
  114. package/packages/logging/dist/singleton.d.ts.map +1 -1
  115. package/packages/logging/dist/singleton.js +3 -0
  116. package/packages/logging/dist/singleton.js.map +1 -1
  117. package/packages/logging/dist/types.d.ts +28 -1
  118. package/packages/logging/dist/types.d.ts.map +1 -1
  119. package/packages/logging/dist/types.js +8 -0
  120. package/packages/logging/dist/types.js.map +1 -1
  121. package/packages/logging/package.json +1 -1
  122. package/packages/logging/src/classification.ts +175 -0
  123. package/packages/logging/src/config.ts +60 -3
  124. package/packages/logging/src/index.ts +45 -1
  125. package/packages/logging/src/ingest/schema.ts +295 -0
  126. package/packages/logging/src/installation.ts +76 -0
  127. package/packages/logging/src/sensitive-keys.ts +40 -0
  128. package/packages/logging/src/server/credentials.ts +198 -0
  129. package/packages/logging/src/server/http.ts +170 -0
  130. package/packages/logging/src/server/index-store.ts +242 -0
  131. package/packages/logging/src/server/index.ts +56 -0
  132. package/packages/logging/src/server/keys.ts +32 -0
  133. package/packages/logging/src/server/outbox-worker.ts +124 -0
  134. package/packages/logging/src/server/outbox.ts +316 -0
  135. package/packages/logging/src/server/service.ts +196 -0
  136. package/packages/logging/src/shipper.ts +54 -8
  137. package/packages/logging/src/singleton.ts +3 -0
  138. package/packages/logging/src/types.ts +29 -1
  139. package/packages/logging/test/classification.test.ts +137 -0
  140. package/packages/logging/test/identity-transport.test.ts +197 -0
  141. package/packages/logging/test/ingest-schema.test.ts +184 -0
  142. package/packages/logging/test/integration.test.ts +9 -4
  143. package/packages/logging/test/log-http.test.ts +246 -0
  144. package/packages/logging/test/server.test.ts +444 -0
  145. package/packages/logging/test/shipper.test.ts +11 -11
  146. package/packages/logging/test/spool.test.ts +4 -1
  147. package/packages/mcp-adapter/package.json +1 -1
  148. package/packages/memory-engine/package.json +1 -1
  149. package/packages/milestone-manager/package.json +1 -1
  150. package/packages/model-registry/package.json +1 -1
  151. package/packages/nextjs-plugin/package.json +1 -1
  152. package/packages/notification/dist/adapters/detail-format.d.ts +34 -0
  153. package/packages/notification/dist/adapters/detail-format.d.ts.map +1 -0
  154. package/packages/notification/dist/adapters/detail-format.js +55 -0
  155. package/packages/notification/dist/adapters/detail-format.js.map +1 -0
  156. package/packages/notification/dist/adapters/email-adapter.d.ts.map +1 -1
  157. package/packages/notification/dist/adapters/email-adapter.js +3 -2
  158. package/packages/notification/dist/adapters/email-adapter.js.map +1 -1
  159. package/packages/notification/dist/adapters/line-adapter.d.ts.map +1 -1
  160. package/packages/notification/dist/adapters/line-adapter.js +3 -2
  161. package/packages/notification/dist/adapters/line-adapter.js.map +1 -1
  162. package/packages/notification/dist/adapters/ntfy-adapter.d.ts.map +1 -1
  163. package/packages/notification/dist/adapters/ntfy-adapter.js +3 -2
  164. package/packages/notification/dist/adapters/ntfy-adapter.js.map +1 -1
  165. package/packages/notification/dist/adapters/telegram-adapter.d.ts +14 -0
  166. package/packages/notification/dist/adapters/telegram-adapter.d.ts.map +1 -1
  167. package/packages/notification/dist/adapters/telegram-adapter.js +83 -67
  168. package/packages/notification/dist/adapters/telegram-adapter.js.map +1 -1
  169. package/packages/notification/dist/notification-center.d.ts.map +1 -1
  170. package/packages/notification/dist/notification-center.js +1 -0
  171. package/packages/notification/dist/notification-center.js.map +1 -1
  172. package/packages/notification/dist/types.d.ts +3 -0
  173. package/packages/notification/dist/types.d.ts.map +1 -1
  174. package/packages/notification/package.json +1 -1
  175. package/packages/notification/src/adapters/detail-format.ts +74 -0
  176. package/packages/notification/src/adapters/email-adapter.ts +3 -2
  177. package/packages/notification/src/adapters/line-adapter.ts +3 -2
  178. package/packages/notification/src/adapters/ntfy-adapter.ts +3 -2
  179. package/packages/notification/src/adapters/telegram-adapter.ts +92 -74
  180. package/packages/notification/src/notification-center.ts +1 -0
  181. package/packages/notification/src/types.ts +3 -0
  182. package/packages/notification/test/detail-format.test.ts +106 -0
  183. package/packages/observability/package.json +1 -1
  184. package/packages/okf-indexer/package.json +1 -1
  185. package/packages/paperclip-integration/package.json +1 -1
  186. package/packages/performance-optimizer/package.json +1 -1
  187. package/packages/permission-mode/package.json +1 -1
  188. package/packages/privilege-broker/package.json +1 -1
  189. package/packages/project-analyzer/package.json +1 -1
  190. package/packages/project-bootstrap/package.json +1 -1
  191. package/packages/projection-engine/package.json +1 -1
  192. package/packages/prompt-compiler/package.json +1 -1
  193. package/packages/prompt-versioning/package.json +1 -1
  194. package/packages/provider-adapter-sdk/package.json +1 -1
  195. package/packages/provider-router/package.json +1 -1
  196. package/packages/provider-selector/package.json +1 -1
  197. package/packages/providers/package.json +1 -1
  198. package/packages/qdrant-skills/package.json +1 -1
  199. package/packages/quota-manager/package.json +1 -1
  200. package/packages/rate-limiter/package.json +1 -1
  201. package/packages/react-vite-plugin/package.json +1 -1
  202. package/packages/relay/package.json +1 -1
  203. package/packages/release-manager/package.json +1 -1
  204. package/packages/requirement-compiler/package.json +1 -1
  205. package/packages/runtime/package.json +1 -1
  206. package/packages/scheduler/package.json +1 -1
  207. package/packages/scheduler-adapter/package.json +1 -1
  208. package/packages/session/package.json +1 -1
  209. package/packages/session-api/package.json +1 -1
  210. package/packages/session-export/package.json +1 -1
  211. package/packages/shared-context/package.json +1 -1
  212. package/packages/skill-mcp-client/package.json +1 -1
  213. package/packages/skill-registry/package.json +1 -1
  214. package/packages/skills/package.json +1 -1
  215. package/packages/sprint-planner/package.json +1 -1
  216. package/packages/subscription-engine/package.json +1 -1
  217. package/packages/task-compiler/package.json +1 -1
  218. package/packages/telegram/package.json +1 -1
  219. package/packages/tencentdb-memory/package.json +1 -1
  220. package/packages/tencentdb-sync/package.json +1 -1
  221. package/packages/test-data-generator/package.json +1 -1
  222. package/packages/test-generator/package.json +1 -1
  223. package/packages/todo-bd-sync/package.json +1 -1
  224. package/packages/token-estimation/package.json +1 -1
  225. package/packages/token-optimizer/package.json +1 -1
  226. package/packages/trajectory/package.json +1 -1
  227. package/packages/tui/package.json +1 -1
  228. package/packages/types/package.json +1 -1
  229. package/packages/voice-api/package.json +1 -1
  230. package/packages/webmcp-tester/package.json +1 -1
  231. package/packages/wiki/package.json +1 -1
  232. package/packages/workflow-events/package.json +1 -1
  233. package/packages/workspace-scanner/package.json +1 -1
  234. package/packages/worktree/package.json +1 -1
  235. package/packages/write-review/package.json +1 -1
  236. package/scripts/unified-webhook-server.ts +86 -81
@@ -41,11 +41,11 @@ describe("LogShipper", () => {
41
41
  const transport = recorder();
42
42
  const shipper = new LogShipper({ transports: [transport.transport], flushIntervalMs: 0 });
43
43
 
44
- shipper.info("unit", "started", "hello");
44
+ shipper.info("unit", "service.started", "hello");
45
45
  await shipper.flush();
46
46
 
47
47
  expect(transport.batches).toHaveLength(1);
48
- expect(transport.batches[0].records[0].event).toBe("started");
48
+ expect(transport.batches[0].records[0].event).toBe("service.started");
49
49
  expect(shipper.getStats().shipped).toBe(1);
50
50
  });
51
51
 
@@ -58,7 +58,7 @@ describe("LogShipper", () => {
58
58
  flushIntervalMs: 0,
59
59
  });
60
60
 
61
- shipper.info("unit", "started");
61
+ shipper.info("unit", "service.started");
62
62
  await shipper.flush();
63
63
 
64
64
  expect(working.batches).toHaveLength(1);
@@ -76,7 +76,7 @@ describe("LogShipper", () => {
76
76
  flushIntervalMs: 0,
77
77
  });
78
78
 
79
- shipper.info("unit", "started");
79
+ shipper.info("unit", "service.started");
80
80
  await shipper.flush();
81
81
 
82
82
  expect(spool.list()).toHaveLength(1);
@@ -94,7 +94,7 @@ describe("LogShipper", () => {
94
94
  flushIntervalMs: 0,
95
95
  });
96
96
 
97
- shipper.info("unit", "first");
97
+ shipper.info("unit", "service.first");
98
98
  await shipper.flush();
99
99
  expect(spool.list()).toHaveLength(1);
100
100
 
@@ -103,14 +103,14 @@ describe("LogShipper", () => {
103
103
 
104
104
  expect(spool.list()).toHaveLength(0);
105
105
  expect(failing.batches).toHaveLength(1);
106
- expect(failing.batches[0].records[0].event).toBe("first");
106
+ expect(failing.batches[0].records[0].event).toBe("service.first");
107
107
  });
108
108
 
109
109
  test("redacts secrets before shipping", async () => {
110
110
  const transport = recorder();
111
111
  const shipper = new LogShipper({ transports: [transport.transport], flushIntervalMs: 0 });
112
112
 
113
- shipper.info("unit", "login", "token=super-secret-value", { apiKey: "sk-should-not-ship" });
113
+ shipper.info("unit", "service.login", "token=super-secret-value", { apiKey: "sk-should-not-ship" });
114
114
  await shipper.flush();
115
115
 
116
116
  const serialized = JSON.stringify(transport.batches[0]);
@@ -128,7 +128,7 @@ describe("LogShipper", () => {
128
128
  const spool = new LogSpool({ dir });
129
129
  const shipper = new LogShipper({ transports: [], spool, flushIntervalMs: 0 });
130
130
 
131
- shipper.info("unit", "exit");
131
+ shipper.info("unit", "service.exit");
132
132
  shipper.flushSync();
133
133
 
134
134
  expect(spool.list()).toHaveLength(1);
@@ -142,11 +142,11 @@ describe("LogShipper", () => {
142
142
  sampling: { minLevel: "info", sampleRate: 0 },
143
143
  });
144
144
 
145
- shipper.debug("unit", "noisy");
146
- shipper.info("unit", "important");
145
+ shipper.debug("unit", "service.noisy");
146
+ shipper.info("unit", "service.important");
147
147
  await shipper.flush();
148
148
 
149
149
  expect(transport.batches[0].records).toHaveLength(1);
150
- expect(transport.batches[0].records[0].event).toBe("important");
150
+ expect(transport.batches[0].records[0].event).toBe("service.important");
151
151
  });
152
152
  });
@@ -4,6 +4,7 @@ import { tmpdir } from "node:os";
4
4
  import { join } from "node:path";
5
5
  import { LogSpool } from "../src/spool.js";
6
6
  import type { LogBatch, LogRecord } from "../src/types.js";
7
+ import { LOG_SCHEMA_VERSION } from "../src/types.js";
7
8
 
8
9
  const created: string[] = [];
9
10
 
@@ -24,9 +25,11 @@ function record(event: string): LogRecord {
24
25
 
25
26
  function batch(events: string[]): LogBatch {
26
27
  return {
28
+ schemaVersion: LOG_SCHEMA_VERSION,
27
29
  batchId: "batch-1",
28
30
  app: "test",
29
- host: "localhost",
31
+ installationId: "11111111-2222-3333-4444-555555555555",
32
+ hostLabel: "localhost",
30
33
  sentAt: new Date().toISOString(),
31
34
  records: events.map(record),
32
35
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/mcp-adapter",
3
- "version": "1.1.396",
3
+ "version": "1.1.398",
4
4
  "type": "module",
5
5
  "description": "MCP server adapter for pi-harness — exposes harness capabilities as MCP tools/resources/prompts (RFC-0068)",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/memory-engine",
3
- "version": "1.1.396",
3
+ "version": "1.1.398",
4
4
  "description": "Memory engine with OKF integration for durable knowledge management (RFC-0060)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/milestone-manager",
3
- "version": "1.1.396",
3
+ "version": "1.1.398",
4
4
  "description": "Track milestones and alerts when items are at risk",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/model-registry",
3
- "version": "1.1.396",
3
+ "version": "1.1.398",
4
4
  "description": "Model Registry for pi-harness-runtime — centralized model metadata with pricing",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/nextjs-plugin",
3
- "version": "1.1.396",
3
+ "version": "1.1.398",
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,34 @@
1
+ /**
2
+ * Shared rendering of the notification detail fields.
3
+ *
4
+ * `details.error` is reserved for events that represent an actual failure. A
5
+ * resume trigger ("provider-overload", "post-compact") or a quota detail is a
6
+ * reason, not an error, and must never be rendered under the "Error:" footer.
7
+ *
8
+ * Every adapter renders the detail fields through this module so the labels
9
+ * stay consistent across Telegram, LINE, ntfy and email.
10
+ */
11
+ import type { NotificationEvent, NotificationPayload } from "../types.js";
12
+ /** Events whose `details.error` really is an error. */
13
+ export declare const ERROR_EVENTS: ReadonlySet<NotificationEvent>;
14
+ export declare function isErrorEvent(event: NotificationEvent): boolean;
15
+ export interface DetailLine {
16
+ /** "Error" for a real failure, "Reason" for a trigger or a detail. */
17
+ label: "Error" | "Reason";
18
+ value: string;
19
+ }
20
+ /**
21
+ * Render the detail fields of a payload as footer lines.
22
+ *
23
+ * - `details.reason` becomes "Reason: ..." for every event.
24
+ * - `details.error` becomes "Error: ..." for the error events only.
25
+ * - A legacy `details.error` on a non-error event becomes "Reason: ..." so the
26
+ * information survives when a producer still uses the old field.
27
+ */
28
+ export declare function formatDetailLines(details: NotificationPayload["details"], event: NotificationEvent): DetailLine[];
29
+ /**
30
+ * The same lines as a plain text block, one per line.
31
+ * An empty string when there is nothing to render.
32
+ */
33
+ export declare function formatDetailText(details: NotificationPayload["details"], event: NotificationEvent): string;
34
+ //# sourceMappingURL=detail-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detail-format.d.ts","sourceRoot":"","sources":["../../src/adapters/detail-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE1E,uDAAuD;AACvD,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,iBAAiB,CAItD,CAAC;AAEH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAE9D;AAED,MAAM,WAAW,UAAU;IAC1B,sEAAsE;IACtE,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACd;AAQD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,EACvC,KAAK,EAAE,iBAAiB,GACtB,UAAU,EAAE,CAad;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC/B,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,EACvC,KAAK,EAAE,iBAAiB,GACtB,MAAM,CAIR"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Shared rendering of the notification detail fields.
3
+ *
4
+ * `details.error` is reserved for events that represent an actual failure. A
5
+ * resume trigger ("provider-overload", "post-compact") or a quota detail is a
6
+ * reason, not an error, and must never be rendered under the "Error:" footer.
7
+ *
8
+ * Every adapter renders the detail fields through this module so the labels
9
+ * stay consistent across Telegram, LINE, ntfy and email.
10
+ */
11
+ /** Events whose `details.error` really is an error. */
12
+ export const ERROR_EVENTS = new Set([
13
+ "TaskFailed",
14
+ "E2EFailed",
15
+ "Error",
16
+ ]);
17
+ export function isErrorEvent(event) {
18
+ return ERROR_EVENTS.has(event);
19
+ }
20
+ function readString(value) {
21
+ if (typeof value !== "string")
22
+ return undefined;
23
+ const trimmed = value.trim();
24
+ return trimmed.length > 0 ? trimmed : undefined;
25
+ }
26
+ /**
27
+ * Render the detail fields of a payload as footer lines.
28
+ *
29
+ * - `details.reason` becomes "Reason: ..." for every event.
30
+ * - `details.error` becomes "Error: ..." for the error events only.
31
+ * - A legacy `details.error` on a non-error event becomes "Reason: ..." so the
32
+ * information survives when a producer still uses the old field.
33
+ */
34
+ export function formatDetailLines(details, event) {
35
+ const lines = [];
36
+ const reason = readString(details?.reason);
37
+ const error = readString(details?.error);
38
+ if (reason) {
39
+ lines.push({ label: "Reason", value: reason });
40
+ }
41
+ if (error) {
42
+ lines.push({ label: isErrorEvent(event) ? "Error" : "Reason", value: error });
43
+ }
44
+ return lines;
45
+ }
46
+ /**
47
+ * The same lines as a plain text block, one per line.
48
+ * An empty string when there is nothing to render.
49
+ */
50
+ export function formatDetailText(details, event) {
51
+ return formatDetailLines(details, event)
52
+ .map((line) => `${line.label}: ${line.value}`)
53
+ .join("\n");
54
+ }
55
+ //# sourceMappingURL=detail-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detail-format.js","sourceRoot":"","sources":["../../src/adapters/detail-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,uDAAuD;AACvD,MAAM,CAAC,MAAM,YAAY,GAAmC,IAAI,GAAG,CAAoB;IACtF,YAAY;IACZ,WAAW;IACX,OAAO;CACP,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACpD,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAQD,SAAS,UAAU,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAChC,OAAuC,EACvC,KAAwB;IAExB,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAEzC,IAAI,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC/B,OAAuC,EACvC,KAAwB;IAExB,OAAO,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC;SACtC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;SAC7C,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC"}
@@ -1 +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;AA2BxD,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"}
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;AA4BxD,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"}
@@ -4,6 +4,7 @@
4
4
  * Sends notifications via SMTP.
5
5
  */
6
6
  import { BaseChannelAdapter } from "../base-adapter.js";
7
+ import { formatDetailLines } from "./detail-format.js";
7
8
  import { logInfo } from "../file-logger.js";
8
9
  // Simple SMTP client using built-in net module
9
10
  async function sendSmtpEmail(host, port, user, password, from, to, subject, body, tls = false) {
@@ -64,8 +65,8 @@ export class EmailAdapter extends BaseChannelAdapter {
64
65
  if (payload.details?.jobId) {
65
66
  lines.push(`Job ID: ${payload.details.jobId}`);
66
67
  }
67
- if (payload.details?.error) {
68
- lines.push("", `Error: ${payload.details.error}`);
68
+ for (const detail of formatDetailLines(payload.details, payload.event)) {
69
+ lines.push("", `${detail.label}: ${detail.value}`);
69
70
  }
70
71
  return lines.join("\n");
71
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"email-adapter.js","sourceRoot":"","sources":["../../src/adapters/email-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"email-adapter.js","sourceRoot":"","sources":["../../src/adapters/email-adapter.ts"],"names":[],"mappings":"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"}
@@ -1 +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;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,oCAAoC,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,GACZ,MAAM,CAmBR;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAarE;AAeD,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,CA4CnC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2DpE;IAED,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,QAAQ;CAiBhB"}
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;AAGxD;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,oCAAoC,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,GACZ,MAAM,CAmBR;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAarE;AAeD,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,CA4CnC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2DpE;IAED,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,QAAQ;CAiBhB"}
@@ -4,6 +4,7 @@
4
4
  * Sends notifications via LINE Messaging API.
5
5
  */
6
6
  import { BaseChannelAdapter } from "../base-adapter.js";
7
+ import { formatDetailLines } from "./detail-format.js";
7
8
  /**
8
9
  * The endpoint that validates a channel access token.
9
10
  *
@@ -189,8 +190,8 @@ export class LineAdapter extends BaseChannelAdapter {
189
190
  if (payload.details?.jobId) {
190
191
  lines.push(`Job: ${payload.details.jobId}`);
191
192
  }
192
- if (payload.details?.error) {
193
- lines.push("", `Error: ${payload.details.error}`);
193
+ for (const detail of formatDetailLines(payload.details, payload.event)) {
194
+ lines.push("", `${detail.label}: ${detail.value}`);
194
195
  }
195
196
  return lines.filter(Boolean).join("\n");
196
197
  }
@@ -1 +1 @@
1
- {"version":3,"file":"line-adapter.js","sourceRoot":"","sources":["../../src/adapters/line-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"line-adapter.js","sourceRoot":"","sources":["../../src/adapters/line-adapter.ts"],"names":[],"mappings":"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"}
@@ -1 +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"}
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;AAGxD,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"}
@@ -4,6 +4,7 @@
4
4
  * Sends notifications via ntfy.sh (or self-hosted ntfy server).
5
5
  */
6
6
  import { BaseChannelAdapter } from "../base-adapter.js";
7
+ import { formatDetailLines } from "./detail-format.js";
7
8
  export class NtfyAdapter extends BaseChannelAdapter {
8
9
  id = "ntfy";
9
10
  type = "ntfy";
@@ -58,8 +59,8 @@ export class NtfyAdapter extends BaseChannelAdapter {
58
59
  if (payload.details?.jobId) {
59
60
  lines.push(`Job: ${payload.details.jobId}`);
60
61
  }
61
- if (payload.details?.error) {
62
- lines.push(`\nError: ${payload.details.error}`);
62
+ for (const detail of formatDetailLines(payload.details, payload.event)) {
63
+ lines.push(`\n${detail.label}: ${detail.value}`);
63
64
  }
64
65
  return lines.join("");
65
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ntfy-adapter.js","sourceRoot":"","sources":["../../src/adapters/ntfy-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ntfy-adapter.js","sourceRoot":"","sources":["../../src/adapters/ntfy-adapter.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,20 @@ import type { NotificationPayload, NotificationResult, TelegramCallbackHandler,
9
9
  */
10
10
  type TelegramMessageHandler = (text: string, chatId: string) => Promise<void>;
11
11
  import { BaseChannelAdapter } from "../base-adapter.js";
12
+ /**
13
+ * The status label of an event.
14
+ *
15
+ * Use ASCII labels per AGENTS.md convention - emoji render inconsistently
16
+ * across terminals and break the alignment of the machine readable output.
17
+ */
18
+ export declare function telegramStatusLabel(event: NotificationPayload["event"]): string;
19
+ /**
20
+ * Render the Telegram message of a payload.
21
+ *
22
+ * Exported so the rendering can be tested without a Telegram connection: the
23
+ * detail footer must never label a resume trigger as an error.
24
+ */
25
+ export declare function buildTelegramMessage(payload: NotificationPayload): string;
12
26
  export declare class TelegramAdapter extends BaseChannelAdapter {
13
27
  readonly id = "telegram";
14
28
  readonly type = "telegram";
@@ -1 +1 @@
1
- {"version":3,"file":"telegram-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/telegram-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telegram-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/telegram-adapter.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ import { logError, logInfo, logWarn } from "../file-logger.js";
12
12
  import { isAuthorizedTelegramSender } from "../telegram-auth.js";
13
13
  import { BaseChannelAdapter } from "../base-adapter.js";
14
14
  import { maskString } from "../mask-secrets.js";
15
+ import { formatDetailLines } from "./detail-format.js";
15
16
  import { filterTelegramContent, getSafeNotificationLog } from "../telegram-content-filter.js";
16
17
  /**
17
18
  * Bounded retry for a rejected getUpdates call (409).
@@ -24,6 +25,86 @@ import { filterTelegramContent, getSafeNotificationLog } from "../telegram-conte
24
25
  const POLL_RETRY_MAX_ATTEMPTS = 5;
25
26
  const POLL_RETRY_BASE_DELAY_MS = 10_000;
26
27
  const POLL_RETRY_MAX_DELAY_MS = 120_000;
28
+ /**
29
+ * The status label of an event.
30
+ *
31
+ * Use ASCII labels per AGENTS.md convention - emoji render inconsistently
32
+ * across terminals and break the alignment of the machine readable output.
33
+ */
34
+ export function telegramStatusLabel(event) {
35
+ const labels = {
36
+ JobStarted: "[START]",
37
+ TaskCompleted: "[OK]",
38
+ TaskFailed: "[FAIL]",
39
+ QuotaPaused: "[PAUSE]",
40
+ ResumeScheduled: "[RESUME]",
41
+ ContextCompacted: "[COMPACT]",
42
+ OutputLimitContinued: "[CONTINUE]",
43
+ E2EFailed: "[TEST]",
44
+ HumanReviewNeeded: "[REVIEW]",
45
+ ReadyForClient: "[DONE]",
46
+ JobCancelled: "[CANCEL]",
47
+ Error: "[ERROR]",
48
+ WaitingForUserInput: "[INPUT]",
49
+ Info: "[INFO]",
50
+ CodexSessionStarted: "[CODEX]",
51
+ CodexPlanDetected: "[PLAN]",
52
+ AssistantResponse: "[TODO]",
53
+ ToolSummary: "[TOOL]",
54
+ };
55
+ return labels[event] ?? "[MSG]";
56
+ }
57
+ /**
58
+ * Render the Telegram message of a payload.
59
+ *
60
+ * Exported so the rendering can be tested without a Telegram connection: the
61
+ * detail footer must never label a resume trigger as an error.
62
+ */
63
+ export function buildTelegramMessage(payload) {
64
+ // Mask all fields before rendering - defense in depth
65
+ const maskedTitle = maskString(payload.title);
66
+ const maskedMessage = maskString(payload.message);
67
+ const taskTitle = payload.details?.taskTitle;
68
+ const jobId = payload.details?.jobId;
69
+ const ordinal = payload.details?.ordinal;
70
+ const planPath = payload.details?.planPath;
71
+ const projectRoot = payload.details?.projectRoot;
72
+ const maskedTaskTitle = typeof taskTitle === "string" ? maskString(taskTitle) : undefined;
73
+ const maskedJobId = typeof jobId === "string" ? maskString(jobId) : undefined;
74
+ const maskedProjectRoot = typeof projectRoot === "string" ? maskString(projectRoot) : undefined;
75
+ const maskedPlanPath = typeof planPath === "string" ? maskString(planPath) : undefined;
76
+ // Get hostname for multi-machine identification
77
+ const hostTag = `[${hostname()}]`;
78
+ const label = telegramStatusLabel(payload.event);
79
+ const title = `${label} ${maskedTitle} ${hostTag}`;
80
+ const lines = [title];
81
+ // Add metadata for Codex events
82
+ if (maskedTaskTitle) {
83
+ lines.push("", `Task: ${maskedTaskTitle}`);
84
+ }
85
+ if (maskedProjectRoot) {
86
+ lines.push(`Root: ${maskedProjectRoot}`);
87
+ }
88
+ if (ordinal !== undefined) {
89
+ lines.push(`Ordinal: ${ordinal}`);
90
+ }
91
+ if (maskedPlanPath) {
92
+ lines.push(`Plan: ${maskedPlanPath}`);
93
+ }
94
+ // Add message content (artifact content flows through message)
95
+ if (maskedMessage) {
96
+ lines.push("", maskedMessage);
97
+ }
98
+ if (maskedJobId) {
99
+ lines.push(`Job: ${maskedJobId}`);
100
+ }
101
+ // Detail fields: "Error:" only for real failures, "Reason:" for a trigger.
102
+ for (const detail of formatDetailLines(payload.details, payload.event)) {
103
+ lines.push("", `${detail.label}: ${maskString(detail.value)}`);
104
+ }
105
+ // Final mask pass on the complete rendered string
106
+ return maskString(lines.filter(Boolean).join("\n"));
107
+ }
27
108
  export class TelegramAdapter extends BaseChannelAdapter {
28
109
  id = "telegram";
29
110
  type = "telegram";
@@ -867,50 +948,7 @@ export class TelegramAdapter extends BaseChannelAdapter {
867
948
  }
868
949
  }
869
950
  formatMessage(payload) {
870
- // Mask all fields before rendering - defense in depth
871
- const maskedTitle = maskString(payload.title);
872
- const maskedMessage = maskString(payload.message);
873
- const taskTitle = payload.details?.taskTitle;
874
- const jobId = payload.details?.jobId;
875
- const errorVal = payload.details?.error;
876
- const ordinal = payload.details?.ordinal;
877
- const planPath = payload.details?.planPath;
878
- const projectRoot = payload.details?.projectRoot;
879
- const maskedTaskTitle = typeof taskTitle === "string" ? maskString(taskTitle) : undefined;
880
- const maskedJobId = typeof jobId === "string" ? maskString(jobId) : undefined;
881
- const maskedError = typeof errorVal === "string" ? maskString(errorVal) : undefined;
882
- const maskedProjectRoot = typeof projectRoot === "string" ? maskString(projectRoot) : undefined;
883
- const maskedPlanPath = typeof planPath === "string" ? maskString(planPath) : undefined;
884
- // Get hostname for multi-machine identification
885
- const hostTag = `[${hostname()}]`;
886
- const label = this.getStatusLabel(payload.event);
887
- const title = `${label} ${maskedTitle} ${hostTag}`;
888
- const lines = [title];
889
- // Add metadata for Codex events
890
- if (maskedTaskTitle) {
891
- lines.push("", `Task: ${maskedTaskTitle}`);
892
- }
893
- if (maskedProjectRoot) {
894
- lines.push(`Root: ${maskedProjectRoot}`);
895
- }
896
- if (ordinal !== undefined) {
897
- lines.push(`Ordinal: ${ordinal}`);
898
- }
899
- if (maskedPlanPath) {
900
- lines.push(`Plan: ${maskedPlanPath}`);
901
- }
902
- // Add message content (artifact content flows through message)
903
- if (maskedMessage) {
904
- lines.push("", maskedMessage);
905
- }
906
- if (maskedJobId) {
907
- lines.push(`Job: ${maskedJobId}`);
908
- }
909
- if (maskedError) {
910
- lines.push("", `Error: ${maskedError}`);
911
- }
912
- // Final mask pass on the complete rendered string
913
- return maskString(lines.filter(Boolean).join("\n"));
951
+ return buildTelegramMessage(payload);
914
952
  }
915
953
  /**
916
954
  * Split long messages into ordered chunks for Telegram.
@@ -943,29 +981,7 @@ export class TelegramAdapter extends BaseChannelAdapter {
943
981
  return chunks;
944
982
  }
945
983
  getStatusLabel(event) {
946
- // Use ASCII labels per AGENTS.md convention
947
- // Avoid emoji which renders inconsistently across terminals
948
- const labels = {
949
- JobStarted: "[START]",
950
- TaskCompleted: "[OK]",
951
- TaskFailed: "[FAIL]",
952
- QuotaPaused: "[PAUSE]",
953
- ResumeScheduled: "[RESUME]",
954
- ContextCompacted: "[COMPACT]",
955
- OutputLimitContinued: "[CONTINUE]",
956
- E2EFailed: "[TEST]",
957
- HumanReviewNeeded: "[REVIEW]",
958
- ReadyForClient: "[DONE]",
959
- JobCancelled: "[CANCEL]",
960
- Error: "[ERROR]",
961
- WaitingForUserInput: "[INPUT]",
962
- Info: "[INFO]",
963
- CodexSessionStarted: "[CODEX]",
964
- CodexPlanDetected: "[PLAN]",
965
- AssistantResponse: "[TODO]",
966
- ToolSummary: "[TOOL]",
967
- };
968
- return labels[event] ?? "[MSG]";
984
+ return telegramStatusLabel(event);
969
985
  }
970
986
  }
971
987
  //# sourceMappingURL=telegram-adapter.js.map