forkoff 1.0.11 → 1.0.13

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 (57) hide show
  1. package/README.md +7 -4
  2. package/dist/__tests__/cli-commands.test.d.ts +6 -0
  3. package/dist/__tests__/cli-commands.test.d.ts.map +1 -0
  4. package/dist/__tests__/cli-commands.test.js +213 -0
  5. package/dist/__tests__/cli-commands.test.js.map +1 -0
  6. package/dist/__tests__/startup.test.d.ts +11 -0
  7. package/dist/__tests__/startup.test.d.ts.map +1 -0
  8. package/dist/__tests__/startup.test.js +234 -0
  9. package/dist/__tests__/startup.test.js.map +1 -0
  10. package/dist/__tests__/tools/claude-process.test.js +221 -15
  11. package/dist/__tests__/tools/claude-process.test.js.map +1 -1
  12. package/dist/__tests__/tools/permission-hook.test.d.ts +17 -0
  13. package/dist/__tests__/tools/permission-hook.test.d.ts.map +1 -0
  14. package/dist/__tests__/tools/permission-hook.test.js +616 -0
  15. package/dist/__tests__/tools/permission-hook.test.js.map +1 -0
  16. package/dist/__tests__/tools/permission-ipc.test.d.ts +11 -0
  17. package/dist/__tests__/tools/permission-ipc.test.d.ts.map +1 -0
  18. package/dist/__tests__/tools/permission-ipc.test.js +612 -0
  19. package/dist/__tests__/tools/permission-ipc.test.js.map +1 -0
  20. package/dist/config.js +1 -1
  21. package/dist/index.d.ts +2 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +1010 -898
  24. package/dist/index.js.map +1 -1
  25. package/dist/startup.d.ts.map +1 -1
  26. package/dist/startup.js +45 -15
  27. package/dist/startup.js.map +1 -1
  28. package/dist/tools/__tests__/claude-sessions.test.d.ts +2 -0
  29. package/dist/tools/__tests__/claude-sessions.test.d.ts.map +1 -0
  30. package/dist/tools/__tests__/claude-sessions.test.js +306 -0
  31. package/dist/tools/__tests__/claude-sessions.test.js.map +1 -0
  32. package/dist/tools/claude-process.d.ts +81 -4
  33. package/dist/tools/claude-process.d.ts.map +1 -1
  34. package/dist/tools/claude-process.js +332 -20
  35. package/dist/tools/claude-process.js.map +1 -1
  36. package/dist/tools/claude-sessions.d.ts +5 -0
  37. package/dist/tools/claude-sessions.d.ts.map +1 -1
  38. package/dist/tools/claude-sessions.js +16 -2
  39. package/dist/tools/claude-sessions.js.map +1 -1
  40. package/dist/tools/index.d.ts +1 -0
  41. package/dist/tools/index.d.ts.map +1 -1
  42. package/dist/tools/index.js +3 -1
  43. package/dist/tools/index.js.map +1 -1
  44. package/dist/tools/permission-hook.d.ts +41 -0
  45. package/dist/tools/permission-hook.d.ts.map +1 -0
  46. package/dist/tools/permission-hook.js +312 -0
  47. package/dist/tools/permission-hook.js.map +1 -0
  48. package/dist/tools/permission-ipc.d.ts +109 -0
  49. package/dist/tools/permission-ipc.d.ts.map +1 -0
  50. package/dist/tools/permission-ipc.js +295 -0
  51. package/dist/tools/permission-ipc.js.map +1 -0
  52. package/dist/websocket.d.ts +14 -0
  53. package/dist/websocket.d.ts.map +1 -1
  54. package/dist/websocket.js +34 -4
  55. package/dist/websocket.js.map +1 -1
  56. package/jest.config.js +3 -0
  57. package/package.json +1 -1
@@ -272,6 +272,16 @@ class ClaudeSessionDetector extends events_1.EventEmitter {
272
272
  const rest = remaining.slice(firstHyphen + 1);
273
273
  return this.resolveEncodedPath(path.join(basePath, segment), rest);
274
274
  }
275
+ /**
276
+ * Pre-populate the known sessions cache so that startWatching()
277
+ * doesn't re-emit sessions that were already sent via batch.
278
+ */
279
+ seedKnownSessions(sessions) {
280
+ this.lastKnownSessions.clear();
281
+ for (const session of sessions) {
282
+ this.lastKnownSessions.set(session.sessionKey, session);
283
+ }
284
+ }
275
285
  /**
276
286
  * Start watching for session changes
277
287
  */
