@kubbisec/ai-linux-arm64 0.1.8 → 0.1.10

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 (208) hide show
  1. package/bin/kubbisec +0 -0
  2. package/bundled/assets/terminal/wordmark-inline.ansi +1 -0
  3. package/bundled/assets/terminal/wordmark.ansi +4 -0
  4. package/bundled/assets/terminal/wordmark.png +0 -0
  5. package/bundled/clarify/clarify-gate-state.d.ts +3 -0
  6. package/bundled/clarify/clarify-gate-state.d.ts.map +1 -0
  7. package/bundled/clarify/clarify-gate-state.js +9 -0
  8. package/bundled/clarify/clarify-gate-state.js.map +1 -0
  9. package/bundled/clarify/clarify-gate.d.ts +2 -1
  10. package/bundled/clarify/clarify-gate.d.ts.map +1 -1
  11. package/bundled/clarify/clarify-gate.js +17 -4
  12. package/bundled/clarify/clarify-gate.js.map +1 -1
  13. package/bundled/clarify/clarify-select-panel.d.ts +14 -0
  14. package/bundled/clarify/clarify-select-panel.d.ts.map +1 -0
  15. package/bundled/clarify/clarify-select-panel.js +82 -0
  16. package/bundled/clarify/clarify-select-panel.js.map +1 -0
  17. package/bundled/clarify/clarify-ui-state.d.ts +10 -1
  18. package/bundled/clarify/clarify-ui-state.d.ts.map +1 -1
  19. package/bundled/clarify/clarify-ui-state.js +24 -3
  20. package/bundled/clarify/clarify-ui-state.js.map +1 -1
  21. package/bundled/clarify/parse-clarify-answer.d.ts +6 -1
  22. package/bundled/clarify/parse-clarify-answer.d.ts.map +1 -1
  23. package/bundled/clarify/parse-clarify-answer.js +35 -2
  24. package/bundled/clarify/parse-clarify-answer.js.map +1 -1
  25. package/bundled/clarify/question-format.d.ts +7 -4
  26. package/bundled/clarify/question-format.d.ts.map +1 -1
  27. package/bundled/clarify/question-format.js +26 -33
  28. package/bundled/clarify/question-format.js.map +1 -1
  29. package/bundled/clarify/questionnaire-tool.d.ts.map +1 -1
  30. package/bundled/clarify/questionnaire-tool.js +16 -9
  31. package/bundled/clarify/questionnaire-tool.js.map +1 -1
  32. package/bundled/clarify/scope-discovery.d.ts +10 -0
  33. package/bundled/clarify/scope-discovery.d.ts.map +1 -0
  34. package/bundled/clarify/scope-discovery.js +130 -0
  35. package/bundled/clarify/scope-discovery.js.map +1 -0
  36. package/bundled/clarify/session-questionnaire.d.ts +4 -1
  37. package/bundled/clarify/session-questionnaire.d.ts.map +1 -1
  38. package/bundled/clarify/session-questionnaire.js +59 -4
  39. package/bundled/clarify/session-questionnaire.js.map +1 -1
  40. package/bundled/clarify/session-questionnaire.types.d.ts +2 -0
  41. package/bundled/clarify/session-questionnaire.types.d.ts.map +1 -1
  42. package/bundled/clarify/session-questionnaire.types.js.map +1 -1
  43. package/bundled/config/detect-local-llm-providers.d.ts +33 -0
  44. package/bundled/config/detect-local-llm-providers.d.ts.map +1 -0
  45. package/bundled/config/detect-local-llm-providers.js +173 -0
  46. package/bundled/config/detect-local-llm-providers.js.map +1 -0
  47. package/bundled/config/ensure-kubbisec-project-settings.d.ts +8 -0
  48. package/bundled/config/ensure-kubbisec-project-settings.d.ts.map +1 -1
  49. package/bundled/config/ensure-kubbisec-project-settings.js +31 -0
  50. package/bundled/config/ensure-kubbisec-project-settings.js.map +1 -1
  51. package/bundled/config/extended-context.d.ts +12 -0
  52. package/bundled/config/extended-context.d.ts.map +1 -0
  53. package/bundled/config/extended-context.js +37 -0
  54. package/bundled/config/extended-context.js.map +1 -0
  55. package/bundled/config/format-kubbisec-footer-status.d.ts.map +1 -1
  56. package/bundled/config/format-kubbisec-footer-status.js +10 -1
  57. package/bundled/config/format-kubbisec-footer-status.js.map +1 -1
  58. package/bundled/config/kubbisec-extension-manifest.d.ts +3 -0
  59. package/bundled/config/kubbisec-extension-manifest.d.ts.map +1 -0
  60. package/bundled/config/kubbisec-extension-manifest.js +23 -0
  61. package/bundled/config/kubbisec-extension-manifest.js.map +1 -0
  62. package/bundled/config/llm-config-mutations.d.ts +38 -0
  63. package/bundled/config/llm-config-mutations.d.ts.map +1 -0
  64. package/bundled/config/llm-config-mutations.js +207 -0
  65. package/bundled/config/llm-config-mutations.js.map +1 -0
  66. package/bundled/config/llm-config.d.ts +64 -0
  67. package/bundled/config/llm-config.d.ts.map +1 -0
  68. package/bundled/config/llm-config.js +236 -0
  69. package/bundled/config/llm-config.js.map +1 -0
  70. package/bundled/config/llm-provider-catalog.d.ts +22 -0
  71. package/bundled/config/llm-provider-catalog.d.ts.map +1 -0
  72. package/bundled/config/llm-provider-catalog.js +42 -0
  73. package/bundled/config/llm-provider-catalog.js.map +1 -0
  74. package/bundled/config/materialize-kubbisec-pi-resources.d.ts +13 -0
  75. package/bundled/config/materialize-kubbisec-pi-resources.d.ts.map +1 -0
  76. package/bundled/config/materialize-kubbisec-pi-resources.js +171 -0
  77. package/bundled/config/materialize-kubbisec-pi-resources.js.map +1 -0
  78. package/bundled/config/register-custom-llm-providers.d.ts +13 -0
  79. package/bundled/config/register-custom-llm-providers.d.ts.map +1 -0
  80. package/bundled/config/register-custom-llm-providers.js +21 -0
  81. package/bundled/config/register-custom-llm-providers.js.map +1 -0
  82. package/bundled/config/register-kubbisec-llm-provider.d.ts +14 -0
  83. package/bundled/config/register-kubbisec-llm-provider.d.ts.map +1 -0
  84. package/bundled/config/register-kubbisec-llm-provider.js +53 -0
  85. package/bundled/config/register-kubbisec-llm-provider.js.map +1 -0
  86. package/bundled/config/sync-kubbisec-pi-models.d.ts +12 -0
  87. package/bundled/config/sync-kubbisec-pi-models.d.ts.map +1 -0
  88. package/bundled/config/sync-kubbisec-pi-models.js +80 -0
  89. package/bundled/config/sync-kubbisec-pi-models.js.map +1 -0
  90. package/bundled/copy/cli-reference-index.d.ts +6 -0
  91. package/bundled/copy/cli-reference-index.d.ts.map +1 -0
  92. package/bundled/copy/cli-reference-index.js +42 -0
  93. package/bundled/copy/cli-reference-index.js.map +1 -0
  94. package/bundled/copy/kubbisec-shell-copy.d.ts +15 -2
  95. package/bundled/copy/kubbisec-shell-copy.d.ts.map +1 -1
  96. package/bundled/copy/kubbisec-shell-copy.js +15 -2
  97. package/bundled/copy/kubbisec-shell-copy.js.map +1 -1
  98. package/bundled/extensions/cli-local-shared.d.ts +31 -11
  99. package/bundled/extensions/cli-local-shared.d.ts.map +1 -1
  100. package/bundled/extensions/cli-local-shared.js +56 -10
  101. package/bundled/extensions/cli-local-shared.js.map +1 -1
  102. package/bundled/extensions/kubbisec-aspm-local.extension.d.ts +1 -0
  103. package/bundled/extensions/kubbisec-aspm-local.extension.d.ts.map +1 -1
  104. package/bundled/extensions/kubbisec-aspm-local.extension.js +32 -44
  105. package/bundled/extensions/kubbisec-aspm-local.extension.js.map +1 -1
  106. package/bundled/extensions/kubbisec-brand.extension.d.ts +2 -19
  107. package/bundled/extensions/kubbisec-brand.extension.d.ts.map +1 -1
  108. package/bundled/extensions/kubbisec-brand.extension.js +21 -73
  109. package/bundled/extensions/kubbisec-brand.extension.js.map +1 -1
  110. package/bundled/extensions/kubbisec-byok-provider.extension.d.ts +3 -27
  111. package/bundled/extensions/kubbisec-byok-provider.extension.d.ts.map +1 -1
  112. package/bundled/extensions/kubbisec-byok-provider.extension.js +2 -48
  113. package/bundled/extensions/kubbisec-byok-provider.extension.js.map +1 -1
  114. package/bundled/extensions/kubbisec-clarify.extension.d.ts +6 -1
  115. package/bundled/extensions/kubbisec-clarify.extension.d.ts.map +1 -1
  116. package/bundled/extensions/kubbisec-clarify.extension.js +124 -68
  117. package/bundled/extensions/kubbisec-clarify.extension.js.map +1 -1
  118. package/bundled/extensions/kubbisec-exit.extension.d.ts +3 -0
  119. package/bundled/extensions/kubbisec-exit.extension.d.ts.map +1 -0
  120. package/bundled/extensions/kubbisec-exit.extension.js +38 -0
  121. package/bundled/extensions/kubbisec-exit.extension.js.map +1 -0
  122. package/bundled/extensions/kubbisec-extended-context.extension.d.ts +6 -0
  123. package/bundled/extensions/kubbisec-extended-context.extension.d.ts.map +1 -0
  124. package/bundled/extensions/kubbisec-extended-context.extension.js +50 -0
  125. package/bundled/extensions/kubbisec-extended-context.extension.js.map +1 -0
  126. package/bundled/extensions/kubbisec-footer.extension.d.ts +16 -61
  127. package/bundled/extensions/kubbisec-footer.extension.d.ts.map +1 -1
  128. package/bundled/extensions/kubbisec-footer.extension.js +143 -74
  129. package/bundled/extensions/kubbisec-footer.extension.js.map +1 -1
  130. package/bundled/extensions/kubbisec-github-local.extension.d.ts.map +1 -1
  131. package/bundled/extensions/kubbisec-github-local.extension.js +52 -22
  132. package/bundled/extensions/kubbisec-github-local.extension.js.map +1 -1
  133. package/bundled/extensions/kubbisec-llm-config.extension.d.ts +3 -0
  134. package/bundled/extensions/kubbisec-llm-config.extension.d.ts.map +1 -0
  135. package/bundled/extensions/kubbisec-llm-config.extension.js +211 -0
  136. package/bundled/extensions/kubbisec-llm-config.extension.js.map +1 -0
  137. package/bundled/extensions/kubbisec-naus-local.extension.d.ts +1 -0
  138. package/bundled/extensions/kubbisec-naus-local.extension.d.ts.map +1 -1
  139. package/bundled/extensions/kubbisec-naus-local.extension.js +54 -58
  140. package/bundled/extensions/kubbisec-naus-local.extension.js.map +1 -1
  141. package/bundled/extensions/kubbisec-platform-tools.extension.d.ts.map +1 -1
  142. package/bundled/extensions/kubbisec-platform-tools.extension.js +57 -16
  143. package/bundled/extensions/kubbisec-platform-tools.extension.js.map +1 -1
  144. package/bundled/extensions/kubbisec-skill-mentions.extension.d.ts +1 -0
  145. package/bundled/extensions/kubbisec-skill-mentions.extension.d.ts.map +1 -1
  146. package/bundled/extensions/kubbisec-skill-mentions.extension.js +24 -8
  147. package/bundled/extensions/kubbisec-skill-mentions.extension.js.map +1 -1
  148. package/bundled/extensions/kubbisec-theme-lock.extension.d.ts +6 -0
  149. package/bundled/extensions/kubbisec-theme-lock.extension.d.ts.map +1 -0
  150. package/bundled/extensions/kubbisec-theme-lock.extension.js +43 -0
  151. package/bundled/extensions/kubbisec-theme-lock.extension.js.map +1 -0
  152. package/bundled/extensions/kubbisec-ui.extension.d.ts +1 -1
  153. package/bundled/extensions/kubbisec-ui.extension.d.ts.map +1 -1
  154. package/bundled/extensions/kubbisec-ui.extension.js +98 -82
  155. package/bundled/extensions/kubbisec-ui.extension.js.map +1 -1
  156. package/bundled/extensions/kubbisec-workflow.extension.d.ts.map +1 -1
  157. package/bundled/extensions/kubbisec-workflow.extension.js +31 -21
  158. package/bundled/extensions/kubbisec-workflow.extension.js.map +1 -1
  159. package/bundled/skills/aspm-platform/SKILL.md +55 -25
  160. package/bundled/skills/at-path-mentions.d.ts +7 -0
  161. package/bundled/skills/at-path-mentions.d.ts.map +1 -0
  162. package/bundled/skills/at-path-mentions.js +186 -0
  163. package/bundled/skills/at-path-mentions.js.map +1 -0
  164. package/bundled/skills/at-path-mentions.test.ts +64 -0
  165. package/bundled/skills/at-path-mentions.ts +211 -0
  166. package/bundled/skills/chat-mention-render.d.ts.map +1 -1
  167. package/bundled/skills/chat-mention-render.js +69 -31
  168. package/bundled/skills/chat-mention-render.js.map +1 -1
  169. package/bundled/skills/chat-mention-render.test.ts +24 -1
  170. package/bundled/skills/chat-mention-render.ts +87 -34
  171. package/bundled/skills/chat-mentions.d.ts +3 -2
  172. package/bundled/skills/chat-mentions.d.ts.map +1 -1
  173. package/bundled/skills/chat-mentions.js +9 -3
  174. package/bundled/skills/chat-mentions.js.map +1 -1
  175. package/bundled/skills/chat-mentions.test.ts +12 -5
  176. package/bundled/skills/chat-mentions.ts +12 -3
  177. package/bundled/skills/naus-pipelines/SKILL.md +111 -16
  178. package/bundled/skills/sec-clarify/SKILL.md +8 -23
  179. package/bundled/skills/sec-using-skills/SKILL.md +2 -0
  180. package/bundled/theme/clear-terminal.d.ts +3 -0
  181. package/bundled/theme/clear-terminal.d.ts.map +1 -0
  182. package/bundled/theme/clear-terminal.js +7 -0
  183. package/bundled/theme/clear-terminal.js.map +1 -0
  184. package/bundled/theme/footer-render-hook.d.ts +3 -0
  185. package/bundled/theme/footer-render-hook.d.ts.map +1 -0
  186. package/bundled/theme/footer-render-hook.js +8 -0
  187. package/bundled/theme/footer-render-hook.js.map +1 -0
  188. package/bundled/theme/kubbisec-brand-fg.d.ts +4 -0
  189. package/bundled/theme/kubbisec-brand-fg.d.ts.map +1 -0
  190. package/bundled/theme/kubbisec-brand-fg.js +7 -0
  191. package/bundled/theme/kubbisec-brand-fg.js.map +1 -0
  192. package/bundled/theme/kubbisec-menu-themes.d.ts +16 -0
  193. package/bundled/theme/kubbisec-menu-themes.d.ts.map +1 -0
  194. package/bundled/theme/kubbisec-menu-themes.js +47 -0
  195. package/bundled/theme/kubbisec-menu-themes.js.map +1 -0
  196. package/bundled/theme/kubbisec-theme-name.d.ts +2 -0
  197. package/bundled/theme/kubbisec-theme-name.d.ts.map +1 -0
  198. package/bundled/theme/kubbisec-theme-name.js +2 -0
  199. package/bundled/theme/kubbisec-theme-name.js.map +1 -0
  200. package/bundled/theme/patch-pi-settings-theme.runtime.d.ts +3 -0
  201. package/bundled/theme/patch-pi-settings-theme.runtime.d.ts.map +1 -0
  202. package/bundled/theme/patch-pi-settings-theme.runtime.js +16 -0
  203. package/bundled/theme/patch-pi-settings-theme.runtime.js.map +1 -0
  204. package/bundled/theme/render-compact-header.d.ts +21 -0
  205. package/bundled/theme/render-compact-header.d.ts.map +1 -0
  206. package/bundled/theme/render-compact-header.js +198 -0
  207. package/bundled/theme/render-compact-header.js.map +1 -0
  208. package/package.json +1 -1
