hammoc 1.0.3 → 1.1.0
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.
- package/README.md +46 -16
- package/bin/hammoc.js +22 -5
- package/package.json +2 -1
- package/packages/client/dist/assets/{index-BfemoSfM.js → index-CFWfpySn.js} +1 -1
- package/packages/client/dist/assets/index-D8ezrT4P.js +1446 -0
- package/packages/client/dist/assets/index-JvaBmdnx.css +32 -0
- package/packages/client/dist/favicon-192.png +0 -0
- package/packages/client/dist/favicon-512.png +0 -0
- package/packages/client/dist/favicon.png +0 -0
- package/packages/client/dist/index.html +5 -3
- package/packages/client/dist/manifest.webmanifest +1 -1
- package/packages/client/dist/sw.js +2 -1
- package/packages/server/dist/app.d.ts.map +1 -1
- package/packages/server/dist/app.js +58 -6
- package/packages/server/dist/app.js.map +1 -1
- package/packages/server/dist/config/index.d.ts +17 -9
- package/packages/server/dist/config/index.d.ts.map +1 -1
- package/packages/server/dist/config/index.js +17 -10
- package/packages/server/dist/config/index.js.map +1 -1
- package/packages/server/dist/controllers/boardController.d.ts +0 -1
- package/packages/server/dist/controllers/boardController.d.ts.map +1 -1
- package/packages/server/dist/controllers/boardController.js +62 -29
- package/packages/server/dist/controllers/boardController.js.map +1 -1
- package/packages/server/dist/controllers/cliController.d.ts.map +1 -1
- package/packages/server/dist/controllers/cliController.js +8 -0
- package/packages/server/dist/controllers/cliController.js.map +1 -1
- package/packages/server/dist/controllers/fileSystemController.d.ts +10 -0
- package/packages/server/dist/controllers/fileSystemController.d.ts.map +1 -1
- package/packages/server/dist/controllers/fileSystemController.js +156 -0
- package/packages/server/dist/controllers/fileSystemController.js.map +1 -1
- package/packages/server/dist/controllers/queueController.d.ts +0 -4
- package/packages/server/dist/controllers/queueController.d.ts.map +1 -1
- package/packages/server/dist/controllers/queueController.js +0 -88
- package/packages/server/dist/controllers/queueController.js.map +1 -1
- package/packages/server/dist/controllers/queueTemplateController.d.ts +4 -0
- package/packages/server/dist/controllers/queueTemplateController.d.ts.map +1 -1
- package/packages/server/dist/controllers/queueTemplateController.js +61 -4
- package/packages/server/dist/controllers/queueTemplateController.js.map +1 -1
- package/packages/server/dist/controllers/serverController.d.ts +3 -3
- package/packages/server/dist/controllers/serverController.d.ts.map +1 -1
- package/packages/server/dist/controllers/serverController.js +91 -39
- package/packages/server/dist/controllers/serverController.js.map +1 -1
- package/packages/server/dist/controllers/sessionController.d.ts.map +1 -1
- package/packages/server/dist/controllers/sessionController.js +2 -1
- package/packages/server/dist/controllers/sessionController.js.map +1 -1
- package/packages/server/dist/handlers/websocket.d.ts +12 -2
- package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
- package/packages/server/dist/handlers/websocket.js +785 -106
- package/packages/server/dist/handlers/websocket.js.map +1 -1
- package/packages/server/dist/index.js +5 -1
- package/packages/server/dist/index.js.map +1 -1
- package/packages/server/dist/locales/en/server.json +12 -3
- package/packages/server/dist/locales/es/server.json +3 -1
- package/packages/server/dist/locales/ja/server.json +3 -1
- package/packages/server/dist/locales/ko/server.json +12 -3
- package/packages/server/dist/locales/pt/server.json +3 -1
- package/packages/server/dist/locales/zh-CN/server.json +3 -1
- package/packages/server/dist/middleware/pathGuard.d.ts +1 -7
- package/packages/server/dist/middleware/pathGuard.d.ts.map +1 -1
- package/packages/server/dist/middleware/pathGuard.js +57 -4
- package/packages/server/dist/middleware/pathGuard.js.map +1 -1
- package/packages/server/dist/middleware/session.d.ts.map +1 -1
- package/packages/server/dist/middleware/session.js +3 -1
- package/packages/server/dist/middleware/session.js.map +1 -1
- package/packages/server/dist/routes/board.d.ts.map +1 -1
- package/packages/server/dist/routes/board.js +0 -1
- package/packages/server/dist/routes/board.js.map +1 -1
- package/packages/server/dist/routes/fileSystem.d.ts.map +1 -1
- package/packages/server/dist/routes/fileSystem.js +39 -0
- package/packages/server/dist/routes/fileSystem.js.map +1 -1
- package/packages/server/dist/routes/preferences.d.ts.map +1 -1
- package/packages/server/dist/routes/preferences.js +80 -2
- package/packages/server/dist/routes/preferences.js.map +1 -1
- package/packages/server/dist/routes/queue.d.ts.map +1 -1
- package/packages/server/dist/routes/queue.js +9 -8
- package/packages/server/dist/routes/queue.js.map +1 -1
- package/packages/server/dist/services/bmadStatusService.d.ts.map +1 -1
- package/packages/server/dist/services/bmadStatusService.js +60 -0
- package/packages/server/dist/services/bmadStatusService.js.map +1 -1
- package/packages/server/dist/services/chatService.d.ts +4 -0
- package/packages/server/dist/services/chatService.d.ts.map +1 -1
- package/packages/server/dist/services/chatService.js +7 -1
- package/packages/server/dist/services/chatService.js.map +1 -1
- package/packages/server/dist/services/cliService.d.ts.map +1 -1
- package/packages/server/dist/services/cliService.js +66 -15
- package/packages/server/dist/services/cliService.js.map +1 -1
- package/packages/server/dist/services/fileSystemService.d.ts +29 -1
- package/packages/server/dist/services/fileSystemService.d.ts.map +1 -1
- package/packages/server/dist/services/fileSystemService.js +240 -5
- package/packages/server/dist/services/fileSystemService.js.map +1 -1
- package/packages/server/dist/services/gitService.js +1 -1
- package/packages/server/dist/services/gitService.js.map +1 -1
- package/packages/server/dist/services/historyParser.d.ts +13 -0
- package/packages/server/dist/services/historyParser.d.ts.map +1 -1
- package/packages/server/dist/services/historyParser.js +159 -14
- package/packages/server/dist/services/historyParser.js.map +1 -1
- package/packages/server/dist/services/issueService.d.ts +3 -10
- package/packages/server/dist/services/issueService.d.ts.map +1 -1
- package/packages/server/dist/services/issueService.js +145 -156
- package/packages/server/dist/services/issueService.js.map +1 -1
- package/packages/server/dist/services/notificationService.d.ts +11 -6
- package/packages/server/dist/services/notificationService.d.ts.map +1 -1
- package/packages/server/dist/services/notificationService.js +75 -20
- package/packages/server/dist/services/notificationService.js.map +1 -1
- package/packages/server/dist/services/preferencesService.d.ts +2 -3
- package/packages/server/dist/services/preferencesService.d.ts.map +1 -1
- package/packages/server/dist/services/preferencesService.js +3 -10
- package/packages/server/dist/services/preferencesService.js.map +1 -1
- package/packages/server/dist/services/projectService.d.ts +26 -1
- package/packages/server/dist/services/projectService.d.ts.map +1 -1
- package/packages/server/dist/services/projectService.js +113 -0
- package/packages/server/dist/services/projectService.js.map +1 -1
- package/packages/server/dist/services/queueService.d.ts +1 -1
- package/packages/server/dist/services/queueService.d.ts.map +1 -1
- package/packages/server/dist/services/queueService.js +6 -2
- package/packages/server/dist/services/queueService.js.map +1 -1
- package/packages/server/dist/services/queueTemplateService.d.ts +5 -0
- package/packages/server/dist/services/queueTemplateService.d.ts.map +1 -1
- package/packages/server/dist/services/queueTemplateService.js +71 -21
- package/packages/server/dist/services/queueTemplateService.js.map +1 -1
- package/packages/server/dist/services/sessionService.d.ts +12 -0
- package/packages/server/dist/services/sessionService.d.ts.map +1 -1
- package/packages/server/dist/services/sessionService.js +121 -107
- package/packages/server/dist/services/sessionService.js.map +1 -1
- package/packages/server/dist/services/streamHandler.d.ts +4 -2
- package/packages/server/dist/services/streamHandler.d.ts.map +1 -1
- package/packages/server/dist/services/streamHandler.js +20 -4
- package/packages/server/dist/services/streamHandler.js.map +1 -1
- package/packages/server/dist/services/webPushService.d.ts +61 -0
- package/packages/server/dist/services/webPushService.d.ts.map +1 -0
- package/packages/server/dist/services/webPushService.js +258 -0
- package/packages/server/dist/services/webPushService.js.map +1 -0
- package/packages/server/dist/utils/networkUtils.d.ts +17 -2
- package/packages/server/dist/utils/networkUtils.d.ts.map +1 -1
- package/packages/server/dist/utils/networkUtils.js +121 -8
- package/packages/server/dist/utils/networkUtils.js.map +1 -1
- package/packages/server/package.json +4 -0
- package/packages/shared/dist/constants/errorCodes.d.ts +1 -0
- package/packages/shared/dist/constants/errorCodes.d.ts.map +1 -1
- package/packages/shared/dist/constants/errorCodes.js +2 -0
- package/packages/shared/dist/constants/errorCodes.js.map +1 -1
- package/packages/shared/dist/index.d.ts +1 -1
- package/packages/shared/dist/index.d.ts.map +1 -1
- package/packages/shared/dist/index.js.map +1 -1
- package/packages/shared/dist/types/bmadStatus.d.ts +2 -0
- package/packages/shared/dist/types/bmadStatus.d.ts.map +1 -1
- package/packages/shared/dist/types/bmadStatus.js.map +1 -1
- package/packages/shared/dist/types/board.d.ts +8 -8
- package/packages/shared/dist/types/board.d.ts.map +1 -1
- package/packages/shared/dist/types/board.js +24 -39
- package/packages/shared/dist/types/board.js.map +1 -1
- package/packages/shared/dist/types/fileSystem.d.ts +36 -0
- package/packages/shared/dist/types/fileSystem.d.ts.map +1 -1
- package/packages/shared/dist/types/fileSystem.js +15 -0
- package/packages/shared/dist/types/fileSystem.js.map +1 -1
- package/packages/shared/dist/types/history.d.ts +10 -2
- package/packages/shared/dist/types/history.d.ts.map +1 -1
- package/packages/shared/dist/types/preferences.d.ts +26 -1
- package/packages/shared/dist/types/preferences.d.ts.map +1 -1
- package/packages/shared/dist/types/preferences.js.map +1 -1
- package/packages/shared/dist/types/sdk.d.ts +23 -0
- package/packages/shared/dist/types/sdk.d.ts.map +1 -1
- package/packages/shared/dist/types/sdk.js +48 -0
- package/packages/shared/dist/types/sdk.js.map +1 -1
- package/packages/shared/dist/types/streaming.d.ts +1 -0
- package/packages/shared/dist/types/streaming.d.ts.map +1 -1
- package/packages/shared/dist/types/streaming.js.map +1 -1
- package/packages/shared/dist/types/websocket.d.ts +41 -1
- package/packages/shared/dist/types/websocket.d.ts.map +1 -1
- package/packages/shared/dist/utils/queueTemplateUtils.d.ts +2 -1
- package/packages/shared/dist/utils/queueTemplateUtils.d.ts.map +1 -1
- package/packages/shared/dist/utils/queueTemplateUtils.js +10 -3
- package/packages/shared/dist/utils/queueTemplateUtils.js.map +1 -1
- package/packages/client/dist/assets/index-B335pbdL.js +0 -1297
- package/packages/client/dist/assets/index-CmTNL_3X.css +0 -32
- package/packages/client/dist/workbox-7a79b53c.js +0 -1
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Notification Service — Telegram
|
|
3
|
-
* Sends notifications only when the client socket is disconnected.
|
|
2
|
+
* Notification Service — orchestrates Telegram and Web Push alerts
|
|
3
|
+
* Sends notifications only when the client socket is disconnected (or alwaysNotify is on).
|
|
4
4
|
* Supports dynamic reconfiguration via reload() for UI-driven settings changes.
|
|
5
5
|
*/
|
|
6
6
|
import { config } from '../config/index.js';
|
|
7
7
|
import { preferencesService } from './preferencesService.js';
|
|
8
|
+
import { webPushService } from './webPushService.js';
|
|
8
9
|
import { SUPPORTED_LANGUAGES } from '@hammoc/shared';
|
|
9
10
|
import i18next from '../i18n.js';
|
|
10
11
|
class NotificationService {
|
|
12
|
+
// Telegram settings
|
|
11
13
|
effectiveBotToken;
|
|
12
14
|
effectiveChatId;
|
|
13
|
-
|
|
15
|
+
telegramEnabled;
|
|
16
|
+
// Web Push settings
|
|
17
|
+
webPushEnabled;
|
|
18
|
+
// Shared settings
|
|
14
19
|
baseUrl;
|
|
15
20
|
shouldNotifyPermission;
|
|
16
21
|
shouldNotifyComplete;
|
|
@@ -24,7 +29,8 @@ class NotificationService {
|
|
|
24
29
|
// Initial config from env vars (preferences not yet loaded at startup)
|
|
25
30
|
this.effectiveBotToken = config.telegram.botToken;
|
|
26
31
|
this.effectiveChatId = config.telegram.chatId;
|
|
27
|
-
this.
|
|
32
|
+
this.telegramEnabled = config.telegram.enabled;
|
|
33
|
+
this.webPushEnabled = false;
|
|
28
34
|
this.baseUrl = '';
|
|
29
35
|
this.shouldNotifyPermission = true;
|
|
30
36
|
this.shouldNotifyComplete = true;
|
|
@@ -37,17 +43,21 @@ class NotificationService {
|
|
|
37
43
|
}
|
|
38
44
|
/**
|
|
39
45
|
* Reload configuration from preferences + env vars.
|
|
40
|
-
* Called after
|
|
46
|
+
* Called after settings are updated via UI,
|
|
41
47
|
* and once during server startup to load preferences.
|
|
42
48
|
*/
|
|
43
49
|
async reload() {
|
|
44
50
|
try {
|
|
45
51
|
const prefs = await preferencesService.readPreferences();
|
|
46
52
|
const telegram = prefs.telegram ?? {};
|
|
53
|
+
// Telegram
|
|
47
54
|
this.effectiveBotToken = telegram.botToken ?? config.telegram.botToken;
|
|
48
55
|
this.effectiveChatId = telegram.chatId ?? config.telegram.chatId;
|
|
49
|
-
this.
|
|
56
|
+
this.telegramEnabled = (telegram.enabled ?? false) && !!this.effectiveBotToken && !!this.effectiveChatId;
|
|
50
57
|
this.baseUrl = telegram.baseUrl ?? process.env.BASE_URL ?? '';
|
|
58
|
+
// Web Push
|
|
59
|
+
this.webPushEnabled = prefs.webPush?.enabled ?? false;
|
|
60
|
+
// Shared notification type toggles
|
|
51
61
|
this.shouldNotifyPermission = telegram.notifyPermission ?? true;
|
|
52
62
|
this.shouldNotifyComplete = telegram.notifyComplete ?? true;
|
|
53
63
|
this.shouldNotifyError = telegram.notifyError ?? true;
|
|
@@ -72,9 +82,10 @@ class NotificationService {
|
|
|
72
82
|
shouldNotify(socketCount) {
|
|
73
83
|
return socketCount === 0 || this.alwaysNotify;
|
|
74
84
|
}
|
|
85
|
+
// ── Telegram delivery ──────────────────────────────────────────────
|
|
75
86
|
/** Send a Telegram message (best-effort, silent fail) */
|
|
76
|
-
async
|
|
77
|
-
if (!this.
|
|
87
|
+
async sendTelegram(message) {
|
|
88
|
+
if (!this.telegramEnabled || !this.effectiveBotToken || !this.effectiveChatId)
|
|
78
89
|
return;
|
|
79
90
|
try {
|
|
80
91
|
const apiUrl = `https://api.telegram.org/bot${this.effectiveBotToken}/sendMessage`;
|
|
@@ -92,7 +103,20 @@ class NotificationService {
|
|
|
92
103
|
// Silent fail — notifications are best-effort
|
|
93
104
|
}
|
|
94
105
|
}
|
|
95
|
-
|
|
106
|
+
// ── Web Push delivery ──────────────────────────────────────────────
|
|
107
|
+
/** Send a Web Push notification (best-effort, silent fail) */
|
|
108
|
+
async sendPush(title, body, url, tag) {
|
|
109
|
+
if (!this.webPushEnabled)
|
|
110
|
+
return;
|
|
111
|
+
try {
|
|
112
|
+
await webPushService.sendPush({ title, body, url, tag });
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Silent fail — notifications are best-effort
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// ── Shared helpers ─────────────────────────────────────────────────
|
|
119
|
+
/** Resolve the user's preferred language for notification messages */
|
|
96
120
|
async resolveLanguage() {
|
|
97
121
|
try {
|
|
98
122
|
const prefs = await preferencesService.readPreferences();
|
|
@@ -114,6 +138,11 @@ class NotificationService {
|
|
|
114
138
|
.replace(/</g, '<')
|
|
115
139
|
.replace(/>/g, '>');
|
|
116
140
|
}
|
|
141
|
+
/** Strip HTML tags for plain-text push body */
|
|
142
|
+
stripHtml(text) {
|
|
143
|
+
return text.replace(/<[^>]+>/g, '');
|
|
144
|
+
}
|
|
145
|
+
// ── Notification methods ───────────────────────────────────────────
|
|
117
146
|
/** Notify that user input is needed (permission or AskUserQuestion) */
|
|
118
147
|
async notifyInputRequired(sessionId, toolName, prompt) {
|
|
119
148
|
if (!this.shouldNotifyPermission)
|
|
@@ -123,7 +152,10 @@ class NotificationService {
|
|
|
123
152
|
const emoji = toolName === 'AskUserQuestion' ? '❓' : '🔐';
|
|
124
153
|
const label = toolName === 'AskUserQuestion' ? t('notification.question.title') : t('notification.permission.title');
|
|
125
154
|
const detail = prompt ? `\n${prompt}` : '';
|
|
126
|
-
await
|
|
155
|
+
await Promise.allSettled([
|
|
156
|
+
this.sendTelegram(`${emoji} <b>${label}</b>\nSession: <code>${sessionId}</code>${detail}${this.buildLink()}`),
|
|
157
|
+
this.sendPush(`${emoji} ${label}`, prompt ? prompt.slice(0, 200) : `Session: ${sessionId}`, this.baseUrl || '/', `input-${sessionId}`),
|
|
158
|
+
]);
|
|
127
159
|
}
|
|
128
160
|
/** Notify that streaming completed successfully, optionally including last assistant message */
|
|
129
161
|
async notifyComplete(sessionId, lastContent, queueProgress) {
|
|
@@ -131,20 +163,28 @@ class NotificationService {
|
|
|
131
163
|
return;
|
|
132
164
|
const lang = await this.resolveLanguage();
|
|
133
165
|
const t = i18next.getFixedT(lang);
|
|
134
|
-
|
|
166
|
+
// Telegram (HTML)
|
|
167
|
+
let telegramMsg = `✅ <b>${t('notification.complete.title')}</b>\nSession: <code>${sessionId}</code>`;
|
|
135
168
|
if (queueProgress && queueProgress.total > 0) {
|
|
136
169
|
const current = Math.max(0, Math.min(queueProgress.current, queueProgress.total));
|
|
137
170
|
const pct = Math.round((current / queueProgress.total) * 100);
|
|
138
|
-
|
|
171
|
+
telegramMsg += `\n📊 ${t('notification.complete.queueProgress', { current, total: queueProgress.total, pct })}`;
|
|
139
172
|
}
|
|
140
173
|
if (lastContent) {
|
|
141
174
|
const MAX_LEN = 500;
|
|
142
175
|
const escaped = this.escapeHtml(lastContent);
|
|
143
176
|
const truncated = escaped.length > MAX_LEN ? escaped.slice(0, MAX_LEN) + '…' : escaped;
|
|
144
|
-
|
|
177
|
+
telegramMsg += `\n\n<b>${t('notification.complete.lastMessage')}</b>\n<pre>${truncated}</pre>`;
|
|
145
178
|
}
|
|
146
|
-
|
|
147
|
-
|
|
179
|
+
telegramMsg += this.buildLink();
|
|
180
|
+
// Push (plain text)
|
|
181
|
+
const pushBody = lastContent
|
|
182
|
+
? lastContent.slice(0, 200)
|
|
183
|
+
: `Session: ${sessionId}`;
|
|
184
|
+
await Promise.allSettled([
|
|
185
|
+
this.sendTelegram(telegramMsg),
|
|
186
|
+
this.sendPush(`✅ ${t('notification.complete.title')}`, pushBody, this.baseUrl || '/', `complete-${sessionId}`),
|
|
187
|
+
]);
|
|
148
188
|
}
|
|
149
189
|
/** Notify that an error occurred during streaming */
|
|
150
190
|
async notifyError(sessionId, error) {
|
|
@@ -152,7 +192,10 @@ class NotificationService {
|
|
|
152
192
|
return;
|
|
153
193
|
const lang = await this.resolveLanguage();
|
|
154
194
|
const t = i18next.getFixedT(lang);
|
|
155
|
-
await
|
|
195
|
+
await Promise.allSettled([
|
|
196
|
+
this.sendTelegram(`❌ <b>${t('notification.error.title')}</b>\nSession: <code>${sessionId}</code>\n${error}${this.buildLink()}`),
|
|
197
|
+
this.sendPush(`❌ ${t('notification.error.title')}`, error.slice(0, 200), this.baseUrl || '/', `error-${sessionId}`),
|
|
198
|
+
]);
|
|
156
199
|
}
|
|
157
200
|
/** Notify that queue execution has started */
|
|
158
201
|
async notifyQueueStart(totalItems, sessionUrl) {
|
|
@@ -160,7 +203,10 @@ class NotificationService {
|
|
|
160
203
|
return;
|
|
161
204
|
const lang = await this.resolveLanguage();
|
|
162
205
|
const t = i18next.getFixedT(lang);
|
|
163
|
-
await
|
|
206
|
+
await Promise.allSettled([
|
|
207
|
+
this.sendTelegram(`🚀 <b>${t('notification.queueStart.title')}</b>\n${t('notification.queueStart.body', { value: totalItems })}\n\n${sessionUrl}`),
|
|
208
|
+
this.sendPush(`🚀 ${t('notification.queueStart.title')}`, t('notification.queueStart.body', { value: totalItems }), sessionUrl || '/', 'queue-start'),
|
|
209
|
+
]);
|
|
164
210
|
}
|
|
165
211
|
/** Notify that queue execution completed all items */
|
|
166
212
|
async notifyQueueComplete(sessionUrl) {
|
|
@@ -168,7 +214,10 @@ class NotificationService {
|
|
|
168
214
|
return;
|
|
169
215
|
const lang = await this.resolveLanguage();
|
|
170
216
|
const t = i18next.getFixedT(lang);
|
|
171
|
-
await
|
|
217
|
+
await Promise.allSettled([
|
|
218
|
+
this.sendTelegram(`✅ <b>${t('notification.queueComplete.title')}</b>\n${t('notification.queueComplete.body')}\n\n${sessionUrl}`),
|
|
219
|
+
this.sendPush(`✅ ${t('notification.queueComplete.title')}`, t('notification.queueComplete.body'), sessionUrl || '/', 'queue-complete'),
|
|
220
|
+
]);
|
|
172
221
|
}
|
|
173
222
|
/** Notify that queue paused due to error (QUEUE_STOP, SDK error, etc.) */
|
|
174
223
|
async notifyQueueError(reason, sessionUrl) {
|
|
@@ -176,7 +225,10 @@ class NotificationService {
|
|
|
176
225
|
return;
|
|
177
226
|
const lang = await this.resolveLanguage();
|
|
178
227
|
const t = i18next.getFixedT(lang);
|
|
179
|
-
await
|
|
228
|
+
await Promise.allSettled([
|
|
229
|
+
this.sendTelegram(`⚠️ <b>${t('notification.queuePaused.title')}</b>\n${reason}\n\n${sessionUrl}`),
|
|
230
|
+
this.sendPush(`⚠️ ${t('notification.queuePaused.title')}`, reason.slice(0, 200), sessionUrl || '/', 'queue-error'),
|
|
231
|
+
]);
|
|
180
232
|
}
|
|
181
233
|
/** Notify that queue is waiting for user input (permission or AskUserQuestion) */
|
|
182
234
|
async notifyQueueInputRequired(sessionUrl) {
|
|
@@ -184,7 +236,10 @@ class NotificationService {
|
|
|
184
236
|
return;
|
|
185
237
|
const lang = await this.resolveLanguage();
|
|
186
238
|
const t = i18next.getFixedT(lang);
|
|
187
|
-
await
|
|
239
|
+
await Promise.allSettled([
|
|
240
|
+
this.sendTelegram(`❓ <b>${t('notification.inputRequired.title')}</b>\n${t('notification.inputRequired.body')}\n\n${sessionUrl}`),
|
|
241
|
+
this.sendPush(`❓ ${t('notification.inputRequired.title')}`, t('notification.inputRequired.body'), sessionUrl || '/', 'queue-input'),
|
|
242
|
+
]);
|
|
188
243
|
}
|
|
189
244
|
/**
|
|
190
245
|
* Send a test Telegram message.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notificationService.js","sourceRoot":"","sources":["../../src/services/notificationService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,OAAO,MAAM,YAAY,CAAC;AAEjC,MAAM,mBAAmB;IACf,iBAAiB,CAAS;IAC1B,eAAe,CAAS;IACxB,OAAO,CAAU;IACjB,OAAO,CAAS;IAChB,sBAAsB,CAAU;IAChC,oBAAoB,CAAU;IAC9B,iBAAiB,CAAU;IAC3B,sBAAsB,CAAU;IAChC,yBAAyB,CAAU;IACnC,sBAAsB,CAAU;IAChC,8BAA8B,CAAU;IACxC,YAAY,CAAU;IAE9B;QACE,uEAAuE;QACvE,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAClD,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC9C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;QACtC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,eAAe,EAAE,CAAC;YACzD,MAAM,QAAQ,GAAqB,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;YAExD,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvE,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACjE,IAAI,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;YACjG,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC9D,IAAI,CAAC,sBAAsB,GAAG,QAAQ,CAAC,gBAAgB,IAAI,IAAI,CAAC;YAChE,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,cAAc,IAAI,IAAI,CAAC;YAC5D,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC;YACtD,IAAI,CAAC,sBAAsB,GAAG,QAAQ,CAAC,gBAAgB,IAAI,IAAI,CAAC;YAChE,IAAI,CAAC,yBAAyB,GAAG,QAAQ,CAAC,mBAAmB,IAAI,IAAI,CAAC;YACtE,IAAI,CAAC,sBAAsB,GAAG,QAAQ,CAAC,gBAAgB,IAAI,IAAI,CAAC;YAChE,IAAI,CAAC,8BAA8B,GAAG,QAAQ,CAAC,wBAAwB,IAAI,IAAI,CAAC;YAChF,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,IAAI,KAAK,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;QACtD,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,WAAmB;QAC9B,OAAO,WAAW,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC;IAChD,CAAC;IAED,yDAAyD;IACjD,KAAK,CAAC,IAAI,CAAC,OAAe;QAChC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAC9E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,+BAA+B,IAAI,CAAC,iBAAiB,cAAc,CAAC;YACnF,MAAM,KAAK,CAAC,MAAM,EAAE;gBAClB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,OAAO,EAAE,IAAI,CAAC,eAAe;oBAC7B,IAAI,EAAE,OAAO;oBACb,UAAU,EAAE,MAAM;iBACnB,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC;IAED,kEAAkE;IAC1D,KAAK,CAAC,eAAe;QAC3B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,eAAe,EAAE,CAAC;YACzD,IAAI,KAAK,CAAC,QAAQ,IAAI,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,QAA8C,CAAC,EAAE,CAAC;gBACzG,OAAO,KAAK,CAAC,QAAQ,CAAC;YACxB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2DAA2D;IACnD,SAAS;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,CAAC;IAED,kEAAkE;IAC1D,UAAU,CAAC,IAAY;QAC7B,OAAO,IAAI;aACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;aACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;aACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,uEAAuE;IACvE,KAAK,CAAC,mBAAmB,CAAC,SAAiB,EAAE,QAAgB,EAAE,MAAe;QAC5E,IAAI,CAAC,IAAI,CAAC,sBAAsB;YAAE,OAAO;QACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,QAAQ,KAAK,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1D,MAAM,KAAK,GAAG,QAAQ,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC;QACrH,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,OAAO,KAAK,wBAAwB,SAAS,UAAU,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC9G,CAAC;IAED,gGAAgG;IAChG,KAAK,CAAC,cAAc,CAAC,SAAiB,EAAE,WAAoB,EAAE,aAAkD;QAC9G,IAAI,CAAC,IAAI,CAAC,oBAAoB;YAAE,OAAO;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,OAAO,GAAG,QAAQ,CAAC,CAAC,6BAA6B,CAAC,wBAAwB,SAAS,SAAS,CAAC;QACjG,IAAI,aAAa,IAAI,aAAa,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;YAClF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;YAC9D,OAAO,IAAI,QAAQ,CAAC,CAAC,qCAAqC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC9G,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,GAAG,CAAC;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YACvF,OAAO,IAAI,UAAU,CAAC,CAAC,mCAAmC,CAAC,cAAc,SAAS,QAAQ,CAAC;QAC7F,CAAC;QACD,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,qDAAqD;IACrD,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,KAAa;QAChD,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO;QACpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,0BAA0B,CAAC,wBAAwB,SAAS,YAAY,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAChI,CAAC;IAED,8CAA8C;IAC9C,KAAK,CAAC,gBAAgB,CAAC,UAAkB,EAAE,UAAkB;QAC3D,IAAI,CAAC,IAAI,CAAC,sBAAsB;YAAE,OAAO;QACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,OAAO,UAAU,EAAE,CAAC,CAAC;IACnJ,CAAC;IAED,sDAAsD;IACtD,KAAK,CAAC,mBAAmB,CAAC,UAAkB;QAC1C,IAAI,CAAC,IAAI,CAAC,yBAAyB;YAAE,OAAO;QAC5C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,kCAAkC,CAAC,SAAS,CAAC,CAAC,iCAAiC,CAAC,OAAO,UAAU,EAAE,CAAC,CAAC;IACjI,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,UAAkB;QACvD,IAAI,CAAC,IAAI,CAAC,sBAAsB;YAAE,OAAO;QACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,gCAAgC,CAAC,SAAS,MAAM,OAAO,UAAU,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,kFAAkF;IAClF,KAAK,CAAC,wBAAwB,CAAC,UAAkB;QAC/C,IAAI,CAAC,IAAI,CAAC,8BAA8B;YAAE,OAAO;QACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,kCAAkC,CAAC,SAAS,CAAC,CAAC,iCAAiC,CAAC,OAAO,UAAU,EAAE,CAAC,CAAC;IACjI,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ,CAAC,SAAkD;QAC/D,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,eAAe,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QAEtC,MAAM,YAAY,GAAG,SAAS,EAAE,QAAQ,IAAI,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1F,MAAM,UAAU,GAAG,SAAS,EAAE,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAElF,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAClC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,mCAAmC,CAAC,EAAE,CAAC;QAC3E,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,+BAA+B,YAAY,cAAc,CAAC;YACzE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;gBACnC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,OAAO,EAAE,UAAU;oBACnB,IAAI,EAAE,qBAAqB,CAAC,CAAC,2BAA2B,CAAC,EAAE;oBAC3D,UAAU,EAAE,MAAM;iBACnB,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrD,MAAM,IAAI,GAAI,IAA+B,CAAC,WAAW,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACvF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACzC,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACrE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAA8B;IACpE,MAAM,SAAS,GAAG,KAAK,CAAC,SAGV,CAAC;IACf,MAAM,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,IAAI,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC;IACxB,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"notificationService.js","sourceRoot":"","sources":["../../src/services/notificationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,10 +14,9 @@ declare class PreferencesService {
|
|
|
14
14
|
getEffectivePreferences(): Promise<UserPreferences>;
|
|
15
15
|
/**
|
|
16
16
|
* Check if terminal feature is enabled.
|
|
17
|
-
*
|
|
18
|
-
* Story 17.5: Terminal Security
|
|
17
|
+
* Controlled only by TERMINAL_ENABLED env var / config.terminal.enabled.
|
|
19
18
|
*/
|
|
20
|
-
getTerminalEnabled():
|
|
19
|
+
getTerminalEnabled(): boolean;
|
|
21
20
|
writePreferences(partial: Partial<UserPreferences>): Promise<UserPreferences>;
|
|
22
21
|
/**
|
|
23
22
|
* Returns Telegram settings with env var fallback and masking.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preferencesService.d.ts","sourceRoot":"","sources":["../../src/services/preferencesService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAoB,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAGpI,cAAM,kBAAkB;IACtB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,kBAAkB;IAIpB,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC;IAajD;;;OAGG;IACG,uBAAuB,IAAI,OAAO,CAAC,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"preferencesService.d.ts","sourceRoot":"","sources":["../../src/services/preferencesService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAoB,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAGpI,cAAM,kBAAkB;IACtB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,kBAAkB;IAIpB,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC;IAajD;;;OAGG;IACG,uBAAuB,IAAI,OAAO,CAAC,eAAe,CAAC;IAQzD;;;OAGG;IACH,kBAAkB,IAAI,OAAO;IAIvB,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAUnF;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,2BAA2B,CAAC;IAoCjE;;;OAGG;IACG,sBAAsB,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,2BAA2B,CAAC;CAiB1G;AAED,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
|
|
@@ -36,21 +36,14 @@ class PreferencesService {
|
|
|
36
36
|
if (process.env.CHAT_TIMEOUT_MS) {
|
|
37
37
|
prefs.chatTimeoutMs = parseInt(process.env.CHAT_TIMEOUT_MS, 10);
|
|
38
38
|
}
|
|
39
|
-
if (process.env.TERMINAL_ENABLED === 'false') {
|
|
40
|
-
prefs.terminalEnabled = false;
|
|
41
|
-
}
|
|
42
39
|
return prefs;
|
|
43
40
|
}
|
|
44
41
|
/**
|
|
45
42
|
* Check if terminal feature is enabled.
|
|
46
|
-
*
|
|
47
|
-
* Story 17.5: Terminal Security
|
|
43
|
+
* Controlled only by TERMINAL_ENABLED env var / config.terminal.enabled.
|
|
48
44
|
*/
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return false;
|
|
52
|
-
const prefs = await this.readPreferences();
|
|
53
|
-
return prefs.terminalEnabled !== false;
|
|
45
|
+
getTerminalEnabled() {
|
|
46
|
+
return config.terminal.enabled;
|
|
54
47
|
}
|
|
55
48
|
async writePreferences(partial) {
|
|
56
49
|
const dataDir = this.getDataDir();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preferencesService.js","sourceRoot":"","sources":["../../src/services/preferencesService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,kBAAkB;IACd,UAAU;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC;IAEO,kBAAkB;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAoB,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,gFAAgF;YAChF,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACrG,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,uBAAuB;QAC3B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YAChC,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,
|
|
1
|
+
{"version":3,"file":"preferencesService.js","sourceRoot":"","sources":["../../src/services/preferencesService.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* [Source: Story 3.1 - Task 2]
|
|
5
5
|
* [Extended: Story 3.6 - Task 2: Project creation service]
|
|
6
6
|
*/
|
|
7
|
-
import type { PromptHistoryData, ProjectInfo, ProjectSettings, UpdateProjectSettingsRequest, ProjectSettingsApiResponse, CreateProjectRequest, CreateProjectResponse, ValidatePathResponse } from '@hammoc/shared';
|
|
7
|
+
import type { PromptHistoryData, PromptChainItem, ProjectInfo, ProjectSettings, UpdateProjectSettingsRequest, ProjectSettingsApiResponse, CreateProjectRequest, CreateProjectResponse, ValidatePathResponse } from '@hammoc/shared';
|
|
8
8
|
/**
|
|
9
9
|
* ProjectService - Scans and lists Claude Code projects
|
|
10
10
|
*/
|
|
@@ -62,6 +62,21 @@ declare class ProjectService {
|
|
|
62
62
|
* Write session names to <originalPath>/.hammoc/session-names.json
|
|
63
63
|
*/
|
|
64
64
|
private writeSessionNames;
|
|
65
|
+
private sessionPermissionLocks;
|
|
66
|
+
/**
|
|
67
|
+
* Read per-session permission modes from <originalPath>/.hammoc/session-permissions.json
|
|
68
|
+
* Returns empty object if file doesn't exist
|
|
69
|
+
*/
|
|
70
|
+
readSessionPermissions(originalPath: string): Promise<Record<string, string>>;
|
|
71
|
+
/**
|
|
72
|
+
* Write per-session permission modes to <originalPath>/.hammoc/session-permissions.json
|
|
73
|
+
*/
|
|
74
|
+
private writeSessionPermissions;
|
|
75
|
+
/**
|
|
76
|
+
* Update per-session permission mode for a specific session.
|
|
77
|
+
* Uses per-path mutex to prevent read-modify-write races.
|
|
78
|
+
*/
|
|
79
|
+
updateSessionPermission(originalPath: string, sessionId: string, mode: string): Promise<void>;
|
|
65
80
|
/**
|
|
66
81
|
* Update a session name for a project identified by slug
|
|
67
82
|
* @param name null to remove the name
|
|
@@ -92,6 +107,16 @@ declare class ProjectService {
|
|
|
92
107
|
* Write prompt history for a session identified by project slug
|
|
93
108
|
*/
|
|
94
109
|
writePromptHistoryBySlug(projectSlug: string, sessionId: string, data: PromptHistoryData): Promise<void>;
|
|
110
|
+
/** Validate sessionId and resolve safe file path within chain-failures directory */
|
|
111
|
+
private resolveChainFailurePath;
|
|
112
|
+
/**
|
|
113
|
+
* Read chain failure records for a session from ~/.hammoc/chain-failures/
|
|
114
|
+
*/
|
|
115
|
+
readChainFailures(sessionId: string): Promise<PromptChainItem[]>;
|
|
116
|
+
/**
|
|
117
|
+
* Write chain failure records for a session to ~/.hammoc/chain-failures/
|
|
118
|
+
*/
|
|
119
|
+
writeChainFailures(sessionId: string, failures: PromptChainItem[]): Promise<void>;
|
|
95
120
|
/**
|
|
96
121
|
* Extract originalPath (cwd) from a .jsonl session file's first few lines.
|
|
97
122
|
* Used as fallback when sessions-index.json doesn't exist (e.g., VS Code extension projects).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectService.d.ts","sourceRoot":"","sources":["../../src/services/projectService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,4BAA4B,EAC5B,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AAmFxB;;GAEG;AACH,cAAM,cAAc;IAClB;;;OAGG;IACH,oBAAoB,IAAI,MAAM;IAI9B;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAgE5C;;;;;OAKG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAmF9B;;;OAGG;IACG,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAUzE;;;;OAIG;IACG,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBvG;;;;OAIG;YACW,uBAAuB;IAiBrC;;;OAGG;IACG,+BAA+B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAY/F;;;OAGG;IACG,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,4BAA4B,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAY7H;;;OAGG;IACG,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAU7E;;OAEG;YACW,iBAAiB;
|
|
1
|
+
{"version":3,"file":"projectService.d.ts","sourceRoot":"","sources":["../../src/services/projectService.ts"],"names":[],"mappings":"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"}
|
|
@@ -310,6 +310,64 @@ class ProjectService {
|
|
|
310
310
|
const namesPath = path.join(hammocDir, 'session-names.json');
|
|
311
311
|
await fs.writeFile(namesPath, JSON.stringify(names, null, 2), 'utf-8');
|
|
312
312
|
}
|
|
313
|
+
// Per-path mutex for session-permissions.json read-modify-write
|
|
314
|
+
sessionPermissionLocks = new Map();
|
|
315
|
+
/**
|
|
316
|
+
* Read per-session permission modes from <originalPath>/.hammoc/session-permissions.json
|
|
317
|
+
* Returns empty object if file doesn't exist
|
|
318
|
+
*/
|
|
319
|
+
async readSessionPermissions(originalPath) {
|
|
320
|
+
const filePath = path.join(originalPath, '.hammoc', 'session-permissions.json');
|
|
321
|
+
try {
|
|
322
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
323
|
+
return JSON.parse(content);
|
|
324
|
+
}
|
|
325
|
+
catch (err) {
|
|
326
|
+
// Only treat missing file as empty; re-throw parse/other errors to prevent data loss
|
|
327
|
+
if (err.code === 'ENOENT')
|
|
328
|
+
return {};
|
|
329
|
+
throw err;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Write per-session permission modes to <originalPath>/.hammoc/session-permissions.json
|
|
334
|
+
*/
|
|
335
|
+
async writeSessionPermissions(originalPath, permissions) {
|
|
336
|
+
const hammocDir = path.join(originalPath, '.hammoc');
|
|
337
|
+
await fs.mkdir(hammocDir, { recursive: true });
|
|
338
|
+
const filePath = path.join(hammocDir, 'session-permissions.json');
|
|
339
|
+
await fs.writeFile(filePath, JSON.stringify(permissions, null, 2), 'utf-8');
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Update per-session permission mode for a specific session.
|
|
343
|
+
* Uses per-path mutex to prevent read-modify-write races.
|
|
344
|
+
*/
|
|
345
|
+
async updateSessionPermission(originalPath, sessionId, mode) {
|
|
346
|
+
// Shield chain from previous failures, then run current operation
|
|
347
|
+
const prev = this.sessionPermissionLocks.get(originalPath) ?? Promise.resolve();
|
|
348
|
+
let resolve;
|
|
349
|
+
let reject;
|
|
350
|
+
const next = new Promise((res, rej) => { resolve = res; reject = rej; });
|
|
351
|
+
const shielded = next.catch(() => { });
|
|
352
|
+
this.sessionPermissionLocks.set(originalPath, shielded);
|
|
353
|
+
try {
|
|
354
|
+
await prev.catch(() => { });
|
|
355
|
+
const permissions = await this.readSessionPermissions(originalPath);
|
|
356
|
+
permissions[sessionId] = mode;
|
|
357
|
+
await this.writeSessionPermissions(originalPath, permissions);
|
|
358
|
+
resolve();
|
|
359
|
+
}
|
|
360
|
+
catch (err) {
|
|
361
|
+
reject(err);
|
|
362
|
+
throw err;
|
|
363
|
+
}
|
|
364
|
+
finally {
|
|
365
|
+
// Clean up lock entry if no other operation has queued behind this one
|
|
366
|
+
if (this.sessionPermissionLocks.get(originalPath) === shielded) {
|
|
367
|
+
this.sessionPermissionLocks.delete(originalPath);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
313
371
|
/**
|
|
314
372
|
* Update a session name for a project identified by slug
|
|
315
373
|
* @param name null to remove the name
|
|
@@ -396,6 +454,61 @@ class ProjectService {
|
|
|
396
454
|
}
|
|
397
455
|
await this.writePromptHistory(info.originalPath, sessionId, data);
|
|
398
456
|
}
|
|
457
|
+
/** Validate sessionId and resolve safe file path within chain-failures directory */
|
|
458
|
+
resolveChainFailurePath(sessionId) {
|
|
459
|
+
if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(sessionId)) {
|
|
460
|
+
throw new Error(`Invalid sessionId format: ${sessionId}`);
|
|
461
|
+
}
|
|
462
|
+
const dir = path.join(os.homedir(), '.hammoc', 'chain-failures');
|
|
463
|
+
const filePath = path.resolve(dir, `${sessionId}.json`);
|
|
464
|
+
if (!filePath.startsWith(path.resolve(dir))) {
|
|
465
|
+
throw new Error(`Path traversal detected for sessionId: ${sessionId}`);
|
|
466
|
+
}
|
|
467
|
+
return filePath;
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Read chain failure records for a session from ~/.hammoc/chain-failures/
|
|
471
|
+
*/
|
|
472
|
+
async readChainFailures(sessionId) {
|
|
473
|
+
try {
|
|
474
|
+
const filePath = this.resolveChainFailurePath(sessionId);
|
|
475
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
476
|
+
const data = JSON.parse(content);
|
|
477
|
+
if (!data || !Array.isArray(data.failures)) {
|
|
478
|
+
throw new Error(`Invalid chain-failures format for session ${sessionId}`);
|
|
479
|
+
}
|
|
480
|
+
return data.failures;
|
|
481
|
+
}
|
|
482
|
+
catch (err) {
|
|
483
|
+
// File not found is expected (no failures recorded yet)
|
|
484
|
+
if (err && typeof err === 'object' && 'code' in err && err.code === 'ENOENT') {
|
|
485
|
+
return [];
|
|
486
|
+
}
|
|
487
|
+
// Propagate corruption / permission errors so callers can handle them
|
|
488
|
+
throw err;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Write chain failure records for a session to ~/.hammoc/chain-failures/
|
|
493
|
+
*/
|
|
494
|
+
async writeChainFailures(sessionId, failures) {
|
|
495
|
+
const filePath = this.resolveChainFailurePath(sessionId);
|
|
496
|
+
const dir = path.dirname(filePath);
|
|
497
|
+
if (failures.length === 0) {
|
|
498
|
+
try {
|
|
499
|
+
await fs.unlink(filePath);
|
|
500
|
+
}
|
|
501
|
+
catch (err) {
|
|
502
|
+
// File not found is expected; rethrow other errors (permissions, etc.)
|
|
503
|
+
if (err && typeof err === 'object' && 'code' in err && err.code !== 'ENOENT') {
|
|
504
|
+
throw err;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
await fs.mkdir(dir, { recursive: true });
|
|
510
|
+
await fs.writeFile(filePath, JSON.stringify({ failures }, null, 2), 'utf-8');
|
|
511
|
+
}
|
|
399
512
|
/**
|
|
400
513
|
* Extract originalPath (cwd) from a .jsonl session file's first few lines.
|
|
401
514
|
* Used as fallback when sessions-index.json doesn't exist (e.g., VS Code extension projects).
|