clitrigger 0.2.24 → 0.2.25

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 (52) hide show
  1. package/dist/client/assets/{FloatingComposerController-5A3GJtK4-D5OJqjB6.js → FloatingComposerController-5A3GJtK4-Dewu1Gm8.js} +1 -1
  2. package/dist/client/assets/{index-7c5uNap1.js → index-B27QeZaI.js} +311 -293
  3. package/dist/client/assets/{index-CyIseJUh.css → index-BlJ7W4Dm.css} +1 -1
  4. package/dist/client/index.html +2 -2
  5. package/dist/server/index.d.ts.map +1 -1
  6. package/dist/server/index.js +32 -7
  7. package/dist/server/index.js.map +1 -1
  8. package/dist/server/lib/jira-client.d.ts.map +1 -1
  9. package/dist/server/lib/jira-client.js +4 -1
  10. package/dist/server/lib/jira-client.js.map +1 -1
  11. package/dist/server/middleware/auth.d.ts +9 -0
  12. package/dist/server/middleware/auth.d.ts.map +1 -1
  13. package/dist/server/middleware/auth.js +95 -17
  14. package/dist/server/middleware/auth.js.map +1 -1
  15. package/dist/server/plugins/jira/router.d.ts.map +1 -1
  16. package/dist/server/plugins/jira/router.js +3 -1
  17. package/dist/server/plugins/jira/router.js.map +1 -1
  18. package/dist/server/routes/files.d.ts.map +1 -1
  19. package/dist/server/routes/files.js +9 -20
  20. package/dist/server/routes/files.js.map +1 -1
  21. package/dist/server/routes/images.d.ts.map +1 -1
  22. package/dist/server/routes/images.js +9 -0
  23. package/dist/server/routes/images.js.map +1 -1
  24. package/dist/server/routes/memory.d.ts.map +1 -1
  25. package/dist/server/routes/memory.js +2 -16
  26. package/dist/server/routes/memory.js.map +1 -1
  27. package/dist/server/routes/projects.d.ts.map +1 -1
  28. package/dist/server/routes/projects.js +42 -12
  29. package/dist/server/routes/projects.js.map +1 -1
  30. package/dist/server/routes/vault.d.ts.map +1 -1
  31. package/dist/server/routes/vault.js +6 -1
  32. package/dist/server/routes/vault.js.map +1 -1
  33. package/dist/server/services/claude-manager.d.ts.map +1 -1
  34. package/dist/server/services/claude-manager.js +15 -0
  35. package/dist/server/services/claude-manager.js.map +1 -1
  36. package/dist/server/utils/net-safety.d.ts +2 -0
  37. package/dist/server/utils/net-safety.d.ts.map +1 -0
  38. package/dist/server/utils/net-safety.js +28 -0
  39. package/dist/server/utils/net-safety.js.map +1 -0
  40. package/dist/server/utils/open-path.d.ts +4 -0
  41. package/dist/server/utils/open-path.d.ts.map +1 -0
  42. package/dist/server/utils/open-path.js +19 -0
  43. package/dist/server/utils/open-path.js.map +1 -0
  44. package/dist/server/utils/path-safety.d.ts +2 -0
  45. package/dist/server/utils/path-safety.d.ts.map +1 -0
  46. package/dist/server/utils/path-safety.js +25 -0
  47. package/dist/server/utils/path-safety.js.map +1 -0
  48. package/dist/server/websocket/index.d.ts.map +1 -1
  49. package/dist/server/websocket/index.js +8 -0
  50. package/dist/server/websocket/index.js.map +1 -1
  51. package/electron/main.cjs +17 -3
  52. package/package.json +1 -1
package/electron/main.cjs CHANGED
@@ -160,7 +160,7 @@ function createWindow(port) {
160
160
  preload: path.join(__dirname, 'preload.cjs'),
161
161
  contextIsolation: true,
162
162
  nodeIntegration: false,
163
- sandbox: false,
163
+ sandbox: true,
164
164
  },
165
165
  });
166
166
 
@@ -194,7 +194,11 @@ function createWindow(port) {
194
194
  mainWindow.webContents.setWindowOpenHandler(({ url, features }) => {
195
195
  const isLocal = localOrigins.some((o) => url.startsWith(o));
196
196
  if (!isLocal) {
197
- shell.openExternal(url);
197
+ // Only hand safe schemes to the OS — never file:/smb:/custom handlers.
198
+ try {
199
+ const proto = new URL(url).protocol;
200
+ if (proto === 'http:' || proto === 'https:' || proto === 'mailto:') shell.openExternal(url);
201
+ } catch { /* invalid url — ignore */ }
198
202
  return { action: 'deny' };
199
203
  }
200
204
  // Session pop-out windows: open as a real OS child window with the same
@@ -237,7 +241,7 @@ function createWindow(port) {
237
241
  preload: path.join(__dirname, 'preload.cjs'),
238
242
  contextIsolation: true,
239
243
  nodeIntegration: false,
240
- sandbox: false,
244
+ sandbox: true,
241
245
  },
242
246
  },
243
247
  };
@@ -245,11 +249,21 @@ function createWindow(port) {
245
249
  return { action: 'allow' };
246
250
  });
247
251
 
252
+ // Block top-level navigation to off-origin URLs so injected content / links
253
+ // can't load a remote page inside the trusted, preload-attached window.
254
+ const blockOffOriginNav = (contents) => {
255
+ contents.on('will-navigate', (e, navUrl) => {
256
+ if (!localOrigins.some((o) => navUrl.startsWith(o))) e.preventDefault();
257
+ });
258
+ };
259
+ blockOffOriginNav(mainWindow.webContents);
260
+
248
261
  // Newly-created child windows (popouts) inherit the main window's
249
262
  // setWindowOpenHandler but not the lock-screen focus-recovery handler.
250
263
  // Attach the same focus → webContents.focus() bridge so xterm typing
251
264
  // doesn't go dead after resume.
252
265
  mainWindow.webContents.on('did-create-window', (childWin) => {
266
+ blockOffOriginNav(childWin.webContents);
253
267
  childWin.on('focus', () => {
254
268
  // Skip when webContents already holds focus — a redundant programmatic
255
269
  // focus() resets the Windows IME (TSF) caret context, which is the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clitrigger",
3
- "version": "0.2.24",
3
+ "version": "0.2.25",
4
4
  "description": "Spawn isolated git worktrees and orchestrate Claude/Gemini/Codex CLI tasks in parallel from a web UI.",
5
5
  "keywords": [
6
6
  "claude",