@kubbisec/ai-win32-x64 0.1.3 → 0.1.5

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 (218) hide show
  1. package/bin/kubbisec.exe +0 -0
  2. package/bundled/assets/terminal/banner-compact.ansi +7 -0
  3. package/bundled/assets/terminal/banner-wide.ansi +10 -0
  4. package/bundled/assets/terminal/logotipo-compact-fallback.ansi +7 -0
  5. package/bundled/assets/terminal/logotipo-compact.ansi +1 -0
  6. package/bundled/assets/terminal/logotipo-compact.png +0 -0
  7. package/bundled/assets/terminal/logotipo-wide-fallback.ansi +10 -0
  8. package/bundled/assets/terminal/logotipo-wide.ansi +1 -0
  9. package/bundled/assets/terminal/logotipo-wide.png +0 -0
  10. package/bundled/assets/terminal/mark.ansi +7 -0
  11. package/bundled/clarify/clarify-gate.d.ts +27 -0
  12. package/bundled/clarify/clarify-gate.d.ts.map +1 -0
  13. package/bundled/clarify/clarify-gate.js +152 -0
  14. package/bundled/clarify/clarify-gate.js.map +1 -0
  15. package/bundled/clarify/clarify-ui-state.d.ts +12 -0
  16. package/bundled/clarify/clarify-ui-state.d.ts.map +1 -0
  17. package/bundled/clarify/clarify-ui-state.js +27 -0
  18. package/bundled/clarify/clarify-ui-state.js.map +1 -0
  19. package/bundled/clarify/parse-clarify-answer.d.ts +16 -0
  20. package/bundled/clarify/parse-clarify-answer.d.ts.map +1 -0
  21. package/bundled/clarify/parse-clarify-answer.js +22 -0
  22. package/bundled/clarify/parse-clarify-answer.js.map +1 -0
  23. package/bundled/clarify/question-format.d.ts +36 -0
  24. package/bundled/clarify/question-format.d.ts.map +1 -0
  25. package/bundled/clarify/question-format.js +150 -0
  26. package/bundled/clarify/question-format.js.map +1 -0
  27. package/bundled/clarify/questionnaire-tool.d.ts +25 -0
  28. package/bundled/clarify/questionnaire-tool.d.ts.map +1 -0
  29. package/bundled/clarify/questionnaire-tool.js +157 -0
  30. package/bundled/clarify/questionnaire-tool.js.map +1 -0
  31. package/bundled/clarify/session-questionnaire.d.ts +23 -0
  32. package/bundled/clarify/session-questionnaire.d.ts.map +1 -0
  33. package/bundled/clarify/session-questionnaire.js +319 -0
  34. package/bundled/clarify/session-questionnaire.js.map +1 -0
  35. package/bundled/clarify/session-questionnaire.types.d.ts +45 -0
  36. package/bundled/clarify/session-questionnaire.types.d.ts.map +1 -0
  37. package/bundled/clarify/session-questionnaire.types.js +13 -0
  38. package/bundled/clarify/session-questionnaire.types.js.map +1 -0
  39. package/bundled/config/config.d.ts +14 -0
  40. package/bundled/config/config.d.ts.map +1 -0
  41. package/bundled/config/config.js +58 -0
  42. package/bundled/config/config.js.map +1 -0
  43. package/bundled/config/ensure-kubbisec-project-settings.d.ts +20 -0
  44. package/bundled/config/ensure-kubbisec-project-settings.d.ts.map +1 -0
  45. package/bundled/config/ensure-kubbisec-project-settings.js +65 -0
  46. package/bundled/config/ensure-kubbisec-project-settings.js.map +1 -0
  47. package/bundled/config/feature-flags.d.ts +2 -0
  48. package/bundled/config/feature-flags.d.ts.map +1 -0
  49. package/bundled/config/feature-flags.js +2 -0
  50. package/bundled/config/feature-flags.js.map +1 -0
  51. package/bundled/config/format-kubbisec-footer-status.d.ts +2 -0
  52. package/bundled/config/format-kubbisec-footer-status.d.ts.map +1 -0
  53. package/bundled/config/format-kubbisec-footer-status.js +21 -0
  54. package/bundled/config/format-kubbisec-footer-status.js.map +1 -0
  55. package/bundled/config/resolve-agents-context-file.d.ts +4 -0
  56. package/bundled/config/resolve-agents-context-file.d.ts.map +1 -0
  57. package/bundled/config/resolve-agents-context-file.js +48 -0
  58. package/bundled/config/resolve-agents-context-file.js.map +1 -0
  59. package/bundled/config/resource-budget.d.ts +17 -0
  60. package/bundled/config/resource-budget.d.ts.map +1 -0
  61. package/bundled/config/resource-budget.js +35 -0
  62. package/bundled/config/resource-budget.js.map +1 -0
  63. package/bundled/copy/kubbisec-shell-copy.d.ts +8 -0
  64. package/bundled/copy/kubbisec-shell-copy.d.ts.map +1 -0
  65. package/bundled/copy/kubbisec-shell-copy.js +8 -0
  66. package/bundled/copy/kubbisec-shell-copy.js.map +1 -0
  67. package/bundled/edit-format.md +17 -0
  68. package/bundled/extensions/cli-local-shared.d.ts +26 -0
  69. package/bundled/extensions/cli-local-shared.d.ts.map +1 -0
  70. package/bundled/extensions/cli-local-shared.js +97 -0
  71. package/bundled/extensions/cli-local-shared.js.map +1 -0
  72. package/bundled/extensions/kubbisec-aspm-local.extension.d.ts +17 -0
  73. package/bundled/extensions/kubbisec-aspm-local.extension.d.ts.map +1 -0
  74. package/bundled/extensions/kubbisec-aspm-local.extension.js +134 -0
  75. package/bundled/extensions/kubbisec-aspm-local.extension.js.map +1 -0
  76. package/bundled/extensions/kubbisec-brand.extension.d.ts +20 -0
  77. package/bundled/extensions/kubbisec-brand.extension.d.ts.map +1 -0
  78. package/bundled/extensions/kubbisec-brand.extension.js +84 -0
  79. package/bundled/extensions/kubbisec-brand.extension.js.map +1 -0
  80. package/bundled/extensions/kubbisec-byok-provider.extension.d.ts +30 -0
  81. package/bundled/extensions/kubbisec-byok-provider.extension.d.ts.map +1 -0
  82. package/bundled/extensions/kubbisec-byok-provider.extension.js +44 -0
  83. package/bundled/extensions/kubbisec-byok-provider.extension.js.map +1 -0
  84. package/bundled/extensions/kubbisec-clarify.extension.d.ts +45 -0
  85. package/bundled/extensions/kubbisec-clarify.extension.d.ts.map +1 -0
  86. package/bundled/extensions/kubbisec-clarify.extension.js +305 -0
  87. package/bundled/extensions/kubbisec-clarify.extension.js.map +1 -0
  88. package/bundled/extensions/kubbisec-footer.extension.d.ts +64 -0
  89. package/bundled/extensions/kubbisec-footer.extension.d.ts.map +1 -0
  90. package/bundled/extensions/kubbisec-footer.extension.js +187 -0
  91. package/bundled/extensions/kubbisec-footer.extension.js.map +1 -0
  92. package/bundled/extensions/kubbisec-github-local.extension.d.ts +23 -0
  93. package/bundled/extensions/kubbisec-github-local.extension.d.ts.map +1 -0
  94. package/bundled/extensions/kubbisec-github-local.extension.js +105 -0
  95. package/bundled/extensions/kubbisec-github-local.extension.js.map +1 -0
  96. package/bundled/extensions/kubbisec-memory.extension.d.ts +12 -0
  97. package/bundled/extensions/kubbisec-memory.extension.d.ts.map +1 -0
  98. package/bundled/extensions/kubbisec-memory.extension.js +107 -0
  99. package/bundled/extensions/kubbisec-memory.extension.js.map +1 -0
  100. package/bundled/extensions/kubbisec-naus-local.extension.d.ts +17 -0
  101. package/bundled/extensions/kubbisec-naus-local.extension.d.ts.map +1 -0
  102. package/bundled/extensions/kubbisec-naus-local.extension.js +125 -0
  103. package/bundled/extensions/kubbisec-naus-local.extension.js.map +1 -0
  104. package/bundled/extensions/kubbisec-platform-tools.extension.d.ts +27 -0
  105. package/bundled/extensions/kubbisec-platform-tools.extension.d.ts.map +1 -0
  106. package/bundled/extensions/kubbisec-platform-tools.extension.js +144 -0
  107. package/bundled/extensions/kubbisec-platform-tools.extension.js.map +1 -0
  108. package/bundled/extensions/kubbisec-runtime-status.extension.d.ts +13 -0
  109. package/bundled/extensions/kubbisec-runtime-status.extension.d.ts.map +1 -0
  110. package/bundled/extensions/kubbisec-runtime-status.extension.js +18 -0
  111. package/bundled/extensions/kubbisec-runtime-status.extension.js.map +1 -0
  112. package/bundled/extensions/kubbisec-scope.extension.d.ts +14 -0
  113. package/bundled/extensions/kubbisec-scope.extension.d.ts.map +1 -0
  114. package/bundled/extensions/kubbisec-scope.extension.js +14 -0
  115. package/bundled/extensions/kubbisec-scope.extension.js.map +1 -0
  116. package/bundled/extensions/kubbisec-skill-mentions.extension.d.ts +24 -0
  117. package/bundled/extensions/kubbisec-skill-mentions.extension.d.ts.map +1 -0
  118. package/bundled/extensions/kubbisec-skill-mentions.extension.js +54 -0
  119. package/bundled/extensions/kubbisec-skill-mentions.extension.js.map +1 -0
  120. package/bundled/extensions/kubbisec-skill-telemetry.extension.d.ts +6 -0
  121. package/bundled/extensions/kubbisec-skill-telemetry.extension.d.ts.map +1 -0
  122. package/bundled/extensions/kubbisec-skill-telemetry.extension.js +85 -0
  123. package/bundled/extensions/kubbisec-skill-telemetry.extension.js.map +1 -0
  124. package/bundled/extensions/kubbisec-ui.extension.d.ts +6 -0
  125. package/bundled/extensions/kubbisec-ui.extension.d.ts.map +1 -0
  126. package/bundled/extensions/kubbisec-ui.extension.js +116 -0
  127. package/bundled/extensions/kubbisec-ui.extension.js.map +1 -0
  128. package/bundled/extensions/kubbisec-workflow.extension.d.ts +38 -0
  129. package/bundled/extensions/kubbisec-workflow.extension.d.ts.map +1 -0
  130. package/bundled/extensions/kubbisec-workflow.extension.js +169 -0
  131. package/bundled/extensions/kubbisec-workflow.extension.js.map +1 -0
  132. package/bundled/gate-system.md +27 -0
  133. package/bundled/node_modules/@kubbisec/chat-memory/dist/client.d.ts +20 -0
  134. package/bundled/node_modules/@kubbisec/chat-memory/dist/client.d.ts.map +1 -0
  135. package/bundled/node_modules/@kubbisec/chat-memory/dist/client.js +121 -0
  136. package/bundled/node_modules/@kubbisec/chat-memory/dist/client.js.map +1 -0
  137. package/bundled/node_modules/@kubbisec/chat-memory/dist/feature-flags.d.ts +15 -0
  138. package/bundled/node_modules/@kubbisec/chat-memory/dist/feature-flags.d.ts.map +1 -0
  139. package/bundled/node_modules/@kubbisec/chat-memory/dist/feature-flags.js +34 -0
  140. package/bundled/node_modules/@kubbisec/chat-memory/dist/feature-flags.js.map +1 -0
  141. package/bundled/node_modules/@kubbisec/chat-memory/dist/index.d.ts +12 -0
  142. package/bundled/node_modules/@kubbisec/chat-memory/dist/index.d.ts.map +1 -0
  143. package/bundled/node_modules/@kubbisec/chat-memory/dist/index.js +35 -0
  144. package/bundled/node_modules/@kubbisec/chat-memory/dist/index.js.map +1 -0
  145. package/bundled/node_modules/@kubbisec/chat-memory/dist/sanitizer.d.ts +4 -0
  146. package/bundled/node_modules/@kubbisec/chat-memory/dist/sanitizer.d.ts.map +1 -0
  147. package/bundled/node_modules/@kubbisec/chat-memory/dist/sanitizer.js +89 -0
  148. package/bundled/node_modules/@kubbisec/chat-memory/dist/sanitizer.js.map +1 -0
  149. package/bundled/node_modules/@kubbisec/chat-memory/dist/storage-paths.d.ts +2 -0
  150. package/bundled/node_modules/@kubbisec/chat-memory/dist/storage-paths.d.ts.map +1 -0
  151. package/bundled/node_modules/@kubbisec/chat-memory/dist/storage-paths.js +13 -0
  152. package/bundled/node_modules/@kubbisec/chat-memory/dist/storage-paths.js.map +1 -0
  153. package/bundled/node_modules/@kubbisec/chat-memory/dist/types.d.ts +24 -0
  154. package/bundled/node_modules/@kubbisec/chat-memory/dist/types.d.ts.map +1 -0
  155. package/bundled/node_modules/@kubbisec/chat-memory/dist/types.js +9 -0
  156. package/bundled/node_modules/@kubbisec/chat-memory/dist/types.js.map +1 -0
  157. package/bundled/node_modules/@kubbisec/chat-memory/package.json +32 -0
  158. package/bundled/node_modules/@kubbisec/home/dist/index.d.ts +3 -0
  159. package/bundled/node_modules/@kubbisec/home/dist/index.d.ts.map +1 -0
  160. package/bundled/node_modules/@kubbisec/home/dist/index.js +3 -0
  161. package/bundled/node_modules/@kubbisec/home/dist/index.js.map +1 -0
  162. package/bundled/node_modules/@kubbisec/home/dist/migrate.d.ts +10 -0
  163. package/bundled/node_modules/@kubbisec/home/dist/migrate.d.ts.map +1 -0
  164. package/bundled/node_modules/@kubbisec/home/dist/migrate.js +107 -0
  165. package/bundled/node_modules/@kubbisec/home/dist/migrate.js.map +1 -0
  166. package/bundled/node_modules/@kubbisec/home/dist/paths.d.ts +22 -0
  167. package/bundled/node_modules/@kubbisec/home/dist/paths.d.ts.map +1 -0
  168. package/bundled/node_modules/@kubbisec/home/dist/paths.js +69 -0
  169. package/bundled/node_modules/@kubbisec/home/dist/paths.js.map +1 -0
  170. package/bundled/node_modules/@kubbisec/home/package.json +26 -0
  171. package/bundled/reflect-system.md +31 -0
  172. package/bundled/resolve-bundled-dist-root.js +165 -0
  173. package/bundled/resolve-bundled-dist-root.js.map +1 -0
  174. package/bundled/skills/aspm-platform/SKILL.md +58 -0
  175. package/bundled/skills/chat-mention-render.d.ts +7 -0
  176. package/bundled/skills/chat-mention-render.d.ts.map +1 -0
  177. package/bundled/skills/chat-mention-render.js +122 -0
  178. package/bundled/skills/chat-mention-render.js.map +1 -0
  179. package/bundled/skills/chat-mention-render.test.ts +47 -0
  180. package/bundled/skills/chat-mention-render.ts +141 -0
  181. package/bundled/skills/chat-mentions.d.ts +27 -0
  182. package/bundled/skills/chat-mentions.d.ts.map +1 -0
  183. package/bundled/skills/chat-mentions.js +104 -0
  184. package/bundled/skills/chat-mentions.js.map +1 -0
  185. package/bundled/skills/chat-mentions.test.ts +32 -0
  186. package/bundled/skills/chat-mentions.ts +126 -0
  187. package/bundled/skills/github-local/SKILL.md +16 -0
  188. package/bundled/skills/list-bundled-skills.d.ts +7 -0
  189. package/bundled/skills/list-bundled-skills.d.ts.map +1 -0
  190. package/bundled/skills/list-bundled-skills.js +44 -0
  191. package/bundled/skills/list-bundled-skills.js.map +1 -0
  192. package/bundled/skills/list-bundled-skills.ts +46 -0
  193. package/bundled/skills/naus-pipelines/SKILL.md +31 -0
  194. package/bundled/skills/remediation/SKILL.md +12 -0
  195. package/bundled/skills/scanner-gitleaks/SKILL.md +10 -0
  196. package/bundled/skills/scanner-nmap/SKILL.md +10 -0
  197. package/bundled/skills/scanner-osv/SKILL.md +10 -0
  198. package/bundled/skills/scanner-semgrep/SKILL.md +10 -0
  199. package/bundled/skills/scanner-skipfish/SKILL.md +10 -0
  200. package/bundled/skills/scanner-sonar/SKILL.md +10 -0
  201. package/bundled/skills/scanner-syft/SKILL.md +10 -0
  202. package/bundled/skills/scanner-trivy/SKILL.md +10 -0
  203. package/bundled/skills/sec-brainstorm/SKILL.md +74 -0
  204. package/bundled/skills/sec-clarify/SKILL.md +68 -0
  205. package/bundled/skills/sec-debug/SKILL.md +94 -0
  206. package/bundled/skills/sec-plan/SKILL.md +101 -0
  207. package/bundled/skills/sec-review/SKILL.md +110 -0
  208. package/bundled/skills/sec-review/code-reviewer-sec.md +176 -0
  209. package/bundled/skills/sec-using-skills/SKILL.md +79 -0
  210. package/bundled/skills/sec-verify/SKILL.md +77 -0
  211. package/bundled/skills/skill-mention.d.ts +3 -0
  212. package/bundled/skills/skill-mention.d.ts.map +1 -0
  213. package/bundled/skills/skill-mention.js +3 -0
  214. package/bundled/skills/skill-mention.js.map +1 -0
  215. package/bundled/skills/skill-mention.test.ts +46 -0
  216. package/bundled/skills/skill-mention.ts +10 -0
  217. package/bundled/theme/kubbisec.json +93 -0
  218. package/package.json +3 -2
