codekin 0.2.2 → 0.3.1

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 (64) hide show
  1. package/dist/assets/index-CYGuwwHU.js +183 -0
  2. package/dist/assets/index-DW70VouA.css +1 -0
  3. package/dist/index.html +3 -3
  4. package/package.json +8 -5
  5. package/server/dist/approval-manager.d.ts +71 -0
  6. package/server/dist/approval-manager.js +249 -0
  7. package/server/dist/approval-manager.js.map +1 -0
  8. package/server/dist/auth-routes.d.ts +11 -0
  9. package/server/dist/auth-routes.js +11 -0
  10. package/server/dist/auth-routes.js.map +1 -1
  11. package/server/dist/claude-process.js +25 -4
  12. package/server/dist/claude-process.js.map +1 -1
  13. package/server/dist/config.d.ts +1 -2
  14. package/server/dist/config.js +16 -4
  15. package/server/dist/config.js.map +1 -1
  16. package/server/dist/crypto-utils.d.ts +16 -1
  17. package/server/dist/crypto-utils.js +44 -1
  18. package/server/dist/crypto-utils.js.map +1 -1
  19. package/server/dist/docs-routes.d.ts +16 -0
  20. package/server/dist/docs-routes.js +141 -0
  21. package/server/dist/docs-routes.js.map +1 -0
  22. package/server/dist/session-manager.d.ts +37 -84
  23. package/server/dist/session-manager.js +95 -472
  24. package/server/dist/session-manager.js.map +1 -1
  25. package/server/dist/session-naming.d.ts +35 -0
  26. package/server/dist/session-naming.js +168 -0
  27. package/server/dist/session-naming.js.map +1 -0
  28. package/server/dist/session-persistence.d.ts +30 -0
  29. package/server/dist/session-persistence.js +93 -0
  30. package/server/dist/session-persistence.js.map +1 -0
  31. package/server/dist/session-routes.d.ts +2 -1
  32. package/server/dist/session-routes.js +11 -8
  33. package/server/dist/session-routes.js.map +1 -1
  34. package/server/dist/stepflow-handler.d.ts +3 -9
  35. package/server/dist/stepflow-handler.js +19 -54
  36. package/server/dist/stepflow-handler.js.map +1 -1
  37. package/server/dist/types.d.ts +7 -0
  38. package/server/dist/upload-routes.js +6 -3
  39. package/server/dist/upload-routes.js.map +1 -1
  40. package/server/dist/webhook-github.d.ts +23 -5
  41. package/server/dist/webhook-github.js +23 -5
  42. package/server/dist/webhook-github.js.map +1 -1
  43. package/server/dist/webhook-handler-base.d.ts +45 -0
  44. package/server/dist/webhook-handler-base.js +86 -0
  45. package/server/dist/webhook-handler-base.js.map +1 -0
  46. package/server/dist/webhook-handler.d.ts +3 -10
  47. package/server/dist/webhook-handler.js +6 -46
  48. package/server/dist/webhook-handler.js.map +1 -1
  49. package/server/dist/webhook-workspace.d.ts +8 -1
  50. package/server/dist/webhook-workspace.js +71 -47
  51. package/server/dist/webhook-workspace.js.map +1 -1
  52. package/server/dist/workflow-config.d.ts +2 -0
  53. package/server/dist/workflow-config.js +1 -1
  54. package/server/dist/workflow-config.js.map +1 -1
  55. package/server/dist/workflow-loader.d.ts +2 -0
  56. package/server/dist/workflow-loader.js +13 -9
  57. package/server/dist/workflow-loader.js.map +1 -1
  58. package/server/dist/workflow-routes.js +3 -2
  59. package/server/dist/workflow-routes.js.map +1 -1
  60. package/server/dist/ws-server.js +77 -16
  61. package/server/dist/ws-server.js.map +1 -1
  62. package/server/workflows/repo-health.weekly.md +111 -0
  63. package/dist/assets/index-CQdQ4FhF.css +0 -1
  64. package/dist/assets/index-D6pRORYQ.js +0 -115
@@ -16,6 +16,7 @@ import { EventEmitter } from 'events';
16
16
  import { randomUUID } from 'crypto';
17
17
  import { homedir } from 'os';
18
18
  import { SCREENSHOTS_DIR } from './config.js';
