agent-nuvira 3.3.12 → 3.3.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 (152) hide show
  1. package/dist/agents/agents/reasoner.d.ts.map +1 -1
  2. package/dist/agents/agents/reasoner.js +13 -0
  3. package/dist/agents/agents/reasoner.js.map +1 -1
  4. package/dist/agents/orchestrator.d.ts.map +1 -1
  5. package/dist/agents/orchestrator.js +29 -9
  6. package/dist/agents/orchestrator.js.map +1 -1
  7. package/dist/cli/chat.d.ts.map +1 -1
  8. package/dist/cli/chat.js +34 -7
  9. package/dist/cli/chat.js.map +1 -1
  10. package/dist/cli/cli-program.d.ts.map +1 -1
  11. package/dist/cli/cli-program.js +8 -0
  12. package/dist/cli/cli-program.js.map +1 -1
  13. package/dist/cli/config.d.ts.map +1 -1
  14. package/dist/cli/config.js +21 -3
  15. package/dist/cli/config.js.map +1 -1
  16. package/dist/cli/execute.d.ts.map +1 -1
  17. package/dist/cli/execute.js +6 -0
  18. package/dist/cli/execute.js.map +1 -1
  19. package/dist/cli/knowledge.d.ts +23 -0
  20. package/dist/cli/knowledge.d.ts.map +1 -0
  21. package/dist/cli/knowledge.js +132 -0
  22. package/dist/cli/knowledge.js.map +1 -0
  23. package/dist/cli/loop-executor.d.ts.map +1 -1
  24. package/dist/cli/loop-executor.js +45 -6
  25. package/dist/cli/loop-executor.js.map +1 -1
  26. package/dist/cli/omniroute-control.d.ts +88 -0
  27. package/dist/cli/omniroute-control.d.ts.map +1 -0
  28. package/dist/cli/omniroute-control.js +179 -0
  29. package/dist/cli/omniroute-control.js.map +1 -0
  30. package/dist/cli/omniroute.d.ts +21 -0
  31. package/dist/cli/omniroute.d.ts.map +1 -0
  32. package/dist/cli/omniroute.js +67 -0
  33. package/dist/cli/omniroute.js.map +1 -0
  34. package/dist/config/types.d.ts +8 -0
  35. package/dist/config/types.d.ts.map +1 -1
  36. package/dist/context/history.d.ts +21 -0
  37. package/dist/context/history.d.ts.map +1 -1
  38. package/dist/context/history.js +50 -0
  39. package/dist/context/history.js.map +1 -1
  40. package/dist/gateway/hook-contract.d.ts +173 -0
  41. package/dist/gateway/hook-contract.d.ts.map +1 -0
  42. package/dist/gateway/hook-contract.js +352 -0
  43. package/dist/gateway/hook-contract.js.map +1 -0
  44. package/dist/gateway/hooks.d.ts.map +1 -1
  45. package/dist/gateway/hooks.js +14 -0
  46. package/dist/gateway/hooks.js.map +1 -1
  47. package/dist/inference/interface.d.ts +17 -0
  48. package/dist/inference/interface.d.ts.map +1 -1
  49. package/dist/inference/model-id-validation.d.ts +57 -0
  50. package/dist/inference/model-id-validation.d.ts.map +1 -0
  51. package/dist/inference/model-id-validation.js +127 -0
  52. package/dist/inference/model-id-validation.js.map +1 -0
  53. package/dist/inference/openai-compat-adapter.d.ts.map +1 -1
  54. package/dist/inference/openai-compat-adapter.js +12 -1
  55. package/dist/inference/openai-compat-adapter.js.map +1 -1
  56. package/dist/inference/provider-catalog.d.ts +11 -0
  57. package/dist/inference/provider-catalog.d.ts.map +1 -1
  58. package/dist/inference/provider-catalog.js +80 -0
  59. package/dist/inference/provider-catalog.js.map +1 -1
  60. package/dist/inference/route-resolver.d.ts +2 -8
  61. package/dist/inference/route-resolver.d.ts.map +1 -1
  62. package/dist/inference/route-resolver.js +17 -0
  63. package/dist/inference/route-resolver.js.map +1 -1
  64. package/dist/inference/tool-call-utils.d.ts.map +1 -1
  65. package/dist/inference/tool-call-utils.js +10 -8
  66. package/dist/inference/tool-call-utils.js.map +1 -1
  67. package/dist/inference/tools.d.ts +1 -0
  68. package/dist/inference/tools.d.ts.map +1 -1
  69. package/dist/inference/tools.js +20 -3
  70. package/dist/inference/tools.js.map +1 -1
  71. package/dist/learning/auto-router.d.ts +53 -0
  72. package/dist/learning/auto-router.d.ts.map +1 -1
  73. package/dist/learning/auto-router.js +73 -0
  74. package/dist/learning/auto-router.js.map +1 -1
  75. package/dist/learning/error-repair.d.ts +23 -1
  76. package/dist/learning/error-repair.d.ts.map +1 -1
  77. package/dist/learning/error-repair.js +58 -0
  78. package/dist/learning/error-repair.js.map +1 -1
  79. package/dist/learning/knowledge-base.d.ts +124 -0
  80. package/dist/learning/knowledge-base.d.ts.map +1 -0
  81. package/dist/learning/knowledge-base.js +337 -0
  82. package/dist/learning/knowledge-base.js.map +1 -0
  83. package/dist/learning/model-selection.d.ts +2 -1
  84. package/dist/learning/model-selection.d.ts.map +1 -1
  85. package/dist/learning/model-selection.js +35 -2
  86. package/dist/learning/model-selection.js.map +1 -1
  87. package/dist/learning/project-docs.d.ts +83 -0
  88. package/dist/learning/project-docs.d.ts.map +1 -0
  89. package/dist/learning/project-docs.js +132 -0
  90. package/dist/learning/project-docs.js.map +1 -0
  91. package/dist/learning/quota-ledger.d.ts +13 -0
  92. package/dist/learning/quota-ledger.d.ts.map +1 -1
  93. package/dist/learning/quota-ledger.js +28 -0
  94. package/dist/learning/quota-ledger.js.map +1 -1
  95. package/dist/learning/seeded-benchmark.d.ts +14 -0
  96. package/dist/learning/seeded-benchmark.d.ts.map +1 -1
  97. package/dist/learning/seeded-benchmark.js +43 -4
  98. package/dist/learning/seeded-benchmark.js.map +1 -1
  99. package/dist/security/secret-scan.d.ts +156 -0
  100. package/dist/security/secret-scan.d.ts.map +1 -0
  101. package/dist/security/secret-scan.js +525 -0
  102. package/dist/security/secret-scan.js.map +1 -0
  103. package/dist/tools/plan-store.d.ts +24 -2
  104. package/dist/tools/plan-store.d.ts.map +1 -1
  105. package/dist/tools/plan-store.js +42 -2
  106. package/dist/tools/plan-store.js.map +1 -1
  107. package/dist/tools/registry.d.ts.map +1 -1
  108. package/dist/tools/registry.js +149 -1
  109. package/dist/tools/registry.js.map +1 -1
  110. package/dist/tools/remediation-ladder.d.ts +91 -0
  111. package/dist/tools/remediation-ladder.d.ts.map +1 -0
  112. package/dist/tools/remediation-ladder.js +308 -0
  113. package/dist/tools/remediation-ladder.js.map +1 -0
  114. package/dist/tools/run-terminal.d.ts.map +1 -1
  115. package/dist/tools/run-terminal.js +26 -2
  116. package/dist/tools/run-terminal.js.map +1 -1
  117. package/dist/tools/skills-hub.d.ts +7 -0
  118. package/dist/tools/skills-hub.d.ts.map +1 -1
  119. package/dist/tools/skills-hub.js +11 -2
  120. package/dist/tools/skills-hub.js.map +1 -1
  121. package/dist/tools/step-artifact.d.ts +35 -0
  122. package/dist/tools/step-artifact.d.ts.map +1 -0
  123. package/dist/tools/step-artifact.js +154 -0
  124. package/dist/tools/step-artifact.js.map +1 -0
  125. package/dist/tools/tool-loop.d.ts +6 -0
  126. package/dist/tools/tool-loop.d.ts.map +1 -1
  127. package/dist/tools/tool-loop.js +27 -3
  128. package/dist/tools/tool-loop.js.map +1 -1
  129. package/dist/tools/toolsets.js +4 -4
  130. package/dist/tools/toolsets.js.map +1 -1
  131. package/dist/tools/worktree.d.ts +11 -2
  132. package/dist/tools/worktree.d.ts.map +1 -1
  133. package/dist/tools/worktree.js +11 -2
  134. package/dist/tools/worktree.js.map +1 -1
  135. package/dist/web-dashboard/server.d.ts +29 -0
  136. package/dist/web-dashboard/server.d.ts.map +1 -1
  137. package/dist/web-dashboard/server.js +372 -5
  138. package/dist/web-dashboard/server.js.map +1 -1
  139. package/dist/web-dashboard/src/types.d.ts +66 -0
  140. package/dist/web-dashboard/src/types.d.ts.map +1 -1
  141. package/dist/web-dashboard/workspace-guard.d.ts +7 -0
  142. package/dist/web-dashboard/workspace-guard.d.ts.map +1 -1
  143. package/dist/web-dashboard/workspace-guard.js +70 -0
  144. package/dist/web-dashboard/workspace-guard.js.map +1 -1
  145. package/package.json +1 -1
  146. package/src/web-dashboard/public/assets/index-DhiuR4S2.js +210 -0
  147. package/src/web-dashboard/public/assets/index-DhiuR4S2.js.map +1 -0
  148. package/src/web-dashboard/public/assets/index-tK8Y2qHB.css +1 -0
  149. package/src/web-dashboard/public/index.html +2 -2
  150. package/src/web-dashboard/public/assets/index-BrZcYhy6.js +0 -207
  151. package/src/web-dashboard/public/assets/index-BrZcYhy6.js.map +0 -1
  152. package/src/web-dashboard/public/assets/index-DsWczTa6.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/context/history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,gGAAgG;IAChG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AA6HD;;GAEG;AACH,qBAAa,WAAW;IACtB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAiB;IAEtD;;;;OAIG;IACH,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIvD;;OAEG;IACH,MAAM,CAAC,uBAAuB,IAAI,OAAO;IAGzC;;;;;;;;;;;OAWG;IACH,YAAY,CACV,QAAQ,EAAE,cAAc,EAAE,EAC1B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,aAAa,GAAE,OAAc,EAC7B,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM;IAyCT;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAK7C;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,cAAc,EAAE;IAe3D;;;;;;;;;OASG;IACH,cAAc,CAAC,IAAI,EAAE;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,cAAc,EAAE;IA8BpB;;OAEG;IACH,cAAc,CAAC,KAAK,GAAE,MAAW,GAAG,cAAc,EAAE;IAOpD;;OAEG;IACH,iBAAiB,CAAC,IAAI,GAAE,MAAU,GAAG,cAAc,EAAE;IAQrD;;OAEG;IACH,KAAK,IAAI,MAAM;IAKf;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,KAAK,CAAC,aAAa,GAAE,MAA+B,GAAG,MAAM;IAmB7D;;;;;;;;;;;OAWG;IACG,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,cAAc,EAAE,CAAC;IAwC5B;;;;;;;;;OASG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAiBxC;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM;IAgBrD;;;;OAIG;YACW,qBAAqB;IAkCnC,OAAO,CAAC,aAAa;CActB;AAKD,wBAAgB,cAAc,IAAI,WAAW,CAK5C"}
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/context/history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,gGAAgG;IAChG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AA6HD;;GAEG;AACH,qBAAa,WAAW;IACtB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAiB;IAEtD;;;;OAIG;IACH,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIvD;;OAEG;IACH,MAAM,CAAC,uBAAuB,IAAI,OAAO;IAGzC;;;;;;;;;;;OAWG;IACH,YAAY,CACV,QAAQ,EAAE,cAAc,EAAE,EAC1B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,aAAa,GAAE,OAAc,EAC7B,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM;IAyCT;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAK7C;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,cAAc,EAAE;IAe3D;;;;;;;;;OASG;IACH,cAAc,CAAC,IAAI,EAAE;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,cAAc,EAAE;IA8BpB;;OAEG;IACH,cAAc,CAAC,KAAK,GAAE,MAAW,GAAG,cAAc,EAAE;IAOpD;;OAEG;IACH,iBAAiB,CAAC,IAAI,GAAE,MAAU,GAAG,cAAc,EAAE;IAQrD;;OAEG;IACH,KAAK,IAAI,MAAM;IAKf;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;;;;;;;;OAWG;IACG,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAcjD;;;;;;OAMG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAa3C;;OAEG;IACH,KAAK,CAAC,aAAa,GAAE,MAA+B,GAAG,MAAM;IAmB7D;;;;;;;;;;;OAWG;IACG,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,cAAc,EAAE,CAAC;IAwC5B;;;;;;;;;OASG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAiBxC;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM;IAgBrD;;;;OAIG;YACW,qBAAqB;IAkCnC,OAAO,CAAC,aAAa;CActB;AAKD,wBAAgB,cAAc,IAAI,WAAW,CAK5C"}
@@ -288,6 +288,56 @@ export class ChatHistory {
288
288
  clear() {
289
289
  writeHistory({ sessions: {}, version: CURRENT_VERSION });
290
290
  }
291
+ /**
292
+ * Delete ONE session by id.
293
+ *
294
+ * The History tab was read-only: `clear()` wiped every conversation and
295
+ * `prune()` dropped a whole age band, but there was no way to remove a single
296
+ * unwanted session — so cleaning up meant either nuking everything or
297
+ * hand-editing `history.json`. Returns false when the id is unknown (the
298
+ * caller reports that honestly instead of claiming a delete happened).
299
+ *
300
+ * The semantic-search entry is removed best-effort alongside the file entry,
301
+ * so a deleted conversation cannot still surface in recall.
302
+ */
303
+ async deleteSession(id) {
304
+ const data = readHistory();
305
+ if (!data.sessions[id])
306
+ return false;
307
+ delete data.sessions[id];
308
+ writeHistory(data);
309
+ try {
310
+ await getVectorStore().delete(id);
311
+ }
312
+ catch {
313
+ // Best-effort — the JSON entry is gone either way; a leftover vector
314
+ // entry is stale, not resurrecting (every reader loads from history.json).
315
+ }
316
+ return true;
317
+ }
318
+ /**
319
+ * Delete every session older than `olderThanMs` (the BULK / time-based sweep).
320
+ *
321
+ * Same cut-off semantics as `prune()`, but expressed in milliseconds so the
322
+ * dashboard's "Forget older than a week" is exact rather than a day-rounded
323
+ * approximation. Returns the number removed.
324
+ */
325
+ pruneOlderThan(olderThanMs) {
326
+ if (!(olderThanMs > 0))
327
+ return 0;
328
+ const cutoff = Date.now() - olderThanMs;
329
+ const data = readHistory();
330
+ const ids = [];
331
+ for (const [id, session] of Object.entries(data.sessions)) {
332
+ if (session.startedAt < cutoff)
333
+ ids.push(id);
334
+ }
335
+ for (const id of ids)
336
+ delete data.sessions[id];
337
+ if (ids.length > 0)
338
+ writeHistory(data);
339
+ return ids.length;
340
+ }
291
341
  /**
292
342
  * Delete sessions older than the specified retention period.
293
343
  */
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/context/history.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/context/history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAuClD,+EAA+E;AAE/E,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B;;;;;;;;;GASG;AACH,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE,QAAQ,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,cAAc,CAAC,CAAC;AAC3C,CAAC;AAED,uCAAuC;AACvC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,+BAA+B;AAC/B,MAAM,YAAY,GAAG,GAAG,CAAC;AAEzB,+EAA+E;AAE/E,SAAS,SAAS;IAChB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,SAAS,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;QACpD,CAAC;QACD,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IACpD,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAiB;IACrC,SAAS,EAAE,CAAC;IACZ,aAAa,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,WAAW,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,QAA0B;IACjD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAC7D,IAAI,CAAC,YAAY;QAAE,OAAO,eAAe,CAAC;IAC1C,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACzE,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,QAA0B;IAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvE,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,MAAM,WAAW,GAA6B;QAC5C,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC;QAC7E,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;QAC5D,UAAU,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,CAAC;QACvE,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,CAAC;QACjF,cAAc,EAAE,CAAC,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC;QAC1E,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACvD,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC;KAChE,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1D,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa;AACxC,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,OAAuB,EAAE,CAAS;IAC9D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,KAAK,IAAI,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,KAAK,IAAI,CAAC,CAAC;IACxD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,GAAG,GAAG,CAAC;gBAAE,KAAK,IAAI,GAAG,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,WAAW;IACtB;;;OAGG;IACK,MAAM,CAAC,sBAAsB,GAAY,IAAI,CAAC;IAEtD;;;;OAIG;IACH,MAAM,CAAC,wBAAwB,CAAC,OAAgB;QAC9C,WAAW,CAAC,sBAAsB,GAAG,OAAO,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,uBAAuB;QAC5B,OAAO,WAAW,CAAC,sBAAsB,CAAC;IAC5C,CAAC;IACD;;;;;;;;;;;OAWG;IACH,YAAY,CACV,QAA0B,EAC1B,QAAgB,EAChB,KAAa,EACb,gBAAyB,IAAI,EAC7B,SAAkB;QAElB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAErC,0EAA0E;QAC1E,wEAAwE;QACxE,0EAA0E;QAC1E,oEAAoE;QACpE,gEAAgE;QAChE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAErF,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAEzB,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvF,MAAM,OAAO,GAAmB;YAC9B,EAAE;YACF,QAAQ;YACR,KAAK;YACL,SAAS;YACT,OAAO;YACP,QAAQ,EAAE,gBAAgB;YAC1B,OAAO,EAAE,eAAe,CAAC,gBAAgB,CAAC;YAC1C,IAAI,EAAE,WAAW,CAAC,gBAAgB,CAAC;YACnC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpC,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;QAC5B,YAAY,CAAC,IAAI,CAAC,CAAC;QAEnB,+DAA+D;QAC/D,+DAA+D;QAC/D,IAAI,aAAa,IAAI,WAAW,CAAC,sBAAsB,EAAE,CAAC;YACxD,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,EAAU;QACnB,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACnC,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,KAAa,EAAE,QAAgB,EAAE;QACtC,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAElB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;aACxC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;aACxE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;aAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;aACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAEzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;;;OASG;IACH,cAAc,CAAC,IAKd;QACC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;QACzD,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAE3B,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC/B,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK;oBAAE,OAAO,KAAK,CAAC;gBACjF,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG;oBAAE,OAAO,KAAK,CAAC;gBAC7E,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAEnD,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;YAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAEpD,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,QAAQ;aACpB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;aACxE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;aAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;aACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAEzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAAgB,EAAE;QAC/B,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;aAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;aACzC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,OAAe,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACvD,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;aAChC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC;aACpC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK;QACH,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK;QACH,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,aAAa,CAAC,EAAU;QAC5B,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;YACrE,2EAA2E;QAC7E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;OAMG;IACH,cAAc,CAAC,WAAmB;QAChC,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC;QACxC,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1D,IAAI,OAAO,CAAC,SAAS,GAAG,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,GAAG;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/C,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE,YAAY,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,GAAG,CAAC,MAAM,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAwB,sBAAsB;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAChE,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1D,IAAI,OAAO,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACzB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,cAAc,CAClB,KAAa,EACb,QAAgB,EAAE;QAElB,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAElB,IAAI,CAAC;YACH,uEAAuE;YACvE,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YAEnC,6DAA6D;YAC7D,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACtC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;YAED,gFAAgF;YAChF,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC5D,OAAO,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;YAED,4CAA4C;YAC5C,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAqB,EAAE,CAAC;YACrC,KAAK,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,OAAO,EAAE,CAAC;gBAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACxC,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;YACtC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAC1C,OAAO,EAAE,CAAC;YACZ,CAAC;YAAC,MAAM,CAAC;gBACP,uCAAuC;YACzC,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,OAAuB;QAC1C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;YACnE,KAAK,EAAE,OAAO;YACd,GAAG,EAAE,SAAS;YACd,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAE5E,OAAO,QAAQ,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC;IACjK,CAAC;IAED,0EAA0E;IAE1E;;;;OAIG;IACK,KAAK,CAAC,qBAAqB,CAAC,OAAuB;QACzD,IAAI,CAAC;YACH,qEAAqE;YACrE,MAAM,aAAa,GAAG;gBACpB,YAAY,OAAO,CAAC,OAAO,EAAE;gBAC7B,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAClC,aAAa,OAAO,CAAC,QAAQ,EAAE;gBAC/B,UAAU,OAAO,CAAC,KAAK,EAAE;gBACzB,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;aACpF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;YAE1C,uDAAuD;YACvD,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAChC,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;gBAC5B,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE;oBAClC,IAAI,EAAE,cAAc;oBACpB,qEAAqE;oBACrE,oEAAoE;oBACpE,qDAAqD;oBACrD,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC/D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;QACpE,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,IAAiB;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,YAAY;YAAE,OAAO;QAE1C,yBAAyB;QACzB,MAAM,MAAM,GAAG,OAAO;aACnB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aACjD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE7D,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,YAAY,GAAG,EAAE,CAAC,CAAC;QACrE,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;;AAGH,qBAAqB;AACrB,IAAI,eAAe,GAAuB,IAAI,CAAC;AAE/C,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC"}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Hook contract (`src/gateway/hook-contract.ts`).
3
+ *
4
+ * WHY THIS EXISTS. Third-party plugins in the Claude Code ecosystem assume a
5
+ * hook contract (`SessionStart`, `PreToolUse`, …) that runs THEIR code. nuvira
6
+ * deliberately has no remote-code hook API — that is a remote-execution surface
7
+ * (see `docs/DESIGN-skill-plugin-ecosystem.md` §5.2/§6). But the *value* people
8
+ * want from hooks is real, and nuvira already fires four lifecycle seams
9
+ * internally (`src/gateway/hooks.ts`). This module is the missing half: a
10
+ * DECLARATIVE contract an operator can write from the dashboard, bound to those
11
+ * existing seams, with a fixed allow-list of native actions.
12
+ *
13
+ * POSITIONING — what a hook IS and IS NOT here:
14
+ * - A hook is a RULE: "when <event> matches <when>, do <action>". Data, not code.
15
+ * - The action set is a fixed allow-list enforced natively by nuvira
16
+ * ({@link HookActionKind}). There is deliberately no `run-command`, no
17
+ * `script`, no `mcp`. A hook can DENY a tool call, NOTIFY, or SCAN the call's
18
+ * arguments for secret shapes — nothing else.
19
+ * - Therefore installing a hook can never execute third-party code, and the
20
+ * worst a rogue declaration can do is block a call or log a line. That is
21
+ * the whole reason this is safe to expose to an operator.
22
+ *
23
+ * HOW IT WORKS (the four seams are defined in hooks.ts; this module binds to them):
24
+ * before_tool_call → can `deny` (veto) or `notify` or `scan-args` (+deny-on-hit)
25
+ * after_tool_call → `notify` or `scan-args` on the result
26
+ * failed_tool_call → `notify` on the failure
27
+ * on_session_end → `notify` with the run's summary
28
+ *
29
+ * Declarations persist as JSON at `<config-dir>/hooks.json` and are reloaded in
30
+ * memory on every save, so a dashboard edit takes effect without a restart. One
31
+ * handler per event is registered on the shared registry; it reads the current
32
+ * declarations on each call. Enforcement FAILS OPEN exactly like the underlying
33
+ * registry: a broken declaration is reported, never fatal.
34
+ */
35
+ import type { HookDecision, HookEvent } from './hooks.js';
36
+ /** The four lifecycle seams, in the order the runtime fires them. */
37
+ export declare const HOOK_EVENTS: HookEvent[];
38
+ /** One human sentence per seam — shown verbatim in the dashboard. */
39
+ export declare const HOOK_EVENT_DESCRIPTIONS: Record<HookEvent, string>;
40
+ /**
41
+ * The action allow-list. This union IS the contract's entire power: adding a
42
+ * member here is the only way to give hooks a new capability, and every member
43
+ * is implemented natively below.
44
+ */
45
+ export type HookAction =
46
+ /** Veto a call (before_tool_call only). */
47
+ {
48
+ kind: 'deny';
49
+ reason?: string;
50
+ }
51
+ /** Emit a line (all seams). `{tool}`/`{surface}`/`{event}` are interpolated. */
52
+ | {
53
+ kind: 'notify';
54
+ message: string;
55
+ }
56
+ /** Scan the call's args (or result) for secret shapes. Tool seams only. */
57
+ | {
58
+ kind: 'scan-args';
59
+ denyOnHit?: boolean;
60
+ reason?: string;
61
+ };
62
+ export type HookActionKind = HookAction['kind'];
63
+ export declare const HOOK_ACTION_KINDS: HookActionKind[];
64
+ export declare const HOOK_ACTION_DESCRIPTIONS: Record<HookActionKind, string>;
65
+ /** A shallow matcher over the call context. An absent field matches anything. */
66
+ export interface HookMatcher {
67
+ /** Glob over the tool name: `run_terminal`, `edit_*`, `*`. */
68
+ tool?: string;
69
+ /** Glob over the surface label (`cli-chat`, `subagent`, …). */
70
+ surface?: string;
71
+ /** Prefix match on the working directory. */
72
+ cwdPrefix?: string;
73
+ /** Shallow arg checks: arg name → glob over the stringified value. */
74
+ argsMatch?: Record<string, string>;
75
+ }
76
+ /** One declared hook. */
77
+ export interface HookDeclaration {
78
+ /** Stable slug, unique within the file. */
79
+ id: string;
80
+ /** Human label shown in the dashboard. */
81
+ label: string;
82
+ event: HookEvent;
83
+ enabled: boolean;
84
+ /** Optional matcher; absent means "every call of this seam". */
85
+ when?: HookMatcher;
86
+ action: HookAction;
87
+ /** Where it came from: 'user' (dashboard/CLI) or 'builtin'. */
88
+ source?: 'user' | 'builtin';
89
+ /** Epoch ms, best-effort metadata. */
90
+ updatedAt?: number;
91
+ }
92
+ /**
93
+ * Validate one declaration.
94
+ *
95
+ * Beyond field shapes this enforces the two cross-field rules of the contract,
96
+ * because both would otherwise be silent no-ops:
97
+ * - `deny` is only meaningful on `before_tool_call` (the other seams cannot
98
+ * stop anything), so it is rejected elsewhere rather than ignored;
99
+ * - `scan-args` is about a tool call, so it is rejected on `on_session_end`.
100
+ */
101
+ export declare function validateHookDeclaration(value: unknown): {
102
+ ok: true;
103
+ hook: HookDeclaration;
104
+ } | {
105
+ ok: false;
106
+ error: string;
107
+ };
108
+ /** Validate a whole list, catching duplicate ids. */
109
+ export declare function validateHookDeclarations(value: unknown): {
110
+ ok: true;
111
+ declarations: HookDeclaration[];
112
+ } | {
113
+ ok: false;
114
+ error: string;
115
+ };
116
+ /** Compile a glob (`*` only) to a case-insensitive anchored regex. */
117
+ export declare function globToRegExp(glob: string): RegExp;
118
+ /** True when `glob` matches `value` (missing value only matches a bare `*`). */
119
+ export declare function globMatches(glob: string, value: string | undefined): boolean;
120
+ /**
121
+ * Does this declaration's `when` match the call context? A context is `any`
122
+ * because the four seams carry different fields; only the fields a matcher
123
+ * names are read, which keeps the predicate identical across seams.
124
+ */
125
+ export declare function matchesHookDeclaration(hook: HookDeclaration, ctx: any): boolean;
126
+ /**
127
+ * Apply one declaration's action to a context.
128
+ *
129
+ * Returns a {@link HookDecision} only when the action is a `deny` (or a
130
+ * `scan-args` hit with `denyOnHit` on `before_tool_call`). Every other action
131
+ * is a side effect (a log line, a `report` note) and returns null, so the
132
+ * registry's "first denial wins" rule is preserved exactly.
133
+ */
134
+ export declare function applyHookDeclaration(hook: HookDeclaration, ctx: any): HookDecision | null;
135
+ /** Evaluate every declaration for one event; returns the first denial or null. */
136
+ export declare function evaluateDeclarations(declarations: HookDeclaration[], event: HookEvent, ctx: any): HookDecision | null;
137
+ /** `<config-dir>/hooks.json` (NUVIRA_CONFIG_DIR aware, like contacts.json). */
138
+ export declare function hookDeclarationsFile(): string;
139
+ /** Read declarations from disk. Missing/corrupt → [] (never throws). */
140
+ export declare function readHookDeclarations(): HookDeclaration[];
141
+ /** Persist declarations (best-effort — a failed write never breaks the caller). */
142
+ export declare function writeHookDeclarations(declarations: HookDeclaration[]): void;
143
+ /** The declarations currently in force (loads from disk on first use). */
144
+ export declare function getHookDeclarations(): HookDeclaration[];
145
+ /**
146
+ * Replace the in-force declarations. Validates first; on success persists and
147
+ * swaps the in-memory list (so the next tool call sees the change). Returns the
148
+ * validation error unchanged on failure — never a silent partial save.
149
+ */
150
+ export declare function setHookDeclarations(next: unknown): {
151
+ ok: true;
152
+ declarations: HookDeclaration[];
153
+ } | {
154
+ ok: false;
155
+ error: string;
156
+ };
157
+ /** Test/CLI helper: drop the cache so the next read hits disk. */
158
+ export declare function resetHookDeclarationsCache(): void;
159
+ /** The minimal slice of the hook registry this module needs. */
160
+ export interface HookRegistrar {
161
+ register(event: HookEvent, handler: (ctx: any) => void | HookDecision | Promise<void | HookDecision>): void;
162
+ }
163
+ /**
164
+ * Register one handler per seam on `registrar`. Idempotent per registrar
165
+ * instance, so importing the gateway more than once cannot double-fire hooks.
166
+ *
167
+ * Each handler reads {@link getHookDeclarations} at call time, so an edit from
168
+ * the dashboard is live on the next call without re-registering.
169
+ */
170
+ export declare function installDeclaredHooks(registrar: HookRegistrar): void;
171
+ /** Test helper: forget which registrar was installed. */
172
+ export declare function resetDeclaredHooksInstall(): void;
173
+ //# sourceMappingURL=hook-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-contract.d.ts","sourceRoot":"","sources":["../../src/gateway/hook-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI1D,qEAAqE;AACrE,eAAO,MAAM,WAAW,EAAE,SAAS,EAKlC,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAK7D,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,UAAU;AACpB,2CAA2C;AACzC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AACnC,gFAAgF;GAC9E;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACrC,2EAA2E;GACzE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;AAEhD,eAAO,MAAM,iBAAiB,EAAE,cAAc,EAAoC,CAAC;AAEnF,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAInE,CAAC;AAEF,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,yBAAyB;AACzB,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAsCD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAa1H;AAED,qDAAqD;AACrD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,GACb;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,eAAe,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAY9E;AAID,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAG5E;AAYD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAgB/E;AAwBD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,GAAG,YAAY,GAAG,IAAI,CAqCzF;AAED,kFAAkF;AAClF,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,YAAY,GAAG,IAAI,CAOrH;AAID,+EAA+E;AAC/E,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wEAAwE;AACxE,wBAAgB,oBAAoB,IAAI,eAAe,EAAE,CAQxD;AAED,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,eAAe,EAAE,GAAG,IAAI,CAQ3E;AAOD,0EAA0E;AAC1E,wBAAgB,mBAAmB,IAAI,eAAe,EAAE,CAMvD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,eAAe,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAO/H;AAED,kEAAkE;AAClE,wBAAgB,0BAA0B,IAAI,IAAI,CAGjD;AAID,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,YAAY,GAAG,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,GAAG,IAAI,CAAC;CAC7G;AAID;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,CAkBnE;AAED,yDAAyD;AACzD,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
@@ -0,0 +1,352 @@
1
+ /**
2
+ * Hook contract (`src/gateway/hook-contract.ts`).
3
+ *
4
+ * WHY THIS EXISTS. Third-party plugins in the Claude Code ecosystem assume a
5
+ * hook contract (`SessionStart`, `PreToolUse`, …) that runs THEIR code. nuvira
6
+ * deliberately has no remote-code hook API — that is a remote-execution surface
7
+ * (see `docs/DESIGN-skill-plugin-ecosystem.md` §5.2/§6). But the *value* people
8
+ * want from hooks is real, and nuvira already fires four lifecycle seams
9
+ * internally (`src/gateway/hooks.ts`). This module is the missing half: a
10
+ * DECLARATIVE contract an operator can write from the dashboard, bound to those
11
+ * existing seams, with a fixed allow-list of native actions.
12
+ *
13
+ * POSITIONING — what a hook IS and IS NOT here:
14
+ * - A hook is a RULE: "when <event> matches <when>, do <action>". Data, not code.
15
+ * - The action set is a fixed allow-list enforced natively by nuvira
16
+ * ({@link HookActionKind}). There is deliberately no `run-command`, no
17
+ * `script`, no `mcp`. A hook can DENY a tool call, NOTIFY, or SCAN the call's
18
+ * arguments for secret shapes — nothing else.
19
+ * - Therefore installing a hook can never execute third-party code, and the
20
+ * worst a rogue declaration can do is block a call or log a line. That is
21
+ * the whole reason this is safe to expose to an operator.
22
+ *
23
+ * HOW IT WORKS (the four seams are defined in hooks.ts; this module binds to them):
24
+ * before_tool_call → can `deny` (veto) or `notify` or `scan-args` (+deny-on-hit)
25
+ * after_tool_call → `notify` or `scan-args` on the result
26
+ * failed_tool_call → `notify` on the failure
27
+ * on_session_end → `notify` with the run's summary
28
+ *
29
+ * Declarations persist as JSON at `<config-dir>/hooks.json` and are reloaded in
30
+ * memory on every save, so a dashboard edit takes effect without a restart. One
31
+ * handler per event is registered on the shared registry; it reads the current
32
+ * declarations on each call. Enforcement FAILS OPEN exactly like the underlying
33
+ * registry: a broken declaration is reported, never fatal.
34
+ */
35
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
36
+ import { dirname, join } from 'node:path';
37
+ import { z } from 'zod';
38
+ import { resolveBuffConfigDir } from '../config/paths.js';
39
+ import { logger } from '../utils/logger.js';
40
+ import { scanText } from '../security/secret-scan.js';
41
+ // ─── The allow-list ─────────────────────────────────────────────────────────
42
+ /** The four lifecycle seams, in the order the runtime fires them. */
43
+ export const HOOK_EVENTS = [
44
+ 'before_tool_call',
45
+ 'after_tool_call',
46
+ 'failed_tool_call',
47
+ 'on_session_end',
48
+ ];
49
+ /** One human sentence per seam — shown verbatim in the dashboard. */
50
+ export const HOOK_EVENT_DESCRIPTIONS = {
51
+ before_tool_call: 'Runs BEFORE a tool call. The only seam that can DENY (stop) the call.',
52
+ after_tool_call: 'Runs after a tool call SUCCEEDS, with the result text and duration.',
53
+ failed_tool_call: 'Runs after a tool call FAILS (threw, or returned a failure), with the error.',
54
+ on_session_end: 'Runs when a pipeline run finishes, with its success flag and summary.',
55
+ };
56
+ export const HOOK_ACTION_KINDS = ['deny', 'notify', 'scan-args'];
57
+ export const HOOK_ACTION_DESCRIPTIONS = {
58
+ deny: 'Stop the tool call. Only available on before_tool_call.',
59
+ notify: 'Write a line to the log (with {tool} / {surface} / {event} interpolated).',
60
+ 'scan-args': 'Scan the call arguments (or the tool result) for secret-shaped values.',
61
+ };
62
+ // ─── Validation ─────────────────────────────────────────────────────────────
63
+ const ID_RE = /^[a-z0-9][a-z0-9-]{0,63}$/;
64
+ const matcherSchema = z
65
+ .object({
66
+ tool: z.string().max(120).optional(),
67
+ surface: z.string().max(120).optional(),
68
+ cwdPrefix: z.string().max(512).optional(),
69
+ argsMatch: z.record(z.string(), z.string().max(200)).optional(),
70
+ })
71
+ .strict();
72
+ const actionSchema = z.discriminatedUnion('kind', [
73
+ z.object({ kind: z.literal('deny'), reason: z.string().max(500).optional() }).strict(),
74
+ z.object({ kind: z.literal('notify'), message: z.string().min(1).max(500) }).strict(),
75
+ z.object({
76
+ kind: z.literal('scan-args'),
77
+ denyOnHit: z.boolean().optional(),
78
+ reason: z.string().max(500).optional(),
79
+ }).strict(),
80
+ ]);
81
+ const declarationSchema = z
82
+ .object({
83
+ id: z.string().regex(ID_RE, 'id must be lowercase letters, digits and hyphens (e.g. "block-rm-rf")'),
84
+ label: z.string().min(1).max(120),
85
+ event: z.enum(['before_tool_call', 'after_tool_call', 'failed_tool_call', 'on_session_end']),
86
+ enabled: z.boolean(),
87
+ when: matcherSchema.optional(),
88
+ action: actionSchema,
89
+ source: z.enum(['user', 'builtin']).optional(),
90
+ updatedAt: z.number().optional(),
91
+ })
92
+ .strict();
93
+ /**
94
+ * Validate one declaration.
95
+ *
96
+ * Beyond field shapes this enforces the two cross-field rules of the contract,
97
+ * because both would otherwise be silent no-ops:
98
+ * - `deny` is only meaningful on `before_tool_call` (the other seams cannot
99
+ * stop anything), so it is rejected elsewhere rather than ignored;
100
+ * - `scan-args` is about a tool call, so it is rejected on `on_session_end`.
101
+ */
102
+ export function validateHookDeclaration(value) {
103
+ const parsed = declarationSchema.safeParse(value);
104
+ if (!parsed.success) {
105
+ return { ok: false, error: parsed.error.issues.map((i) => `${i.path.join('.') || 'hook'}: ${i.message}`).join('; ') };
106
+ }
107
+ const hook = parsed.data;
108
+ if (hook.action.kind === 'deny' && hook.event !== 'before_tool_call') {
109
+ return { ok: false, error: `"${hook.id}": deny is only available on before_tool_call (${hook.event} cannot stop a call).` };
110
+ }
111
+ if (hook.action.kind === 'scan-args' && hook.event === 'on_session_end') {
112
+ return { ok: false, error: `"${hook.id}": scan-args needs a tool call, not on_session_end.` };
113
+ }
114
+ return { ok: true, hook };
115
+ }
116
+ /** Validate a whole list, catching duplicate ids. */
117
+ export function validateHookDeclarations(value) {
118
+ if (!Array.isArray(value))
119
+ return { ok: false, error: 'hooks must be an array.' };
120
+ const out = [];
121
+ const seen = new Set();
122
+ for (const item of value) {
123
+ const res = validateHookDeclaration(item);
124
+ if (!res.ok)
125
+ return { ok: false, error: res.error };
126
+ if (seen.has(res.hook.id))
127
+ return { ok: false, error: `duplicate hook id: "${res.hook.id}".` };
128
+ seen.add(res.hook.id);
129
+ out.push(res.hook);
130
+ }
131
+ return { ok: true, declarations: out };
132
+ }
133
+ // ─── Matching ───────────────────────────────────────────────────────────────
134
+ /** Compile a glob (`*` only) to a case-insensitive anchored regex. */
135
+ export function globToRegExp(glob) {
136
+ const escaped = glob.replace(/[.*+?^${}()|[\]\\]/g, '\\$&').replace(/\\\*/g, '.*');
137
+ return new RegExp(`^${escaped}$`, 'i');
138
+ }
139
+ /** True when `glob` matches `value` (missing value only matches a bare `*`). */
140
+ export function globMatches(glob, value) {
141
+ if (value === undefined || value === '')
142
+ return glob === '*';
143
+ return globToRegExp(glob).test(value);
144
+ }
145
+ function stringifyArg(value) {
146
+ if (value === undefined || value === null)
147
+ return '';
148
+ if (typeof value === 'string')
149
+ return value;
150
+ try {
151
+ return JSON.stringify(value) ?? '';
152
+ }
153
+ catch {
154
+ return String(value);
155
+ }
156
+ }
157
+ /**
158
+ * Does this declaration's `when` match the call context? A context is `any`
159
+ * because the four seams carry different fields; only the fields a matcher
160
+ * names are read, which keeps the predicate identical across seams.
161
+ */
162
+ export function matchesHookDeclaration(hook, ctx) {
163
+ const when = hook.when;
164
+ if (!when)
165
+ return true;
166
+ if (when.tool !== undefined && !globMatches(when.tool, typeof ctx?.tool === 'string' ? ctx.tool : ''))
167
+ return false;
168
+ if (when.surface !== undefined && !globMatches(when.surface, typeof ctx?.surface === 'string' ? ctx.surface : ''))
169
+ return false;
170
+ if (when.cwdPrefix !== undefined) {
171
+ const cwd = typeof ctx?.cwd === 'string' ? ctx.cwd : '';
172
+ if (!cwd.startsWith(when.cwdPrefix))
173
+ return false;
174
+ }
175
+ if (when.argsMatch) {
176
+ for (const [key, glob] of Object.entries(when.argsMatch)) {
177
+ const arg = ctx?.args && typeof ctx.args === 'object' ? ctx.args[key] : undefined;
178
+ if (!globMatches(glob, stringifyArg(arg)))
179
+ return false;
180
+ }
181
+ }
182
+ return true;
183
+ }
184
+ // ─── Evaluation (the native action implementations) ─────────────────────────
185
+ function interpolate(template, hook, ctx) {
186
+ return template
187
+ .replace(/\{tool\}/g, typeof ctx?.tool === 'string' ? ctx.tool : '')
188
+ .replace(/\{surface\}/g, typeof ctx?.surface === 'string' ? ctx.surface : '')
189
+ .replace(/\{event\}/g, hook.event);
190
+ }
191
+ /** Scan a text blob for secret shapes; returns a human count summary or null. */
192
+ function scanForSecrets(hook, text) {
193
+ if (!text)
194
+ return null;
195
+ try {
196
+ const hits = scanText(text, `hook:${hook.id}`);
197
+ if (hits.length === 0)
198
+ return null;
199
+ const kinds = [...new Set(hits.map((h) => h.label))].join(', ');
200
+ return `${hits.length} secret-shaped value(s) (${kinds}) — values masked.`;
201
+ }
202
+ catch {
203
+ return null;
204
+ }
205
+ }
206
+ /**
207
+ * Apply one declaration's action to a context.
208
+ *
209
+ * Returns a {@link HookDecision} only when the action is a `deny` (or a
210
+ * `scan-args` hit with `denyOnHit` on `before_tool_call`). Every other action
211
+ * is a side effect (a log line, a `report` note) and returns null, so the
212
+ * registry's "first denial wins" rule is preserved exactly.
213
+ */
214
+ export function applyHookDeclaration(hook, ctx) {
215
+ if (!hook.enabled)
216
+ return null;
217
+ if (!matchesHookDeclaration(hook, ctx))
218
+ return null;
219
+ switch (hook.action.kind) {
220
+ case 'notify': {
221
+ const message = interpolate(hook.action.message, hook, ctx);
222
+ logger.info(`hook '${hook.id}': ${message}`);
223
+ ctx?.report?.(`hook '${hook.id}': ${message}`);
224
+ return null;
225
+ }
226
+ case 'deny': {
227
+ const reason = hook.action.reason ? interpolate(hook.action.reason, hook, ctx) : undefined;
228
+ return { deny: true, reason: reason ?? `blocked by hook '${hook.id}'`, by: `hook:${hook.id}` };
229
+ }
230
+ case 'scan-args': {
231
+ // Scan the arguments before a call, or the result after a call.
232
+ const payload = hook.event === 'before_tool_call'
233
+ ? stringifyArg(ctx?.args)
234
+ : typeof ctx?.result === 'string'
235
+ ? ctx.result
236
+ : stringifyArg(ctx?.args);
237
+ const summary = scanForSecrets(hook, payload);
238
+ if (!summary)
239
+ return null;
240
+ const message = `hook '${hook.id}': ${summary}`;
241
+ if (hook.action.denyOnHit && hook.event === 'before_tool_call') {
242
+ const reason = hook.action.reason ? interpolate(hook.action.reason, hook, ctx) : `${summary} — blocked before running.`;
243
+ return { deny: true, reason, by: `hook:${hook.id}` };
244
+ }
245
+ logger.warn(message);
246
+ ctx?.report?.(message);
247
+ return null;
248
+ }
249
+ default:
250
+ return null;
251
+ }
252
+ }
253
+ /** Evaluate every declaration for one event; returns the first denial or null. */
254
+ export function evaluateDeclarations(declarations, event, ctx) {
255
+ for (const hook of declarations) {
256
+ if (hook.event !== event)
257
+ continue;
258
+ const decision = applyHookDeclaration(hook, ctx);
259
+ if (decision)
260
+ return decision;
261
+ }
262
+ return null;
263
+ }
264
+ // ─── Persistence ────────────────────────────────────────────────────────────
265
+ /** `<config-dir>/hooks.json` (NUVIRA_CONFIG_DIR aware, like contacts.json). */
266
+ export function hookDeclarationsFile() {
267
+ return join(resolveBuffConfigDir(), 'hooks.json');
268
+ }
269
+ /** Read declarations from disk. Missing/corrupt → [] (never throws). */
270
+ export function readHookDeclarations() {
271
+ try {
272
+ const parsed = JSON.parse(readFileSync(hookDeclarationsFile(), 'utf-8'));
273
+ const validated = validateHookDeclarations(parsed.hooks ?? []);
274
+ return validated.ok ? validated.declarations : [];
275
+ }
276
+ catch {
277
+ return [];
278
+ }
279
+ }
280
+ /** Persist declarations (best-effort — a failed write never breaks the caller). */
281
+ export function writeHookDeclarations(declarations) {
282
+ try {
283
+ const file = hookDeclarationsFile();
284
+ mkdirSync(dirname(file), { recursive: true });
285
+ writeFileSync(file, JSON.stringify({ version: 1, hooks: declarations }, null, 2), 'utf-8');
286
+ }
287
+ catch {
288
+ /* best-effort */
289
+ }
290
+ }
291
+ // ─── In-memory registry (the runtime reads this) ────────────────────────────
292
+ let declarations = [];
293
+ let loadedOnce = false;
294
+ /** The declarations currently in force (loads from disk on first use). */
295
+ export function getHookDeclarations() {
296
+ if (!loadedOnce) {
297
+ declarations = readHookDeclarations();
298
+ loadedOnce = true;
299
+ }
300
+ return declarations;
301
+ }
302
+ /**
303
+ * Replace the in-force declarations. Validates first; on success persists and
304
+ * swaps the in-memory list (so the next tool call sees the change). Returns the
305
+ * validation error unchanged on failure — never a silent partial save.
306
+ */
307
+ export function setHookDeclarations(next) {
308
+ const validated = validateHookDeclarations(next);
309
+ if (!validated.ok)
310
+ return validated;
311
+ declarations = validated.declarations;
312
+ loadedOnce = true;
313
+ writeHookDeclarations(declarations);
314
+ return { ok: true, declarations };
315
+ }
316
+ /** Test/CLI helper: drop the cache so the next read hits disk. */
317
+ export function resetHookDeclarationsCache() {
318
+ declarations = [];
319
+ loadedOnce = false;
320
+ }
321
+ let installedOn = null;
322
+ /**
323
+ * Register one handler per seam on `registrar`. Idempotent per registrar
324
+ * instance, so importing the gateway more than once cannot double-fire hooks.
325
+ *
326
+ * Each handler reads {@link getHookDeclarations} at call time, so an edit from
327
+ * the dashboard is live on the next call without re-registering.
328
+ */
329
+ export function installDeclaredHooks(registrar) {
330
+ if (installedOn === registrar)
331
+ return;
332
+ installedOn = registrar;
333
+ getHookDeclarations(); // warm from disk
334
+ registrar.register('before_tool_call', (ctx) => evaluateDeclarations(getHookDeclarations(), 'before_tool_call', ctx) ?? undefined);
335
+ registrar.register('after_tool_call', (ctx) => {
336
+ evaluateDeclarations(getHookDeclarations(), 'after_tool_call', ctx);
337
+ return undefined;
338
+ });
339
+ registrar.register('failed_tool_call', (ctx) => {
340
+ evaluateDeclarations(getHookDeclarations(), 'failed_tool_call', ctx);
341
+ return undefined;
342
+ });
343
+ registrar.register('on_session_end', (ctx) => {
344
+ evaluateDeclarations(getHookDeclarations(), 'on_session_end', ctx);
345
+ return undefined;
346
+ });
347
+ }
348
+ /** Test helper: forget which registrar was installed. */
349
+ export function resetDeclaredHooksInstall() {
350
+ installedOn = null;
351
+ }
352
+ //# sourceMappingURL=hook-contract.js.map