package/bin/kubbisec.exe CHANGED
Binary file
@@ -0,0 +1,7 @@
1
+  ███▄▄ 
2
+ ▄█ ████▀▀ 
3
+ ██ █▀▀ ▄▄██ 
4
+ ██ █████ K U B B I S E C
5
+ ██ █▄▄ ▀▀██ 
6
+ ▀█ █████▄ 
7
+  ▀███▀ 
@@ -0,0 +1,10 @@
1
+  ▄████▄ 
2
+  ███████▄ 
3
+ ███ █████▀▀ ▄ 
4
+ ███ ██▀▀ ▄███ 
5
+ ███ ▄██████ K U B B I S E C
6
+ ███ ▀██████ 
7
+ ███ ▄█▄▄ ▀▀███ 
8
+ ███ █████▄▄ ▀ 
9
+  ████████ 
10
+  ▀▀███▀ 
@@ -0,0 +1,7 @@
1
+  ███▄▄ 
2
+ ▄█ ████▀▀ 
3
+ ██ █▀▀ ▄▄██ 
4
+ ██ █████ K U B B I S E C
5
+ ██ █▄▄ ▀▀██ 
6
+ ▀█ █████▄ 
7
+  ▀███▀ 
@@ -0,0 +1 @@
1
+ ]1337;File=height=36px;inline=1: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
@@ -0,0 +1,10 @@
1
+  ▄████▄ 
2
+  ███████▄ 
3
+ ███ █████▀▀ ▄ 
4
+ ███ ██▀▀ ▄███ 
5
+ ███ ▄██████ K U B B I S E C
6
+ ███ ▀██████ 
7
+ ███ ▄█▄▄ ▀▀███ 
8
+ ███ █████▄▄ ▀ 
9
+  ████████ 
10
+  ▀▀███▀ 
@@ -0,0 +1 @@
1
+ ]1337;File=height=46px;inline=1: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
@@ -0,0 +1,7 @@
1
+  ███▄▄ 
2
+ ▄█ ████▀▀ 
3
+ ██ █▀▀ ▄▄██
4
+ ██ █████
5
+ ██ █▄▄ ▀▀██
6
+ ▀█ █████▄ 
7
+  ▀███▀ 
@@ -0,0 +1,27 @@
1
+ import type { SessionQuestionnaireFields } from "./session-questionnaire.types.js";
2
+ export type ClarifySurface = "chat" | "fix" | "watch" | "task-consumer";
3
+ export type ClarifyIntent = "factual" | "execute" | "ambiguous";
4
+ export type ClarifyGateInput = {
5
+ surface: ClarifySurface;
6
+ userMessage: string;
7
+ hasProjectId: boolean;
8
+ hasVulnerabilityId: boolean;
9
+ hasSeverityFilter: boolean;
10
+ mode?: "plan" | "default";
11
+ questionnaireStatus?: "collecting" | "ready";
12
+ fields?: SessionQuestionnaireFields;
13
+ historyCount?: number;
14
+ clarifyMaxRounds?: number;
15
+ };
16
+ export declare const REQUIRED_FOR_FIX_INTENT: readonly ["projectId", "severityMin", "remediationMode"];
17
+ /** Classify user intent for ClarifyGate (CLAR-001). */
18
+ export declare function classifyIntent(userMessage: string): ClarifyIntent;
19
+ /** Confidence that required execute fields are present (0–1). */
20
+ export declare function computeGateConfidence(input: ClarifyGateInput): number;
21
+ export declare function hasRequiredExecuteFields(input: ClarifyGateInput): boolean;
22
+ /**
23
+ * Whether sec-clarify should run for this turn (CLAR-001).
24
+ * fix/watch/task-consumer surfaces always return false.
25
+ */
26
+ export declare function shouldClarify(input: ClarifyGateInput): boolean;
27
+ //# sourceMappingURL=clarify-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarify-gate.d.ts","sourceRoot":"","sources":["../../src/clarify/clarify-gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAGnF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,eAAe,CAAC;AAExE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;AAEhE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,cAAc,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,mBAAmB,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC;IAC7C,MAAM,CAAC,EAAE,0BAA0B,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,uBAAuB,0DAI1B,CAAC;AAwBX,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CA+BjE;AA0BD,iEAAiE;AACjE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CA8BrE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAezE;AASD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAoD9D"}
@@ -0,0 +1,152 @@
1
+ import { hasMinimumRemediationScope } from "./session-questionnaire.js";
2
+ export const REQUIRED_FOR_FIX_INTENT = [
3
+ "projectId",
4
+ "severityMin",
5
+ "remediationMode",
6
+ ];
7
+ const FACTUAL_PATTERNS = [
8
+ /^(?:o que (?:é|e)|what is|how does|como funciona|explain|defina|define)(?:\s|[?.!,]|$)/iu,
9
+ /\b(documentação|documentation|docs)\b/iu,
10
+ ];
11
+ const EXECUTE_PATTERNS = [
12
+ /\b(corrige|corrigir|fix|remediate|remediação|remediacao)\b/i,
13
+ /\b(finding|findings|vuln|vulnerability|cve-\d)/i,
14
+ ];
15
+ const AMBIGUOUS_PATTERNS = [
16
+ /\b(melhorar|melhore|improve|harden|reforçar|reforcar)\b.*\b(segurança|seguranca|security)\b/i,
17
+ /@plan\b/i,
18
+ /\/mode:plan\b/i,
19
+ ];
20
+ const PROJECT_IN_MESSAGE = /\b(project[:\s]+[\w-]+|projeto[:\s]+[\w-]+)\b/i;
21
+ const VULN_IN_MESSAGE = /\b(cve-\d{4}-\d+|vuln(?:erability)?[:\s#]*[\w-]+)\b/i;
22
+ const SEVERITY_IN_MESSAGE = /\b(severity|severidade|critical|critico|crítico|high|alto|medium|medio|médio)\b/i;
23
+ /** Classify user intent for ClarifyGate (CLAR-001). */
24
+ export function classifyIntent(userMessage) {
25
+ const msg = userMessage.trim();
26
+ if (!msg)
27
+ return "ambiguous";
28
+ if (FACTUAL_PATTERNS.some((re) => re.test(msg))) {
29
+ return "factual";
30
+ }
31
+ const hasExecuteCue = EXECUTE_PATTERNS.some((re) => re.test(msg));
32
+ const hasScopeCue = PROJECT_IN_MESSAGE.test(msg) ||
33
+ VULN_IN_MESSAGE.test(msg) ||
34
+ SEVERITY_IN_MESSAGE.test(msg);
35
+ if (hasExecuteCue && hasScopeCue) {
36
+ return "execute";
37
+ }
38
+ if (AMBIGUOUS_PATTERNS.some((re) => re.test(msg))) {
39
+ return "ambiguous";
40
+ }
41
+ if (hasExecuteCue) {
42
+ return "execute";
43
+ }
44
+ if (msg.length < 40 && !hasExecuteCue) {
45
+ return "ambiguous";
46
+ }
47
+ return "ambiguous";
48
+ }
49
+ function messageSignalsProject(message) {
50
+ return PROJECT_IN_MESSAGE.test(message);
51
+ }
52
+ function messageSignalsVulnerability(message) {
53
+ return VULN_IN_MESSAGE.test(message);
54
+ }
55
+ function messageSignalsSeverity(message) {
56
+ return SEVERITY_IN_MESSAGE.test(message);
57
+ }
58
+ function fieldsSignalProject(fields) {
59
+ return (fields?.projectIds.length ?? 0) > 0;
60
+ }
61
+ function fieldsSignalSeverity(fields) {
62
+ return Boolean(fields?.severityMin);
63
+ }
64
+ function fieldsSignalRemediation(fields) {
65
+ return Boolean(fields?.remediationMode);
66
+ }
67
+ /** Confidence that required execute fields are present (0–1). */
68
+ export function computeGateConfidence(input) {
69
+ const msg = input.userMessage;
70
+ let score = 0.35;
71
+ if (input.hasProjectId ||
72
+ messageSignalsProject(msg) ||
73
+ fieldsSignalProject(input.fields)) {
74
+ score += 0.25;
75
+ }
76
+ if (input.hasVulnerabilityId ||
77
+ messageSignalsVulnerability(msg)) {
78
+ score += 0.2;
79
+ }
80
+ if (input.hasSeverityFilter ||
81
+ messageSignalsSeverity(msg) ||
82
+ fieldsSignalSeverity(input.fields)) {
83
+ score += 0.2;
84
+ }
85
+ if (classifyIntent(msg) === "factual") {
86
+ return Math.min(score, 0.5);
87
+ }
88
+ return Math.min(score, 1);
89
+ }
90
+ export function hasRequiredExecuteFields(input) {
91
+ const msg = input.userMessage;
92
+ const fields = input.fields;
93
+ const hasProject = input.hasProjectId ||
94
+ messageSignalsProject(msg) ||
95
+ fieldsSignalProject(fields);
96
+ const hasSeverity = input.hasSeverityFilter ||
97
+ messageSignalsSeverity(msg) ||
98
+ fieldsSignalSeverity(fields);
99
+ const hasRemediationMode = fieldsSignalRemediation(fields) ||
100
+ /\b(auto|automático|automatico|suggestion|sugestão|sugestao|manual)\b/i.test(msg);
101
+ return hasProject && hasSeverity && hasRemediationMode;
102
+ }
103
+ function hasClarifyCue(message) {
104
+ return (EXECUTE_PATTERNS.some((re) => re.test(message)) ||
105
+ AMBIGUOUS_PATTERNS.some((re) => re.test(message)));
106
+ }
107
+ /**
108
+ * Whether sec-clarify should run for this turn (CLAR-001).
109
+ * fix/watch/task-consumer surfaces always return false.
110
+ */
111
+ export function shouldClarify(input) {
112
+ if (input.surface !== "chat") {
113
+ return false;
114
+ }
115
+ if (process.env.KUBBISEC_SKIP_CLARIFY === "1") {
116
+ return false;
117
+ }
118
+ if (input.questionnaireStatus === "ready") {
119
+ return false;
120
+ }
121
+ const msg = input.userMessage.trim();
122
+ if (!msg || !hasClarifyCue(msg)) {
123
+ return false;
124
+ }
125
+ const intent = classifyIntent(msg);
126
+ if (intent === "factual") {
127
+ return false;
128
+ }
129
+ const maxRounds = input.clarifyMaxRounds ?? 3;
130
+ if ((input.historyCount ?? 0) >= maxRounds) {
131
+ return false;
132
+ }
133
+ const fields = input.fields;
134
+ if (fields && hasMinimumRemediationScope(fields)) {
135
+ return false;
136
+ }
137
+ const confidence = computeGateConfidence(input);
138
+ if (intent === "execute" && confidence >= 0.85 && hasRequiredExecuteFields(input)) {
139
+ return false;
140
+ }
141
+ if (intent === "execute" && !hasRequiredExecuteFields(input)) {
142
+ return true;
143
+ }
144
+ if (intent === "ambiguous") {
145
+ return true;
146
+ }
147
+ if (input.mode === "plan") {
148
+ return !hasRequiredExecuteFields(input);
149
+ }
150
+ return confidence < 0.85;
151
+ }
152
+ //# sourceMappingURL=clarify-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarify-gate.js","sourceRoot":"","sources":["../../src/clarify/clarify-gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type ClarifyUiPhase = "idle" | "asking" | "ready";
2
+ export type ClarifyUiSnapshot = {
3
+ phase: ClarifyUiPhase;
4
+ progressLabel: string | null;
5
+ questionMarkdown: string | null;
6
+ };
7
+ export declare function setClarifyUiChangeListener(listener: (() => void) | undefined): void;
8
+ export declare function getClarifyUiSnapshot(): ClarifyUiSnapshot;
9
+ export declare function setClarifyUiSnapshot(next: ClarifyUiSnapshot): void;
10
+ export declare function resetClarifyUiSnapshot(): void;
11
+ export declare function isClarifyAsking(): boolean;
12
+ //# sourceMappingURL=clarify-ui-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarify-ui-state.d.ts","sourceRoot":"","sources":["../../src/clarify/clarify-ui-state.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEzD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,cAAc,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAUF,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAEnF;AAMD,wBAAgB,oBAAoB,IAAI,iBAAiB,CAExD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAGlE;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAED,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
@@ -0,0 +1,27 @@
1
+ let snapshot = {
2
+ phase: "idle",
3
+ progressLabel: null,
4
+ questionMarkdown: null,
5
+ };
6
+ let onSnapshotChange;
7
+ export function setClarifyUiChangeListener(listener) {
8
+ onSnapshotChange = listener;
9
+ }
10
+ function notifySnapshotChange() {
11
+ onSnapshotChange?.();
12
+ }
13
+ export function getClarifyUiSnapshot() {
14
+ return snapshot;
15
+ }
16
+ export function setClarifyUiSnapshot(next) {
17
+ snapshot = next;
18
+ notifySnapshotChange();
19
+ }
20
+ export function resetClarifyUiSnapshot() {
21
+ snapshot = { phase: "idle", progressLabel: null, questionMarkdown: null };
22
+ notifySnapshotChange();
23
+ }
24
+ export function isClarifyAsking() {
25
+ return snapshot.phase === "asking";
26
+ }
27
+ //# sourceMappingURL=clarify-ui-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarify-ui-state.js","sourceRoot":"","sources":["../../src/clarify/clarify-ui-state.ts"],"names":[],"mappings":"AAQA,IAAI,QAAQ,GAAsB;IAChC,KAAK,EAAE,MAAM;IACb,aAAa,EAAE,IAAI;IACnB,gBAAgB,EAAE,IAAI;CACvB,CAAC;AAEF,IAAI,gBAA0C,CAAC;AAE/C,MAAM,UAAU,0BAA0B,CAAC,QAAkC;IAC3E,gBAAgB,GAAG,QAAQ,CAAC;AAC9B,CAAC;AAED,SAAS,oBAAoB;IAC3B,gBAAgB,EAAE,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAuB;IAC1D,QAAQ,GAAG,IAAI,CAAC;IAChB,oBAAoB,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,QAAQ,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAC1E,oBAAoB,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC;AACrC,CAAC"}
@@ -0,0 +1,16 @@
1
+ export type ClarifyOptionId = "A" | "B" | "C" | "D" | "E";
2
+ export type ClarifyAnswer = {
3
+ kind: "option";
4
+ optionId: ClarifyOptionId;
5
+ detail?: string;
6
+ } | {
7
+ kind: "custom";
8
+ text: string;
9
+ } | {
10
+ kind: "ready";
11
+ } | {
12
+ kind: "invalid";
13
+ };
14
+ /** Parse a user reply to a sec-clarify multiple-choice question (CLAR-004). */
15
+ export declare function parseClarifyAnswer(text: string): ClarifyAnswer;
16
+ //# sourceMappingURL=parse-clarify-answer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-clarify-answer.d.ts","sourceRoot":"","sources":["../../src/clarify/parse-clarify-answer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE1D,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAIxB,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAoB9D"}
@@ -0,0 +1,22 @@
1
+ const READY_PHRASE = /^pode\s+executar\b/i;
2
+ /** Parse a user reply to a sec-clarify multiple-choice question (CLAR-004). */
3
+ export function parseClarifyAnswer(text) {
4
+ const trimmed = text.trim();
5
+ if (!trimmed) {
6
+ return { kind: "invalid" };
7
+ }
8
+ if (READY_PHRASE.test(trimmed)) {
9
+ return { kind: "ready" };
10
+ }
11
+ const match = trimmed.match(/^([A-E])\b([\s\S]*)$/i);
12
+ if (match?.[1]) {
13
+ const optionId = match[1].toUpperCase();
14
+ const remainder = (match[2] ?? "").trim().replace(/^[\s:,\-–—]+/, "");
15
+ if (remainder) {
16
+ return { kind: "option", optionId, detail: remainder };
17
+ }
18
+ return { kind: "option", optionId };
19
+ }
20
+ return { kind: "custom", text: trimmed };
21
+ }
22
+ //# sourceMappingURL=parse-clarify-answer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-clarify-answer.js","sourceRoot":"","sources":["../../src/clarify/parse-clarify-answer.ts"],"names":[],"mappings":"AAQA,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAE3C,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACrD,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAqB,CAAC;QAC3D,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACtE,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACzD,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACtC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { ClarifyOptionId, QuestionnaireScenario, SessionQuestionnaireFields } from "./session-questionnaire.types.js";
2
+ export type ClarifyQuestionOption = {
3
+ id: "A" | "B" | "C" | "D";
4
+ label: string;
5
+ };
6
+ /** Build a single structured question (CLAR-002) from agent-provided copy. */
7
+ export declare function formatClarifyQuestionMarkdown(input: {
8
+ question: string;
9
+ options: ClarifyQuestionOption[];
10
+ language?: "pt" | "en";
11
+ }): string;
12
+ export declare function buildOptionsFromLabels(labels: string[]): ClarifyQuestionOption[];
13
+ export declare function resolveOptionLabel(optionId: ClarifyOptionId, optionLabels: string[]): string | null;
14
+ export declare function severityFromOptionLabel(label: string): string;
15
+ export type ScenarioFieldHint = {
16
+ field: string;
17
+ purpose: string;
18
+ exampleQuestion: string;
19
+ exampleOptions: string[];
20
+ };
21
+ /** Scenario-aware hints — suggestions only; agent writes the final question via the tool. */
22
+ export declare function suggestScenarioFields(scenario: QuestionnaireScenario, fields: SessionQuestionnaireFields): {
23
+ scenario: QuestionnaireScenario;
24
+ missingFields: string[];
25
+ nextHint: ScenarioFieldHint | null;
26
+ };
27
+ export declare function inferScenarioFromMessage(message: string): QuestionnaireScenario;
28
+ export declare function formatQuestionFromInput(input: {
29
+ question: string;
30
+ options: string[];
31
+ language?: "pt" | "en";
32
+ }): {
33
+ markdown: string;
34
+ optionLabels: string[];
35
+ };
36
+ //# sourceMappingURL=question-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"question-format.d.ts","sourceRoot":"","sources":["../../src/clarify/question-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,kCAAkC,CAAC;AAE1C,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAIF,8EAA8E;AAC9E,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB,GAAG,MAAM,CAeT;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,qBAAqB,EAAE,CAKhF;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,eAAe,EACzB,YAAY,EAAE,MAAM,EAAE,GACrB,MAAM,GAAG,IAAI,CAKf;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAW7D;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAoFF,6FAA6F;AAC7F,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,qBAAqB,EAC/B,MAAM,EAAE,0BAA0B,GACjC;IACD,QAAQ,EAAE,qBAAqB,CAAC;IAChC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACpC,CAKA;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAK/E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAQ/C"}
@@ -0,0 +1,150 @@
1
+ const OPTION_IDS = ["A", "B", "C", "D"];
2
+ /** Build a single structured question (CLAR-002) from agent-provided copy. */
3
+ export function formatClarifyQuestionMarkdown(input) {
4
+ const lines = [input.question.trim(), ""];
5
+ for (const opt of input.options.slice(0, 4)) {
6
+ lines.push(`${opt.id}) ${opt.label}`);
7
+ }
8
+ const otherLabel = input.language === "en" ? "**Other** — describe in your reply" : "**Outro** — descreva na sua resposta";
9
+ lines.push(`E) ${otherLabel}`);
10
+ lines.push("");
11
+ const footer = input.language === "en"
12
+ ? "Reply with a letter (A–E) or describe in free text."
13
+ : "Responda com a letra (A–E) ou descreva em texto livre.";
14
+ lines.push(footer);
15
+ return lines.join("\n");
16
+ }
17
+ export function buildOptionsFromLabels(labels) {
18
+ return labels.slice(0, 4).map((label, index) => ({
19
+ id: OPTION_IDS[index] ?? "D",
20
+ label: label.trim(),
21
+ }));
22
+ }
23
+ export function resolveOptionLabel(optionId, optionLabels) {
24
+ if (optionId === "E")
25
+ return null;
26
+ const index = OPTION_IDS.indexOf(optionId);
27
+ if (index < 0 || index >= optionLabels.length)
28
+ return null;
29
+ return optionLabels[index] ?? null;
30
+ }
31
+ export function severityFromOptionLabel(label) {
32
+ const upper = label.trim().toUpperCase();
33
+ if (upper.includes("CRITICAL") || upper.includes("CRÍTICO") || upper.includes("CRITICO")) {
34
+ return "CRITICAL";
35
+ }
36
+ if (upper.includes("HIGH") || upper.includes("ALTO"))
37
+ return "HIGH";
38
+ if (upper.includes("MEDIUM") || upper.includes("MÉDIO") || upper.includes("MEDIO")) {
39
+ return "MEDIUM";
40
+ }
41
+ if (upper.includes("TODAS") || upper.includes("ALL"))
42
+ return "ALL";
43
+ return upper;
44
+ }
45
+ const SCENARIO_HINTS = {
46
+ remediation: [
47
+ {
48
+ field: "projectIds",
49
+ purpose: "Projeto/asset alvo",
50
+ exampleQuestion: "Qual projeto KubbiSec devemos remediar?",
51
+ exampleOptions: [
52
+ "Projeto padrão da sessão",
53
+ "Outro projeto",
54
+ "Vários projetos",
55
+ "Listar opções",
56
+ ],
57
+ },
58
+ {
59
+ field: "severityMin",
60
+ purpose: "Severidade mínima no escopo",
61
+ exampleQuestion: "Qual severidade mínima entra no escopo?",
62
+ exampleOptions: ["CRITICAL", "HIGH", "MEDIUM", "Todas"],
63
+ },
64
+ {
65
+ field: "remediationMode",
66
+ purpose: "Modo de remediação",
67
+ exampleQuestion: "Como devemos remediar?",
68
+ exampleOptions: [
69
+ "Automático (PR/patch)",
70
+ "Só sugestões",
71
+ "Híbrido",
72
+ "Ainda não definido",
73
+ ],
74
+ },
75
+ ],
76
+ plan: [
77
+ {
78
+ field: "projectIds",
79
+ purpose: "Projeto/asset",
80
+ exampleQuestion: "Para qual projeto é este plano?",
81
+ exampleOptions: ["Sessão atual", "Outro projeto", "Monorepo", "Decidir depois"],
82
+ },
83
+ {
84
+ field: "customNotes",
85
+ purpose: "Objetivo do plano",
86
+ exampleQuestion: "Qual é o objetivo principal deste plano?",
87
+ exampleOptions: ["Correção CVE", "Pipeline NAUS", "Hardening", "Outro"],
88
+ },
89
+ ],
90
+ explore: [
91
+ {
92
+ field: "projectIds",
93
+ purpose: "Contexto do projeto",
94
+ exampleQuestion: "Sobre qual projeto quer explorar findings?",
95
+ exampleOptions: ["Padrão", "Outro", "Organização inteira", "Nenhum ainda"],
96
+ },
97
+ ],
98
+ review: [
99
+ {
100
+ field: "projectIds",
101
+ purpose: "Projeto em revisão",
102
+ exampleQuestion: "Qual projeto estamos a rever?",
103
+ exampleOptions: ["Atual", "Outro", "PR específico", "Decidir depois"],
104
+ },
105
+ ],
106
+ };
107
+ function isFieldFilled(fields, field) {
108
+ switch (field) {
109
+ case "projectIds":
110
+ return fields.projectIds.length > 0;
111
+ case "severityMin":
112
+ return Boolean(fields.severityMin);
113
+ case "remediationMode":
114
+ return Boolean(fields.remediationMode);
115
+ case "nausConstraints":
116
+ return fields.nausConstraints != null;
117
+ case "extendedContext":
118
+ return fields.extendedContext != null;
119
+ case "customNotes":
120
+ return Boolean(fields.customNotes?.trim());
121
+ default:
122
+ return Boolean(fields.extras[field]?.trim());
123
+ }
124
+ }
125
+ /** Scenario-aware hints — suggestions only; agent writes the final question via the tool. */
126
+ export function suggestScenarioFields(scenario, fields) {
127
+ const hints = SCENARIO_HINTS[scenario] ?? SCENARIO_HINTS.remediation;
128
+ const missingFields = hints.map((h) => h.field).filter((field) => !isFieldFilled(fields, field));
129
+ const nextHint = hints.find((h) => !isFieldFilled(fields, h.field)) ?? null;
130
+ return { scenario, missingFields, nextHint };
131
+ }
132
+ export function inferScenarioFromMessage(message) {
133
+ if (/@plan\b|\/mode:plan\b|brainstorm|spec\b/i.test(message))
134
+ return "plan";
135
+ if (/\b(review|revisão|revisao|code review)\b/i.test(message))
136
+ return "review";
137
+ if (/\b(o que|explain|explor|listar|mostrar)\b/i.test(message))
138
+ return "explore";
139
+ return "remediation";
140
+ }
141
+ export function formatQuestionFromInput(input) {
142
+ const optionLabels = input.options.map((o) => o.trim()).filter(Boolean).slice(0, 4);
143
+ const markdown = formatClarifyQuestionMarkdown({
144
+ question: input.question,
145
+ options: buildOptionsFromLabels(optionLabels),
146
+ language: input.language,
147
+ });
148
+ return { markdown, optionLabels };
149
+ }
150
+ //# sourceMappingURL=question-format.js.map