@@ -1,27 +1,29 @@
1
- const OPTION_IDS = ["A", "B", "C", "D"];
2
- /** Build a single structured question (CLAR-002) from agent-provided copy. */
1
+ const OPTION_IDS = ["A", "B", "C"];
2
+ const OTHER_OPTION_ID = "D";
3
+ const MULTI_SELECT_FIELDS = new Set(["severityMin", "scanners", "findingTypes"]);
4
+ /** Build a compact structured question (max 3 choices + Outro). */
3
5
  export function formatClarifyQuestionMarkdown(input) {
4
6
  const lines = [input.question.trim(), ""];
5
- for (const opt of input.options.slice(0, 4)) {
7
+ for (const opt of input.options.slice(0, 3)) {
6
8
  lines.push(`${opt.id}) ${opt.label}`);
7
9
  }
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);
10
+ const otherLabel = input.language === "en"
11
+ ? "Other — type below"
12
+ : "Outro — escreva abaixo";
13
+ lines.push(`${OTHER_OPTION_ID}) ${otherLabel}`);
15
14
  return lines.join("\n");
16
15
  }
17
16
  export function buildOptionsFromLabels(labels) {
18
- return labels.slice(0, 4).map((label, index) => ({
19
- id: OPTION_IDS[index] ?? "D",
17
+ return labels.slice(0, 3).map((label, index) => ({
18
+ id: OPTION_IDS[index] ?? "C",
20
19
  label: label.trim(),
21
20
  }));
22
21
  }
22
+ export function selectionModeForField(field) {
23
+ return MULTI_SELECT_FIELDS.has(field) ? "multi" : "single";
24
+ }
23
25
  export function resolveOptionLabel(optionId, optionLabels) {
24
- if (optionId === "E")
26
+ if (optionId === "D" || optionId === "E")
25
27
  return null;
26
28
  const index = OPTION_IDS.indexOf(optionId);
27
29
  if (index < 0 || index >= optionLabels.length)
@@ -48,29 +50,19 @@ const SCENARIO_HINTS = {
48
50
  field: "projectIds",
49
51
  purpose: "Projeto/asset alvo",
50
52
  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
- ],
53
+ exampleOptions: ["Projeto padrão da sessão", "Outro projeto", "Listar opções"],
57
54
  },
58
55
  {
59
56
  field: "severityMin",
60
57
  purpose: "Severidade mínima no escopo",
61
58
  exampleQuestion: "Qual severidade mínima entra no escopo?",
62
- exampleOptions: ["CRITICAL", "HIGH", "MEDIUM", "Todas"],
59
+ exampleOptions: ["CRITICAL", "HIGH", "MEDIUM"],
63
60
  },
64
61
  {
65
62
  field: "remediationMode",
66
63
  purpose: "Modo de remediação",
67
64
  exampleQuestion: "Como devemos remediar?",
68
- exampleOptions: [
69
- "Automático (PR/patch)",
70
- "Só sugestões",
71
- "Híbrido",
72
- "Ainda não definido",
73
- ],
65
+ exampleOptions: ["Automático (PR/patch)", "Só sugestões", "Híbrido"],
74
66
  },
75
67
  ],
76
68
  plan: [
@@ -78,13 +70,13 @@ const SCENARIO_HINTS = {
78
70
  field: "projectIds",
79
71
  purpose: "Projeto/asset",
80
72
  exampleQuestion: "Para qual projeto é este plano?",
81
- exampleOptions: ["Sessão atual", "Outro projeto", "Monorepo", "Decidir depois"],
73
+ exampleOptions: ["Sessão atual", "Outro projeto", "Monorepo"],
82
74
  },
83
75
  {
84
76
  field: "customNotes",
85
77
  purpose: "Objetivo do plano",
86
78
  exampleQuestion: "Qual é o objetivo principal deste plano?",
87
- exampleOptions: ["Correção CVE", "Pipeline NAUS", "Hardening", "Outro"],
79
+ exampleOptions: ["Correção CVE", "Pipeline NAUS", "Hardening"],
88
80
  },
89
81
  ],
90
82
  explore: [
@@ -92,7 +84,7 @@ const SCENARIO_HINTS = {
92
84
  field: "projectIds",
93
85
  purpose: "Contexto do projeto",
94
86
  exampleQuestion: "Sobre qual projeto quer explorar findings?",
95
- exampleOptions: ["Padrão", "Outro", "Organização inteira", "Nenhum ainda"],
87
+ exampleOptions: ["Padrão", "Outro", "Organização inteira"],
96
88
  },
97
89
  ],
98
90
  review: [
@@ -100,7 +92,7 @@ const SCENARIO_HINTS = {
100
92
  field: "projectIds",
101
93
  purpose: "Projeto em revisão",
102
94
  exampleQuestion: "Qual projeto estamos a rever?",
103
- exampleOptions: ["Atual", "Outro", "PR específico", "Decidir depois"],
95
+ exampleOptions: ["Atual", "Outro", "PR específico"],
104
96
  },
105
97
  ],
106
98
  };
@@ -122,7 +114,7 @@ function isFieldFilled(fields, field) {
122
114
  return Boolean(fields.extras[field]?.trim());
123
115
  }
124
116
  }
