pi-harness-runtime 1.1.145 → 1.1.147

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 (176) hide show
  1. package/README.md +113 -0
  2. package/index.ts +136 -6
  3. package/package.json +2 -2
  4. package/packages/a2a-adapter/package.json +1 -1
  5. package/packages/architecture-generator/package.json +1 -1
  6. package/packages/auth/package.json +1 -1
  7. package/packages/autonomous-refactor/package.json +1 -1
  8. package/packages/autonomous-runtime/package.json +1 -1
  9. package/packages/cache-strategy/package.json +1 -1
  10. package/packages/capability-registry/package.json +1 -1
  11. package/packages/checkpoint/package.json +1 -1
  12. package/packages/cli-plugin-sdk/package.json +1 -1
  13. package/packages/clipboard/package.json +1 -1
  14. package/packages/clipboard-plugin/package.json +1 -1
  15. package/packages/code-generation/package.json +1 -1
  16. package/packages/code-review/package.json +1 -1
  17. package/packages/codex-adapter/package.json +1 -1
  18. package/packages/codex-watcher/package.json +1 -1
  19. package/packages/config-capture/package.json +1 -1
  20. package/packages/context-compiler/package.json +1 -1
  21. package/packages/context-discovery/package.json +1 -1
  22. package/packages/context-manager/package.json +1 -1
  23. package/packages/cookie-sanitizer/package.json +1 -1
  24. package/packages/cost-optimizer/package.json +1 -1
  25. package/packages/dependency-analyzer/package.json +1 -1
  26. package/packages/django-plugin/package.json +1 -1
  27. package/packages/doc-generator/package.json +1 -1
  28. package/packages/evaluation-engine/package.json +1 -1
  29. package/packages/evaluation-runner/package.json +1 -1
  30. package/packages/event-bus/package.json +1 -1
  31. package/packages/event-store/package.json +1 -1
  32. package/packages/experience-replay/package.json +1 -1
  33. package/packages/feedback-collector/package.json +1 -1
  34. package/packages/file-copy-helper/package.json +1 -1
  35. package/packages/framework-detector/package.json +1 -1
  36. package/packages/framework-plugin-sdk/package.json +1 -1
  37. package/packages/frappe-plugin/package.json +1 -1
  38. package/packages/generic-web-plugin/package.json +1 -1
  39. package/packages/health-monitor/package.json +1 -1
  40. package/packages/intent-analyzer/package.json +1 -1
  41. package/packages/jev-judge/package.json +1 -1
  42. package/packages/knowledge-graph/package.json +1 -1
  43. package/packages/knowledge-retrieval/package.json +1 -1
  44. package/packages/laravel-plugin/package.json +1 -1
  45. package/packages/learning-engine/package.json +1 -1
  46. package/packages/mcp-adapter/package.json +1 -1
  47. package/packages/memory-engine/package.json +1 -1
  48. package/packages/milestone-manager/package.json +1 -1
  49. package/packages/model-registry/package.json +1 -1
  50. package/packages/nextjs-plugin/package.json +1 -1
  51. package/packages/notification/dist/src/adapters/email-adapter.d.ts.map +1 -0
  52. package/packages/notification/dist/src/adapters/email-adapter.js.map +1 -0
  53. package/packages/notification/dist/src/adapters/line-adapter.d.ts.map +1 -0
  54. package/packages/notification/dist/src/adapters/line-adapter.js.map +1 -0
  55. package/packages/notification/dist/src/adapters/ntfy-adapter.d.ts.map +1 -0
  56. package/packages/notification/dist/src/adapters/ntfy-adapter.js.map +1 -0
  57. package/packages/notification/dist/src/adapters/telegram-adapter.d.ts +56 -0
  58. package/packages/notification/dist/src/adapters/telegram-adapter.d.ts.map +1 -0
  59. package/packages/notification/dist/src/adapters/telegram-adapter.js +251 -0
  60. package/packages/notification/dist/src/adapters/telegram-adapter.js.map +1 -0
  61. package/packages/notification/dist/src/adapters/webhook-adapter.d.ts.map +1 -0
  62. package/packages/notification/dist/src/adapters/webhook-adapter.js.map +1 -0
  63. package/packages/notification/dist/src/base-adapter.d.ts.map +1 -0
  64. package/packages/notification/dist/src/base-adapter.js.map +1 -0
  65. package/packages/notification/dist/{index.d.ts → src/index.d.ts} +2 -0
  66. package/packages/notification/dist/src/index.d.ts.map +1 -0
  67. package/packages/notification/dist/{index.js → src/index.js} +2 -0
  68. package/packages/notification/dist/src/index.js.map +1 -0
  69. package/packages/notification/dist/src/notification-center.d.ts +89 -0
  70. package/packages/notification/dist/src/notification-center.d.ts.map +1 -0
  71. package/packages/notification/dist/{notification-center.js → src/notification-center.js} +103 -1
  72. package/packages/notification/dist/src/notification-center.js.map +1 -0
  73. package/packages/notification/dist/src/notification-policy.d.ts +66 -0
  74. package/packages/notification/dist/src/notification-policy.d.ts.map +1 -0
  75. package/packages/notification/dist/src/notification-policy.js +153 -0
  76. package/packages/notification/dist/src/notification-policy.js.map +1 -0
  77. package/packages/notification/dist/src/telegram-webhook-handler.d.ts +86 -0
  78. package/packages/notification/dist/src/telegram-webhook-handler.d.ts.map +1 -0
  79. package/packages/notification/dist/src/telegram-webhook-handler.js +149 -0
  80. package/packages/notification/dist/src/telegram-webhook-handler.js.map +1 -0
  81. package/packages/notification/dist/{types.d.ts → src/types.d.ts} +37 -0
  82. package/packages/notification/dist/src/types.d.ts.map +1 -0
  83. package/packages/notification/dist/src/types.js.map +1 -0
  84. package/packages/notification/package.json +1 -1
  85. package/packages/notification/src/adapters/telegram-adapter.ts +187 -5
  86. package/packages/notification/src/index.ts +2 -0
  87. package/packages/notification/src/notification-center.ts +139 -0
  88. package/packages/notification/src/notification-policy.ts +203 -0
  89. package/packages/notification/src/telegram-webhook-handler.ts +211 -0
  90. package/packages/notification/src/types.ts +42 -0
  91. package/packages/observability/package.json +1 -1
  92. package/packages/okf-indexer/package.json +1 -1
  93. package/packages/paperclip-integration/dist/index.d.ts.map +1 -1
  94. package/packages/paperclip-integration/dist/index.js +30 -18
  95. package/packages/paperclip-integration/dist/index.js.map +1 -1
  96. package/packages/paperclip-integration/package.json +1 -1
  97. package/packages/paperclip-integration/src/index.ts +35 -20
  98. package/packages/performance-optimizer/package.json +1 -1
  99. package/packages/privilege-broker/package.json +1 -1
  100. package/packages/project-analyzer/package.json +1 -1
  101. package/packages/project-bootstrap/package.json +1 -1
  102. package/packages/projection-engine/package.json +1 -1
  103. package/packages/prompt-compiler/package.json +1 -1
  104. package/packages/prompt-versioning/package.json +1 -1
  105. package/packages/provider-adapter-sdk/package.json +1 -1
  106. package/packages/provider-router/package.json +1 -1
  107. package/packages/provider-selector/package.json +1 -1
  108. package/packages/providers/package.json +1 -1
  109. package/packages/qdrant-skills/package.json +1 -1
  110. package/packages/quota-manager/package.json +1 -1
  111. package/packages/rate-limiter/package.json +1 -1
  112. package/packages/react-vite-plugin/package.json +1 -1
  113. package/packages/release-manager/package.json +1 -1
  114. package/packages/requirement-compiler/package.json +1 -1
  115. package/packages/runtime/package.json +1 -1
  116. package/packages/scheduler/package.json +1 -1
  117. package/packages/scheduler-adapter/package.json +1 -1
  118. package/packages/session/package.json +1 -1
  119. package/packages/session-api/package.json +1 -1
  120. package/packages/session-export/package.json +1 -1
  121. package/packages/shared-context/package.json +1 -1
  122. package/packages/skill-mcp-client/package.json +1 -1
  123. package/packages/skill-registry/package.json +1 -1
  124. package/packages/skills/package.json +1 -1
  125. package/packages/sprint-planner/package.json +1 -1
  126. package/packages/subscription-engine/package.json +1 -1
  127. package/packages/task-compiler/package.json +1 -1
  128. package/packages/tencentdb-memory/package.json +1 -1
  129. package/packages/tencentdb-sync/package.json +1 -1
  130. package/packages/test-data-generator/package.json +1 -1
  131. package/packages/test-generator/package.json +1 -1
  132. package/packages/todo-bd-sync/package.json +1 -1
  133. package/packages/token-estimation/package.json +1 -1
  134. package/packages/token-optimizer/package.json +1 -1
  135. package/packages/trajectory/package.json +1 -1
  136. package/packages/tui/package.json +1 -1
  137. package/packages/types/package.json +1 -1
  138. package/packages/workflow-events/package.json +1 -1
  139. package/packages/workspace-scanner/package.json +1 -1
  140. package/packages/worktree/package.json +1 -1
  141. package/packages/write-review/package.json +1 -1
  142. package/scripts/telegram-callback-processor.ts +180 -0
  143. package/scripts/telegram-webhook-server.ts +387 -0
  144. package/scripts/test-telegram-approval.ts +64 -0
  145. package/packages/notification/dist/adapters/email-adapter.d.ts.map +0 -1
  146. package/packages/notification/dist/adapters/email-adapter.js.map +0 -1
  147. package/packages/notification/dist/adapters/line-adapter.d.ts.map +0 -1
  148. package/packages/notification/dist/adapters/line-adapter.js.map +0 -1
  149. package/packages/notification/dist/adapters/ntfy-adapter.d.ts.map +0 -1
  150. package/packages/notification/dist/adapters/ntfy-adapter.js.map +0 -1
  151. package/packages/notification/dist/adapters/telegram-adapter.d.ts +0 -19
  152. package/packages/notification/dist/adapters/telegram-adapter.d.ts.map +0 -1
  153. package/packages/notification/dist/adapters/telegram-adapter.js +0 -97
  154. package/packages/notification/dist/adapters/telegram-adapter.js.map +0 -1
  155. package/packages/notification/dist/adapters/webhook-adapter.d.ts.map +0 -1
  156. package/packages/notification/dist/adapters/webhook-adapter.js.map +0 -1
  157. package/packages/notification/dist/base-adapter.d.ts.map +0 -1
  158. package/packages/notification/dist/base-adapter.js.map +0 -1
  159. package/packages/notification/dist/index.d.ts.map +0 -1
  160. package/packages/notification/dist/index.js.map +0 -1
  161. package/packages/notification/dist/notification-center.d.ts +0 -50
  162. package/packages/notification/dist/notification-center.d.ts.map +0 -1
  163. package/packages/notification/dist/notification-center.js.map +0 -1
  164. package/packages/notification/dist/types.d.ts.map +0 -1
  165. package/packages/notification/dist/types.js.map +0 -1
  166. /package/packages/notification/dist/{adapters → src/adapters}/email-adapter.d.ts +0 -0
  167. /package/packages/notification/dist/{adapters → src/adapters}/email-adapter.js +0 -0
  168. /package/packages/notification/dist/{adapters → src/adapters}/line-adapter.d.ts +0 -0
  169. /package/packages/notification/dist/{adapters → src/adapters}/line-adapter.js +0 -0
  170. /package/packages/notification/dist/{adapters → src/adapters}/ntfy-adapter.d.ts +0 -0
  171. /package/packages/notification/dist/{adapters → src/adapters}/ntfy-adapter.js +0 -0
  172. /package/packages/notification/dist/{adapters → src/adapters}/webhook-adapter.d.ts +0 -0
  173. /package/packages/notification/dist/{adapters → src/adapters}/webhook-adapter.js +0 -0
  174. /package/packages/notification/dist/{base-adapter.d.ts → src/base-adapter.d.ts} +0 -0
  175. /package/packages/notification/dist/{base-adapter.js → src/base-adapter.js} +0 -0
  176. /package/packages/notification/dist/{types.js → src/types.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/session-api",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/session-export",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/shared-context",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "pi-harness-runtime — shared-context",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/skill-mcp-client",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "MCP client for Skills SaaS backend",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/skill-registry",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Skill Registry for pi-harness-runtime — dynamic skill discovery and invocation",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/skills",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "File-based skill system with pi.dev compatibility and Hermes self-improvement",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/sprint-planner",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "type": "module",
5
5
  "description": "Sprint planning engine for pi-harness",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/subscription-engine",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/task-compiler",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Task Compiler for pi-harness-runtime — produces deterministic task DAG from CompiledRequirement",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moocoding/tencentdb-memory",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "TencentDB Agent Memory client - sync skills to centralized knowledge base",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/tencentdb-sync",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Sync SKILL.md skills to TencentDB-Agent-Memory server (RFC-0105/0106)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/test-data-generator",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Test data generation for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/test-generator",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Auto-Test Generator — generate unit and E2E tests from source code (RFC-0013)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moocoding/todo-bd-sync",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Two-way sync between rpiv-todo overlay and bd issue tracker",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/token-estimation",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "pi-harness-runtime — token-estimation",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/token-optimizer",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Token Budget Optimizer — maximize prompt value within token limits (RFC-0011)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/trajectory",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Trajectory capture for the write-review loop — persists cycle records for learning",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/tui",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "pi-harness-runtime — tui",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/types",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Shared TypeScript types for pi-harness-runtime packages",
5
5
  "type": "module",
6
6
  "main": "./src/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/workflow-events",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/workspace-scanner",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/worktree",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "pi-harness-runtime — worktree",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moocoding/write-review",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Two-agent write-review loop with blackboard coordination",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -0,0 +1,180 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Telegram Callback Queue Processor — RFC-0022
4
+ *
5
+ * Polls the callback queue file and processes approve/reject actions.
6
+ * Writes job commands to a pipe file that pi-harness watches.
7
+ *
8
+ * Usage:
9
+ * bun run scripts/telegram-callback-processor.ts
10
+ */
11
+
12
+ import { existsSync, readFileSync, writeFileSync, appendFileSync } from "node:fs";
13
+ import { join } from "node:path";
14
+
15
+ export interface CallbackQueueItem {
16
+ timestamp: string;
17
+ queryId: string;
18
+ userId: number;
19
+ username?: string;
20
+ data: string;
21
+ action: string;
22
+ targetId: string;
23
+ }
24
+
25
+ export interface CallbackProcessorConfig {
26
+ queueFile: string;
27
+ jobPipeFile: string;
28
+ onApprove?: (targetId: string, item: CallbackQueueItem) => Promise<void>;
29
+ onReject?: (targetId: string, item: CallbackQueueItem) => Promise<void>;
30
+ onUnknown?: (action: string, targetId: string, item: CallbackQueueItem) => void;
31
+ pollIntervalMs?: number;
32
+ }
33
+
34
+ const DEFAULT_QUEUE_FILE = join(process.env.HOME || "/tmp", ".pi-harness-runtime", "callback-queue.jsonl");
35
+ const DEFAULT_PIPE_FILE = join(process.env.HOME || "/tmp", ".pi-harness-runtime", "job-commands.jsonl");
36
+
37
+ // Global config for CLI
38
+ let config: CallbackProcessorConfig;
39
+
40
+ /**
41
+ * Process pending callbacks from the queue file.
42
+ * Returns the number of callbacks processed.
43
+ */
44
+ export async function processCallbacks(): Promise<number> {
45
+ const { queueFile = DEFAULT_QUEUE_FILE, onApprove, onReject, onUnknown } = config;
46
+
47
+ if (!existsSync(queueFile)) {
48
+ return 0;
49
+ }
50
+
51
+ const content = readFileSync(queueFile, "utf-8");
52
+ const lines = content.split("\n").filter((l) => l.trim());
53
+
54
+ if (lines.length === 0) {
55
+ return 0;
56
+ }
57
+
58
+ let processed = 0;
59
+
60
+ // Read and clear queue
61
+ writeFileSync(queueFile, "", "utf-8");
62
+
63
+ for (const line of lines) {
64
+ try {
65
+ const item: CallbackQueueItem = JSON.parse(line);
66
+
67
+ switch (item.action) {
68
+ case "approve": {
69
+ console.log(`✅ APPROVE: ${item.targetId} (from ${item.username || item.userId})`);
70
+
71
+ // Write to job pipe for pi-harness to consume
72
+ writeToJobPipe({ command: "resume", jobId: item.targetId, userId: item.userId, timestamp: new Date().toISOString() });
73
+
74
+ if (onApprove) {
75
+ await onApprove(item.targetId, item);
76
+ }
77
+ break;
78
+ }
79
+
80
+ case "reject": {
81
+ console.log(`❌ REJECT: ${item.targetId} (from ${item.username || item.userId})`);
82
+
83
+ // Write to job pipe for pi-harness to consume
84
+ writeToJobPipe({ command: "cancel", jobId: item.targetId, userId: item.userId, timestamp: new Date().toISOString() });
85
+
86
+ if (onReject) {
87
+ await onReject(item.targetId, item);
88
+ }
89
+ break;
90
+ }
91
+
92
+ default: {
93
+ console.log(`❓ UNKNOWN: ${item.action}_${item.targetId}`);
94
+ if (onUnknown) {
95
+ onUnknown(item.action, item.targetId, item);
96
+ }
97
+ }
98
+ }
99
+
100
+ processed++;
101
+ } catch (err) {
102
+ console.error("[CallbackProcessor] Failed to parse line:", line, err);
103
+ }
104
+ }
105
+
106
+ return processed;
107
+ }
108
+
109
+ /**
110
+ * Write job command to pipe file for pi-harness to consume
111
+ */
112
+ function writeToJobPipe(command: { command: string; jobId: string; userId: number; timestamp: string }): void {
113
+ const { jobPipeFile } = config;
114
+ if (!jobPipeFile) return;
115
+
116
+ try {
117
+ appendFileSync(jobPipeFile, JSON.stringify(command) + "\n");
118
+ console.log(`[CallbackProcessor] Wrote to pipe: ${command.command} ${command.jobId}`);
119
+ } catch (err) {
120
+ console.error("[CallbackProcessor] Failed to write to pipe:", err);
121
+ }
122
+ }
123
+
124
+ /**
125
+ * Start polling the callback queue.
126
+ * Returns a stop function.
127
+ */
128
+ export function startCallbackPolling(): () => void {
129
+ const intervalMs = config.pollIntervalMs || 1000;
130
+ let stopped = false;
131
+
132
+ const poll = async () => {
133
+ while (!stopped) {
134
+ await processCallbacks();
135
+ await new Promise((r) => setTimeout(r, intervalMs));
136
+ }
137
+ };
138
+
139
+ poll().catch(console.error);
140
+
141
+ return () => {
142
+ stopped = true;
143
+ };
144
+ }
145
+
146
+ // --- CLI ---
147
+ if (import.meta.url === `file://${process.argv[1]}`) {
148
+ const queueFile = process.env.CALLBACK_QUEUE_FILE || DEFAULT_QUEUE_FILE;
149
+ const jobPipeFile = process.env.JOB_PIPE_FILE || DEFAULT_PIPE_FILE;
150
+
151
+ console.log("=".repeat(60));
152
+ console.log("Telegram Callback Queue Processor");
153
+ console.log("=".repeat(60));
154
+ console.log(`Queue file: ${queueFile}`);
155
+ console.log(`Job pipe file: ${jobPipeFile}`);
156
+ console.log(`Poll interval: 1s`);
157
+ console.log("=".repeat(60));
158
+ console.log("Processing callbacks...");
159
+ console.log("(Press Ctrl+C to stop)");
160
+ console.log("");
161
+
162
+ config = {
163
+ queueFile,
164
+ jobPipeFile,
165
+ onApprove: async (jobId) => {
166
+ console.log(`[Callback] Approved: ${jobId}`);
167
+ },
168
+ onReject: async (jobId) => {
169
+ console.log(`[Callback] Rejected: ${jobId}`);
170
+ },
171
+ };
172
+
173
+ const stop = startCallbackPolling();
174
+
175
+ process.on("SIGINT", () => {
176
+ console.log("\nStopping...");
177
+ stop();
178
+ process.exit(0);
179
+ });
180
+ }