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
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Telegram Webhook Handler — RFC-0022
3
+ *
4
+ * Handles incoming webhook updates from Telegram (callback queries, messages).
5
+ * This enables 2-way communication with inline keyboard buttons.
6
+ */
7
+
8
+ import type { TelegramAdapter } from "./adapters/telegram-adapter.js";
9
+ import type { TelegramCallbackHandler, TelegramCallbackQuery } from "./types.js";
10
+
11
+ /**
12
+ * Predefined action prefixes for callback data
13
+ */
14
+ export const CallbackActions = {
15
+ /** Approve/resume action */
16
+ APPROVE: "approve",
17
+ /** Reject/cancel action */
18
+ REJECT: "reject",
19
+ /** View details action */
20
+ VIEW: "view",
21
+ /** Custom action prefix */
22
+ CUSTOM: "custom",
23
+ } as const;
24
+
25
+ /**
26
+ * Parsed callback data structure
27
+ */
28
+ export interface ParsedCallback {
29
+ action: string;
30
+ targetId: string;
31
+ payload?: Record<string, string>;
32
+ }
33
+
34
+ /**
35
+ * Parse callback data string into structured object
36
+ * Format: "action_targetId" or "action_targetId_key1=val1,key2=val2"
37
+ */
38
+ export function parseCallbackData(data: string): ParsedCallback {
39
+ const parts = data.split("_");
40
+ const action = parts[0] || "";
41
+ const targetId = parts[1] || "";
42
+ let payload: Record<string, string> | undefined;
43
+
44
+ // Check for additional payload
45
+ const payloadPart = parts.slice(2).join("_");
46
+ if (payloadPart && payloadPart.includes("=")) {
47
+ payload = {};
48
+ for (const pair of payloadPart.split(",")) {
49
+ const [key, value] = pair.split("=");
50
+ if (key && value) {
51
+ payload[key] = value;
52
+ }
53
+ }
54
+ }
55
+
56
+ return { action, targetId, payload };
57
+ }
58
+
59
+ /**
60
+ * Build callback data string from components
61
+ */
62
+ export function buildCallbackData(
63
+ action: string,
64
+ targetId: string,
65
+ payload?: Record<string, string>,
66
+ ): string {
67
+ let data = `${action}_${targetId}`;
68
+ if (payload && Object.keys(payload).length > 0) {
69
+ const pairs = Object.entries(payload)
70
+ .map(([k, v]) => `${k}=${v}`)
71
+ .join(",");
72
+ data += `_${pairs}`;
73
+ }
74
+ return data;
75
+ }
76
+
77
+ /**
78
+ * Create a standard Yes/No callback handler
79
+ */
80
+ export function createYesNoHandler(options: {
81
+ /** Called when user clicks "Yes/Approve" */
82
+ onApprove?: (targetId: string, query: TelegramCallbackQuery) => Promise<void> | void;
83
+ /** Called when user clicks "No/Reject" */
84
+ onReject?: (targetId: string, query: TelegramCallbackQuery) => Promise<void> | void;
85
+ /** Custom handler for other callback actions */
86
+ onCustom?: (action: string, targetId: string, query: TelegramCallbackQuery) => Promise<void> | void;
87
+ /** Job manager reference for default resume/cancel behavior */
88
+ jobManager?: {
89
+ resume: (jobId: string) => Promise<void>;
90
+ cancel: (jobId: string) => Promise<void>;
91
+ };
92
+ }): TelegramCallbackHandler {
93
+ return async (data: string, query: TelegramCallbackQuery) => {
94
+ const parsed = parseCallbackData(data);
95
+ const { action, targetId } = parsed;
96
+
97
+ console.log(
98
+ `[TelegramWebhook] Callback: action=${action}, target=${targetId}, from=${query.from.username || query.from.first_name}`,
99
+ );
100
+
101
+ switch (action) {
102
+ case CallbackActions.APPROVE:
103
+ if (options.onApprove) {
104
+ await options.onApprove(targetId, query);
105
+ } else if (options.jobManager) {
106
+ await options.jobManager.resume(targetId);
107
+ console.log(`[TelegramWebhook] Job resumed: ${targetId}`);
108
+ }
109
+ break;
110
+
111
+ case CallbackActions.REJECT:
112
+ if (options.onReject) {
113
+ await options.onReject(targetId, query);
114
+ } else if (options.jobManager) {
115
+ await options.jobManager.cancel(targetId);
116
+ console.log(`[TelegramWebhook] Job cancelled: ${targetId}`);
117
+ }
118
+ break;
119
+
120
+ case CallbackActions.VIEW:
121
+ if (options.onCustom) {
122
+ await options.onCustom(action, targetId, query);
123
+ }
124
+ break;
125
+
126
+ default:
127
+ if (options.onCustom) {
128
+ await options.onCustom(action, targetId, query);
129
+ } else {
130
+ console.warn(`[TelegramWebhook] Unknown action: ${action}`);
131
+ }
132
+ }
133
+ };
134
+ }
135
+
136
+ /**
137
+ * Telegram webhook route handler for Express/Fastify/etc.
138
+ */
139
+ export function createTelegramWebhookHandler(
140
+ adapter: TelegramAdapter,
141
+ secretToken?: string,
142
+ ) {
143
+ return async (req: { body: Record<string, unknown>; headers: Record<string, string | undefined> }, res: { sendStatus: (code: number) => void }) => {
144
+ // Verify secret token
145
+ if (secretToken) {
146
+ const receivedToken = req.headers["x-telegram-bot-api-secret-token"] as string | undefined;
147
+ if (receivedToken !== secretToken) {
148
+ console.error("[TelegramWebhook] Unauthorized webhook request");
149
+ res.sendStatus(403);
150
+ return;
151
+ }
152
+ }
153
+
154
+ try {
155
+ await adapter.handleWebhookUpdate(req.body);
156
+ res.sendStatus(200);
157
+ } catch (error) {
158
+ console.error("[TelegramWebhook] Error processing update:", error);
159
+ res.sendStatus(500);
160
+ }
161
+ };
162
+ }
163
+
164
+ /**
165
+ * Notification payload helper with inline keyboard support
166
+ */
167
+ export function createInteractivePayload(
168
+ event: string,
169
+ jobId: string,
170
+ title: string,
171
+ message: string,
172
+ buttons: Array<{ text: string; action: string; targetId: string }>,
173
+ details?: Record<string, unknown>,
174
+ ): {
175
+ event: string;
176
+ jobId: string;
177
+ timestamp: string;
178
+ title: string;
179
+ message: string;
180
+ details?: Record<string, unknown>;
181
+ } {
182
+ return {
183
+ event,
184
+ jobId,
185
+ timestamp: new Date().toISOString(),
186
+ title,
187
+ message,
188
+ details: {
189
+ ...details,
190
+ _callbackButtons: buttons.map((b) => ({
191
+ text: b.text,
192
+ callbackData: buildCallbackData(b.action, b.targetId),
193
+ })),
194
+ },
195
+ };
196
+ }
197
+
198
+ /**
199
+ * Update TelegramConfig to include action buttons from payload details
200
+ */
201
+ export function extractButtonsFromPayload(
202
+ details: Record<string, unknown> | undefined,
203
+ ): Array<{ text: string; callbackData: string }> | undefined {
204
+ if (!details) return undefined;
205
+
206
+ const cb = details._callbackButtons as
207
+ | Array<{ text: string; callbackData: string }>
208
+ | undefined;
209
+
210
+ return cb?.length ? cb : undefined;
211
+ }
@@ -52,8 +52,50 @@ export interface TelegramConfig {
52
52
  botToken: string;
53
53
  chatId: string;
54
54
  parseMode?: "MarkdownV2" | "HTML" | "Markdown";
55
+ // Inline keyboard support for 2-way communication
56
+ enableInlineKeyboard?: boolean;
57
+ actionButtons?: InlineKeyboardButton[];
55
58
  }