@@ -279,8 +289,12 @@ class ClaudeSessionDetector extends events_1.EventEmitter {
279
289
  if (this.watchInterval) {
280
290
  return;
281
291
  }
282
- // Initial scan
283
- this.checkAndEmitChanges();
292
+ // If lastKnownSessions is empty, do an initial scan to populate cache.
293
+ // If seedKnownSessions() was called first, this is skipped and we only
294
+ // detect genuinely new sessions on the next interval tick.
295
+ if (this.lastKnownSessions.size === 0) {
296
+ this.checkAndEmitChanges();
297
+ }
284
298
  // Watch for changes
285
299
  this.watchInterval = setInterval(() => {
286
300
  this.checkAndEmitChanges();
@@ -1 +1 @@
1
- {"version":3,"file":"claude-sessions.js","sourceRoot":"","sources":["../../src/tools/claude-sessions.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,mCAAsC;AACtC,iDAAgD;AAUhD,MAAM,qBAAsB,SAAQ,qBAAY;IAO9C;QACE,KAAK,EAAE,CAAC;QALF,kBAAa,GAA0B,IAAI,CAAC;QAC5C,sBAAiB,GAAmC,IAAI,GAAG,EAAE,CAAC;QAC9D,sBAAiB,GAAY,KAAK,CAAC;QAIzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;YAE/B,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACzB,+DAA+D;gBAC/D,wEAAwE;gBACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBACrC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBACvB,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;wBACtC,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;wBACrD,OAAO,GAAG,GAAG,WAAW,GAAG,KAAK,CAAC,CAAC,4BAA4B;oBAChE,CAAC,CAAC,CAAC;oBACH,IAAI,aAAa,EAAE,CAAC;wBAClB,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;iBAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,mBAAmB;gBACnB,IAAI,CAAC;oBACH,IAAA,wBAAQ,EAAC,wCAAwC,EAAE;wBACjD,QAAQ,EAAE,MAAM;wBAChB,OAAO,EAAE,IAAI;qBACd,CAAC,CAAC;oBACH,OAAO,IAAI,CAAC;gBACd,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,mBAAmB;gBACnB,IAAI,CAAC;oBACH,IAAA,wBAAQ,EAAC,iBAAiB,EAAE;wBAC1B,QAAQ,EAAE,MAAM;wBAChB,OAAO,EAAE,IAAI;qBACd,CAAC,CAAC;oBACH,OAAO,IAAI,CAAC;gBACd,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY;QACV,MAAM,QAAQ,GAAwB,EAAE,CAAC;QAEzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,CAAC;YACH,mEAAmE;YACnE,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAErD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACrC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;gBAC5D,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAEtC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBAAE,SAAS;gBAElC,+BAA+B;gBAC/B,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;gBAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAAE,SAAS;oBAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;oBAChE,IAAI,WAAW,EAAE,CAAC;wBAChB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,CAAC,CAAC;QAC3E,CAAC;QAED,gCAAgC;QAChC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACrB,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CACpE,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,QAAgB,EAAE,UAAkB;QAC3D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEnD,kEAAkE;YAClE,sDAAsD;YACtD,sEAAsE;YACtE,0EAA0E;YAC1E,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAElD,+CAA+C;YAC/C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,SAAS,GAAG,QAAQ,CAAC;YAEzB,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC3C,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;oBAC3B,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;gBACrC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,6BAA6B;YAC/B,CAAC;YAED,OAAO;gBACL,UAAU,EAAE,SAAS;gBACrB,SAAS;gBACT,KAAK,EAAE,UAAU,EAAE,uCAAuC;gBAC1D,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBACpC,cAAc,EAAE,QAAQ;aACzB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,gBAAgB,CAAC,UAAkB;QACzC,IAAI,SAAS,GAAG,UAAU,CAAC;QAC3B,IAAI,QAAQ,GAAG,EAAE,CAAC;QAElB,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;YAC9B,yCAAyC;YACzC,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACvD,IAAI,UAAU,EAAE,CAAC;gBACf,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;gBACjC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,GAAG,CAAC;QACjB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC9D,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,kDAAkD;QAClD,IAAI,QAAQ,GAAG,UAAU;aACtB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;aACvB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7D,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACK,kBAAkB,CAAC,QAAgB,EAAE,SAAiB;QAC5D,IAAI,CAAC,SAAS;YAAE,OAAO,QAAQ,CAAC;QAEhC,8CAA8C;QAC9C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACnE,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC;qBACrC,MAAM,CAAC,CAAC,CAAC,EAAE;oBACV,IAAI,CAAC;wBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;oBAAC,CAAC;oBACjE,MAAM,CAAC;wBAAC,OAAO,KAAK,CAAC;oBAAC,CAAC;gBACzB,CAAC,CAAC;qBACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB;gBAE9D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,oEAAoE;oBACpE,mEAAmE;oBACnE,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBAEjD,6BAA6B;oBAC7B,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;wBAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;oBACpC,CAAC;oBACD,2DAA2D;oBAC3D,IAAI,SAAS,CAAC,UAAU,CAAC,YAAY,GAAG,GAAG,CAAC,EAAE,CAAC;wBAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;wBAC3E,IAAI,QAAQ;4BAAE,OAAO,QAAQ,CAAC;oBAChC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;QAED,sEAAsE;QACtE,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,aAAqB,IAAI;QACrC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,eAAe;QACf,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,oBAAoB;QACpB,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB;QACzB,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,wEAAwE;QACxE,iEAAiE;QACjE,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;YAC3D,MAAM,QAAQ,GAAG,GAAG,GAAG,WAAW,GAAG,KAAK,CAAC,CAAC,4BAA4B;YAExE,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;gBACzB,gBAAgB,GAAG,IAAI,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,IAAI,gBAAgB,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAChD,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,CAAC;QACxD,CAAC;QAED,oCAAoC;QACpC,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAEhE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,uBAAuB;gBACvB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;YACzC,CAAC;iBAAM,IAAI,QAAQ,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC5C,qEAAqE;gBACrE,+DAA+D;gBAC/D,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;YACxC,CAAC;YACD,mEAAmE;YACnE,qEAAqE;QACvE,CAAC;QAED,6BAA6B;QAC7B,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3D,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,EAAE,CAAC;gBAC5D,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,eAAe;QACf,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC/B,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;CACF;AAEY,QAAA,qBAAqB,GAAG,IAAI,qBAAqB,EAAE,CAAC;AACjE,kBAAe,6BAAqB,CAAC"}
1
+ {"version":3,"file":"claude-sessions.js","sourceRoot":"","sources":["../../src/tools/claude-sessions.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,5 @@ export { toolDetector, DetectedTool, ToolDetectionResult } from './detector';
5
5
  export { claudeHooksManager, ClaudeHookInput, ClaudeHookOutput } from './claude-hooks';
6
6
  export { claudeSessionDetector, ClaudeSessionInfo } from './claude-sessions';
7
7
  export { claudeProcessManager } from './claude-process';
8
+ export { PermissionIpcManager } from './permission-ipc';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -3,7 +3,7 @@
3
3
  * Tools Module - Detection and integration with AI coding tools
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.claudeProcessManager = exports.claudeSessionDetector = exports.claudeHooksManager = exports.toolDetector = void 0;
6
+ exports.PermissionIpcManager = exports.claudeProcessManager = exports.claudeSessionDetector = exports.claudeHooksManager = exports.toolDetector = void 0;
7
7
  var detector_1 = require("./detector");
8
8
  Object.defineProperty(exports, "toolDetector", { enumerable: true, get: function () { return detector_1.toolDetector; } });
9
9
  var claude_hooks_1 = require("./claude-hooks");
@@ -12,4 +12,6 @@ var claude_sessions_1 = require("./claude-sessions");
12
12
  Object.defineProperty(exports, "claudeSessionDetector", { enumerable: true, get: function () { return claude_sessions_1.claudeSessionDetector; } });
13
13
  var claude_process_1 = require("./claude-process");
14
14
  Object.defineProperty(exports, "claudeProcessManager", { enumerable: true, get: function () { return claude_process_1.claudeProcessManager; } });
15
+ var permission_ipc_1 = require("./permission-ipc");
16
+ Object.defineProperty(exports, "PermissionIpcManager", { enumerable: true, get: function () { return permission_ipc_1.PermissionIpcManager; } });
15
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,uCAA6E;AAApE,wGAAA,YAAY,OAAA;AACrB,+CAAuF;AAA9E,kHAAA,kBAAkB,OAAA;AAC3B,qDAA6E;AAApE,wHAAA,qBAAqB,OAAA;AAC9B,mDAAwD;AAA/C,sHAAA,oBAAoB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,uCAA6E;AAApE,wGAAA,YAAY,OAAA;AACrB,+CAAuF;AAA9E,kHAAA,kBAAkB,OAAA;AAC3B,qDAA6E;AAApE,wHAAA,qBAAqB,OAAA;AAC9B,mDAAwD;AAA/C,sHAAA,oBAAoB,OAAA;AAC7B,mDAAwD;AAA/C,sHAAA,oBAAoB,OAAA"}
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ForkOff Permission Hook for Claude Code
4
+ *
5
+ * This is a standalone PreToolUse hook script. Claude Code spawns it as a
6
+ * child process, passes tool info via stdin JSON, and reads the permission
7
+ * decision from stdout JSON.
8
+ *
9
+ * The hook reads user-configurable rules from a JSON file on disk (written by
10
+ * the CLI when mobile syncs rules). If no rules file exists, it falls back to
11
+ * a hardcoded default safe-tools set.
12
+ *
13
+ * Safe tools are auto-approved immediately. For Bash, command patterns are
14
+ * checked against user-defined glob patterns. Dangerous tools write a request
15
+ * temp file and poll for a response file that the main CLI process creates
16
+ * after receiving a mobile approval/denial.
17
+ *
18
+ * Exit codes:
19
+ * 0 — allow (decision accepted)
20
+ * 2 — deny (block the tool use)
21
+ *
22
+ * No external dependencies — only Node.js built-ins.
23
+ */
24
+ /**
25
+ * Load permission rules from the rules file on disk.
26
+ * Falls back to hardcoded defaults if the file doesn't exist or is invalid.
27
+ */
28
+ export declare function loadRules(): {
29
+ safeTools: Set<string>;
30
+ bashPatterns: string[];
31
+ };
32
+ /**
33
+ * Check if a command matches any of the given glob-like patterns.
34
+ * Patterns use simple glob matching where `*` matches any characters.
35
+ *
36
+ * @example
37
+ * matchesAnyPattern('npm test', ['npm *', 'git status']) // true
38
+ * matchesAnyPattern('rm -rf /', ['npm *', 'git status']) // false
39
+ */
40
+ export declare function matchesAnyPattern(command: string, patterns: string[]): boolean;
41
+ //# sourceMappingURL=permission-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-hook.d.ts","sourceRoot":"","sources":["../../src/tools/permission-hook.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AA0HH;;;GAGG;AACH,wBAAgB,SAAS,IAAI;IAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAyB9E;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAK9E"}
@@ -0,0 +1,312 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * ForkOff Permission Hook for Claude Code
5
+ *
6
+ * This is a standalone PreToolUse hook script. Claude Code spawns it as a
7
+ * child process, passes tool info via stdin JSON, and reads the permission
8
+ * decision from stdout JSON.
9
+ *
10
+ * The hook reads user-configurable rules from a JSON file on disk (written by
11
+ * the CLI when mobile syncs rules). If no rules file exists, it falls back to
12
+ * a hardcoded default safe-tools set.
13
+ *
14
+ * Safe tools are auto-approved immediately. For Bash, command patterns are
15
+ * checked against user-defined glob patterns. Dangerous tools write a request
16
+ * temp file and poll for a response file that the main CLI process creates
17
+ * after receiving a mobile approval/denial.
18
+ *
19
+ * Exit codes:
20
+ * 0 — allow (decision accepted)
21
+ * 2 — deny (block the tool use)
22
+ *
23
+ * No external dependencies — only Node.js built-ins.
24
+ */
25
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
26
+ if (k2 === undefined) k2 = k;
27
+ var desc = Object.getOwnPropertyDescriptor(m, k);
28
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
29
+ desc = { enumerable: true, get: function() { return m[k]; } };
30
+ }
31
+ Object.defineProperty(o, k2, desc);
32
+ }) : (function(o, m, k, k2) {
33
+ if (k2 === undefined) k2 = k;
34
+ o[k2] = m[k];
35
+ }));
36
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
37
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
38
+ }) : function(o, v) {
39
+ o["default"] = v;
40
+ });
41
+ var __importStar = (this && this.__importStar) || (function () {
42
+ var ownKeys = function(o) {
43
+ ownKeys = Object.getOwnPropertyNames || function (o) {
44
+ var ar = [];
45
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
46
+ return ar;
47
+ };
48
+ return ownKeys(o);
49
+ };
50
+ return function (mod) {
51
+ if (mod && mod.__esModule) return mod;
52
+ var result = {};
53
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
54
+ __setModuleDefault(result, mod);
55
+ return result;
56
+ };
57
+ })();
58
+ Object.defineProperty(exports, "__esModule", { value: true });
59
+ exports.loadRules = loadRules;
60
+ exports.matchesAnyPattern = matchesAnyPattern;
61
+ const fs = __importStar(require("fs"));
62
+ const path = __importStar(require("path"));
63
+ const os = __importStar(require("os"));
64
+ const crypto = __importStar(require("crypto"));
65
+ // ---------------------------------------------------------------------------
66
+ // Constants
67
+ // ---------------------------------------------------------------------------
68
+ const TEMP_DIR = path.join(os.tmpdir(), 'forkoff-permissions');
69
+ const RULES_FILE = path.join(TEMP_DIR, 'rules.json');
70
+ const POLL_INTERVAL_MS = 200;
71
+ const TIMEOUT_MS = 300000; // 5 minutes
72
+ /** Fallback safe tools when no rules file exists */
73
+ const DEFAULT_SAFE_TOOLS = new Set([
74
+ 'Read',
75
+ 'Glob',
76
+ 'Grep',
77
+ 'WebSearch',
78
+ 'WebFetch',
79
+ 'TaskCreate',
80
+ 'TaskUpdate',
81
+ 'TaskGet',
82
+ 'TaskList',
83
+ 'TaskOutput',
84
+ 'TaskStop',
85
+ 'AskUserQuestion',
86
+ 'Skill',
87
+ 'EnterPlanMode',
88
+ 'ExitPlanMode',
89
+ 'mcp__ide__getDiagnostics',
90
+ 'mcp__ide__executeCode',
91
+ ]);
92
+ // ---------------------------------------------------------------------------
93
+ // Helpers
94
+ // ---------------------------------------------------------------------------
95
+ /** Write the decision JSON to stdout synchronously and exit immediately. */
96
+ function respond(decision, reason) {
97
+ const output = {
98
+ hookSpecificOutput: {
99
+ hookEventName: 'PreToolUse',
100
+ permissionDecision: decision,
101
+ permissionDecisionReason: reason,
102
+ },
103
+ };
104
+ // Use synchronous write to fd 1 (stdout) — process.stdout.write() is async
105
+ // and the process would exit before the write completes.
106
+ fs.writeSync(1, JSON.stringify(output) + '\n');
107
+ process.exit(decision === 'allow' ? 0 : 2);
108
+ }
109
+ /** Ensure the temp directory exists. */
110
+ function ensureTempDir() {
111
+ if (!fs.existsSync(TEMP_DIR)) {
112
+ fs.mkdirSync(TEMP_DIR, { recursive: true });
113
+ }
114
+ }
115
+ /** Cleanup request and response temp files. */
116
+ function cleanup(promptId) {
117
+ const requestFile = path.join(TEMP_DIR, `${promptId}.request.json`);
118
+ const responseFile = path.join(TEMP_DIR, `${promptId}.response.json`);
119
+ try {
120
+ if (fs.existsSync(requestFile))
121
+ fs.unlinkSync(requestFile);
122
+ }
123
+ catch {
124
+ // Best effort — ignore errors during cleanup.
125
+ }
126
+ try {
127
+ if (fs.existsSync(responseFile))
128
+ fs.unlinkSync(responseFile);
129
+ }
130
+ catch {
131
+ // Best effort.
132
+ }
133
+ }
134
+ /**
135
+ * Load permission rules from the rules file on disk.
136
+ * Falls back to hardcoded defaults if the file doesn't exist or is invalid.
137
+ */
138
+ function loadRules() {
139
+ try {
140
+ const raw = fs.readFileSync(RULES_FILE, 'utf-8');
141
+ const rules = JSON.parse(raw);
142
+ if (!Array.isArray(rules)) {
143
+ return { safeTools: new Set(DEFAULT_SAFE_TOOLS), bashPatterns: [] };
144
+ }
145
+ const safeTools = new Set();
146
+ let bashPatterns = [];
147
+ for (const rule of rules) {
148
+ if (rule.action === 'allow') {
149
+ safeTools.add(rule.tool);
150
+ if (rule.tool === 'Bash' && Array.isArray(rule.patterns)) {
151
+ bashPatterns = rule.patterns;
152
+ }
153
+ }
154
+ }
155
+ return { safeTools, bashPatterns };
156
+ }
157
+ catch {
158
+ return { safeTools: new Set(DEFAULT_SAFE_TOOLS), bashPatterns: [] };
159
+ }
160
+ }
161
+ /**
162
+ * Check if a command matches any of the given glob-like patterns.
163
+ * Patterns use simple glob matching where `*` matches any characters.
164
+ *
165
+ * @example
166
+ * matchesAnyPattern('npm test', ['npm *', 'git status']) // true
167
+ * matchesAnyPattern('rm -rf /', ['npm *', 'git status']) // false
168
+ */
169
+ function matchesAnyPattern(command, patterns) {
170
+ for (const pattern of patterns) {
171
+ if (globMatch(command, pattern))
172
+ return true;
173
+ }
174
+ return false;
175
+ }
176
+ /**
177
+ * Simple glob matching: `*` matches any sequence of characters.
178
+ * The entire command must match (not just a prefix).
179
+ */
180
+ function globMatch(str, pattern) {
181
+ // Escape regex special chars except *, then replace * with .*
182
+ const regexStr = '^' + pattern
183
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
184
+ .replace(/\*/g, '.*') + '$';
185
+ return new RegExp(regexStr).test(str);
186
+ }
187
+ /**
188
+ * Poll for the response file until it appears or the timeout elapses.
189
+ * Returns the parsed response, or null on timeout.
190
+ */
191
+ function pollForResponse(promptId) {
192
+ const responseFile = path.join(TEMP_DIR, `${promptId}.response.json`);
193
+ const deadline = Date.now() + TIMEOUT_MS;
194
+ return new Promise((resolve) => {
195
+ const check = () => {
196
+ if (Date.now() > deadline) {
197
+ resolve(null);
198
+ return;
199
+ }
200
+ try {
201
+ if (fs.existsSync(responseFile)) {
202
+ const raw = fs.readFileSync(responseFile, 'utf-8');
203
+ const response = JSON.parse(raw);
204
+ resolve(response);
205
+ return;
206
+ }
207
+ }
208
+ catch {
209
+ // File may be partially written — retry on next poll.
210
+ }
211
+ setTimeout(check, POLL_INTERVAL_MS);
212
+ };
213
+ check();
214
+ });
215
+ }
216
+ // ---------------------------------------------------------------------------
217
+ // Main
218
+ // ---------------------------------------------------------------------------
219
+ async function main() {
220
+ // Read all of stdin (Claude Code writes the JSON then closes the pipe).
221
+ const chunks = [];
222
+ for await (const chunk of process.stdin) {
223
+ chunks.push(chunk);
224
+ }
225
+ const rawInput = Buffer.concat(chunks).toString('utf-8').trim();
226
+ if (!rawInput) {
227
+ respond('deny', 'No input received on stdin');
228
+ }
229
+ let input;
230
+ try {
231
+ input = JSON.parse(rawInput);
232
+ }
233
+ catch {
234
+ respond('deny', 'Failed to parse stdin JSON');
235
+ return; // unreachable, satisfies TS
236
+ }
237
+ const { tool_name: toolName, tool_input: toolInput, tool_use_id: toolUseId } = input;
238
+ // ------------------------------------------------------------------
239
+ // Load dynamic rules (from mobile sync) or fall back to defaults.
240
+ // ------------------------------------------------------------------
241
+ const { safeTools, bashPatterns } = loadRules();
242
+ // ------------------------------------------------------------------
243
+ // Fast path: auto-approve safe tools.
244
+ // For Bash with patterns, check command against patterns first.
245
+ // ------------------------------------------------------------------
246
+ if (safeTools.has(toolName)) {
247
+ if (toolName === 'Bash' && bashPatterns.length > 0) {
248
+ // Bash is allowed, but only for matching commands
249
+ const command = String(toolInput.command || '');
250
+ if (matchesAnyPattern(command, bashPatterns)) {
251
+ respond('allow', `Auto-approved: Bash command matches pattern`);
252
+ }
253
+ // Command doesn't match any pattern — fall through to ask user
254
+ }
255
+ else {
256
+ respond('allow', `Auto-approved safe tool: ${toolName}`);
257
+ }
258
+ }
259
+ // ------------------------------------------------------------------
260
+ // Dangerous tool — request approval via temp file IPC.
261
+ // ------------------------------------------------------------------
262
+ const promptId = crypto.randomUUID();
263
+ try {
264
+ ensureTempDir();
265
+ const request = {
266
+ promptId,
267
+ toolName,
268
+ toolInput,
269
+ toolUseId,
270
+ timestamp: Date.now(),
271
+ };
272
+ const requestFile = path.join(TEMP_DIR, `${promptId}.request.json`);
273
+ fs.writeFileSync(requestFile, JSON.stringify(request, null, 2), 'utf-8');
274
+ console.error(`[forkoff-hook] Permission requested for ${toolName} (promptId=${promptId}), polling...`);
275
+ const response = await pollForResponse(promptId);
276
+ if (!response) {
277
+ // Timeout — deny for safety.
278
+ cleanup(promptId);
279
+ respond('deny', 'Permission request timed out (5 minutes)');
280
+ }
281
+ // Clean up temp files before responding.
282
+ cleanup(promptId);
283
+ if (response.decision === 'allow') {
284
+ respond('allow', response.reason || 'User approved via mobile');
285
+ }
286
+ else {
287
+ respond('deny', response.reason || 'User denied via mobile');
288
+ }
289
+ }
290
+ catch (err) {
291
+ // On any unexpected error, deny for safety.
292
+ cleanup(promptId);
293
+ const message = err instanceof Error ? err.message : String(err);
294
+ console.error(`[forkoff-hook] Error: ${message}`);
295
+ respond('deny', `Hook error: ${message}`);
296
+ }
297
+ }
298
+ // Kick off and catch top-level errors.
299
+ main().catch((err) => {
300
+ const message = err instanceof Error ? err.message : String(err);
301
+ console.error(`[forkoff-hook] Fatal error: ${message}`);
302
+ const output = {
303
+ hookSpecificOutput: {
304
+ hookEventName: 'PreToolUse',
305
+ permissionDecision: 'deny',
306
+ permissionDecisionReason: `Fatal hook error: ${message}`,
307
+ },
308
+ };
309
+ fs.writeSync(1, JSON.stringify(output) + '\n');
310
+ process.exit(2);
311
+ });
312
+ //# sourceMappingURL=permission-hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-hook.js","sourceRoot":"","sources":["../../src/tools/permission-hook.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8HH,8BAyBC;AAUD,8CAKC;AApKD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,+CAAiC;AAEjC,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC;AAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AACrD,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,UAAU,GAAG,MAAO,CAAC,CAAC,YAAY;AAExC,oDAAoD;AACpD,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC;IACtD,MAAM;IACN,MAAM;IACN,MAAM;IACN,WAAW;IACX,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,UAAU;IACV,YAAY;IACZ,UAAU;IACV,iBAAiB;IACjB,OAAO;IACP,eAAe;IACf,cAAc;IACd,0BAA0B;IAC1B,uBAAuB;CACxB,CAAC,CAAC;AA0CH,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,4EAA4E;AAC5E,SAAS,OAAO,CAAC,QAA0B,EAAE,MAAc;IACzD,MAAM,MAAM,GAAe;QACzB,kBAAkB,EAAE;YAClB,aAAa,EAAE,YAAY;YAC3B,kBAAkB,EAAE,QAAQ;YAC5B,wBAAwB,EAAE,MAAM;SACjC;KACF,CAAC;IAEF,2EAA2E;IAC3E,yDAAyD;IACzD,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,wCAAwC;AACxC,SAAS,aAAa;IACpB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,SAAS,OAAO,CAAC,QAAgB;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,eAAe,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,gBAAgB,CAAC,CAAC;IAEtE,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;IAChD,CAAC;IAED,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,SAAS;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,KAAK,GAAqB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEhD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG,CAAC,kBAAkB,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QACtE,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,IAAI,YAAY,GAAa,EAAE,CAAC;QAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC5B,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACzD,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG,CAAC,kBAAkB,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IACtE,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,iBAAiB,CAAC,OAAe,EAAE,QAAkB;IACnE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,GAAW,EAAE,OAAe;IAC7C,8DAA8D;IAC9D,MAAM,QAAQ,GAAG,GAAG,GAAG,OAAO;SAC3B,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;SACpC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;IAC9B,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,gBAAgB,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;IAEzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,GAAS,EAAE;YACvB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;oBAChC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;oBACnD,MAAM,QAAQ,GAAuB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACrD,OAAO,CAAC,QAAQ,CAAC,CAAC;oBAClB,OAAO;gBACT,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,sDAAsD;YACxD,CAAC;YAED,UAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QACtC,CAAC,CAAC;QAEF,KAAK,EAAE,CAAC;IACV,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E,KAAK,UAAU,IAAI;IACjB,wEAAwE;IACxE,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAEhE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,KAAgB,CAAC;IACrB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAc,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QAC9C,OAAO,CAAC,4BAA4B;IACtC,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAErF,qEAAqE;IACrE,kEAAkE;IAClE,qEAAqE;IACrE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,SAAS,EAAE,CAAC;IAEhD,qEAAqE;IACrE,sCAAsC;IACtC,gEAAgE;IAChE,qEAAqE;IACrE,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAI,QAAQ,KAAK,MAAM,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,kDAAkD;YAClD,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAChD,IAAI,iBAAiB,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC;gBAC7C,OAAO,CAAC,OAAO,EAAE,6CAA6C,CAAC,CAAC;YAClE,CAAC;YACD,+DAA+D;QACjE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,OAAO,EAAE,4BAA4B,QAAQ,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,uDAAuD;IACvD,qEAAqE;IACrE,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAErC,IAAI,CAAC;QACH,aAAa,EAAE,CAAC;QAEhB,MAAM,OAAO,GAAsB;YACjC,QAAQ;YACR,QAAQ;YACR,SAAS;YACT,SAAS;YACT,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,eAAe,CAAC,CAAC;QACpE,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAEzE,OAAO,CAAC,KAAK,CACX,2CAA2C,QAAQ,cAAc,QAAQ,eAAe,CACzF,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;QAEjD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,6BAA6B;YAC7B,OAAO,CAAC,QAAQ,CAAC,CAAC;YAClB,OAAO,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,yCAAyC;QACzC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAElB,IAAI,QAAS,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACnC,OAAO,CAAC,OAAO,EAAE,QAAS,CAAC,MAAM,IAAI,0BAA0B,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,EAAE,QAAS,CAAC,MAAM,IAAI,wBAAwB,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,4CAA4C;QAC5C,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,MAAM,EAAE,eAAe,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,uCAAuC;AACvC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,CAAC,KAAK,CAAC,+BAA+B,OAAO,EAAE,CAAC,CAAC;IAExD,MAAM,MAAM,GAAe;QACzB,kBAAkB,EAAE;YAClB,aAAa,EAAE,YAAY;YAC3B,kBAAkB,EAAE,MAAM;YAC1B,wBAAwB,EAAE,qBAAqB,OAAO,EAAE;SACzD;KACF,CAAC;IAEF,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Permission IPC Manager
3
+ * Watches for permission request temp files created by the hook script,
4
+ * emits events so the main process can forward them to mobile via WebSocket,
5
+ * and writes response files when the mobile user responds.
6
+ *
7
+ * Communication flow:
8
+ * Hook Script (subprocess) Main CLI Process
9
+ * | |
10
+ * |-- Writes request.json ---------->| (IPC Manager watches temp dir)
11
+ * | |-- Emits 'permission_prompt' event
12
+ * | | |
13
+ * | | (forwarded to mobile via WS)
14
+ * | | |
15
+ * | | (mobile user responds)
16
+ * | | |
17
+ * | <-- Reads response.json -------| Writes response.json
18
+ * | |
19
+ */
20
+ import { EventEmitter } from 'events';
21
+ interface PendingPromptInfo {
22
+ promptId: string;
23
+ terminalSessionId: string;
24
+ sessionKey?: string;
25
+ timeoutId: NodeJS.Timeout;
26
+ toolName: string;
27
+ toolInput: any;
28
+ toolUseId: string;
29
+ }
30
+ interface PermissionPromptEvent {
31
+ promptId: string;
32
+ terminalSessionId: string;
33
+ sessionKey?: string;
34
+ toolName: string;
35
+ toolInput: any;
36
+ toolUseId: string;
37
+ }
38
+ /** Type-safe event signatures for PermissionIpcManager */
39
+ interface PermissionIpcManagerEvents {
40
+ permission_prompt: [event: PermissionPromptEvent];
41
+ }
42
+ declare class PermissionIpcManager extends EventEmitter {
43
+ private watchInterval;
44
+ private pendingPrompts;
45
+ private readonly TIMEOUT_MS;
46
+ private readonly POLL_INTERVAL_MS;
47
+ private readonly TEMP_DIR;
48
+ private processedFiles;
49
+ /** Currently tracked terminal session ID */
50
+ private terminalSessionId;
51
+ /** Currently tracked session key */
52
+ private sessionKey?;
53
+ /** Type-safe emit for known events */
54
+ emit<K extends keyof PermissionIpcManagerEvents>(event: K, ...args: PermissionIpcManagerEvents[K]): boolean;
55
+ /** Type-safe on for known events */
56
+ on<K extends keyof PermissionIpcManagerEvents>(event: K, listener: (...args: PermissionIpcManagerEvents[K]) => void): this;
57
+ /**
58
+ * Start watching the temp directory for permission request files.
59
+ * Ensures the temp dir exists and begins polling at POLL_INTERVAL_MS.
60
+ *
61
+ * @param terminalSessionId - The terminal session ID to attach to emitted events
62
+ * @param sessionKey - Optional Claude session key for event payloads
63
+ */
64
+ start(terminalSessionId: string, sessionKey?: string): void;
65
+ /**
66
+ * Stop watching for permission requests.
67
+ * Clears the polling interval, all pending prompt timeouts, and resets internal state.
68
+ */
69
+ stop(): void;
70
+ /**
71
+ * Handle a response from the mobile user for a pending permission prompt.
72
+ * Writes a response JSON file that the hook script polls for.
73
+ *
74
+ * @param promptId - The unique prompt identifier to respond to
75
+ * @param decision - Whether to allow or deny the permission request
76
+ * @param reason - Optional reason for the decision
77
+ */
78
+ handleResponse(promptId: string, decision: 'allow' | 'deny', reason?: string): void;
79
+ /**
80
+ * Poll the temp directory for new permission request files.
81
+ * Filters for .request.json files that haven't been processed yet.
82
+ * For each new request, parses it, sets up a timeout, and emits a permission_prompt event.
83
+ */
84
+ private checkForRequests;
85
+ /**
86
+ * Handle a prompt that has timed out waiting for a mobile response.
87
+ * Auto-denies the request with a timeout reason.
88
+ *
89
+ * @param promptId - The prompt ID that timed out
90
+ */
91
+ private handleTimeout;
92
+ /**
93
+ * Get data for all currently pending prompts (excluding already-responded ones).
94
+ * Used to sync pending permissions to mobile on take-over.
95
+ */
96
+ getPendingPromptData(): PermissionPromptEvent[];
97
+ /**
98
+ * Full cleanup: stop watching and remove any remaining temp files.
99
+ * Call this when the CLI process is shutting down.
100
+ */
101
+ cleanup(): void;
102
+ /**
103
+ * Remove all regular files from the forkoff-permissions temp directory.
104
+ * Call on startup to clean up files left behind by a crashed CLI process.
105
+ */
106
+ static cleanupStaleTempFiles(): void;
107
+ }
108
+ export { PermissionIpcManager, PermissionPromptEvent, PendingPromptInfo };
109
+ //# sourceMappingURL=permission-ipc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-ipc.d.ts","sourceRoot":"","sources":["../../src/tools/permission-ipc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAKtC,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,GAAG,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,GAAG,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,0DAA0D;AAC1D,UAAU,0BAA0B;IAClC,iBAAiB,EAAE,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;CACnD;AAED,cAAM,oBAAqB,SAAQ,YAAY;IAC7C,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAO;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiD;IAC1E,OAAO,CAAC,cAAc,CAA0B;IAEhD,4CAA4C;IAC5C,OAAO,CAAC,iBAAiB,CAAc;IACvC,oCAAoC;IACpC,OAAO,CAAC,UAAU,CAAC,CAAS;IAE5B,sCAAsC;IACtB,IAAI,CAAC,CAAC,SAAS,MAAM,0BAA0B,EAC7D,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,0BAA0B,CAAC,CAAC,CAAC,GACrC,OAAO;IAIV,oCAAoC;IACpB,EAAE,CAAC,CAAC,SAAS,MAAM,0BAA0B,EAC3D,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,0BAA0B,CAAC,CAAC,CAAC,KAAK,IAAI,GACzD,IAAI;IAIP;;;;;;OAMG;IACH,KAAK,CAAC,iBAAiB,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAoB3D;;;OAGG;IACH,IAAI,IAAI,IAAI;IAmBZ;;;;;;;OAOG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IA0BnF;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAmExB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAKrB;;;OAGG;IACH,oBAAoB,IAAI,qBAAqB,EAAE;IAW/C;;;OAGG;IACH,OAAO,IAAI,IAAI;IAmBf;;;OAGG;IACH,MAAM,CAAC,qBAAqB,IAAI,IAAI;CA4BrC;AAED,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,CAAC"}