@relace-ai/jacq 0.1.2-beta.5 → 0.1.2-beta.7
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/dist/actions/messages.d.ts +16 -13
- package/dist/actions/messages.js +46 -20
- package/dist/actions/messages.js.map +1 -1
- package/dist/actions/tasks.d.ts +1 -2
- package/dist/actions/tasks.js +2 -6
- package/dist/actions/tasks.js.map +1 -1
- package/dist/commands.js +0 -2
- package/dist/commands.js.map +1 -1
- package/dist/connection.js +1 -1
- package/dist/index.js +26 -15
- package/dist/index.js.map +1 -1
- package/dist/protocol.d.ts +2 -2
- package/dist/protocol.js +67 -85
- package/dist/protocol.js.map +1 -1
- package/dist/state.js +6 -5
- package/dist/state.js.map +1 -1
- package/dist/types.d.ts +42 -21
- package/dist/types.js +3 -1
- package/dist/types.js.map +1 -1
- package/dist/ui/index.js +4 -18
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/input.js +0 -2
- package/dist/ui/input.js.map +1 -1
- package/dist/ui/messages.js +76 -66
- package/dist/ui/messages.js.map +1 -1
- package/dist/ui/modelPicker.d.ts +6 -0
- package/dist/ui/modelPicker.js +75 -0
- package/dist/ui/modelPicker.js.map +1 -0
- package/dist/ui/welcome.js +9 -31
- package/dist/ui/welcome.js.map +1 -1
- package/package.json +1 -1
- package/dist/ui/backgroundTasks.d.ts +0 -7
- package/dist/ui/backgroundTasks.js +0 -192
- package/dist/ui/backgroundTasks.js.map +0 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Picker Component — overlay for switching LLM models
|
|
3
|
+
*/
|
|
4
|
+
import { drawText, drawHLine } from './primitives.js';
|
|
5
|
+
import { markDirty } from '../state.js';
|
|
6
|
+
import { setModel } from '../protocol.js';
|
|
7
|
+
const MIN_HEIGHT = 6;
|
|
8
|
+
const modelPicker = {
|
|
9
|
+
height(state) {
|
|
10
|
+
const models = state.availableModels || [];
|
|
11
|
+
return Math.max(MIN_HEIGHT, models.length + 5);
|
|
12
|
+
},
|
|
13
|
+
draw(screen, y, state, layout, styles) {
|
|
14
|
+
const width = layout.width;
|
|
15
|
+
const models = state.availableModels || [];
|
|
16
|
+
drawHLine(screen, 0, y, width, styles.border);
|
|
17
|
+
drawText(screen, 2, y + 1, 'Select Model', styles.title);
|
|
18
|
+
if (models.length === 0) {
|
|
19
|
+
drawText(screen, 4, y + 3, 'No models available', styles.dim);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
for (let i = 0; i < models.length; i++) {
|
|
23
|
+
const model = models[i];
|
|
24
|
+
const isSelected = state.modelPickerIndex === i;
|
|
25
|
+
const isCurrent = model.id === state.currentModelId;
|
|
26
|
+
const row = y + 3 + i;
|
|
27
|
+
const prefix = isSelected ? ' \u276F ' : ' ';
|
|
28
|
+
drawText(screen, 0, row, prefix, styles.value);
|
|
29
|
+
let col = 4;
|
|
30
|
+
if (isCurrent) {
|
|
31
|
+
drawText(screen, col, row, '\u2713 ', styles.value);
|
|
32
|
+
col += 2;
|
|
33
|
+
}
|
|
34
|
+
drawText(screen, col, row, model.name, isSelected ? styles.title : styles.text);
|
|
35
|
+
const modelIdStr = ` (${model.modelId})`;
|
|
36
|
+
drawText(screen, col + model.name.length, row, modelIdStr, styles.dim);
|
|
37
|
+
}
|
|
38
|
+
const footerY = y + 3 + models.length + 1;
|
|
39
|
+
drawText(screen, 2, footerY, 'Enter to select \u00b7 Esc to close', styles.dim);
|
|
40
|
+
},
|
|
41
|
+
handleKey(str, key, state) {
|
|
42
|
+
const models = state.availableModels || [];
|
|
43
|
+
if (key.name === 'escape') {
|
|
44
|
+
state.overlay = null;
|
|
45
|
+
markDirty();
|
|
46
|
+
return { handled: true };
|
|
47
|
+
}
|
|
48
|
+
if (key.name === 'up') {
|
|
49
|
+
if (models.length > 0) {
|
|
50
|
+
state.modelPickerIndex = Math.max(0, state.modelPickerIndex - 1);
|
|
51
|
+
markDirty();
|
|
52
|
+
}
|
|
53
|
+
return { handled: true };
|
|
54
|
+
}
|
|
55
|
+
if (key.name === 'down') {
|
|
56
|
+
if (models.length > 0) {
|
|
57
|
+
state.modelPickerIndex = Math.min(models.length - 1, state.modelPickerIndex + 1);
|
|
58
|
+
markDirty();
|
|
59
|
+
}
|
|
60
|
+
return { handled: true };
|
|
61
|
+
}
|
|
62
|
+
if (key.name === 'return' && models.length > 0) {
|
|
63
|
+
const selected = models[state.modelPickerIndex];
|
|
64
|
+
if (selected) {
|
|
65
|
+
state.overlay = null;
|
|
66
|
+
markDirty();
|
|
67
|
+
setModel(selected.id);
|
|
68
|
+
}
|
|
69
|
+
return { handled: true };
|
|
70
|
+
}
|
|
71
|
+
return { handled: true }; // Consume all keys when overlay is open
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
export default modelPicker;
|
|
75
|
+
//# sourceMappingURL=modelPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelPicker.js","sourceRoot":"","sources":["../../src/ui/modelPicker.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/welcome.js
CHANGED
|
@@ -16,10 +16,8 @@ const welcome = {
|
|
|
16
16
|
return;
|
|
17
17
|
const width = layout.width;
|
|
18
18
|
const totalWidth = Math.min(width - 2, 90);
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const midWidth = unitWidth * 3;
|
|
22
|
-
const rightWidth = totalWidth - leftWidth - midWidth;
|
|
19
|
+
const leftWidth = Math.floor(totalWidth / 2);
|
|
20
|
+
const midWidth = totalWidth - leftWidth;
|
|
23
21
|
const startX = 1;
|
|
24
22
|
// Left box — branding + connection
|
|
25
23
|
drawBox(screen, startX, y, leftWidth, BOX_HEIGHT, styles.border);
|
|
@@ -30,12 +28,13 @@ const welcome = {
|
|
|
30
28
|
drawText(screen, titleX, y + 1, title, styles.title);
|
|
31
29
|
drawText(screen, titleX + title.length, y + 1, subtitle, styles.dim);
|
|
32
30
|
const infoX = startX + 2;
|
|
31
|
+
const maxValueWidth = leftWidth - 12;
|
|
33
32
|
drawText(screen, infoX, y + 3, 'Version:', styles.label);
|
|
34
33
|
drawText(screen, infoX + 9, y + 3, `v${CLIENT_VERSION}`, styles.dim);
|
|
35
34
|
drawText(screen, infoX, y + 4, 'Status:', styles.label);
|
|
36
35
|
if (state.authInProgress) {
|
|
37
36
|
const dot = state.blinkVisible ? '○' : '●';
|
|
38
|
-
drawText(screen, infoX + 8, y + 4, `${dot} ${state.authMessage || 'Authenticating...'}`, styles.dim);
|
|
37
|
+
drawText(screen, infoX + 8, y + 4, `${dot} ${state.authMessage || 'Authenticating...'}`, styles.dim, maxValueWidth);
|
|
39
38
|
}
|
|
40
39
|
else if (!state.authenticated) {
|
|
41
40
|
if (state.authDenied) {
|
|
@@ -48,6 +47,9 @@ const welcome = {
|
|
|
48
47
|
else if (state.connected) {
|
|
49
48
|
drawText(screen, infoX + 8, y + 4, 'Connected', styles.connected);
|
|
50
49
|
}
|
|
50
|
+
else if (state.wasConnected) {
|
|
51
|
+
drawText(screen, infoX + 8, y + 4, 'Disconnected', styles.dim);
|
|
52
|
+
}
|
|
51
53
|
else {
|
|
52
54
|
const dot = state.blinkVisible ? '○' : '●';
|
|
53
55
|
drawText(screen, infoX + 8, y + 4, `${dot} Connecting`, styles.dim);
|
|
@@ -57,13 +59,13 @@ const welcome = {
|
|
|
57
59
|
drawText(screen, infoX + 8, y + 5, 'Type /login', styles.value);
|
|
58
60
|
}
|
|
59
61
|
else if (state.userName) {
|
|
60
|
-
drawText(screen, infoX + 8, y + 5, state.userName, styles.value);
|
|
62
|
+
drawText(screen, infoX + 8, y + 5, state.userName, styles.value, maxValueWidth);
|
|
61
63
|
}
|
|
62
64
|
else {
|
|
63
65
|
drawText(screen, infoX + 8, y + 5, '—', styles.dim);
|
|
64
66
|
}
|
|
65
67
|
drawText(screen, infoX, y + 6, 'Server:', styles.label);
|
|
66
|
-
drawText(screen, infoX + 8, y + 6, state.serverUrl
|
|
68
|
+
drawText(screen, infoX + 8, y + 6, state.serverUrl, styles.dim, maxValueWidth);
|
|
67
69
|
if (state.authenticated) {
|
|
68
70
|
// Middle box — sessions
|
|
69
71
|
const midX = startX + leftWidth;
|
|
@@ -91,30 +93,6 @@ const welcome = {
|
|
|
91
93
|
else {
|
|
92
94
|
drawText(screen, midX + 2, y + 3, 'No chats yet', styles.dim);
|
|
93
95
|
}
|
|
94
|
-
// Right box — widgets
|
|
95
|
-
const rightX = midX + midWidth;
|
|
96
|
-
drawBox(screen, rightX, y, rightWidth, BOX_HEIGHT, styles.border);
|
|
97
|
-
drawText(screen, rightX + 2, y + 1, 'Widgets', styles.title);
|
|
98
|
-
drawText(screen, rightX + rightWidth - 2 - 2, y + 1, '^W', styles.dim);
|
|
99
|
-
const widgets = state.widgets || [];
|
|
100
|
-
if (widgets.length > 0) {
|
|
101
|
-
const showWidgets = widgets.length <= maxSlots ? widgets.length : maxSlots - 1;
|
|
102
|
-
let ty = 3;
|
|
103
|
-
for (const widget of widgets.slice(0, showWidgets)) {
|
|
104
|
-
const widgetTitle = (widget.title || 'Untitled').slice(0, rightWidth - 6);
|
|
105
|
-
drawText(screen, rightX + 2, y + ty, widgetTitle, styles.value);
|
|
106
|
-
ty++;
|
|
107
|
-
}
|
|
108
|
-
if (widgets.length > showWidgets) {
|
|
109
|
-
drawText(screen, rightX + 2, y + ty, `+${widgets.length - showWidgets} more`, styles.dim);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
else if (!state.connected) {
|
|
113
|
-
drawText(screen, rightX + 2, y + 3, 'Loading...', styles.dim);
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
drawText(screen, rightX + 2, y + 3, 'No widgets yet', styles.dim);
|
|
117
|
-
}
|
|
118
96
|
}
|
|
119
97
|
},
|
|
120
98
|
handleKey(_str, _key, _state) {
|
package/dist/ui/welcome.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/ui/welcome.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAGvC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAElE,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC;AAE9B,MAAM,OAAO,GAAgB;IACzB,MAAM,CAAC,KAAe;QAClB,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,MAAc,EAAE,CAAS,EAAE,KAAe,EAAE,MAAc,EAAE,MAAgB;QAC7E,IAAI,CAAC,KAAK,CAAC,WAAW;YAAE,OAAO;QAE/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/ui/welcome.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Widgets Component — full-screen draw() API
|
|
3
|
-
* Shows deployed interactive widgets and allows opening them in the browser
|
|
4
|
-
*/
|
|
5
|
-
import { drawText, drawHLine } from './primitives.js';
|
|
6
|
-
import { markDirty } from '../state.js';
|
|
7
|
-
import { connection } from '../connection.js';
|
|
8
|
-
import { fetchWidgets, fetchWidgetUrl } from '../protocol.js';
|
|
9
|
-
import { exec } from 'child_process';
|
|
10
|
-
const MIN_HEIGHT = 10;
|
|
11
|
-
const WIDGETS_PER_PAGE = 9;
|
|
12
|
-
const backgroundTasks = {
|
|
13
|
-
height(state) {
|
|
14
|
-
const widgets = state.widgets || [];
|
|
15
|
-
const totalPages = Math.ceil(widgets.length / WIDGETS_PER_PAGE) || 1;
|
|
16
|
-
const widgetRows = Math.min(widgets.length, WIDGETS_PER_PAGE);
|
|
17
|
-
const paginationRow = totalPages > 1 ? 2 : 1;
|
|
18
|
-
const contentHeight = 5 + widgetRows + paginationRow;
|
|
19
|
-
return Math.max(MIN_HEIGHT, contentHeight);
|
|
20
|
-
},
|
|
21
|
-
draw(screen, y, state, layout, styles) {
|
|
22
|
-
const width = layout.width;
|
|
23
|
-
const widgets = state.widgets || [];
|
|
24
|
-
const componentHeight = this.height(state);
|
|
25
|
-
const totalPages = Math.ceil(widgets.length / WIDGETS_PER_PAGE) || 1;
|
|
26
|
-
const currentPage = state.widgetsPage || 0;
|
|
27
|
-
const idx = state.widgetsIndex || 0;
|
|
28
|
-
// Top separator
|
|
29
|
-
drawHLine(screen, 0, y, width, styles.border);
|
|
30
|
-
// Title row
|
|
31
|
-
if (widgets.length > 0) {
|
|
32
|
-
const summary = `${widgets.length} widget${widgets.length === 1 ? '' : 's'}`;
|
|
33
|
-
drawText(screen, 2, y + 1, 'Widgets', styles.title);
|
|
34
|
-
drawText(screen, width - summary.length - 2, y + 1, summary, styles.dim);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
drawText(screen, 2, y + 1, 'Widgets', styles.title);
|
|
38
|
-
}
|
|
39
|
-
// Content
|
|
40
|
-
if (!state.widgetsLoaded) {
|
|
41
|
-
drawText(screen, 4, y + 3, 'Loading...', styles.dim);
|
|
42
|
-
}
|
|
43
|
-
else if (widgets.length === 0) {
|
|
44
|
-
drawText(screen, 4, y + 3, 'No widgets yet', styles.dim);
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
const pageStart = currentPage * WIDGETS_PER_PAGE;
|
|
48
|
-
const pageEnd = Math.min(pageStart + WIDGETS_PER_PAGE, widgets.length);
|
|
49
|
-
const pageWidgets = widgets.slice(pageStart, pageEnd);
|
|
50
|
-
for (let i = 0; i < pageWidgets.length; i++) {
|
|
51
|
-
const widget = pageWidgets[i];
|
|
52
|
-
const displayIndex = i + 1;
|
|
53
|
-
const isSelected = idx === displayIndex;
|
|
54
|
-
const row = y + 3 + i;
|
|
55
|
-
const prefix = isSelected ? ' \u276F ' : ' ';
|
|
56
|
-
drawText(screen, 0, row, prefix, styles.value);
|
|
57
|
-
drawText(screen, 4, row, `${displayIndex}.`, styles.dim);
|
|
58
|
-
drawText(screen, 7, row, widget.title || 'Untitled', isSelected ? styles.title : styles.value);
|
|
59
|
-
}
|
|
60
|
-
// Pagination
|
|
61
|
-
if (totalPages > 1) {
|
|
62
|
-
const paginationY = y + 3 + pageWidgets.length + 1;
|
|
63
|
-
drawText(screen, 2, paginationY, `\u2190 Page ${currentPage + 1}/${totalPages} \u2192`, styles.dim);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
// Bottom separator
|
|
67
|
-
const bottomY = y + componentHeight - 2;
|
|
68
|
-
drawHLine(screen, 0, bottomY, width, styles.border);
|
|
69
|
-
// Hints
|
|
70
|
-
const hy = bottomY + 1;
|
|
71
|
-
let hx = 2;
|
|
72
|
-
const gap = ' ';
|
|
73
|
-
if (totalPages > 1) {
|
|
74
|
-
drawText(screen, hx, hy, '\u2191\u2193', styles.value);
|
|
75
|
-
hx += 2;
|
|
76
|
-
drawText(screen, hx, hy, ' navigate', styles.hint);
|
|
77
|
-
hx += 9 + gap.length;
|
|
78
|
-
drawText(screen, hx, hy, '\u2190\u2192', styles.value);
|
|
79
|
-
hx += 2;
|
|
80
|
-
drawText(screen, hx, hy, ' page', styles.hint);
|
|
81
|
-
hx += 5 + gap.length;
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
drawText(screen, hx, hy, '\u2191\u2193', styles.value);
|
|
85
|
-
hx += 2;
|
|
86
|
-
drawText(screen, hx, hy, ' navigate', styles.hint);
|
|
87
|
-
hx += 9 + gap.length;
|
|
88
|
-
}
|
|
89
|
-
drawText(screen, hx, hy, 'Enter', styles.value);
|
|
90
|
-
hx += 5;
|
|
91
|
-
drawText(screen, hx, hy, ' open', styles.hint);
|
|
92
|
-
hx += 5 + gap.length;
|
|
93
|
-
drawText(screen, hx, hy, '#0-9', styles.value);
|
|
94
|
-
hx += 4;
|
|
95
|
-
drawText(screen, hx, hy, ' quick', styles.hint);
|
|
96
|
-
hx += 6 + gap.length;
|
|
97
|
-
drawText(screen, hx, hy, 'Bksp', styles.value);
|
|
98
|
-
hx += 4;
|
|
99
|
-
drawText(screen, hx, hy, ' delete', styles.hint);
|
|
100
|
-
hx += 7 + gap.length;
|
|
101
|
-
drawText(screen, hx, hy, '^W/Esc', styles.value);
|
|
102
|
-
hx += 6;
|
|
103
|
-
drawText(screen, hx, hy, ' close', styles.hint);
|
|
104
|
-
},
|
|
105
|
-
handleKey(str, key, state) {
|
|
106
|
-
const widgets = state.widgets || [];
|
|
107
|
-
const totalPages = Math.ceil(widgets.length / WIDGETS_PER_PAGE) || 1;
|
|
108
|
-
const currentPage = state.widgetsPage || 0;
|
|
109
|
-
const pageStart = currentPage * WIDGETS_PER_PAGE;
|
|
110
|
-
const pageEnd = Math.min(pageStart + WIDGETS_PER_PAGE, widgets.length);
|
|
111
|
-
const pageWidgets = widgets.slice(pageStart, pageEnd);
|
|
112
|
-
const idx = state.widgetsIndex || 0;
|
|
113
|
-
const maxIndex = pageWidgets.length;
|
|
114
|
-
if (key.name === 'escape') {
|
|
115
|
-
state.overlay = null;
|
|
116
|
-
markDirty();
|
|
117
|
-
return { handled: true };
|
|
118
|
-
}
|
|
119
|
-
if (key.name === 'left' && totalPages > 1) {
|
|
120
|
-
state.widgetsPage = currentPage > 0 ? currentPage - 1 : totalPages - 1;
|
|
121
|
-
state.widgetsIndex = 1;
|
|
122
|
-
markDirty();
|
|
123
|
-
return { handled: true };
|
|
124
|
-
}
|
|
125
|
-
if (key.name === 'right' && totalPages > 1) {
|
|
126
|
-
state.widgetsPage = currentPage < totalPages - 1 ? currentPage + 1 : 0;
|
|
127
|
-
state.widgetsIndex = 1;
|
|
128
|
-
markDirty();
|
|
129
|
-
return { handled: true };
|
|
130
|
-
}
|
|
131
|
-
if (key.name === 'up') {
|
|
132
|
-
state.widgetsIndex = idx > 1 ? idx - 1 : maxIndex;
|
|
133
|
-
markDirty();
|
|
134
|
-
return { handled: true };
|
|
135
|
-
}
|
|
136
|
-
if (key.name === 'down') {
|
|
137
|
-
state.widgetsIndex = idx < maxIndex ? idx + 1 : 1;
|
|
138
|
-
markDirty();
|
|
139
|
-
return { handled: true };
|
|
140
|
-
}
|
|
141
|
-
if (key.name === 'return' && idx >= 1 && idx <= pageWidgets.length) {
|
|
142
|
-
const widget = pageWidgets[idx - 1];
|
|
143
|
-
if (widget) {
|
|
144
|
-
openWidgetInBrowser(widget.id);
|
|
145
|
-
}
|
|
146
|
-
return { handled: true };
|
|
147
|
-
}
|
|
148
|
-
if (key.name === 'backspace' && idx >= 1 && idx <= pageWidgets.length) {
|
|
149
|
-
const widget = pageWidgets[idx - 1];
|
|
150
|
-
if (widget) {
|
|
151
|
-
deleteWidget(widget.id);
|
|
152
|
-
if (idx > maxIndex - 1 && idx > 1) {
|
|
153
|
-
state.widgetsIndex = idx - 1;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return { handled: true };
|
|
157
|
-
}
|
|
158
|
-
const num = parseInt(str || '', 10);
|
|
159
|
-
if (num >= 1 && num <= 9 && num <= pageWidgets.length) {
|
|
160
|
-
state.widgetsIndex = num;
|
|
161
|
-
markDirty();
|
|
162
|
-
return { handled: true };
|
|
163
|
-
}
|
|
164
|
-
return { handled: false };
|
|
165
|
-
}
|
|
166
|
-
};
|
|
167
|
-
async function openWidgetInBrowser(widgetId) {
|
|
168
|
-
try {
|
|
169
|
-
const url = await fetchWidgetUrl(widgetId);
|
|
170
|
-
const cmd = process.platform === 'darwin' ? 'open'
|
|
171
|
-
: process.platform === 'win32' ? 'start'
|
|
172
|
-
: 'xdg-open';
|
|
173
|
-
exec(`${cmd} "${url}"`);
|
|
174
|
-
}
|
|
175
|
-
catch {
|
|
176
|
-
// Silent — signed URL fetch failed
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
async function deleteWidget(widgetId) {
|
|
180
|
-
try {
|
|
181
|
-
await connection.request({
|
|
182
|
-
type: 'widgets.delete',
|
|
183
|
-
payload: { widgetId },
|
|
184
|
-
}, 5000);
|
|
185
|
-
fetchWidgets();
|
|
186
|
-
}
|
|
187
|
-
catch {
|
|
188
|
-
// Silently fail
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
export default backgroundTasks;
|
|
192
|
-
//# sourceMappingURL=backgroundTasks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"backgroundTasks.js","sourceRoot":"","sources":["../../src/ui/backgroundTasks.ts"],"names":[],"mappings":"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"}
|