19
+ import { redactSecrets } from './crypto-utils.js';
19
20
  /**
20
21
  * Wraps a Claude CLI child process. Parses stream-json NDJSON output from
21
22
  * stdout and emits structured events consumed by SessionManager.
@@ -270,9 +271,29 @@ export class ClaudeProcess extends EventEmitter {
270
271
  const blocks = Array.isArray(msg.content) ? msg.content : [];
271
272
  for (const block of blocks) {
272
273
  if (block.type === 'tool_result') {
273
- const content = typeof block.content === 'string' ? block.content : JSON.stringify(block.content);
274
274
  const isError = block.is_error === true;
275
- console.log(`[tool-result] id=${block.tool_use_id} error=${isError} content=${content.slice(0, 300)}`);
275
+ // When content is an array of content blocks, extract images and stringify the rest
276
+ let content = '';
277
+ const contentBlocks = Array.isArray(block.content) ? block.content : null;
278
+ if (contentBlocks) {
279
+ const textParts = [];
280
+ for (const cb of contentBlocks) {
281
+ if (cb.type === 'image' && cb.source?.type === 'base64') {
282
+ console.log(`[tool-result] id=${block.tool_use_id} image media_type=${cb.source.media_type} data_len=${cb.source.data.length}`);
283
+ this.emit('image', cb.source.data, cb.source.media_type);
284
+ }
285
+ else {
286
+ textParts.push(typeof cb.text === 'string' ? cb.text : JSON.stringify(cb));
287
+ }
288
+ }
289
+ content = textParts.join('\n');
290
+ }
291
+ else {
292
+ content = typeof block.content === 'string' ? block.content : '';
293
+ }
294
+ if (content) {
295
+ console.log(`[tool-result] id=${block.tool_use_id} error=${isError} content=${content.slice(0, 300)}`);
296
+ }
276
297
  // Deferred ExitPlanMode: emit planning_mode only after tool_result confirms success.
277
298
  // Match by tool_use_id, or use flag-based fallback when id wasn't available.
278
299
  if (this.pendingExitPlanModeId &&
@@ -282,7 +303,7 @@ export class ClaudeProcess extends EventEmitter {
282
303
  this.emit('planning_mode', false);
283
304
  }
284
305
  }
285
- // Emit non-empty tool results as dedicated tool_output events
306
+ // Emit non-empty text tool results as dedicated tool_output events
286
307
  if (content.trim()) {
287
308
  const truncated = content.length > 2000
288
309
  ? content.slice(0, 2000) + `\n… (truncated, ${content.length} chars total)`
@@ -331,7 +352,7 @@ export class ClaudeProcess extends EventEmitter {
331
352
  }
332
353
  else if (toolName === 'Bash') {
333
354
  // Bash runs arbitrary commands — forward to session manager for registry check / UI prompt
334
- console.log(`[control_request] forwarding Bash to session manager: ${String(toolInput.command || '').slice(0, 80)}`);
355
+ console.log(`[control_request] forwarding Bash to session manager: ${redactSecrets(String(toolInput.command || '').slice(0, 80))}`);
335
356
  this.emit('control_request', request_id, toolName, toolInput);
336
357
  }
337
358
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"claude-process.js","sourceRoot":"","sources":["../claude-process.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-process.js","sourceRoot":"","sources":["../claude-process.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,eAAe,CAAA;AACxD,OAAO,EAAE,eAAe,EAAkB,MAAM,UAAU,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAoBjD;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,YAAiC;IA2B9C;IAAmF;IA1B/F,IAAI,GAAwB,IAAI,CAAA;IAChC,EAAE,GAAqB,IAAI,CAAA;IAC3B,SAAS,CAAQ;IACjB,KAAK,GAAG,KAAK,CAAA;IAErB,iEAAiE;IACzD,eAAe,GAAkB,IAAI,CAAA;IACrC,gBAAgB,GAAG,EAAE,CAAA;IACrB,UAAU,GAAG,EAAE,CAAA;IAEvB,qEAAqE;IAC7D,eAAe,GAAG,KAAK,CAAA;IACvB,YAAY,GAAG,EAAE,CAAA;IACjB,sBAAsB,GAAG,KAAK,CAAA;IAEtC,2FAA2F;IAC3F,yFAAyF;IACjF,qBAAqB,GAAkB,IAAI,CAAA;IAEnD,kEAAkE;IAC1D,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAA;IACnC,OAAO,GAAG,CAAC,CAAA;IAEnB,iFAAiF;IACzE,QAAQ,CAAwB;IAExC,YAAoB,UAAkB,EAAE,SAAkB,EAAE,QAAiC,EAAU,KAAc;QACnH,KAAK,EAAE,CAAA;QADW,eAAU,GAAV,UAAU,CAAQ;QAAiE,UAAK,GAAL,KAAK,CAAS;QAEnH,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,UAAU,EAAE,CAAA;QAC1C,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAA;IAChC,CAAC;IAED,8EAA8E;IAC9E,KAAK;QACH,IAAI,IAAI,CAAC,IAAI;YAAE,OAAM;QAErB,MAAM,GAAG,GAA2B;YAClC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,8BAA8B;YACxD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE;YACnC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK;YAC/B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,aAAa;YACvC,GAAG,IAAI,CAAC,QAAQ;SACjB,CAAA;QAED,gFAAgF;QAChF,4EAA4E;QAC5E,4DAA4D;QAC5D,KAAK,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC;YACvF,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACnD,CAAC;QAED,uDAAuD;QACvD,GAAG,CAAC,gBAAgB,GAAG,GAAG,CAAA;QAE1B,MAAM,IAAI,GAAG;YACX,iBAAiB,EAAE,aAAa;YAChC,gBAAgB,EAAE,aAAa;YAC/B,mBAAmB,EAAE,aAAa;YAClC,gBAAgB,EAAE,aAAa;YAC/B,WAAW,EAAE,eAAe;YAC5B,4BAA4B;YAC5B,WAAW;YACX,cAAc,EAAE,IAAI,CAAC,SAAS;YAC9B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,wBAAwB,EAAE;gBACxB,wDAAwD;gBACxD,sEAAsE;gBACtE,4FAA4F;gBAC5F,kGAAkG;gBAClG,yFAAyF;gBACzF,6IAA6I;aAC9I,CAAC,IAAI,CAAC,GAAG,CAAC;SACZ,CAAA;QACD,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,UAAU,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjF,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE;YAChC,GAAG,EAAE,IAAI,CAAC,UAAU;YACpB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,GAAG;SACJ,CAAC,CAAA;QAEF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QAEjB,IAAI,CAAC,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAO,EAAE,CAAC,CAAA;QACvD,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;QAEnD,IAAI,CAAC,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAA;YACnC,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAA;YACtC,IAAI,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;QAChE,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5B,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;YACpD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;YAClB,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAA;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;YACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;YAChB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;YAClB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,+FAA+F;IACvF,UAAU,CAAC,IAAY;QAC7B,IAAI,KAAkB,CAAA;QACtB,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,qCAAqC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;YACvE,OAAM;QACR,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAEzB,gDAAgD;QAChD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,SAAS,IAAI,KAAK,CAAC,CAAC,CAAE,KAAiC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;YACrF,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,IAAI,YAAY,OAAO,IAAI,GAAG,EAAE,CAAC,CAAA;QACrE,CAAC;QACD,yEAAyE;QACzE,IAAI,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3H,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,CAAC,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;QACjG,CAAC;QAED,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,QAAQ;gBACX,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;oBAC7B,IAAI,CAAC,SAAS,GAAI,KAA0B,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAA;oBACzE,MAAM,KAAK,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,CAAE,KAAiC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAW,CAAA;oBACjG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;gBACjC,CAAC;gBACD,MAAK;YAEP,KAAK,cAAc;gBACjB,IAAI,CAAC,iBAAiB,CAAC,KAA0B,CAAC,CAAA;gBAClD,MAAK;YAEP,KAAK,WAAW;gBACd,IAAI,CAAC,sBAAsB,EAAE,CAAA;gBAC7B,MAAK;YAEP,KAAK,MAAM;gBACT,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;gBAC3B,MAAK;YAEP,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,WAAW,GAAG,KAA0B,CAAA;gBAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,IAAI,EAAE,EAAE,WAAW,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAA;gBAC5E,+DAA+D;gBAC/D,MAAK;YACP,CAAC;YAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,SAAS,GAAG,KAA6B,CAAA;gBAC/C,OAAO,CAAC,GAAG,CAAC,+BAA+B,SAAS,CAAC,UAAU,SAAS,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA;gBACvG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAA;gBACpC,MAAK;YACP,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,iBAAiB,CAAC,KAAwB;QAChD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACzB,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,qBAAqB;gBACxB,IAAI,KAAK,CAAC,aAAa,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC7C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,IAAI,CAAA;oBACvD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAA;oBAC1B,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;oBAC7D,6BAA6B;oBAC7B,IAAI,IAAI,CAAC,eAAe,KAAK,eAAe,EAAE,CAAC;wBAC7C,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;oBAClC,CAAC;yBAAM,IAAI,IAAI,CAAC,eAAe,KAAK,cAAc,EAAE,CAAC;wBACnD,6EAA6E;wBAC7E,0EAA0E;wBAC1E,0EAA0E;wBAC1E,qEAAqE;wBACrE,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,aAAa,CAAA;oBACtE,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,eAAgB,EAAE,SAAS,CAAC,CAAA;oBAC5D,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,aAAa,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;oBACpD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;oBAC3B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAA;oBACtB,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAA;gBACrC,CAAC;gBACD,MAAK;YAEP,KAAK,qBAAqB;gBACxB,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC3D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACrC,CAAC;qBAAM,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,KAAK,kBAAkB,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;oBAChF,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAA;gBACnD,CAAC;qBAAM,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,KAAK,gBAAgB,IAAK,KAAK,CAAC,KAAiC,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBAC/H,IAAI,CAAC,YAAY,IAAK,KAAK,CAAC,KAAiC,CAAC,QAAkB,CAAA;oBAChF,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;wBACjC,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;wBAC9D,IAAI,OAAO,EAAE,CAAC;4BACZ,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAA;4BAClC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;wBAChC,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAK;YAEP,KAAK,oBAAoB;gBACvB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACzB,oDAAoD;oBACpD,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACjE,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;wBACvG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;oBAChC,CAAC;oBACD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;oBAC5B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAA;oBACtB,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAA;oBACnC,MAAK;gBACP,CAAC;gBACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACzB,8DAA8D;oBAC9D,IAAI,OAA2B,CAAA;oBAC/B,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;wBAChD,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,SAAS,CAAA;wBAC5E,oBAAoB;wBACpB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,KAAK,YAAY,IAAI,IAAI,CAAC,eAAe,KAAK,YAAY,IAAI,IAAI,CAAC,eAAe,KAAK,WAAW,IAAI,IAAI,CAAC,eAAe,KAAK,UAAU,CAAA;wBAC5K,IAAI,MAAM;4BAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;wBACnH,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC;4BACtD,OAAO,CAAC,GAAG,CAAC,2CAA2C,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;4BACzE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;wBAC3D,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;oBACrC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;oBACrD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;oBAC3B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAA;gBAC5B,CAAC;gBACD,MAAK;QACT,CAAC;IACH,CAAC;IAED,6EAA6E;IACrE,sBAAsB;QAC5B,2EAA2E;QAC3E,wEAAwE;IAC1E,CAAC;IAED,6EAA6E;IACrE,eAAe,CAAC,KAAkB;QACxC,MAAM,GAAG,GAAI,KAA0D,CAAC,OAAO,CAAA;QAC/E,IAAI,CAAC,GAAG,EAAE,OAAO;YAAE,OAAM;QAEzB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;QAC5D,KAAK,MAAM,KAAK,IAAI,MAA8F,EAAE,CAAC;YACnH,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAA;gBAEvC,oFAAoF;gBACpF,IAAI,OAAO,GAAG,EAAE,CAAA;gBAChB,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;gBACzE,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,SAAS,GAAa,EAAE,CAAA;oBAC9B,KAAK,MAAM,EAAE,IAAI,aAAoH,EAAE,CAAC;wBACtI,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;4BACxD,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,WAAW,qBAAqB,EAAE,CAAC,MAAM,CAAC,UAAU,aAAa,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;4BAC/H,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;wBAC1D,CAAC;6BAAM,CAAC;4BACN,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAA;wBAC5E,CAAC;oBACH,CAAC;oBACD,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAChC,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;gBAClE,CAAC;gBACD,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,WAAW,UAAU,OAAO,YAAY,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;gBACxG,CAAC;gBAED,qFAAqF;gBACrF,6EAA6E;gBAC7E,IAAI,IAAI,CAAC,qBAAqB;oBAC1B,CAAC,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,KAAK,aAAa,CAAC,EAAE,CAAC;oBACvG,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAA;oBACjC,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;oBACnC,CAAC;gBACH,CAAC;gBAED,mEAAmE;gBACnE,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;oBACnB,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI;wBACrC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,mBAAmB,OAAO,CAAC,MAAM,eAAe;wBAC3E,CAAC,CAAC,OAAO,CAAA;oBACX,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,oBAAoB,CAAC,KAA2B;QACtD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;QACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAA;QAClC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAA;QAE/B,IAAI,QAAQ,KAAK,iBAAiB,EAAE,CAAC;YACnC,qFAAqF;YACrF,uEAAuE;YACvE,0EAA0E;YAC1E,MAAM,SAAS,GAAG,SAAS,EAAE,SAAsJ,CAAA;YACnL,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAE/D,MAAM,mBAAmB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC9C,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,KAAK;gBACnC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAA4C,EAAE,EAAE,CAAC,CAAC;oBAChF,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,WAAW,EAAE,GAAG,CAAC,WAAW;iBAC7B,CAAC,CAAC;aACJ,CAAC,CAAC,CAAA;YAEH,sEAAsE;YACtE,4DAA4D;YAC5D,MAAM,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;YACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAA;QAC1I,CAAC;aAAM,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;YACvC,mEAAmE;YACnE,OAAO,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAA;YAC7F,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;QAC/D,CAAC;aAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC/B,2FAA2F;YAC3F,OAAO,CAAC,GAAG,CAAC,yDAAyD,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;YACnI,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;QAC/D,CAAC;aAAM,CAAC;YACN,mEAAmE;YACnE,+CAA+C;YAC/C,OAAO,CAAC,GAAG,CAAC,qCAAqC,QAAQ,EAAE,CAAC,CAAA;YAC5D,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAED,kFAAkF;IAClF,mBAAmB,CAAC,SAAiB,EAAE,QAA0B,EAAE,YAAsC,EAAE,OAAgB;QACzH,MAAM,QAAQ,GAA4B;YACxC,IAAI,EAAE,kBAAkB;YACxB,UAAU,EAAE,SAAS;YACrB,QAAQ;SACT,CAAA;QACD,IAAI,YAAY,KAAK,SAAS;YAAE,QAAQ,CAAC,YAAY,GAAG,YAAY,CAAA;QACpE,IAAI,OAAO,KAAK,SAAS;YAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAA;QACrD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;IACxC,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,QAAgB,EAAE,KAA8B;QACrE,0CAA0C;QAC1C,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAmD,CAAA;YACvE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAA;YACvC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;YAClB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;YAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAgB,CAAA;gBACpC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,WAAW;oBAAE,SAAQ;gBACxF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE;oBACjB,EAAE;oBACF,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;oBACnD,MAAM;oBACN,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;iBAClE,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,iDAAiD;QACjD,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE;gBACjB,EAAE;gBACF,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;gBACpC,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;aACpE,CAAC,CAAA;YACF,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAC/B,IAAI,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAA;YACvB,MAAM,MAAM,GAAG,KAAK,CAAC,MAA4B,CAAA;YACjD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBACrB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC/E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;YACtB,CAAC;YACD,IAAI,KAAK,CAAC,OAAO;gBAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YACvD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;gBAAE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAC7G,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;OAIG;IACK,sBAAsB,CAAC,IAAY;QACzC,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,IAAI,CAAA;QAEjC,uDAAuD;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QACzC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QAC5C,CAAC;QAED,iFAAiF;QACjF,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YACnC,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;YAC5C,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAA;QAC5E,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED,oFAAoF;IAC5E,kBAAkB,CAAC,QAAgB,EAAE,KAA8B;QACzE,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;gBACvC,uCAAuC;gBACvC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;gBACpC,OAAO,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAA;YACzE,CAAC;YACD,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;YACtC,KAAK,OAAO,CAAC;YACb,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;YACtC,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;YACpC,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;YACpC,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAA;YACxC,KAAK,eAAe;gBAClB,OAAO,oBAAoB,CAAA;YAC7B,KAAK,cAAc;gBACjB,OAAO,mBAAmB,CAAA;YAC5B,KAAK,YAAY;gBACf,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;YACpC,KAAK,YAAY;gBACf,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,MAAM,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAA;YACzD,KAAK,UAAU;gBACb,OAAO,eAAe,CAAA;YACxB,KAAK,SAAS;gBACZ,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAA;YACjC,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAmD,CAAA;gBACvE,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;YAC7C,CAAC;YACD,KAAK,UAAU;gBACb,OAAO,eAAe,CAAA;YACxB;gBACE,OAAO,EAAE,CAAA;QACb,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,WAAW,CAAC,OAAe;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sCAAsC,CAAC,CAAA;YAC1D,OAAM;QACR,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;YACzB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,OAAO;aACR;SACF,CAAC,CAAA;QACF,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;QAC5C,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAwB,CAAC,CAAC,CAAA;QAC/D,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ;YAAE,OAAM;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;QAC7C,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAwB,CAAC,CAAC,CAAA;QAC/D,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,IAAI;QACF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACzB,6BAA6B;YAC7B,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;gBAC3B,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,CAAA;QACV,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;CAEF"}
@@ -7,10 +7,9 @@
7
7
  */