125
- /** Scenario-aware hints — suggestions only; agent writes the final question via the tool. */
117
+ /** Scenario-aware hints — suggestions only; agent or auto-ask uses these. */
126
118
  export function suggestScenarioFields(scenario, fields) {
127
119
  const hints = SCENARIO_HINTS[scenario] ?? SCENARIO_HINTS.remediation;
128
120
  const missingFields = hints.map((h) => h.field).filter((field) => !isFieldFilled(fields, field));
@@ -139,12 +131,13 @@ export function inferScenarioFromMessage(message) {
139
131
  return "remediation";
140
132
  }
141
133
  export function formatQuestionFromInput(input) {
142
- const optionLabels = input.options.map((o) => o.trim()).filter(Boolean).slice(0, 4);
134
+ const optionLabels = input.options.map((o) => o.trim()).filter(Boolean).slice(0, 3);
143
135
  const markdown = formatClarifyQuestionMarkdown({
144
136
  question: input.question,
145
137
  options: buildOptionsFromLabels(optionLabels),
146
138
  language: input.language,
147
139
  });
148
- return { markdown, optionLabels };
140
+ const selectionMode = input.field ? selectionModeForField(input.field) : "single";
141
+ return { markdown, optionLabels, selectionMode };
149
142
  }
150
143
  //# sourceMappingURL=question-format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"question-format.js","sourceRoot":"","sources":["../../src/clarify/question-format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"question-format.js","sourceRoot":"","sources":["../../src/clarify/question-format.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"questionnaire-tool.d.ts","sourceRoot":"","sources":["../../src/clarify/questionnaire-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAM7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAQ/D,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC3B,MAAM,kCAAkC,CAAC;AAE1C,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE/E,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,uBAAuB,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvE,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,uBAAuB,CAAC;IAChC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,oBAAoB,CAAC;CACrC,CAAC;AAEF,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,oBAAoB,EACnC,KAAK,EAAE,sBAAsB,EAC7B,WAAW,CAAC,EAAE,MAAM,GACnB,uBAAuB,CA8IzB;AAED,wBAAgB,iCAAiC,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAiClF;AAED,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,oBAAoB,EACnC,MAAM,EAAE,aAAa,GACpB,oBAAoB,CAGtB"}
1
+ {"version":3,"file":"questionnaire-tool.d.ts","sourceRoot":"","sources":["../../src/clarify/questionnaire-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAO7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAQ/D,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC3B,MAAM,kCAAkC,CAAC;AAE1C,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE/E,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,uBAAuB,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvE,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,uBAAuB,CAAC;IAChC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,oBAAoB,CAAC;CACrC,CAAC;AAEF,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,oBAAoB,EACnC,KAAK,EAAE,sBAAsB,EAC7B,WAAW,CAAC,EAAE,MAAM,GACnB,uBAAuB,CAoJzB;AAED,wBAAgB,iCAAiC,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAiClF;AAED,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,oBAAoB,EACnC,MAAM,EAAE,aAAa,GACpB,oBAAoB,CAGtB"}
@@ -1,4 +1,5 @@
1
1
  import { Type } from "@earendil-works/pi-ai";
2
+ import { syncExtendedContextFromFields } from "../config/extended-context.js";
2
3
  import { formatQuestionFromInput, inferScenarioFromMessage, suggestScenarioFields, } from "./question-format.js";
3
4
  import { askQuestion, applyPendingAnswer, completeQuestionnaire, hasMinimumRemediationScope, mergeRecordedFields, } from "./session-questionnaire.js";
4
5
  export function executeQuestionnaireTool(questionnaire, input, userMessage) {
@@ -29,7 +30,11 @@ export function executeQuestionnaireTool(questionnaire, input, userMessage) {
29
30
  };
30
31
  }
31
32
  if (action === "complete") {
32
- const next = completeQuestionnaire(input.fields ? { ...questionnaire, fields: mergeRecordedFields(questionnaire.fields, input.fields) } : questionnaire);
33
+ const mergedFields = input.fields
34
+ ? mergeRecordedFields(questionnaire.fields, input.fields)
35
+ : questionnaire.fields;
36
+ syncExtendedContextFromFields(mergedFields);
37
+ const next = completeQuestionnaire(input.fields ? { ...questionnaire, fields: mergedFields } : questionnaire);
33
38
  return {
34
39
  ok: true,
35
40
  action,
@@ -49,6 +54,7 @@ export function executeQuestionnaireTool(questionnaire, input, userMessage) {
49
54
  };
50
55
  }
51
56
  const merged = mergeRecordedFields(questionnaire.fields, input.fields);
57
+ syncExtendedContextFromFields(merged);
52
58
  let next = {
53
59
  ...questionnaire,
54
60
  fields: merged,
@@ -87,16 +93,18 @@ export function executeQuestionnaireTool(questionnaire, input, userMessage) {
87
93
  questionnaire,
88
94
  };
89
95
  }
90
- const { markdown, optionLabels } = formatQuestionFromInput({
96
+ const { markdown, optionLabels, selectionMode } = formatQuestionFromInput({
91
97
  question,
92
98
  options,
93
99
  language: input.language,
100
+ field,
94
101
  });
95
102
  const next = askQuestion(questionnaire, {
96
103
  field,
97
104
  questionMarkdown: markdown,
98
105
  optionLabels,
99
106
  scenario,
107
+ selectionMode,
100
108
  });
101
109
  return {
102
110
  ok: true,
@@ -105,11 +113,10 @@ export function executeQuestionnaireTool(questionnaire, input, userMessage) {
105
113
  formattedQuestion: markdown,
106
114
  message: [
107
115
  `Question queued for field "${field}".`,
108
- "The KubbiSec panel shows the formatted A–E options.",
109
- "Wait for the user reply; do not repeat the full option list in chat.",
110
- "",
111
- markdown,
112
- ].join("\n"),
116
+ "Options are shown in the KubbiSec panel only.",
117
+ "Reply to the user with one short line (e.g. ask them to pick A–E in the panel).",
118
+ "Do not list options or repeat the question body in chat.",
119
+ ].join(" "),
113
120
  questionnaire: next,
114
121
  };
115
122
  }
@@ -132,9 +139,9 @@ export function questionnaireToolParametersSchema() {
132
139
  field: Type.Optional(Type.String({ description: "Scope field key, e.g. projectIds, severityMin" })),
133
140
  question: Type.Optional(Type.String({ description: "Question text tailored to the scenario" })),
134
141
  options: Type.Optional(Type.Array(Type.String(), {
135
- description: "2–4 short option labels (tool assigns A–D)",
142
+ description: "2–3 short option labels (tool assigns A–C; D is always Other)",
136
143
  minItems: 2,
137
- maxItems: 4,
144
+ maxItems: 3,
138
145
  })),
139
146
  scenario: Type.Optional(Type.Union([
140
147
  Type.Literal("remediation"),
@@ -1 +1 @@
1
- {"version":3,"file":"questionnaire-tool.js","sourceRoot":"","sources":["../../src/clarify/questionnaire-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"questionnaire-tool.js","sourceRoot":"","sources":["../../src/clarify/questionnaire-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { QuestionnaireScenario } from "./session-questionnaire.types.js";
2
+ import type { SessionQuestionnaireFields } from "./session-questionnaire.types.js";
3
+ export type ScopeDiscoveryResult = {
4
+ scenario: QuestionnaireScenario;
5
+ fields: Partial<SessionQuestionnaireFields> & Record<string, unknown>;
6
+ notes: string[];
7
+ };
8
+ /** Discover scope from env, workspace, and user message before asking questions. */
9
+ export declare function discoverScopeHints(cwd: string, userMessage: string): ScopeDiscoveryResult;
10
+ //# sourceMappingURL=scope-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-discovery.d.ts","sourceRoot":"","sources":["../../src/clarify/scope-discovery.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAInF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC,0BAA0B,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtE,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAgEF,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,oBAAoB,CAkEzF"}
@@ -0,0 +1,130 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { KUBBISEC_CONTEXT_DIR, KUBBISEC_PROJECT_CONFIG_DIR, } from "../config/ensure-kubbisec-project-settings.js";
4
+ import { inferScenarioFromMessage } from "./question-format.js";
5
+ import { readDefaultProjectId } from "./session-questionnaire.js";
6
+ const PROJECT_IN_MESSAGE = /\b(project[:\s]+([\w-]+)|projeto[:\s]+([\w-]+))\b/i;
7
+ const SEVERITY_IN_MESSAGE = /\b(severity|severidade|critical|critico|crítico|high|alto|medium|medio|médio)\b/i;
8
+ const REMEDIATION_MODE_IN_MESSAGE = /\b(auto|automático|automatico|suggestion|sugestão|sugestao|manual|híbrido|hibrido)\b/i;
9
+ function readLocalSettings(cwd) {
10
+ const settingsPath = path.join(cwd, KUBBISEC_PROJECT_CONFIG_DIR, "settings.json");
11
+ try {
12
+ return JSON.parse(fs.readFileSync(settingsPath, "utf8"));
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ }
18
+ function readPackageName(cwd) {
19
+ try {
20
+ const raw = fs.readFileSync(path.join(cwd, "package.json"), "utf8");
21
+ const parsed = JSON.parse(raw);
22
+ return typeof parsed.name === "string" ? parsed.name.trim() : undefined;
23
+ }
24
+ catch {
25
+ return undefined;
26
+ }
27
+ }
28
+ function readGitRemote(cwd) {
29
+ try {
30
+ const raw = fs.readFileSync(path.join(cwd, ".git", "config"), "utf8");
31
+ const match = raw.match(/url\s*=\s*(.+)/);
32
+ return match?.[1]?.trim();
33
+ }
34
+ catch {
35
+ return undefined;
36
+ }
37
+ }
38
+ function severityFromMessage(message) {
39
+ const upper = message.toUpperCase();
40
+ if (/\bCRITICAL|CRÍTICO|CRITICO\b/.test(upper))
41
+ return "CRITICAL";
42
+ if (/\bHIGH|ALTO\b/.test(upper))
43
+ return "HIGH";
44
+ if (/\bMEDIUM|MÉDIO|MEDIO\b/.test(upper))
45
+ return "MEDIUM";
46
+ if (/\bALL|TODAS\b/.test(upper))
47
+ return "ALL";
48
+ return undefined;
49
+ }
50
+ function remediationModeFromMessage(message) {
51
+ if (/\b(sugest|suggest|manual|híbrido|hibrido|plano)\b/i.test(message))
52
+ return "suggestion";
53
+ if (/\b(auto|automático|automatico|pr|patch)\b/i.test(message))
54
+ return "auto";
55
+ return undefined;
56
+ }
57
+ function objectiveFromMessage(message) {
58
+ const trimmed = message.trim();
59
+ if (trimmed.length < 12)
60
+ return undefined;
61
+ if (/^@plan\b/i.test(trimmed)) {
62
+ return trimmed.replace(/^@plan\b\s*/i, "").trim() || undefined;
63
+ }
64
+ if (/^@planejar\b/i.test(trimmed)) {
65
+ return trimmed.replace(/^@planejar\b\s*/i, "").trim() || undefined;
66
+ }
67
+ return trimmed;
68
+ }
69
+ /** Discover scope from env, workspace, and user message before asking questions. */
70
+ export function discoverScopeHints(cwd, userMessage) {
71
+ const scenario = inferScenarioFromMessage(userMessage);
72
+ const fields = {};
73
+ const extras = {};
74
+ const notes = [];
75
+ const defaultProject = readDefaultProjectId();
76
+ if (defaultProject) {
77
+ fields.projectIds = [defaultProject];
78
+ notes.push("default project from config");
79
+ }
80
+ const projectMatch = PROJECT_IN_MESSAGE.exec(userMessage);
81
+ const projectFromMsg = projectMatch?.[2] ?? projectMatch?.[3];
82
+ if (projectFromMsg) {
83
+ fields.projectIds = [projectFromMsg];
84
+ notes.push("project from message");
85
+ }
86
+ const severity = severityFromMessage(userMessage);
87
+ if (severity) {
88
+ fields.severityMin = severity;
89
+ notes.push("severity from message");
90
+ }
91
+ else if (SEVERITY_IN_MESSAGE.test(userMessage)) {
92
+ notes.push("severity cue in message");
93
+ }
94
+ const remediationMode = remediationModeFromMessage(userMessage);
95
+ if (remediationMode) {
96
+ fields.remediationMode = remediationMode;
97
+ notes.push("remediation mode from message");
98
+ }
99
+ else if (REMEDIATION_MODE_IN_MESSAGE.test(userMessage)) {
100
+ notes.push("remediation mode cue in message");
101
+ }
102
+ const objective = objectiveFromMessage(userMessage);
103
+ if (objective && scenario === "plan") {
104
+ fields.customNotes = objective;
105
+ notes.push("plan objective from message");
106
+ }
107
+ const pkg = readPackageName(cwd);
108
+ if (pkg)
109
+ extras.stack = pkg;
110
+ const remote = readGitRemote(cwd);
111
+ if (remote)
112
+ extras.gitRemote = remote;
113
+ const settings = readLocalSettings(cwd);
114
+ if (settings && typeof settings.defaultProject === "string" && settings.defaultProject.trim()) {
115
+ if (!fields.projectIds?.length) {
116
+ fields.projectIds = [settings.defaultProject.trim()];
117
+ notes.push("project from .kubbisec/settings.json");
118
+ }
119
+ }
120
+ const contextDir = path.join(cwd, KUBBISEC_PROJECT_CONFIG_DIR, KUBBISEC_CONTEXT_DIR);
121
+ if (fs.existsSync(contextDir)) {
122
+ extras.workspaceContext = "present";
123
+ notes.push("local .kubbisec/context");
124
+ }
125
+ if (Object.keys(extras).length > 0) {
126
+ fields.extras = extras;
127
+ }
128
+ return { scenario, fields, notes };
129
+ }
130
+ //# sourceMappingURL=scope-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-discovery.js","sourceRoot":"","sources":["../../src/clarify/scope-discovery.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { ClarifyAnswer } from "./parse-clarify-answer.js";
2
- import type { QuestionnaireScenario, SessionQuestionnaire, SessionQuestionnaireFields } from "./session-questionnaire.types.js";
2
+ import type { PendingQuestion, QuestionnaireScenario, SessionQuestionnaire, SessionQuestionnaireFields } from "./session-questionnaire.types.js";
3
3
  export declare const SESSION_QUESTIONNAIRE_FILENAME = "session-questionnaire.json";
4
4
  export declare function resolveSessionQuestionnairePath(cwd: string): string;
5
5
  export declare function readDefaultProjectId(): string | undefined;
@@ -7,6 +7,8 @@ export declare function createCollectingQuestionnaire(sessionId: string): Sessio
7
7
  export declare function readSessionQuestionnaire(cwd: string, sessionIdFallback: string): SessionQuestionnaire;
8
8
  export declare function writeSessionQuestionnaire(cwd: string, questionnaire: SessionQuestionnaire): void;
9
9
  export declare function hasMinimumRemediationScope(fields: SessionQuestionnaireFields): boolean;
10
+ export declare function hasMinimumPlanScope(fields: SessionQuestionnaireFields): boolean;
11
+ export declare function hasMinimumScopeForScenario(scenario: QuestionnaireScenario | null, fields: SessionQuestionnaireFields): boolean;
10
12
  export declare function setFieldValue(fields: SessionQuestionnaireFields, field: string, value: string): SessionQuestionnaireFields;
11
13
  export declare function mergeRecordedFields(fields: SessionQuestionnaireFields, partial: Partial<SessionQuestionnaireFields> & Record<string, unknown>): SessionQuestionnaireFields;
12
14
  export declare function askQuestion(questionnaire: SessionQuestionnaire, input: {
@@ -14,6 +16,7 @@ export declare function askQuestion(questionnaire: SessionQuestionnaire, input:
14
16
  questionMarkdown: string;
15
17
  optionLabels: string[];
16
18
  scenario?: QuestionnaireScenario | null;
19
+ selectionMode?: PendingQuestion["selectionMode"];
17
20
  }): SessionQuestionnaire;
18
21
  export declare function completeQuestionnaire(questionnaire: SessionQuestionnaire): SessionQuestionnaire;
19
22
  export declare function shouldAcceptClarifyAnswer(questionnaire: SessionQuestionnaire, parsed: ClarifyAnswer): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"session-questionnaire.d.ts","sourceRoot":"","sources":["../../src/clarify/session-questionnaire.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAS/D,OAAO,KAAK,EAEV,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC3B,MAAM,kCAAkC,CAAC;AAS1C,eAAO,MAAM,8BAA8B,+BAA+B,CAAC;AAE3E,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOnE;AAED,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAUzD;AA6ED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,CAarF;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,iBAAiB,EAAE,MAAM,GACxB,oBAAoB,CAiBtB;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,oBAAoB,GAClC,IAAI,CAeN;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAMtF;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,0BAA0B,EAClC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,0BAA0B,CAkC5B;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,0BAA0B,EAClC,OAAO,EAAE,OAAO,CAAC,0BAA0B,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrE,0BAA0B,CA8B5B;AAED,wBAAgB,WAAW,CACzB,aAAa,EAAE,oBAAoB,EACnC,KAAK,EAAE;IACL,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;CACzC,GACA,oBAAoB,CActB;AAED,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,oBAAoB,GAClC,oBAAoB,CAQtB;AAED,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,oBAAoB,EACnC,MAAM,EAAE,aAAa,GACpB,OAAO,CAST;AAED,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,oBAAoB,EACnC,MAAM,EAAE,aAAa,GACpB,oBAAoB,CA2DtB;AAED,wBAAgB,iCAAiC,CAC/C,aAAa,EAAE,oBAAoB,EACnC,SAAS,EAAE,MAAM,GAChB,oBAAoB,CAUtB;AAED,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,oBAAoB,GAAG,MAAM,CAIrF"}
1
+ {"version":3,"file":"session-questionnaire.d.ts","sourceRoot":"","sources":["../../src/clarify/session-questionnaire.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAU/D,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC3B,MAAM,kCAAkC,CAAC;AAS1C,eAAO,MAAM,8BAA8B,+BAA+B,CAAC;AAE3E,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOnE;AAED,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAUzD;AA8ED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,CAarF;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,iBAAiB,EAAE,MAAM,GACxB,oBAAoB,CAoBtB;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,oBAAoB,GAClC,IAAI,CAeN;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAMtF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAE/E;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,EACtC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAWT;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,0BAA0B,EAClC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,0BAA0B,CAkC5B;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,0BAA0B,EAClC,OAAO,EAAE,OAAO,CAAC,0BAA0B,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrE,0BAA0B,CA8B5B;AAED,wBAAgB,WAAW,CACzB,aAAa,EAAE,oBAAoB,EACnC,KAAK,EAAE;IACL,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACxC,aAAa,CAAC,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;CAClD,GACA,oBAAoB,CAetB;AAED,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,oBAAoB,GAClC,oBAAoB,CAQtB;AAID,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,oBAAoB,EACnC,MAAM,EAAE,aAAa,GACpB,OAAO,CAaT;AAED,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,oBAAoB,EACnC,MAAM,EAAE,aAAa,GACpB,oBAAoB,CAwFtB;AAED,wBAAgB,iCAAiC,CAC/C,aAAa,EAAE,oBAAoB,EACnC,SAAS,EAAE,MAAM,GAChB,oBAAoB,CAUtB;AAED,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,oBAAoB,GAAG,MAAM,CAIrF"}
@@ -1,5 +1,6 @@
1
1
  import { resolveOptionLabel, severityFromOptionLabel, } from "./question-format.js";
2
2
  import { KUBBISEC_CONTEXT_DIR, KUBBISEC_PROJECT_CONFIG_DIR, } from "../config/ensure-kubbisec-project-settings.js";
3
+ import { syncExtendedContextFromFields } from "../config/extended-context.js";
3
4
  import { SESSION_QUESTIONNAIRE_SCHEMA, createEmptyFields, } from "./session-questionnaire.types.js";
4
5
  import * as fs from "node:fs";
5
6
  import * as path from "node:path";
@@ -66,7 +67,8 @@ function parsePending(raw) {
66
67
  const optionLabels = Array.isArray(raw.optionLabels)
67
68
  ? raw.optionLabels.filter((v) => typeof v === "string")
68
69
  : [];
69
- return { field: raw.field, questionMarkdown: raw.questionMarkdown, optionLabels };
70
+ const selectionMode = raw.selectionMode === "multi" ? "multi" : "single";
71
+ return { field: raw.field, questionMarkdown: raw.questionMarkdown, optionLabels, selectionMode };
70
72
  }
71
73
  function parseQuestionnaire(raw, sessionIdFallback) {
72
74
  if (!isRecord(raw))
@@ -117,6 +119,9 @@ export function readSessionQuestionnaire(cwd, sessionIdFallback) {
117
119
  const parsed = parseQuestionnaire(JSON.parse(raw), sessionIdFallback);
118
120
  if (parsed) {
119
121
  if (parsed.sessionId !== sessionIdFallback) {
122
+ if (parsed.status === "collecting" && parsed.awaitingUserAnswer && parsed.pending) {
123
+ return { ...parsed, sessionId: sessionIdFallback };
124
+ }
120
125
  return createCollectingQuestionnaire(sessionIdFallback);
121
126
  }
122
127
  return parsed;
@@ -148,6 +153,21 @@ export function hasMinimumRemediationScope(fields) {
148
153
  Boolean(fields.severityMin) &&
149
154
  Boolean(fields.remediationMode));
150
155
  }
156
+ export function hasMinimumPlanScope(fields) {
157
+ return fields.projectIds.length > 0 && Boolean(fields.customNotes?.trim());
158
+ }
159
+ export function hasMinimumScopeForScenario(scenario, fields) {
160
+ switch (scenario) {
161
+ case "plan":
162
+ return hasMinimumPlanScope(fields);
163
+ case "explore":
164
+ case "review":
165
+ return fields.projectIds.length > 0;
166
+ case "remediation":
167
+ default:
168
+ return hasMinimumRemediationScope(fields);
169
+ }
170
+ }
151
171
  export function setFieldValue(fields, field, value) {
152
172
  const next = {
153
173
  ...fields,
@@ -223,6 +243,7 @@ export function askQuestion(questionnaire, input) {
223
243
  field: input.field,
224
244
  questionMarkdown: input.questionMarkdown,
225
245
  optionLabels: input.optionLabels,
246
+ selectionMode: input.selectionMode ?? "single",
226
247
  },
227
248
  updatedAt: now,
228
249
  };
@@ -236,15 +257,21 @@ export function completeQuestionnaire(questionnaire) {
236
257
  updatedAt: new Date().toISOString(),
237
258
  };
238
259
  }
260
+ const MIN_CUSTOM_ANSWER_LENGTH = 3;
239
261
  export function shouldAcceptClarifyAnswer(questionnaire, parsed) {
240
262
  if (parsed.kind === "invalid")
241
263
  return false;
242
264
  if (parsed.kind === "ready")
243
265
  return true;
244
266
  if (questionnaire.awaitingUserAnswer && questionnaire.pending) {
245
- return parsed.kind === "option";
267
+ if (parsed.kind === "option" || parsed.kind === "multi")
268
+ return true;
269
+ if (parsed.kind === "custom") {
270
+ return parsed.text.trim().length >= MIN_CUSTOM_ANSWER_LENGTH;
271
+ }
272
+ return false;
246
273
  }
247
- return parsed.kind === "option";
274
+ return parsed.kind === "option" || parsed.kind === "multi";
248
275
  }
249
276
  export function applyPendingAnswer(questionnaire, answer) {
250
277
  const pending = questionnaire.pending;
@@ -260,6 +287,32 @@ export function applyPendingAnswer(questionnaire, answer) {
260
287
  if (answer.kind === "invalid") {
261
288
  return { ...questionnaire, updatedAt: now };
262
289
  }
290
+ if (answer.kind === "multi") {
291
+ const labels = answer.optionIds
292
+ .map((id) => resolveOptionLabel(id, pending.optionLabels))
293
+ .filter((label) => Boolean(label));
294
+ const value = labels.length > 0 ? labels.join(", ") : answer.optionIds.join(",");
295
+ const fields = setFieldValue(questionnaire.fields, pending.field, value);
296
+ const history = [
297
+ ...questionnaire.history,
298
+ {
299
+ field: pending.field,
300
+ question: pending.questionMarkdown.split("\n")[0] ?? pending.field,
301
+ askedAt: now,
302
+ answer: { kind: "custom", text: value },
303
+ },
304
+ ];
305
+ const multiNext = {
306
+ ...questionnaire,
307
+ fields,
308
+ history,
309
+ awaitingUserAnswer: false,
310
+ pending: null,
311
+ updatedAt: now,
312
+ };
313
+ syncExtendedContextFromFields(multiNext.fields);
314
+ return multiNext;
315
+ }
263
316
  let value = answer.kind === "custom"
264
317
  ? answer.text
265
318
  : answer.detail ??
@@ -290,7 +343,7 @@ export function applyPendingAnswer(questionnaire, answer) {
290
343
  : { kind: "custom", text: answer.text },
291
344
  },
292
345
  ];
293
- return {
346
+ const next = {
294
347
  ...questionnaire,
295
348
  fields,
296
349
  history,
@@ -298,6 +351,8 @@ export function applyPendingAnswer(questionnaire, answer) {
298
351
  pending: null,
299
352
  updatedAt: now,
300
353
  };
354
+ syncExtendedContextFromFields(next.fields);
355
+ return next;
301
356
  }
302
357
  export function finalizeQuestionnaireAtRoundLimit(questionnaire, maxRounds) {
303
358
  if (questionnaire.history.length < maxRounds)