kuzushi 0.2.0 → 0.9.2

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 (87) hide show
  1. package/README.md +2 -0
  2. package/dist/agent-runtime/claude.js +15 -3
  3. package/dist/agent-runtime/claude.js.map +1 -1
  4. package/dist/agents/tasks/code-config-detect.js +3 -0
  5. package/dist/agents/tasks/code-config-detect.js.map +1 -1
  6. package/dist/agents/tasks/command-injection.js +10 -8
  7. package/dist/agents/tasks/command-injection.js.map +1 -1
  8. package/dist/agents/tasks/context-enricher.js +2 -0
  9. package/dist/agents/tasks/context-enricher.js.map +1 -1
  10. package/dist/agents/tasks/deserialization-detection.js +4 -1
  11. package/dist/agents/tasks/deserialization-detection.js.map +1 -1
  12. package/dist/agents/tasks/graphql-security.js +4 -1
  13. package/dist/agents/tasks/graphql-security.js.map +1 -1
  14. package/dist/agents/tasks/nosql-injection.js +6 -3
  15. package/dist/agents/tasks/nosql-injection.js.map +1 -1
  16. package/dist/agents/tasks/prototype-pollution.js +4 -1
  17. package/dist/agents/tasks/prototype-pollution.js.map +1 -1
  18. package/dist/agents/tasks/race-condition.js +4 -1
  19. package/dist/agents/tasks/race-condition.js.map +1 -1
  20. package/dist/agents/tasks/secrets-crypto-detect.js +3 -0
  21. package/dist/agents/tasks/secrets-crypto-detect.js.map +1 -1
  22. package/dist/agents/tasks/sharp-edges-detect.js +5 -0
  23. package/dist/agents/tasks/sharp-edges-detect.js.map +1 -1
  24. package/dist/agents/tasks/ssrf-detection.js +6 -1
  25. package/dist/agents/tasks/ssrf-detection.js.map +1 -1
  26. package/dist/agents/tasks/supply-chain.js +4 -1
  27. package/dist/agents/tasks/supply-chain.js.map +1 -1
  28. package/dist/agents/tasks/template-injection.js +6 -3
  29. package/dist/agents/tasks/template-injection.js.map +1 -1
  30. package/dist/agents/tasks/threat-modeling/randori-adapter.js +19 -2
  31. package/dist/agents/tasks/threat-modeling/randori-adapter.js.map +1 -1
  32. package/dist/agents/tasks/threat-modeling/randori-artifacts.js +69 -13
  33. package/dist/agents/tasks/threat-modeling/randori-artifacts.js.map +1 -1
  34. package/dist/agents/tasks/threat-modeling/randori.js +70 -30
  35. package/dist/agents/tasks/threat-modeling/randori.js.map +1 -1
  36. package/dist/agents/tasks/xxe-detection.js +4 -1
  37. package/dist/agents/tasks/xxe-detection.js.map +1 -1
  38. package/dist/cli/commands/scan.js +35 -5
  39. package/dist/cli/commands/scan.js.map +1 -1
  40. package/dist/cli.js +2 -1
  41. package/dist/cli.js.map +1 -1
  42. package/dist/migrations/024_rename_scanner_to_task_id.d.ts +13 -0
  43. package/dist/migrations/024_rename_scanner_to_task_id.js +25 -0
  44. package/dist/migrations/024_rename_scanner_to_task_id.js.map +1 -0
  45. package/dist/migrations/index.js +2 -0
  46. package/dist/migrations/index.js.map +1 -1
  47. package/dist/migrations/runner.js +7 -0
  48. package/dist/migrations/runner.js.map +1 -1
  49. package/dist/prompts/language-tuning.d.ts +38 -0
  50. package/dist/prompts/language-tuning.js +225 -0
  51. package/dist/prompts/language-tuning.js.map +1 -0
  52. package/dist/prompts/languages/c-cpp.d.ts +2 -0
  53. package/dist/prompts/languages/c-cpp.js +276 -0
  54. package/dist/prompts/languages/c-cpp.js.map +1 -0
  55. package/dist/prompts/languages/go.d.ts +2 -0
  56. package/dist/prompts/languages/go.js +252 -0
  57. package/dist/prompts/languages/go.js.map +1 -0
  58. package/dist/prompts/languages/index.d.ts +6 -0
  59. package/dist/prompts/languages/index.js +44 -0
  60. package/dist/prompts/languages/index.js.map +1 -0
  61. package/dist/prompts/languages/java-kotlin.d.ts +2 -0
  62. package/dist/prompts/languages/java-kotlin.js +495 -0
  63. package/dist/prompts/languages/java-kotlin.js.map +1 -0
  64. package/dist/prompts/languages/javascript-typescript.d.ts +2 -0
  65. package/dist/prompts/languages/javascript-typescript.js +421 -0
  66. package/dist/prompts/languages/javascript-typescript.js.map +1 -0
  67. package/dist/prompts/languages/php.d.ts +2 -0
  68. package/dist/prompts/languages/php.js +277 -0
  69. package/dist/prompts/languages/php.js.map +1 -0
  70. package/dist/prompts/languages/python.d.ts +2 -0
  71. package/dist/prompts/languages/python.js +283 -0
  72. package/dist/prompts/languages/python.js.map +1 -0
  73. package/dist/prompts/languages/ruby.d.ts +2 -0
  74. package/dist/prompts/languages/ruby.js +219 -0
  75. package/dist/prompts/languages/ruby.js.map +1 -0
  76. package/dist/prompts/languages/rust.d.ts +2 -0
  77. package/dist/prompts/languages/rust.js +149 -0
  78. package/dist/prompts/languages/rust.js.map +1 -0
  79. package/dist/prompts/languages/types.d.ts +79 -0
  80. package/dist/prompts/languages/types.js +9 -0
  81. package/dist/prompts/languages/types.js.map +1 -0
  82. package/dist/scanners/run-agentic.d.ts +2 -2
  83. package/dist/scanners/run-agentic.js +11 -3
  84. package/dist/scanners/run-agentic.js.map +1 -1
  85. package/dist/store.js +4 -0
  86. package/dist/store.js.map +1 -1
  87. package/package.json +1 -1
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Language-specific prompt tuning — composition layer.
3
+ *
4
+ * Detection tasks call these functions to get prompt sections
5
+ * tailored to the detected languages in the target repo.
6
+ */
7
+ import { getLanguageProfiles } from "./languages/index.js";
8
+ // ---------------------------------------------------------------------------
9
+ // Task ID -> canonical vuln class mapping
10
+ // ---------------------------------------------------------------------------
11
+ const TASK_TO_VULN_CLASS = {
12
+ // Detection tasks
13
+ "command-injection": "command-injection",
14
+ "ssrf-detection": "ssrf",
15
+ "deserialization-detection": "deserialization",
16
+ "xxe-detection": "xxe",
17
+ "template-injection": "template-injection",
18
+ "race-condition": "race-condition",
19
+ "prototype-pollution": "prototype-pollution",
20
+ "secrets-crypto-detect": "crypto-misuse",
21
+ "code-config-detect": "security-misconfig",
22
+ "nosql-injection": "nosql-injection",
23
+ "auth-logic-detect": "auth-bypass",
24
+ "graphql-security": "graphql",
25
+ "supply-chain": "supply-chain",
26
+ // Agentic scanner gets a merged view of all classes
27
+ agentic: [
28
+ "command-injection",
29
+ "ssrf",
30
+ "deserialization",
31
+ "xxe",
32
+ "template-injection",
33
+ "auth-bypass",
34
+ "sqli",
35
+ "xss",
36
+ ],
37
+ };
38
+ /**
39
+ * Generate a language-specific prompt section with sinks, safe patterns,
40
+ * and framework guidance for a detection task.
41
+ *
42
+ * Returns empty string if no language profiles match.
43
+ */
44
+ export function languageTuningModule(opts) {
45
+ const entries = resolveEntries(opts);
46
+ if (entries.length === 0)
47
+ return "";
48
+ const sections = ["## Language-Specific Guidance\n"];
49
+ for (const { profile, content } of entries) {
50
+ sections.push(`### ${profile.languageId}\n`);
51
+ // Sinks
52
+ if (content.sinks.length > 0) {
53
+ sections.push("**Dangerous sinks:**");
54
+ for (const s of content.sinks) {
55
+ const shell = s.shellInvoking === true
56
+ ? " [SHELL]"
57
+ : s.shellInvoking === false
58
+ ? " [NO-SHELL]"
59
+ : "";
60
+ sections.push(`- \`${s.api}\`${shell}: ${s.risk}`);
61
+ }
62
+ sections.push("");
63
+ }
64
+ // Safe patterns
65
+ if (content.safePatterns.length > 0) {
66
+ sections.push("**Safe patterns (do NOT flag):**");
67
+ for (const sp of content.safePatterns) {
68
+ sections.push(`- \`${sp.api}\`: ${sp.why}`);
69
+ }
70
+ sections.push("");
71
+ }
72
+ // Framework guidance (filtered to detected frameworks)
73
+ const fwSections = formatFrameworkGuidance(content.frameworkGuidance, opts.frameworks);
74
+ if (fwSections) {
75
+ sections.push(fwSections);
76
+ }
77
+ }
78
+ return sections.join("\n");
79
+ }
80
+ /**
81
+ * Get language-matched few-shot examples for a task.
82
+ */
83
+ export function languageFewShotsModule(opts) {
84
+ const entries = resolveEntries(opts);
85
+ if (entries.length === 0)
86
+ return "";
87
+ const shots = [];
88
+ for (const { profile, content } of entries) {
89
+ for (const shot of content.fewShots) {
90
+ shots.push({ lang: profile.languageId, shot });
91
+ }
92
+ }
93
+ if (shots.length === 0)
94
+ return "";
95
+ const lines = ["## Few-shot examples\n"];
96
+ for (const { lang, shot } of shots.slice(0, 4)) {
97
+ lines.push(`**${lang} — ${shot.scenario}:**`);
98
+ lines.push("```");
99
+ lines.push(shot.vulnerableCode);
100
+ lines.push("```");
101
+ lines.push(`Why: ${shot.explanation}\n`);
102
+ }
103
+ return lines.join("\n");
104
+ }
105
+ /**
106
+ * Get language-specific investigation methodology.
107
+ */
108
+ export function languageInvestigationModule(opts) {
109
+ const entries = resolveEntries(opts);
110
+ if (entries.length === 0)
111
+ return "";
112
+ const lines = ["## Language-specific investigation\n"];
113
+ for (const { profile, content } of entries) {
114
+ const hints = content.investigationHints;
115
+ if (hints.instructions.length === 0 &&
116
+ hints.grepPatterns.length === 0 &&
117
+ hints.fileHints.length === 0) {
118
+ continue;
119
+ }
120
+ lines.push(`### ${profile.languageId}\n`);
121
+ if (hints.grepPatterns.length > 0) {
122
+ lines.push(`Grep for: ${hints.grepPatterns.map((p) => `\`${p}\``).join(", ")}`);
123
+ }
124
+ if (hints.fileHints.length > 0) {
125
+ lines.push(`Check files: ${hints.fileHints.join(", ")}`);
126
+ }
127
+ for (const inst of hints.instructions) {
128
+ lines.push(`- ${inst}`);
129
+ }
130
+ lines.push("");
131
+ }
132
+ return lines.join("\n");
133
+ }
134
+ /**
135
+ * Get combined anti-hallucination constraints from language profiles.
136
+ */
137
+ export function languageAntiHallucinationExtras(opts) {
138
+ const entries = resolveEntries(opts);
139
+ const extras = [];
140
+ for (const { profile, content } of entries) {
141
+ if (content.antiHallucinationExtra) {
142
+ for (const line of content.antiHallucinationExtra) {
143
+ extras.push(`[${profile.languageId}] ${line}`);
144
+ }
145
+ }
146
+ }
147
+ // Also add language-wide constraints
148
+ if (opts.repoContext?.languages.length) {
149
+ const profiles = getLanguageProfiles(opts.repoContext.languages);
150
+ for (const p of profiles) {
151
+ for (const line of p.generalAntiHallucination) {
152
+ if (!extras.includes(`[${p.languageId}] ${line}`)) {
153
+ extras.push(`[${p.languageId}] ${line}`);
154
+ }
155
+ }
156
+ }
157
+ }
158
+ return extras;
159
+ }
160
+ /**
161
+ * Get language-specific general search hints (for context-enricher).
162
+ */
163
+ export function languageGeneralHintsModule(repoContext) {
164
+ if (!repoContext?.languages.length)
165
+ return "";
166
+ const profiles = getLanguageProfiles(repoContext.languages);
167
+ if (profiles.length === 0)
168
+ return "";
169
+ const lines = ["## Language-specific search guidance\n"];
170
+ for (const p of profiles) {
171
+ if (p.generalHints.instructions.length === 0)
172
+ continue;
173
+ lines.push(`**${p.languageId}:**`);
174
+ for (const inst of p.generalHints.instructions) {
175
+ lines.push(`- ${inst}`);
176
+ }
177
+ if (p.generalHints.fileHints.length > 0) {
178
+ lines.push(`- Key files: ${p.generalHints.fileHints.join(", ")}`);
179
+ }
180
+ lines.push("");
181
+ }
182
+ return lines.join("\n");
183
+ }
184
+ function resolveEntries(opts) {
185
+ if (!opts.repoContext?.languages.length)
186
+ return [];
187
+ const vulnClassIds = TASK_TO_VULN_CLASS[opts.taskId];
188
+ if (!vulnClassIds)
189
+ return [];
190
+ const classes = Array.isArray(vulnClassIds) ? vulnClassIds : [vulnClassIds];
191
+ const profiles = getLanguageProfiles(opts.repoContext.languages);
192
+ const entries = [];
193
+ for (const profile of profiles) {
194
+ for (const cls of classes) {
195
+ const content = profile.vulnClasses[cls];
196
+ if (content) {
197
+ entries.push({ profile, content });
198
+ }
199
+ }
200
+ }
201
+ return entries;
202
+ }
203
+ function formatFrameworkGuidance(guidance, detectedFrameworks) {
204
+ if (!guidance?.length || !detectedFrameworks?.length)
205
+ return "";
206
+ const relevant = guidance.filter((fg) => detectedFrameworks.some((f) => f.toLowerCase().includes(fg.framework.toLowerCase())));
207
+ if (relevant.length === 0)
208
+ return "";
209
+ const lines = ["**Framework guidance:**"];
210
+ for (const fg of relevant) {
211
+ lines.push(`- **${fg.framework}**:`);
212
+ if (fg.defaults.length > 0) {
213
+ lines.push(` - Defaults: ${fg.defaults.join("; ")}`);
214
+ }
215
+ if (fg.pitfalls.length > 0) {
216
+ lines.push(` - Pitfalls: ${fg.pitfalls.join("; ")}`);
217
+ }
218
+ if (fg.configChecks.length > 0) {
219
+ lines.push(` - Check: ${fg.configChecks.join("; ")}`);
220
+ }
221
+ }
222
+ lines.push("");
223
+ return lines.join("\n");
224
+ }
225
+ //# sourceMappingURL=language-tuning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-tuning.js","sourceRoot":"","sources":["../../src/prompts/language-tuning.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E,MAAM,kBAAkB,GAAsC;IAC5D,kBAAkB;IAClB,mBAAmB,EAAE,mBAAmB;IACxC,gBAAgB,EAAE,MAAM;IACxB,2BAA2B,EAAE,iBAAiB;IAC9C,eAAe,EAAE,KAAK;IACtB,oBAAoB,EAAE,oBAAoB;IAC1C,gBAAgB,EAAE,gBAAgB;IAClC,qBAAqB,EAAE,qBAAqB;IAC5C,uBAAuB,EAAE,eAAe;IACxC,oBAAoB,EAAE,oBAAoB;IAC1C,iBAAiB,EAAE,iBAAiB;IACpC,mBAAmB,EAAE,aAAa;IAClC,kBAAkB,EAAE,SAAS;IAC7B,cAAc,EAAE,cAAc;IAC9B,oDAAoD;IACpD,OAAO,EAAE;QACP,mBAAmB;QACnB,MAAM;QACN,iBAAiB;QACjB,KAAK;QACL,oBAAoB;QACpB,aAAa;QACb,MAAM;QACN,KAAK;KACN;CACF,CAAC;AAeF;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAwB;IAC3D,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,QAAQ,GAAa,CAAC,iCAAiC,CAAC,CAAC;IAE/D,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;QAC3C,QAAQ,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;QAE7C,QAAQ;QACR,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACtC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC9B,MAAM,KAAK,GACT,CAAC,CAAC,aAAa,KAAK,IAAI;oBACtB,CAAC,CAAC,UAAU;oBACZ,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,KAAK;wBACzB,CAAC,CAAC,aAAa;wBACf,CAAC,CAAC,EAAE,CAAC;gBACX,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAED,gBAAgB;QAChB,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAClD,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACtC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAED,uDAAuD;QACvD,MAAM,UAAU,GAAG,uBAAuB,CACxC,OAAO,CAAC,iBAAiB,EACzB,IAAI,CAAC,UAAU,CAChB,CAAC;QACF,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAwB;IAC7D,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAmD,EAAE,CAAC;IACjE,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,MAAM,KAAK,GAAa,CAAC,wBAAwB,CAAC,CAAC;IACnD,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAwB;IAClE,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAa,CAAC,sCAAsC,CAAC,CAAC;IAEjE,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC;QACzC,IACE,KAAK,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;YAC/B,KAAK,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;YAC/B,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAC5B,CAAC;YACD,SAAS;QACX,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;QAC1C,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CACR,aAAa,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpE,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,+BAA+B,CAC7C,IAAwB;IAExB,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;QAC3C,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;YACnC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;gBAClD,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,IAAI,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACjE,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,wBAAwB,EAAE,CAAC;gBAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;oBAClD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,WAAoC;IAEpC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAE9C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,KAAK,GAAa,CAAC,wCAAwC,CAAC,CAAC;IACnE,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACvD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAWD,SAAS,cAAc,CAAC,IAAwB;IAC9C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEnD,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,CAAC;IAE7B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,uBAAuB,CAC9B,QAAyC,EACzC,kBAAwC;IAExC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,kBAAkB,EAAE,MAAM;QAAE,OAAO,EAAE,CAAC;IAEhE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CACtC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5B,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CACrD,CACF,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,KAAK,GAAa,CAAC,yBAAyB,CAAC,CAAC;IACpD,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,KAAK,CAAC,CAAC;QACrC,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { LanguageProfile } from "./types.js";
2
+ export declare const cCppProfile: LanguageProfile;
@@ -0,0 +1,276 @@
1
+ export const cCppProfile = {
2
+ languageId: "C/C++",
3
+ aliases: ["c", "cpp", "cxx", "c++", "cc"],
4
+ generalHints: {
5
+ grepPatterns: [
6
+ "#define.*_SIZE",
7
+ "#define.*_LEN",
8
+ "#define.*MAX",
9
+ "#define.*BUF",
10
+ "memcpy\\(",
11
+ "memmove\\(",
12
+ "malloc\\(",
13
+ "free\\(",
14
+ ],
15
+ fileHints: [
16
+ "Header files (.h) for buffer size constants and struct layouts",
17
+ "Makefile / CMakeLists.txt for compiler flags (-fstack-protector, ASAN)",
18
+ "configure.ac for feature flags that toggle code paths",
19
+ ],
20
+ instructions: [
21
+ "Always grep for #define values that set buffer sizes and resolve them to numeric values before judging bounds checks",
22
+ "Check struct layouts for packed attributes and padding that affect sizeof calculations",
23
+ "Look for compiler-specific extensions (__attribute__, __builtin_) that affect safety guarantees",
24
+ ],
25
+ },
26
+ generalAntiHallucination: [
27
+ "A named constant is NOT a verified bound — grep for its #define and resolve the numeric value",
28
+ "Do NOT assume a function is safe based on its name; verify the implementation",
29
+ "sizeof(struct) may differ from sum of fields due to alignment padding",
30
+ ],
31
+ vulnClasses: {
32
+ "buffer-overflow": {
33
+ sinks: [
34
+ { api: "memcpy(dst, src, len)", risk: "Copies len bytes without checking dst capacity", cwes: ["CWE-120", "CWE-787"] },
35
+ { api: "memmove(dst, src, len)", risk: "Same risk as memcpy — no bounds check on dst", cwes: ["CWE-120"] },
36
+ { api: "strcpy(dst, src)", risk: "Copies until NUL with no length limit", cwes: ["CWE-120"] },
37
+ { api: "strcat(dst, src)", risk: "Appends without checking remaining dst capacity", cwes: ["CWE-120"] },
38
+ { api: "sprintf(buf, fmt, ...)", risk: "Formats into buf with no size limit", cwes: ["CWE-120"] },
39
+ { api: "gets(buf)", risk: "Reads from stdin until newline with no buffer limit", cwes: ["CWE-120"] },
40
+ { api: "sscanf with %s", risk: "Reads unbounded string into fixed buffer", cwes: ["CWE-120"] },
41
+ { api: "read/recv into fixed buffer", risk: "Network/file reads with attacker-controlled length", cwes: ["CWE-120"] },
42
+ ],
43
+ safePatterns: [
44
+ { api: "strncpy(dst, src, sizeof(dst))", why: "Bounded copy — but check for NUL termination" },
45
+ { api: "snprintf(buf, sizeof(buf), ...)", why: "Bounded format — safe if size arg is correct" },
46
+ { api: "strlcpy/strlcat", why: "BSD bounded string functions (if available)" },
47
+ { api: "memcpy with static src and known len", why: "Hardcoded lengths with no attacker control are safe" },
48
+ ],
49
+ investigationHints: {
50
+ grepPatterns: [
51
+ "memcpy\\(",
52
+ "strcpy\\(",
53
+ "sprintf\\(",
54
+ "strcat\\(",
55
+ "gets\\(",
56
+ "#define.*_SIZE",
57
+ "#define.*_LEN",
58
+ "#define.*_MAX",
59
+ "#define.*BUF",
60
+ ],
61
+ fileHints: [
62
+ "Packet parsing functions (parse_, handle_, process_)",
63
+ "Header files for buffer size #defines and struct definitions",
64
+ "Network/protocol handling code",
65
+ ],
66
+ instructions: [
67
+ "For every memcpy/memmove: identify the destination buffer size (grep for its #define), identify the source of the length argument, and check if len <= dst_size is enforced",
68
+ "Check if attacker-controlled length fields from packet headers or protocol messages reach copy operations",
69
+ "Look for signed/unsigned comparison mismatches in length checks (int vs size_t)",
70
+ "Check stack-allocated buffers in functions that parse untrusted input",
71
+ "Inspect struct fields used as buffer sizes — are they validated after deserialization?",
72
+ ],
73
+ },
74
+ fewShots: [
75
+ {
76
+ scenario: "Network packet parsing with unchecked length",
77
+ vulnerableCode: "uint16_t opt_len = ntohs(hdr->length);\nchar buf[256];\nmemcpy(buf, hdr->data, opt_len);",
78
+ explanation: "Attacker controls hdr->length via network packet. opt_len can exceed 256 (buf size). No bounds check before memcpy — stack buffer overflow.",
79
+ },
80
+ {
81
+ scenario: "XDR deserialization with signed/unsigned mismatch",
82
+ vulnerableCode: "int len = xdr_getint(xdr);\nif (len > MAX_NAME) return -1;\nchar name[MAX_NAME];\nmemcpy(name, xdr_getbytes(xdr), len);",
83
+ explanation: "len is signed int. A negative value passes the > MAX_NAME check but wraps to a huge unsigned value in memcpy's size_t parameter — massive overflow.",
84
+ },
85
+ ],
86
+ antiHallucinationExtra: [
87
+ "A size check like 'if (len > BUF_SIZE)' is NOT sufficient if len is signed — negative values pass the check",
88
+ "memcpy with hardcoded lengths and no attacker-controlled path is NOT a vulnerability",
89
+ "sizeof(ptr) returns pointer size (4/8), not the allocation size — check for this mistake",
90
+ ],
91
+ },
92
+ "integer-overflow": {
93
+ sinks: [
94
+ { api: "malloc(n * size)", risk: "Multiplication can wrap to small value, leading to undersized allocation", cwes: ["CWE-190"] },
95
+ { api: "len1 + len2 used as allocation size", risk: "Addition overflow wraps to small value", cwes: ["CWE-190"] },
96
+ { api: "signed int used as array index or size", risk: "Negative values bypass upper-bound checks", cwes: ["CWE-190", "CWE-681"] },
97
+ { api: "ntohs/ntohl results used in arithmetic", risk: "Network-controlled values in size calculations", cwes: ["CWE-190"] },
98
+ ],
99
+ safePatterns: [
100
+ { api: "calloc(n, size)", why: "calloc checks for overflow internally on most implementations" },
101
+ { api: "Explicit overflow check before arithmetic", why: "if (a > SIZE_MAX / b) return error" },
102
+ ],
103
+ investigationHints: {
104
+ grepPatterns: [
105
+ "malloc\\(.*\\*",
106
+ "realloc\\(",
107
+ "ntohs\\(",
108
+ "ntohl\\(",
109
+ "\\(int\\)",
110
+ "\\(unsigned\\)",
111
+ ],
112
+ fileHints: [
113
+ "Memory allocation wrappers",
114
+ "Protocol deserialization code",
115
+ "Image/media parsing (width * height * bpp patterns)",
116
+ ],
117
+ instructions: [
118
+ "Look for multiplication in malloc/realloc arguments where both operands come from untrusted input",
119
+ "Check for narrowing casts (uint32_t -> uint16_t, size_t -> int) before size comparisons",
120
+ "Trace ntohs/ntohl results through arithmetic to allocation or copy calls",
121
+ ],
122
+ },
123
+ fewShots: [
124
+ {
125
+ scenario: "Image dimension multiplication overflow",
126
+ vulnerableCode: "uint32_t width = read_u32(input);\nuint32_t height = read_u32(input);\nchar *pixels = malloc(width * height * 4);\nmemcpy(pixels, data, width * height * 4);",
127
+ explanation: "width * height * 4 can overflow uint32_t, wrapping to a small value. malloc allocates too little, memcpy overflows the heap buffer.",
128
+ },
129
+ ],
130
+ antiHallucinationExtra: [
131
+ "calloc(n, size) typically checks for overflow internally — verify before flagging",
132
+ "Overflow in dead code paths or with hardcoded safe values is NOT exploitable",
133
+ ],
134
+ },
135
+ "use-after-free": {
136
+ sinks: [
137
+ { api: "free(ptr); ... use(ptr)", risk: "Accessing freed memory — attacker may control reallocated content", cwes: ["CWE-416"] },
138
+ { api: "realloc may return different ptr", risk: "Old pointer becomes dangling if realloc moves the allocation", cwes: ["CWE-416"] },
139
+ { api: "Double free", risk: "Freeing same pointer twice corrupts allocator metadata", cwes: ["CWE-415"] },
140
+ ],
141
+ safePatterns: [
142
+ { api: "ptr = NULL after free", why: "Prevents use-after-free if subsequent code checks for NULL" },
143
+ { api: "Reference counting with atomic ops", why: "Prevents premature free in concurrent code" },
144
+ ],
145
+ investigationHints: {
146
+ grepPatterns: ["free\\(", "realloc\\(", "->.*=.*NULL"],
147
+ fileHints: [
148
+ "Object lifecycle management code",
149
+ "Error handling paths (goto cleanup patterns)",
150
+ "Callback/event handler registration",
151
+ ],
152
+ instructions: [
153
+ "Look for error paths where free is called but the function continues to use the pointer",
154
+ "Check callback registrations — is the callback's context freed before the callback fires?",
155
+ "In goto-cleanup patterns, verify that the cleanup sequence matches the allocation order",
156
+ "Check for race conditions between free and use in multi-threaded code",
157
+ ],
158
+ },
159
+ fewShots: [
160
+ {
161
+ scenario: "Error path use-after-free",
162
+ vulnerableCode: "buf = malloc(size);\nif (parse(buf, input) < 0) {\n free(buf);\n log_error(\"parse failed for %s\", buf->name);\n return -1;\n}",
163
+ explanation: "On parse failure, buf is freed but then dereferenced in the log_error call to access buf->name.",
164
+ },
165
+ ],
166
+ antiHallucinationExtra: [
167
+ "A free followed by return (with no intervening use) is NOT a use-after-free",
168
+ "Static analysis may flag theoretical UAF that requires specific thread interleaving — assess reachability",
169
+ ],
170
+ },
171
+ "format-string": {
172
+ sinks: [
173
+ { api: "printf(user_str)", risk: "User-controlled format string enables read/write of stack memory", cwes: ["CWE-134"] },
174
+ { api: "fprintf(f, user_str)", risk: "Same as printf — format string from untrusted source", cwes: ["CWE-134"] },
175
+ { api: "syslog(priority, user_str)", risk: "Format string via syslog", cwes: ["CWE-134"] },
176
+ { api: "snprintf(buf, size, user_str)", risk: "Bounded output but format string still attacker-controlled", cwes: ["CWE-134"] },
177
+ ],
178
+ safePatterns: [
179
+ { api: 'printf("%s", user_str)', why: "User string passed as argument, not format — safe" },
180
+ { api: "Hardcoded format string with user args", why: "Format is constant, only arguments vary" },
181
+ ],
182
+ investigationHints: {
183
+ grepPatterns: [
184
+ "printf\\(",
185
+ "fprintf\\(",
186
+ "syslog\\(",
187
+ "snprintf\\(",
188
+ "sprintf\\(",
189
+ ],
190
+ fileHints: ["Logging functions", "Error message handlers", "Debug output code"],
191
+ instructions: [
192
+ "Check if the first argument to printf-family functions is a variable (not a string literal)",
193
+ "Trace the variable back — does it come from user input, network data, or file content?",
194
+ "Custom logging wrappers may forward to printf internally — check their implementation",
195
+ ],
196
+ },
197
+ fewShots: [
198
+ {
199
+ scenario: "SNMP error handler format string",
200
+ vulnerableCode: 'char *community = snmp_get_community(pdu);\nsnprintf(errbuf, sizeof(errbuf), community);',
201
+ explanation: "community string comes from network SNMP packet and is used as format string in snprintf. Attacker sends %x%x%x%n to read/write stack.",
202
+ },
203
+ ],
204
+ antiHallucinationExtra: [
205
+ "printf(\"%s\", var) is SAFE — the format string is the literal \"%s\", not the variable",
206
+ "Do NOT flag printf with hardcoded format strings and user data as arguments",
207
+ ],
208
+ },
209
+ "type-confusion": {
210
+ sinks: [
211
+ { api: "Tagged union access without type check", risk: "Accessing wrong union member reads garbage or attacker-controlled data", cwes: ["CWE-843"] },
212
+ { api: "void* cast without validation", risk: "Casting to wrong concrete type", cwes: ["CWE-843"] },
213
+ { api: "Variant/discriminated type access", risk: "Missing discriminator check before accessing type-specific fields", cwes: ["CWE-843"] },
214
+ ],
215
+ safePatterns: [
216
+ { api: "switch(tag) with all cases", why: "Exhaustive tag check before union access" },
217
+ { api: "assert(obj->type == EXPECTED) before cast", why: "Runtime type validation" },
218
+ ],
219
+ investigationHints: {
220
+ grepPatterns: ["union\\s+\\{", "\\.type\\s*==", "->type\\s*==", "\\(struct\\s+\\w+\\s*\\*\\)"],
221
+ fileHints: [
222
+ "ASN.1 / TLV parsing code",
223
+ "Protocol message handlers with type-dispatched processing",
224
+ "Variant/tagged-union type definitions in headers",
225
+ ],
226
+ instructions: [
227
+ "Find union types and their discriminator fields, then check every access site for discriminator validation",
228
+ "Look for void* parameters cast to concrete types — is the type guaranteed by the caller contract?",
229
+ "In TLV/ASN.1 parsers, check that the type tag is validated before accessing type-specific content",
230
+ ],
231
+ },
232
+ fewShots: [
233
+ {
234
+ scenario: "ASN.1 value access without tag check",
235
+ vulnerableCode: "ASN1_VALUE *val = asn1_parse(input);\nint len = val->value.str_val->length;",
236
+ explanation: "val could be INTEGER, BOOLEAN, or STRING type. Accessing str_val without checking val->type reads memory from the wrong union member if val is not a string.",
237
+ },
238
+ ],
239
+ antiHallucinationExtra: [
240
+ "If a switch/case exhaustively handles all type tags before union access, it is safe",
241
+ "Internal functions where the caller always passes the correct type (verified by code inspection) are lower risk",
242
+ ],
243
+ },
244
+ "command-injection": {
245
+ sinks: [
246
+ { api: "system(cmd)", risk: "Passes cmd to /bin/sh -c for full shell interpretation", shellInvoking: true, cwes: ["CWE-78"] },
247
+ { api: "popen(cmd, mode)", risk: "Shell interpretation of cmd string", shellInvoking: true, cwes: ["CWE-78"] },
248
+ { api: "execlp/execvp with shell wrapper", risk: "If first arg is a shell and command is user-controlled", shellInvoking: true, cwes: ["CWE-78"] },
249
+ ],
250
+ safePatterns: [
251
+ { api: "execve with argument array", why: "No shell interpretation when using direct exec with argv" },
252
+ { api: "Hardcoded command string", why: "No attacker-controlled input in the command" },
253
+ ],
254
+ investigationHints: {
255
+ grepPatterns: ["system\\(", "popen\\(", "execlp\\(", "execvp\\("],
256
+ fileHints: ["Build scripts and helper utilities", "CGI/web handler code"],
257
+ instructions: [
258
+ "Check if user-controlled data (environment variables, HTTP parameters, file content) reaches system/popen",
259
+ "Look for string concatenation or sprintf building command strings with untrusted data",
260
+ ],
261
+ },
262
+ fewShots: [
263
+ {
264
+ scenario: "CGI handler building shell command",
265
+ vulnerableCode: 'char cmd[512];\nsnprintf(cmd, sizeof(cmd), "convert %s output.png", filename);\nsystem(cmd);',
266
+ explanation: "filename comes from user upload/request. Attacker sends 'img.png; rm -rf /' — shell interprets the semicolon as command separator.",
267
+ },
268
+ ],
269
+ antiHallucinationExtra: [
270
+ "execve/execv with a fixed argv array and no shell is NOT vulnerable to metacharacter injection",
271
+ "system() with a fully hardcoded string and no user input is NOT a vulnerability",
272
+ ],
273
+ },
274
+ },
275
+ };
276
+ //# sourceMappingURL=c-cpp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"c-cpp.js","sourceRoot":"","sources":["../../../src/prompts/languages/c-cpp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { LanguageProfile } from "./types.js";
2
+ export declare const goProfile: LanguageProfile;