8
8
  /** Main server port (WebSocket + REST + uploads). */
9
9
  export declare const PORT: number;
10
- /** CORS allowed origin. Defaults to localhost dev server; set explicitly for production. */
10
+ /** CORS allowed origin. Defaults to localhost dev server; must be set explicitly for production. */
11
11
  export declare const CORS_ORIGIN: string;
12
12
  export declare const AUTH_TOKEN: string;
13
- /** Root directory for cloned repositories. */
14
13
  export declare const REPOS_ROOT: string;
15
14
  /** Codekin data directory (sessions, approvals, workflows, etc.). */
16
15
  export declare const DATA_DIR: string;
@@ -7,14 +7,23 @@
7
7
  */
8
8
  import { homedir } from 'os';
9
9
  import { join } from 'path';
10
- import { readFileSync, existsSync } from 'fs';
10
+ import { readFileSync, existsSync, realpathSync } from 'fs';
11
11
  // ---------------------------------------------------------------------------
12
12
  // Network
13
13
  // ---------------------------------------------------------------------------
14
14
  /** Main server port (WebSocket + REST + uploads). */
15
15
  export const PORT = parseInt(process.env.PORT || '32352', 10);
16
- /** CORS allowed origin. Defaults to localhost dev server; set explicitly for production. */
16
+ /** CORS allowed origin. Defaults to localhost dev server; must be set explicitly for production. */
17
17
  export const CORS_ORIGIN = process.env.CORS_ORIGIN || 'http://localhost:5173';