56
59
 
60
+ /**
61
+ * Inline keyboard button for Telegram interactive messages
62
+ */
63
+ export interface InlineKeyboardButton {
64
+ /** Button text displayed to user */
65
+ text: string;
66
+ /** Callback data sent when button is clicked */
67
+ callbackData: string;
68
+ /** Optional URL to open when button is clicked (mutually exclusive with callbackData) */
69
+ url?: string;
70
+ }
71
+
72
+ /**
73
+ * Callback query received from Telegram inline keyboard
74
+ */
75
+ export interface TelegramCallbackQuery {
76
+ id: string;
77
+ from: {
78
+ id: number;
79
+ is_bot: boolean;
80
+ first_name: string;
81
+ username?: string;
82
+ };
83
+ chat_instance: string;
84
+ data: string;
85
+ message?: {
86
+ chat: { id: number };
87
+ message_id: number;
88
+ };
89
+ }
90
+
91
+ /**
92
+ * Callback handler function type
93
+ */
94
+ export type TelegramCallbackHandler = (
95
+ callbackData: string,
96
+ query: TelegramCallbackQuery
97
+ ) => Promise<void> | void;
98
+
57
99
  export interface NtfyConfig {
58
100
  server: string; // e.g., "https://ntfy.sh"
59
101
  topic: string;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/observability",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Comprehensive observability system with structured logging, tracing, metrics, and alerting",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/okf-indexer",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "OKF document indexer for SKILL.md files (RFC-0106)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -203,26 +203,38 @@ export function hasPaperclipConfig() {
203
203
  * Get Paperclip config from environment / keys file
204
204
  */
205
205
  export function getPaperclipConfig() {
206
- const apiKey = process.env.PAPERCLIP_API_KEY ||
207
- process.env.PAPERCLIP_API_KEY;
208
- const baseUrl = process.env.PAPERCLIP_BASE_URL ||
209
- "https://api.paperclip.inc/api";
210
- if (!apiKey) {
211
- const homedir = process.env.HOME || process.env.USERPROFILE || "/home/frappe";
212
- try {
213
- const { readFileSync, existsSync } = require("fs");
214
- const path = `${homedir}/.pi-harness-runtime/keys/paperclip-api-key.txt`;
215
- if (!existsSync(path))
216
- return null;
217
- const key = readFileSync(path, "utf8").trim();
218
- if (!key || key.length < 10)
219
- return null;
220
- return { apiKey: key, baseUrl };
206
+ const homedir = process.env.HOME || process.env.USERPROFILE || "/home/frappe";
207
+ const keysDir = `${homedir}/.pi-harness-runtime/keys`;
208
+ try {
209
+ const { readFileSync, existsSync } = require("fs");
210
+ // Check for config file first (JSON with multiple settings)
211
+ const configPath = `${keysDir}/paperclip-config.json`;
212
+ if (existsSync(configPath)) {
213
+ const config = JSON.parse(readFileSync(configPath, "utf8"));
214
+ if (config.apiKey && config.baseUrl) {
215
+ return {
216
+ apiKey: config.apiKey,
217
+ baseUrl: config.baseUrl,
218
+ companyId: config.companyId,
219
+ };
220
+ }
221
221
  }
222
- catch {
222
+ // Fallback to individual files
223
+ const apiKeyPath = `${keysDir}/paperclip-api-key.txt`;
224
+ const baseUrlPath = `${keysDir}/paperclip-base-url.txt`;
225
+ if (!existsSync(apiKeyPath))
223
226
  return null;
224
- }
227
+ const apiKey = readFileSync(apiKeyPath, "utf8").trim();
228
+ if (!apiKey || apiKey.length < 10)
229
+ return null;
230
+ // Default to self-hosted server URL
231
+ const baseUrl = existsSync(baseUrlPath)
232
+ ? readFileSync(baseUrlPath, "utf8").trim()
233
+ : "https://paperclip.moo-vpn.online/api";
234
+ return { apiKey, baseUrl };
235
+ }
236
+ catch {
237
+ return null;
225
238
  }
226
- return { apiKey, baseUrl };
227
239
  }
228
240
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/paperclip-integration",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Paperclip API integration: poll agent inbox, route tasks to pi.dev, Telegram alerts",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -301,26 +301,41 @@ export function hasPaperclipConfig(): boolean {
301
301
  * Get Paperclip config from environment / keys file
302
302
  */
303
303
  export function getPaperclipConfig(): PaperclipConfig | null {
304
- const apiKey =
305
- process.env.PAPERCLIP_API_KEY ||
306
- process.env.PAPERCLIP_API_KEY;
307
- const baseUrl =
308
- process.env.PAPERCLIP_BASE_URL ||
309
- "https://api.paperclip.inc/api";
310
-
311
- if (!apiKey) {
312
- const homedir = process.env.HOME || process.env.USERPROFILE || "/home/frappe";
313
- try {
314
- const { readFileSync, existsSync } = require("fs");
315
- const path = `${homedir}/.pi-harness-runtime/keys/paperclip-api-key.txt`;
316
- if (!existsSync(path)) return null;
317
- const key = readFileSync(path, "utf8").trim();
318
- if (!key || key.length < 10) return null;
319
- return { apiKey: key, baseUrl };
320
- } catch {
321
- return null;
304
+ const homedir = process.env.HOME || process.env.USERPROFILE || "/home/frappe";
305
+ const keysDir = `${homedir}/.pi-harness-runtime/keys`;
306
+
307
+ try {
308
+ const { readFileSync, existsSync } = require("fs");
309
+
310
+ // Check for config file first (JSON with multiple settings)
311
+ const configPath = `${keysDir}/paperclip-config.json`;
312
+ if (existsSync(configPath)) {
313
+ const config = JSON.parse(readFileSync(configPath, "utf8"));
314
+ if (config.apiKey && config.baseUrl) {
315
+ return {
316
+ apiKey: config.apiKey,
317
+ baseUrl: config.baseUrl,
318
+ companyId: config.companyId,
319
+ };
320
+ }
322
321
  }
323
- }
324
322
 
325
- return { apiKey, baseUrl };
323
+ // Fallback to individual files
324
+ const apiKeyPath = `${keysDir}/paperclip-api-key.txt`;
325
+ const baseUrlPath = `${keysDir}/paperclip-base-url.txt`;
326
+
327
+ if (!existsSync(apiKeyPath)) return null;
328
+
329
+ const apiKey = readFileSync(apiKeyPath, "utf8").trim();
330
+ if (!apiKey || apiKey.length < 10) return null;
331
+
332
+ // Default to self-hosted server URL
333
+ const baseUrl = existsSync(baseUrlPath)
334
+ ? readFileSync(baseUrlPath, "utf8").trim()
335
+ : "https://paperclip.moo-vpn.online/api";
336
+
337
+ return { apiKey, baseUrl };
338
+ } catch {
339
+ return null;
340
+ }
326
341
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/performance-optimizer",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Performance optimization analyzer for pi-harness runtime (RFC-0056)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/privilege-broker",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Privilege Broker — capability registry and command executor for autonomous runtime (RFC-0101 §7)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/project-analyzer",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Project analysis system for pi-harness-runtime - detects frameworks, rules, and project structure",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/project-bootstrap",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Project scaffolding from typed ProjectSpec",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/projection-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/prompt-compiler",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Deterministic prompt compiler for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/prompt-versioning",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "type": "module",
5
5
  "description": "Version control for prompts with rollback support (RFC-0019)",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/provider-adapter-sdk",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "SDK for building, testing, and registering AI provider adapters",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/provider-router",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Enhanced Provider Router for pi-harness-runtime — intelligent routing with capabilities, costs, and quotas",
5
5
  "type": "module",
6
6
  "main": "./dist/provider-router.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/provider-selector",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Multi-Provider Selector — route requests by cost, quality, and latency (RFC-0012)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/providers",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "pi-harness-runtime — providers",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/qdrant-skills",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Qdrant vector search integration for Hermes-style skill system",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/quota-manager",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "pi-harness-runtime — quota-manager",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/rate-limiter",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "type": "module",
5
5
  "description": "Rate limiting with token bucket algorithm (RFC-0023)",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/react-vite-plugin",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "React/Vite framework analysis — components, config, TypeScript setup",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/release-manager",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "type": "module",
5
5
  "description": "Release management for pi-harness",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/requirement-compiler",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Compiles raw requirements into validated CompiledRequirement with ambiguity detection and risk tagging",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/runtime",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "pi-harness-runtime — runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/scheduler",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "pi-harness-runtime — scheduler",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/scheduler-adapter",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Scheduler Adapter — cron, systemd, launchd, internal adapters for autonomous runtime (RFC-0101 §6)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/session",
3
- "version": "1.1.145",
3
+ "version": "1.1.147",
4
4
  "description": "Session management system for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",