18
+ // Warn at startup if production is using the default localhost CORS origin
19
+ if (process.env.NODE_ENV === 'production' && !process.env.CORS_ORIGIN) {
20
+ console.error('[config] ERROR: CORS_ORIGIN is not set in production. Defaulting to localhost is insecure.');
21
+ console.error('[config] Set CORS_ORIGIN to the production frontend origin (e.g. https://example.com).');
22
+ process.exit(1);
23
+ }
24
+ if (process.env.NODE_ENV === 'production' && CORS_ORIGIN.includes('localhost')) {
25
+ console.warn('[config] WARNING: CORS_ORIGIN contains "localhost" in production mode. This is likely misconfigured.');
26
+ }
18
27
  // ---------------------------------------------------------------------------
19
28
  // Authentication
20
29
  // ---------------------------------------------------------------------------
@@ -36,8 +45,11 @@ export const AUTH_TOKEN = loadAuthToken();
36
45
  // ---------------------------------------------------------------------------
37
46
  // Paths
38
47
  // ---------------------------------------------------------------------------
39
- /** Root directory for cloned repositories. */
40
- export const REPOS_ROOT = process.env.REPOS_ROOT || join(homedir(), 'repos');
48
+ /** Root directory for cloned repositories. Resolved via realpathSync to follow symlinks. */
49
+ const rawReposRoot = process.env.REPOS_ROOT || join(homedir(), 'repos');
50
+ export const REPOS_ROOT = existsSync(rawReposRoot)
51
+ ? realpathSync(rawReposRoot)
52
+ : rawReposRoot;
41
53
  /** Codekin data directory (sessions, approvals, workflows, etc.). */
42
54
  export const DATA_DIR = process.env.DATA_DIR || join(homedir(), '.codekin');
43
55
  /** Directory for uploaded screenshots / file attachments. */
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAE7C,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,qDAAqD;AACrD,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,EAAE,CAAC,CAAA;AAE7D,4FAA4F;AAC5F,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,uBAAuB,CAAA;AAE7E,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,aAAa;IACpB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAA;IAEzD,yDAAyD;IACzD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAA;IACnD,IAAI,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,OAAO,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;IAChD,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAA;AAEzC,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,8CAA8C;AAC9C,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAA;AAE5E,qEAAqE;AACrE,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAA;AAE3E,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;AAE3F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAA;AAE5D,kGAAkG;AAClG,MAAM,CAAC,MAAM,OAAO,GAAa,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AAE3D,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,qDAAqD;AACrD,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,EAAE,CAAC,CAAA;AAE7D,oGAAoG;AACpG,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,uBAAuB,CAAA;AAE7E,2EAA2E;AAC3E,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IACtE,OAAO,CAAC,KAAK,CAAC,4FAA4F,CAAC,CAAA;IAC3G,OAAO,CAAC,KAAK,CAAC,wFAAwF,CAAC,CAAA;IACvG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;IAC/E,OAAO,CAAC,IAAI,CAAC,sGAAsG,CAAC,CAAA;AACtH,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,aAAa;IACpB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAA;IAEzD,yDAAyD;IACzD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAA;IACnD,IAAI,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,OAAO,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;IAChD,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAA;AAEzC,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,4FAA4F;AAC5F,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAA;AACvE,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC;IAChD,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC;IAC5B,CAAC,CAAC,YAAY,CAAA;AAEhB,qEAAqE;AACrE,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAA;AAE3E,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;AAE3F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAA;AAE5D,kGAAkG;AAClG,MAAM,CAAC,MAAM,OAAO,GAAa,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA"}
@@ -1,6 +1,8 @@
1
1
  /**
2
- * Shared cryptographic utilities for webhook signature verification.
2
+ * Shared cryptographic utilities for webhook signature verification,
3
+ * session-scoped token derivation, and secret redaction.
3
4
  */
5
+ export declare function redactSecrets(input: string): string;
4
6
  /**
5
7
  * Verify an HMAC-SHA256 signature over a payload.
6
8
  * Comparison uses timingSafeEqual to resist timing oracle attacks.
@@ -10,3 +12,16 @@
10
12
  * preventing timing leaks from the comparison itself.
11
13
  */
12
14
  export declare function verifyHmacSignature(payload: Buffer, signature: string, secret: string): boolean;
15
+ /**
16
+ * Derive a session-scoped token from the master auth token.
17
+ * Uses HMAC-SHA256(masterToken, "session:" + sessionId) so that:
18
+ * - Each session gets a unique, unpredictable token
19
+ * - The token cannot be used to recover the master token
20
+ * - The server can verify it without storing extra state
21
+ */
22
+ export declare function deriveSessionToken(masterToken: string, sessionId: string): string;
23
+ /**
24
+ * Verify a session-scoped token against the master token and session ID.
25
+ * Uses timing-safe comparison.
26
+ */
27
+ export declare function verifySessionToken(masterToken: string, sessionId: string, candidateToken: string): boolean;
@@ -1,7 +1,27 @@
1
1
  /**
2
- * Shared cryptographic utilities for webhook signature verification.
2
+ * Shared cryptographic utilities for webhook signature verification,
3
+ * session-scoped token derivation, and secret redaction.
3
4
  */
4
5
  import crypto from 'crypto';
6
+ /**
7
+ * Redact potential secrets from a string before logging.
8
+ * Matches common patterns: Bearer tokens, Authorization headers,
9
+ * URL-embedded passwords, and common API key formats.
10
+ */
11
+ const SECRET_PATTERNS = [
12
+ [/Bearer\s+\S+/gi, 'Bearer [REDACTED]'],
13
+ [/Authorization:\s*\S+/gi, 'Authorization: [REDACTED]'],
14
+ [/(https?:\/\/[^:]+):([^@]+)@/gi, '$1:[REDACTED]@'],
15
+ [/\b(sk-|pk-|api[_-]?key[=:]\s*)\S+/gi, '$1[REDACTED]'],
16
+ [/(password|passwd|pwd|secret|token)[=:]\s*\S+/gi, '$1=[REDACTED]'],
17
+ ];
18
+ export function redactSecrets(input) {
19
+ let result = input;
20
+ for (const [pattern, replacement] of SECRET_PATTERNS) {
21
+ result = result.replace(pattern, replacement);
22
+ }
23
+ return result;
24
+ }
5
25
  /**
6
26
  * Verify an HMAC-SHA256 signature over a payload.
7
27
  * Comparison uses timingSafeEqual to resist timing oracle attacks.
@@ -19,4 +39,27 @@ export function verifyHmacSignature(payload, signature, secret) {
19
39
  return false;
20
40
  return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
21
41
  }
42
+ /**
43
+ * Derive a session-scoped token from the master auth token.
44
+ * Uses HMAC-SHA256(masterToken, "session:" + sessionId) so that:
45
+ * - Each session gets a unique, unpredictable token
46
+ * - The token cannot be used to recover the master token
47
+ * - The server can verify it without storing extra state
48
+ */
49
+ export function deriveSessionToken(masterToken, sessionId) {
50
+ return crypto
51
+ .createHmac('sha256', masterToken)
52
+ .update(`session:${sessionId}`)
53
+ .digest('hex');
54
+ }
55
+ /**
56
+ * Verify a session-scoped token against the master token and session ID.
57
+ * Uses timing-safe comparison.
58
+ */
59
+ export function verifySessionToken(masterToken, sessionId, candidateToken) {
60
+ const expected = deriveSessionToken(masterToken, sessionId);
61
+ if (candidateToken.length !== expected.length)
62
+ return false;
63
+ return crypto.timingSafeEqual(Buffer.from(candidateToken), Buffer.from(expected));
64
+ }
22
65
  //# sourceMappingURL=crypto-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto-utils.js","sourceRoot":"","sources":["../crypto-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,SAAiB,EAAE,MAAc;IACpF,MAAM,QAAQ,GAAG,SAAS,GAAG,MAAM;SAChC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;SAC5B,MAAM,CAAC,OAAO,CAAC;SACf,MAAM,CAAC,KAAK,CAAC,CAAA;IAEhB,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACtD,OAAO,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;AAC9E,CAAC"}
1
+ {"version":3,"file":"crypto-utils.js","sourceRoot":"","sources":["../crypto-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B;;;;GAIG;AACH,MAAM,eAAe,GAA4B;IAC/C,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;IACvC,CAAC,wBAAwB,EAAE,2BAA2B,CAAC;IACvD,CAAC,+BAA+B,EAAE,gBAAgB,CAAC;IACnD,CAAC,qCAAqC,EAAE,cAAc,CAAC;IACvD,CAAC,gDAAgD,EAAE,eAAe,CAAC;CACpE,CAAA;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,KAAK,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,eAAe,EAAE,CAAC;QACrD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IAC/C,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,SAAiB,EAAE,MAAc;IACpF,MAAM,QAAQ,GAAG,SAAS,GAAG,MAAM;SAChC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;SAC5B,MAAM,CAAC,OAAO,CAAC;SACf,MAAM,CAAC,KAAK,CAAC,CAAA;IAEhB,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACtD,OAAO,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;AAC9E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,SAAiB;IACvE,OAAO,MAAM;SACV,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC;SACjC,MAAM,CAAC,WAAW,SAAS,EAAE,CAAC;SAC9B,MAAM,CAAC,KAAK,CAAC,CAAA;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,SAAiB,EAAE,cAAsB;IAC/F,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;IAC3D,IAAI,cAAc,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAC3D,OAAO,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;AACnF,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * REST routes for the docs browser feature.
3
+ *
4
+ * Provides two endpoints:
5
+ * - GET /api/docs?repo=<path> — list markdown files in a repo
6
+ * - GET /api/docs/file?repo=<path>&file=<relPath> — get raw content of a markdown file
7
+ *
8
+ * Repo path and file path are passed as query parameters to avoid
9
+ * Express routing issues with encoded slashes in path segments.
10
+ */
11
+ import { Router } from 'express';
12
+ import type { Request } from 'express';
13
+ type VerifyFn = (token: string | undefined) => boolean;
14
+ type ExtractFn = (req: Request) => string | undefined;
15
+ export declare function createDocsRouter(verifyToken: VerifyFn, extractToken: ExtractFn): Router;
16
+ export {};
@@ -0,0 +1,141 @@
1
+ /**
2
+ * REST routes for the docs browser feature.
3
+ *
4
+ * Provides two endpoints:
5
+ * - GET /api/docs?repo=<path> — list markdown files in a repo
6
+ * - GET /api/docs/file?repo=<path>&file=<relPath> — get raw content of a markdown file
7
+ *
8
+ * Repo path and file path are passed as query parameters to avoid
9
+ * Express routing issues with encoded slashes in path segments.
10
+ */
11
+ import { Router } from 'express';
12
+ import { readFileSync, readdirSync, statSync } from 'fs';
13
+ import { join, resolve, relative, extname } from 'path';
14
+ /** Directories to exclude from the file listing. */
15
+ const EXCLUDED_DIRS = new Set([
16
+ 'node_modules', '.git', '.github', '.codekin', '.vscode',
17
+ '.idea', 'dist', 'build', 'coverage', '__pycache__', '.next',
18
+ '.nuxt', '.svelte-kit', 'vendor', '.cache',
19
+ ]);
20
+ /** Files pinned to the top of the list, in display order. */
21
+ const PINNED_FILES = ['CLAUDE.md', 'README.md'];
22
+ /**
23
+ * Recursively find all .md files in a directory, up to maxDepth levels deep.
24
+ * Excludes hidden directories and common non-source directories.
25
+ */
26
+ function findMarkdownFiles(root, maxDepth) {
27
+ const results = [];
28
+ function walk(dir, depth) {
29
+ if (depth > maxDepth)
30
+ return;
31
+ let entries;
32
+ try {
33
+ entries = readdirSync(dir);
34
+ }
35
+ catch {
36
+ return;
37
+ }
38
+ for (const entry of entries) {
39
+ if (entry.startsWith('.') && entry !== '.')
40
+ continue;
41
+ const fullPath = join(dir, entry);
42
+ let stat;
43
+ try {
44
+ stat = statSync(fullPath);
45
+ }
46
+ catch {
47
+ continue;
48
+ }
49
+ if (stat.isDirectory()) {
50
+ if (!EXCLUDED_DIRS.has(entry)) {
51
+ walk(fullPath, depth + 1);
52
+ }
53
+ }
54
+ else if (stat.isFile() && extname(entry).toLowerCase() === '.md') {
55
+ results.push(relative(root, fullPath));
56
+ }
57
+ }
58
+ }
59
+ walk(root, 0);
60
+ return results;
61
+ }
62
+ export function createDocsRouter(verifyToken, extractToken) {
63
+ const router = Router();
64
+ // Auth middleware for all docs routes
65
+ router.use('/api/docs', (req, res, next) => {
66
+ if (!verifyToken(extractToken(req))) {
67
+ return res.status(401).json({ error: 'Unauthorized' });
68
+ }
69
+ next();
70
+ });
71
+ /**
72
+ * GET /api/docs?repo=<path>
73
+ * List markdown files in the repo. Pinned files appear first.
74
+ */
75
+ router.get('/api/docs', (req, res) => {
76
+ const repoPath = req.query.repo;
77
+ if (!repoPath) {
78
+ return res.status(400).json({ error: 'Missing repo query parameter' });
79
+ }
80
+ // Validate the repo path exists and is a directory
81
+ try {
82
+ const stat = statSync(repoPath);
83
+ if (!stat.isDirectory()) {
84
+ return res.status(400).json({ error: 'Not a directory' });
85
+ }
86
+ }
87
+ catch {
88
+ return res.status(404).json({ error: 'Repo not found' });
89
+ }
90
+ const mdFiles = findMarkdownFiles(repoPath, 3);
91
+ const pinnedSet = new Set(PINNED_FILES.map(f => f.toLowerCase()));
92
+ const pinned = [];
93
+ const rest = [];
94
+ for (const filePath of mdFiles) {
95
+ if (pinnedSet.has(filePath.toLowerCase())) {
96
+ pinned.push({ path: filePath, pinned: true });
97
+ }
98
+ else {
99
+ rest.push({ path: filePath, pinned: false });
100
+ }
101
+ }
102
+ // Sort pinned in the defined order, rest alphabetically
103
+ pinned.sort((a, b) => {
104
+ const ai = PINNED_FILES.findIndex(p => p.toLowerCase() === a.path.toLowerCase());
105
+ const bi = PINNED_FILES.findIndex(p => p.toLowerCase() === b.path.toLowerCase());
106
+ return ai - bi;
107
+ });
108
+ rest.sort((a, b) => a.path.localeCompare(b.path));
109
+ res.json({ files: [...pinned, ...rest] });
110
+ });
111
+ /**
112
+ * GET /api/docs/file?repo=<path>&file=<relPath>
113
+ * Get the raw content of a single markdown file.
114
+ */
115
+ router.get('/api/docs/file', (req, res) => {
116
+ const repoPath = req.query.repo;
117
+ const filePath = req.query.file;
118
+ if (!repoPath || !filePath) {
119
+ return res.status(400).json({ error: 'Missing repo or file query parameter' });
120
+ }
121
+ // Validate file extension
122
+ if (extname(filePath).toLowerCase() !== '.md') {
123
+ return res.status(400).json({ error: 'Only .md files are supported' });
124
+ }
125
+ // Path traversal guard
126
+ const resolved = resolve(repoPath, filePath);
127
+ const repoResolved = resolve(repoPath);
128
+ if (!resolved.startsWith(repoResolved + '/') && resolved !== repoResolved) {
129
+ return res.status(404).json({ error: 'File not found' });
130
+ }
131
+ try {
132
+ const content = readFileSync(resolved, 'utf-8');
133
+ res.json({ path: filePath, content });
134
+ }
135
+ catch {
136
+ res.status(404).json({ error: 'File not found' });
137
+ }
138
+ });
139
+ return router;
140
+ }
141
+ //# sourceMappingURL=docs-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-routes.js","sourceRoot":"","sources":["../docs-routes.ts"],"names":[],"mappings":"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"}
@@ -10,9 +10,10 @@
10
10
  * on server startup. Active sessions are automatically restarted after a
11
11
  * server restart with staggered delays.
12
12
  *
13
- * Auto-approval rules (tools and Bash commands) are stored per-repo (keyed by
14
- * workingDir) in ~/.codekin/repo-approvals.json, so they persist across
15
- * sessions sharing the same repo.
13
+ * Delegates to focused modules:
14
+ * - ApprovalManager: repo-level auto-approval rules for tools/commands
15
+ * - SessionNaming: AI-powered session name generation with retry logic
16
+ * - SessionPersistence: disk I/O for session state
16
17
  */
17
18
  import type { WebSocket } from 'ws';
18
19
  import { SessionArchive } from './session-archive.js';
@@ -25,10 +26,6 @@ export interface CreateSessionOptions {
25
26
  }
26
27
  export declare class SessionManager {
27
28
  private sessions;
28
- /** Repo-level auto-approval store, keyed by workingDir (repo path). */
29
- private repoApprovals;
30
- private _persistTimer;
31
- private _approvalPersistTimer;
32
29
  /** SQLite archive for closed sessions. */
33
30
  readonly archive: SessionArchive;
34
31
  /** Exposed so ws-server can pass its port to child Claude processes. */
@@ -39,42 +36,40 @@ export declare class SessionManager {
39
36
  _globalBroadcast: ((msg: WsServerMessage) => void) | null;
40
37
  /** Registered listeners notified when a session's Claude process exits. */
41
38
  private _exitListeners;
39
+ /** Delegated approval logic. */
40
+ private approvalManager;
41
+ /** Delegated naming logic. */
42
+ private sessionNaming;
43
+ /** Delegated persistence logic. */
44
+ private sessionPersistence;
42
45
  constructor();
43
- /** Get or create the approval entry for a repo (workingDir). */
44
- private getRepoApprovalEntry;
45
- /** Add an auto-approval rule for a repo and persist. */
46
- private addRepoApproval;
47
- /**
48
- * Command prefixes where prefix-based auto-approval is safe.
49
- * Only commands whose behavior is determined by later arguments (not by target)
50
- * should be listed here. Dangerous commands like rm, sudo, curl, etc. require
51
- * exact match to prevent escalation (e.g. approving `rm -rf /tmp/x` should NOT
52
- * also approve `rm -rf /`).
53
- */
54
- private static readonly SAFE_PREFIX_COMMANDS;
55
- /**
56
- * Check if a tool/command is auto-approved for a repo.
57
- * For Bash commands, uses prefix matching only for safe commands;
58
- * dangerous commands require exact match to prevent escalation.
59
- */
46
+ /** Check if a tool/command is auto-approved for a repo. */
60
47
  checkAutoApproval(workingDir: string, toolName: string, toolInput: Record<string, unknown>): boolean;
61
- /** Extract the command prefix (first two tokens) for prefix-based matching. */
62
- private commandPrefix;
63
- /**
64
- * Derive a glob pattern from a tool invocation for "Approve Pattern".
65
- * Returns a string like "cat *" or "git diff *", or null if no safe pattern applies.
66
- * Patterns use the format "<prefix> *" meaning "this prefix followed by anything".
67
- */
48
+ /** Derive a glob pattern from a tool invocation for "Approve Pattern". */
68
49
  derivePattern(toolName: string, toolInput: Record<string, unknown>): string | null;
69
- /**
70
- * Check if a bash command matches a stored pattern.
71
- * Patterns of the form "<prefix> *" match any command starting with <prefix>.
72
- */
73
- private matchesPattern;
74
- /** Save an "Always Allow" approval for a tool/command. */
75
- private saveAlwaysAllow;
76
- /** Save a pattern-based approval (e.g. "cat *") for a tool/command. */
77
- private savePatternApproval;
50
+ /** Return the auto-approved tools, commands, and patterns for a repo (workingDir). */
51
+ getApprovals(workingDir: string): {
52
+ tools: string[];
53
+ commands: string[];
54
+ patterns: string[];
55
+ };
56
+ /** Remove an auto-approval rule for a repo (workingDir) and persist to disk. */
57
+ removeApproval(workingDir: string, opts: {
58
+ tool?: string;
59
+ command?: string;
60
+ pattern?: string;
61
+ }, skipPersist?: boolean): 'invalid' | boolean;
62
+ /** Add an auto-approval rule for a repo and persist (used by tests via `as any`). */
63
+ private addRepoApproval;
64
+ /** Write repo-level approvals to disk. Exposed for shutdown. */
65
+ persistRepoApprovals(): void;
66
+ /** Schedule session naming via AI provider. */
67
+ scheduleSessionNaming(sessionId: string): void;
68
+ /** Re-trigger session naming on user interaction. */
69
+ retrySessionNamingOnInteraction(sessionId: string): void;
70
+ /** Write all sessions to disk as JSON (atomic rename to prevent corruption). */
71
+ persistToDisk(): void;
72
+ private persistToDiskDebounced;
78
73
  /** Create a new session and persist to disk. */
79
74
  create(name: string, workingDir: string, options?: CreateSessionOptions): Session;
80
75
  /** Register a listener called when any session's Claude process exits.
@@ -83,26 +78,6 @@ export declare class SessionManager {
83
78
  get(id: string): Session | undefined;
84
79
  list(): SessionInfo[];
85
80
  rename(sessionId: string, newName: string): boolean;
86
- /** Max naming retry attempts before giving up. */
87
- private static readonly MAX_NAMING_ATTEMPTS;
88
- /** Back-off delays for naming retries: 20s, 60s, 120s, 240s, 240s */
89
- private static readonly NAMING_DELAYS;
90
- /** Schedule session naming via the Anthropic API.
91
- * Used as a 20s fallback for long responses — fires immediately via result handler
92
- * for responses that finish sooner.
93
- * Automatically retries on failure with increasing delays. */
94
- scheduleSessionNaming(sessionId: string): void;
95
- /** Resolve the AI model to use for session naming based on available API keys.
96
- * Respects the user's preferred support provider setting.
97
- * Fallback priority: Groq (free/fast) → OpenAI → Gemini → Anthropic. */
98
- private getNamingModel;
99
- /** Execute the actual naming call. Called by the timer set in scheduleSessionNaming.
100
- * Uses the first available API provider for minimal cost and latency. */
101
- private executeSessionNaming;
102
- /** Re-trigger session naming when user interacts, if the session is still unnamed
103
- * and no naming timer is already pending. Uses a short delay (5s) since we already
104
- * have conversation context at this point. */
105
- retrySessionNamingOnInteraction(sessionId: string): void;
106
81
  /** Add a WebSocket client to a session. Returns the session or undefined if not found.
107
82
  * Re-broadcasts any pending approval/control prompts so the joining client sees them. */
108
83
  join(sessionId: string, ws: WebSocket): Session | undefined;
@@ -171,14 +146,14 @@ export declare class SessionManager {
171
146
  /** Update the model for a session and restart Claude with the new model. */
172
147
  setModel(sessionId: string, model: string): boolean;
173
148
  stopClaude(sessionId: string): void;
149
+ /** Check if an error result text matches a transient API error worth retrying. */
150
+ private isRetryableApiError;
174
151
  /**
175
152
  * Build a condensed text summary of a session's conversation history.
176
153
  * Used as context when auto-starting Claude for sessions without a saved
177
154
  * Claude session ID (so the CLI can't resume from its own storage).
178
155
  * Caps output at ~4000 chars, keeping the most recent exchanges.
179
156
  */
180
- /** Check if an error result text matches a transient API error worth retrying. */
181
- private isRetryableApiError;
182
157
  private buildSessionContext;
183
158
  private resetStallTimer;
184
159
  private clearStallTimer;
@@ -199,28 +174,6 @@ export declare class SessionManager {
199
174
  * in-progress state after session restore.
200
175
  */
201
176
  private completeInProgressTasks;
202
- /** Return the auto-approved tools, commands, and patterns for a repo (workingDir). */
203
- getApprovals(workingDir: string): {
204
- tools: string[];
205
- commands: string[];
206
- patterns: string[];
207
- };
208
- /** Remove an auto-approval rule for a repo (workingDir) and persist to disk.
209
- * Returns 'invalid' if no tool/command provided, or boolean indicating if something was deleted.
210
- * Pass skipPersist=true for bulk operations (caller must call persistRepoApprovals after). */
211
- removeApproval(workingDir: string, opts: {
212
- tool?: string;
213
- command?: string;
214
- pattern?: string;
215
- }, skipPersist?: boolean): 'invalid' | boolean;
216
- /** Write all sessions to disk as JSON (atomic rename to prevent corruption). */
217
- persistToDisk(): void;
218
- private persistToDiskDebounced;
219
- /** Write repo-level approvals to disk (atomic rename). */
220
- persistRepoApprovals(): void;
221
- private persistRepoApprovalsDebounced;
222
- private restoreFromDisk;
223
- private restoreRepoApprovalsFromDisk;
224
177
  /**
225
178
  * Auto-restart Claude processes for sessions that were active before a server
226
179
  * restart. Each session is started with a staggered delay to avoid flooding.