@kubbisec/ai-linux-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 +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
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Local GitHub/gh tools — only when user opted in: KUBBISEC_CHAT_EXTENDED_CONTEXT=1
3
+ */
4
+ import { spawn } from "node:child_process";
5
+ import * as fs from "node:fs";
6
+ import * as path from "node:path";
7
+ import { Type } from "@earendil-works/pi-ai";
8
+ function extendedContextEnabled() {
9
+ return process.env.KUBBISEC_CHAT_EXTENDED_CONTEXT === "1";
10
+ }
11
+ function resolveWorkspace() {
12
+ const fromEnv = process.env.KUBBISEC_LOCAL_WORKSPACE?.trim() ||
13
+ process.env.KUBBISEC_AI_WORKSPACE?.trim();
14
+ return fromEnv ? path.resolve(fromEnv) : process.cwd();
15
+ }
16
+ function execCapture(bin, args, cwd) {
17
+ return new Promise((resolve, reject) => {
18
+ const child = spawn(bin, args, {
19
+ cwd,
20
+ env: {
21
+ ...process.env,
22
+ GIT_TERMINAL_PROMPT: "0",
23
+ GH_PROMPT_DISABLED: "1",
24
+ },
25
+ stdio: ["ignore", "pipe", "pipe"],
26
+ });
27
+ let stdout = "";
28
+ let stderr = "";
29
+ child.stdout?.on("data", (c) => {
30
+ stdout += String(c);
31
+ });
32
+ child.stderr?.on("data", (c) => {
33
+ stderr += String(c);
34
+ });
35
+ child.on("error", reject);
36
+ child.on("close", (code) => resolve({ code: code ?? 1, stdout, stderr }));
37
+ });
38
+ }
39
+ function denyExtended() {
40
+ return {
41
+ content: [
42
+ {
43
+ type: "text",
44
+ text: "Extended local context is disabled. Restart with: kubbisec chat --extended-context [-w <workspace>]",
45
+ },
46
+ ],
47
+ };
48
+ }
49
+ export default function kubbisecGithubLocal(api) {
50
+ api.registerTool({
51
+ name: "github_local_status",
52
+ label: "GitHub local status",
53
+ description: "Reports gh auth and git remote on this machine (requires kubbisec chat --extended-context).",
54
+ parameters: Type.Object({}),
55
+ async execute() {
56
+ if (!extendedContextEnabled())
57
+ return denyExtended();
58
+ const cwd = resolveWorkspace();
59
+ const parts = [`workspace: ${cwd}`];
60
+ try {
61
+ const gh = await execCapture("gh", ["auth", "status"], cwd);
62
+ parts.push(`gh auth status (exit ${gh.code}):\n${gh.stdout}\n${gh.stderr}`.trim());
63
+ }
64
+ catch {
65
+ parts.push("gh: not installed or not on PATH");
66
+ }
67
+ if (fs.existsSync(path.join(cwd, ".git"))) {
68
+ const remote = await execCapture("git", ["remote", "-v"], cwd);
69
+ const branch = await execCapture("git", ["branch", "--show-current"], cwd);
70
+ parts.push(`git remote:\n${remote.stdout.trim() || remote.stderr.trim()}`);
71
+ parts.push(`git branch: ${branch.stdout.trim() || "(detached)"}`);
72
+ }
73
+ else {
74
+ parts.push("git: no .git in workspace (clone via kubsec_github_repository + remediation flow)");
75
+ }
76
+ return { content: [{ type: "text", text: parts.join("\n\n") }] };
77
+ },
78
+ });
79
+ api.registerTool({
80
+ name: "github_local_repo_summary",
81
+ label: "GitHub local repo summary",
82
+ description: "Lists top-level files and recent git log in workspace (requires --extended-context).",
83
+ parameters: Type.Object({}),
84
+ async execute() {
85
+ if (!extendedContextEnabled())
86
+ return denyExtended();
87
+ const cwd = resolveWorkspace();
88
+ const entries = fs.existsSync(cwd)
89
+ ? fs.readdirSync(cwd, { withFileTypes: true }).slice(0, 40).map((e) => (e.isDirectory() ? `${e.name}/` : e.name))
90
+ : [];
91
+ let logOut = "";
92
+ if (fs.existsSync(path.join(cwd, ".git"))) {
93
+ const log = await execCapture("git", ["log", "-5", "--oneline"], cwd);
94
+ logOut = log.stdout.trim() || log.stderr.trim();
95
+ }
96
+ const text = [
97
+ `workspace: ${cwd}`,
98
+ `entries: ${entries.join(", ") || "(empty)"}`,
99
+ logOut ? `recent commits:\n${logOut}` : "no git history",
100
+ ].join("\n\n");
101
+ return { content: [{ type: "text", text }] };
102
+ },
103
+ });
104
+ }
105
+ //# sourceMappingURL=kubbisec-github-local.extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-github-local.extension.js","sourceRoot":"","sources":["../../src/extensions/kubbisec-github-local.extension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ type ExtensionApi = {
2
+ on: (event: string, handler: (event: unknown, ctx: ExtensionContext) => void | Promise<unknown>) => void;
3
+ };
4
+ type ExtensionContext = {
5
+ hasUI: boolean;
6
+ ui: {
7
+ setStatus: (key: string, text: string | undefined) => void;
8
+ };
9
+ };
10
+ export default function kubbisecMemory(api: ExtensionApi): void;
11
+ export {};
12
+ //# sourceMappingURL=kubbisec-memory.extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-memory.extension.d.ts","sourceRoot":"","sources":["../../src/extensions/kubbisec-memory.extension.ts"],"names":[],"mappings":"AAYA,KAAK,YAAY,GAAG;IAClB,EAAE,EAAE,CACF,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KACxE,IAAI,CAAC;CACX,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,EAAE,EAAE;QACF,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;KAC5D,CAAC;CACH,CAAC;AAkDF,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CA2E9D"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * KubbiSec memory extension — recall before turn, remember after turn.
3
+ */
4
+ import { addChatMemoryTurn, buildMemoryInjectBlock, extractRememberCandidates, isMemoryEnabled, searchChatMemory, } from "@kubbisec/chat-memory";
5
+ function resolveMemoryScope() {
6
+ const organizationId = process.env.KUBBISEC_ORG_ID?.trim();
7
+ const userId = process.env.KUBBISEC_USER_ID?.trim() ?? process.env.KUBBISEC_CLIENT_ID?.trim();
8
+ if (!organizationId || !userId)
9
+ return null;
10
+ const projectId = process.env.KUBBISEC_PROJECT_ID?.trim();
11
+ return {
12
+ organizationId,
13
+ userId,
14
+ ...(projectId ? { projectId } : {}),
15
+ };
16
+ }
17
+ function extractTextContent(content) {
18
+ if (typeof content === "string")
19
+ return content;
20
+ if (!Array.isArray(content))
21
+ return "";
22
+ return content
23
+ .filter((block) => typeof block === "object" && block !== null)
24
+ .filter((block) => block.type === "text" && typeof block.text === "string")
25
+ .map((block) => block.text ?? "")
26
+ .join("\n");
27
+ }
28
+ function lastUserMessage(messages) {
29
+ for (let i = messages.length - 1; i >= 0; i -= 1) {
30
+ const msg = messages[i];
31
+ if (msg?.role === "user") {
32
+ return extractTextContent(msg.content);
33
+ }
34
+ }
35
+ return "";
36
+ }
37
+ export default function kubbisecMemory(api) {
38
+ let lastUserPrompt = "";
39
+ api.on("before_agent_start", async (event) => {
40
+ if (!isMemoryEnabled())
41
+ return undefined;
42
+ const scope = resolveMemoryScope();
43
+ if (!scope)
44
+ return undefined;
45
+ const { prompt } = event;
46
+ lastUserPrompt = prompt;
47
+ try {
48
+ const memories = await Promise.race([
49
+ searchChatMemory(scope, prompt, 5),
50
+ new Promise((_, reject) => {
51
+ setTimeout(() => reject(new Error("recall_timeout")), 3000);
52
+ }),
53
+ ]);
54
+ const block = buildMemoryInjectBlock(memories);
55
+ if (!block)
56
+ return undefined;
57
+ return {
58
+ message: {
59
+ customType: "kubbisec-memory-inject",
60
+ content: block,
61
+ display: false,
62
+ },
63
+ };
64
+ }
65
+ catch {
66
+ return undefined;
67
+ }
68
+ });
69
+ api.on("turn_end", async (event, ctx) => {
70
+ if (!isMemoryEnabled())
71
+ return;
72
+ if (!lastUserPrompt || lastUserPrompt.length < 20)
73
+ return;
74
+ const scope = resolveMemoryScope();
75
+ if (!scope)
76
+ return;
77
+ const turn = event;
78
+ if (turn.message.role !== "assistant")
79
+ return;
80
+ const assistantText = extractTextContent(turn.message.content);
81
+ const candidates = extractRememberCandidates(lastUserPrompt, assistantText);
82
+ for (const candidate of candidates) {
83
+ await addChatMemoryTurn(scope, candidate);
84
+ }
85
+ if (ctx.hasUI && candidates.length > 0) {
86
+ ctx.ui.setStatus("kubbisec-memory", `memory · ${candidates.length}`);
87
+ }
88
+ });
89
+ api.on("agent_end", async (event) => {
90
+ if (!isMemoryEnabled())
91
+ return;
92
+ const scope = resolveMemoryScope();
93
+ if (!scope)
94
+ return;
95
+ const agentEnd = event;
96
+ const userText = lastUserMessage(agentEnd.messages);
97
+ const assistantMsg = [...agentEnd.messages].reverse().find((m) => m.role === "assistant");
98
+ const assistantText = assistantMsg ? extractTextContent(assistantMsg.content) : "";
99
+ if (!userText || userText.length < 20)
100
+ return;
101
+ const candidates = extractRememberCandidates(userText, assistantText);
102
+ for (const candidate of candidates) {
103
+ await addChatMemoryTurn(scope, candidate);
104
+ }
105
+ });
106
+ }
107
+ //# sourceMappingURL=kubbisec-memory.extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-memory.extension.js","sourceRoot":"","sources":["../../src/extensions/kubbisec-memory.extension.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,EACzB,eAAe,EACf,gBAAgB,GAEjB,MAAM,uBAAuB,CAAC;AA+B/B,SAAS,kBAAkB;IACzB,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;IAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;IAC9F,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAE5C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC;IAC1D,OAAO;QACL,cAAc;QACd,MAAM;QACN,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAgB;IAC1C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,KAAK,EAA4C,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;SACxG,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;SAC1E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;SAChC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,QAAmC;IAC1D,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,GAAG,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,OAAO,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,GAAiB;IACtD,IAAI,cAAc,GAAG,EAAE,CAAC;IAExB,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC3C,IAAI,CAAC,eAAe,EAAE;YAAE,OAAO,SAAS,CAAC;QAEzC,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAE7B,MAAM,EAAE,MAAM,EAAE,GAAG,KAA8B,CAAC;QAClD,cAAc,GAAG,MAAM,CAAC;QAExB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAClC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBAClC,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;oBAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC9D,CAAC,CAAC;aACH,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,CAAC,KAAK;gBAAE,OAAO,SAAS,CAAC;YAE7B,OAAO;gBACL,OAAO,EAAE;oBACP,UAAU,EAAE,wBAAwB;oBACpC,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,KAAK;iBACf;aACF,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACtC,IAAI,CAAC,eAAe,EAAE;YAAE,OAAO;QAC/B,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO;QAE1D,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,IAAI,GAAG,KAAqB,CAAC;QACnC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO;QAE9C,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,yBAAyB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QAE5E,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,YAAY,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAClC,IAAI,CAAC,eAAe,EAAE;YAAE,OAAO;QAE/B,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,QAAQ,GAAG,KAAsB,CAAC;QACxC,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QAC1F,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEnF,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO;QAE9C,MAAM,UAAU,GAAG,yBAAyB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACtE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,17 @@
1
+ type ExtensionApi = {
2
+ registerTool: (def: {
3
+ name: string;
4
+ label: string;
5
+ description: string;
6
+ parameters: unknown;
7
+ execute: (toolCallId: string, params: Record<string, unknown>, signal: AbortSignal) => Promise<{
8
+ content: Array<{
9
+ type: "text";
10
+ text: string;
11
+ }>;
12
+ }>;
13
+ }) => void;
14
+ };
15
+ export default function kubbisecNausLocal(api: ExtensionApi): void;
16
+ export {};
17
+ //# sourceMappingURL=kubbisec-naus-local.extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-naus-local.extension.d.ts","sourceRoot":"","sources":["../../src/extensions/kubbisec-naus-local.extension.ts"],"names":[],"mappings":"AAcA,KAAK,YAAY,GAAG;IAClB,YAAY,EAAE,CAAC,GAAG,EAAE;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC;QACpB,OAAO,EAAE,CACP,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC;YAAE,OAAO,EAAE,KAAK,CAAC;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC,CAAC;KAClE,KAAK,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAsHjE"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Local `naus` CLI tools — only when KUBBISEC_CHAT_EXTENDED_CONTEXT=1
3
+ */
4
+ import { Type } from "@earendil-works/pi-ai";
5
+ import { denyExtendedContextMessage, execCapture, extendedContextEnabled, formatExecResult, NAUS_LOCAL_RUN_TIMEOUT_MS, resolvePathInWorkspace, resolveWorkspace, } from "./cli-local-shared.js";
6
+ export default function kubbisecNausLocal(api) {
7
+ api.registerTool({
8
+ name: "naus_local_status",
9
+ label: "Naus CLI status",
10
+ description: "Checks if `naus` is on PATH and shows help excerpt (requires kubbisec chat --extended-context).",
11
+ parameters: Type.Object({}),
12
+ async execute() {
13
+ if (!extendedContextEnabled())
14
+ return denyExtendedContextMessage();
15
+ const cwd = resolveWorkspace();
16
+ const parts = [`workspace: ${cwd}`];
17
+ try {
18
+ const which = await execCapture("which", ["naus"], cwd);
19
+ parts.push(formatExecResult("which", ["naus"], cwd, which));
20
+ const help = await execCapture("naus", ["--help"], cwd);
21
+ parts.push(formatExecResult("naus", ["--help"], cwd, help));
22
+ }
23
+ catch {
24
+ parts.push("naus: not installed or not on PATH (npm install -g @kubbisec/naus)");
25
+ }
26
+ return { content: [{ type: "text", text: parts.join("\n\n") }] };
27
+ },
28
+ });
29
+ api.registerTool({
30
+ name: "naus_local_validate",
31
+ label: "Naus validate file",
32
+ description: "Runs `naus validate <path>` in the workspace (extended context).",
33
+ parameters: Type.Object({
34
+ path: Type.String({ description: "Pipeline YAML path relative to workspace" }),
35
+ }),
36
+ async execute(_id, params) {
37
+ if (!extendedContextEnabled())
38
+ return denyExtendedContextMessage();
39
+ const cwd = resolveWorkspace();
40
+ const filePath = resolvePathInWorkspace(String(params.path), cwd);
41
+ try {
42
+ const result = await execCapture("naus", ["validate", filePath], cwd);
43
+ return {
44
+ content: [{ type: "text", text: formatExecResult("naus", ["validate", filePath], cwd, result) }],
45
+ };
46
+ }
47
+ catch (err) {
48
+ return {
49
+ content: [
50
+ {
51
+ type: "text",
52
+ text: err instanceof Error ? err.message : String(err),
53
+ },
54
+ ],
55
+ };
56
+ }
57
+ },
58
+ });
59
+ api.registerTool({
60
+ name: "naus_local_plan",
61
+ label: "Naus plan pipeline",
62
+ description: "Runs `naus plan <path>` (optional mermaid format) in the workspace.",
63
+ parameters: Type.Object({
64
+ path: Type.String({ description: "Pipeline YAML path relative to workspace" }),
65
+ format: Type.Optional(Type.Union([Type.Literal("text"), Type.Literal("mermaid")], {
66
+ description: "Output format (default text)",
67
+ })),
68
+ }),
69
+ async execute(_id, params) {
70
+ if (!extendedContextEnabled())
71
+ return denyExtendedContextMessage();
72
+ const cwd = resolveWorkspace();
73
+ const filePath = resolvePathInWorkspace(String(params.path), cwd);
74
+ const fmt = params.format === "mermaid" ? "mermaid" : "text";
75
+ const args = ["plan", filePath, "--format", fmt];
76
+ try {
77
+ const result = await execCapture("naus", args, cwd);
78
+ return {
79
+ content: [{ type: "text", text: formatExecResult("naus", args, cwd, result) }],
80
+ };
81
+ }
82
+ catch (err) {
83
+ return {
84
+ content: [{ type: "text", text: err instanceof Error ? err.message : String(err) }],
85
+ };
86
+ }
87
+ },
88
+ });
89
+ api.registerTool({
90
+ name: "naus_local_run",
91
+ label: "Naus run pipeline locally",
92
+ description: "Runs `naus run <path>` on this machine (up to 15 min). Prefer cloud `trigger_run` for KubbiSec CI.",
93
+ parameters: Type.Object({
94
+ path: Type.String({ description: "Pipeline YAML path relative to workspace" }),
95
+ }),
96
+ async execute(_id, params, signal) {
97
+ if (!extendedContextEnabled())
98
+ return denyExtendedContextMessage();
99
+ const cwd = resolveWorkspace();
100
+ const filePath = resolvePathInWorkspace(String(params.path), cwd);
101
+ const args = ["run", filePath];
102
+ try {
103
+ const result = await execCapture("naus", args, cwd, {
104
+ signal,
105
+ timeoutMs: NAUS_LOCAL_RUN_TIMEOUT_MS,
106
+ });
107
+ const note = "\n\nNote: for KubbiSec-hosted CI use API tool trigger_run after set_pipeline_yaml.";
108
+ return {
109
+ content: [
110
+ {
111
+ type: "text",
112
+ text: formatExecResult("naus", args, cwd, result) + note,
113
+ },
114
+ ],
115
+ };
116
+ }
117
+ catch (err) {
118
+ return {
119
+ content: [{ type: "text", text: err instanceof Error ? err.message : String(err) }],
120
+ };
121
+ }
122
+ },
123
+ });
124
+ }
125
+ //# sourceMappingURL=kubbisec-naus-local.extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-naus-local.extension.js","sourceRoot":"","sources":["../../src/extensions/kubbisec-naus-local.extension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ type ExtensionApi = {
2
+ on: (event: string, handler: (event: unknown, ctx: ExtensionContext) => void | Promise<void>) => void;
3
+ registerTool: (def: {
4
+ name: string;
5
+ label: string;
6
+ description: string;
7
+ parameters: unknown;
8
+ execute: (toolCallId: string, params: Record<string, unknown>, signal: AbortSignal, onUpdate: unknown, ctx: ExtensionContext) => Promise<{
9
+ content: Array<{
10
+ type: "text";
11
+ text: string;
12
+ }>;
13
+ details?: unknown;
14
+ }>;
15
+ }) => void;
16
+ };
17
+ type ExtensionContext = {
18
+ ui?: {
19
+ notify: (message: string, level: string) => void;
20
+ setStatus: (key: string, text: string | undefined) => void;
21
+ };
22
+ };
23
+ export declare function extractVulnerabilityIdFromParams(params: Record<string, unknown>): string | undefined;
24
+ export declare function catalogParametersSchema(parameters: Record<string, unknown>): unknown;
25
+ export default function kubbisecPlatformTools(api: ExtensionApi): void;
26
+ export {};
27
+ //# sourceMappingURL=kubbisec-platform-tools.extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-platform-tools.extension.d.ts","sourceRoot":"","sources":["../../src/extensions/kubbisec-platform-tools.extension.ts"],"names":[],"mappings":"AAiBA,KAAK,YAAY,GAAG;IAClB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IACtG,YAAY,EAAE,CAAC,GAAG,EAAE;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC;QACpB,OAAO,EAAE,CACP,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,OAAO,EACjB,GAAG,EAAE,gBAAgB,KAClB,OAAO,CAAC;YAAE,OAAO,EAAE,KAAK,CAAC;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;YAAC,OAAO,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;KACrF,KAAK,IAAI,CAAC;CACZ,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,EAAE,CAAC,EAAE;QACH,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QACjD,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;KAC5D,CAAC;CACH,CAAC;AA8BF,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,GAAG,SAAS,CAMpB;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAKpF;AA4BD,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAwFrE"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Registers KubbiSec DevSecOps assistant tools from the API catalog (session_start).
3
+ */
4
+ import * as fs from "node:fs";
5
+ import { getKubbisecConfigPath } from "@kubbisec/home";
6
+ import { Type } from "@earendil-works/pi-ai";
7
+ const MAX_TOOL_RESULT_CHARS = 24_000;
8
+ function resolveApiBaseUrl() {
9
+ const raw = process.env.KUBBISEC_API_URL?.trim() ||
10
+ process.env.KUBBISEC_AI_API_URL?.trim() ||
11
+ process.env.ASPM_API_URL?.trim();
12
+ return raw?.replace(/\/$/, "");
13
+ }
14
+ function resolveApiKey() {
15
+ return (process.env.KUBBISEC_API_KEY?.trim() ||
16
+ process.env.KUBBISEC_JOB_TOKEN?.trim() ||
17
+ process.env.OPENAI_API_KEY?.trim());
18
+ }
19
+ function readDefaultProjectId() {
20
+ const fromEnv = process.env.KUBBISEC_CONTEXT_PROJECT_ID?.trim();
21
+ if (fromEnv)
22
+ return fromEnv;
23
+ try {
24
+ const raw = fs.readFileSync(getKubbisecConfigPath(), "utf8");
25
+ const parsed = JSON.parse(raw);
26
+ return parsed.defaultProject?.trim() || undefined;
27
+ }
28
+ catch {
29
+ return undefined;
30
+ }
31
+ }
32
+ export function extractVulnerabilityIdFromParams(params) {
33
+ const id = (typeof params.vulnerabilityId === "string" ? params.vulnerabilityId.trim() : "") ||
34
+ (typeof params.vulnerability_id === "string" ? params.vulnerability_id.trim() : "") ||
35
+ "";
36
+ return id || undefined;
37
+ }
38
+ export function catalogParametersSchema(parameters) {
39
+ if (parameters && typeof parameters === "object" && Object.keys(parameters).length > 0) {
40
+ return parameters;
41
+ }
42
+ return Type.Object({});
43
+ }
44
+ function truncateToolText(text) {
45
+ if (text.length <= MAX_TOOL_RESULT_CHARS)
46
+ return text;
47
+ return `${text.slice(0, MAX_TOOL_RESULT_CHARS)}\n\n…[truncated ${text.length - MAX_TOOL_RESULT_CHARS} chars]`;
48
+ }
49
+ function catalogHeaders(apiKey) {
50
+ const headers = {
51
+ "x-api-key": apiKey,
52
+ "Content-Type": "application/json",
53
+ };
54
+ const orgId = process.env.KUBBISEC_ORG_ID?.trim();
55
+ if (orgId)
56
+ headers["x-organization-id"] = orgId;
57
+ return headers;
58
+ }
59
+ async function fetchCatalog(baseUrl, apiKey) {
60
+ const res = await fetch(`${baseUrl}/v1/ai/assistant/tools/catalog`, {
61
+ headers: catalogHeaders(apiKey),
62
+ });
63
+ if (!res.ok) {
64
+ throw new Error(`catalog HTTP ${res.status}`);
65
+ }
66
+ const body = (await res.json());
67
+ return (body.tools ?? []).filter((t) => t.available);
68
+ }
69
+ export default function kubbisecPlatformTools(api) {
70
+ let activeVulnerabilityId;
71
+ function buildToolContext() {
72
+ const projectId = readDefaultProjectId();
73
+ const ctx = projectId ? { projectId, mode: "draft" } : {};
74
+ if (process.env.KUBBISEC_CHAT_EXTENDED_CONTEXT === "1") {
75
+ ctx.allowExtendedLocalContext = true;
76
+ const ws = process.env.KUBBISEC_LOCAL_WORKSPACE?.trim() ||
77
+ process.env.KUBBISEC_AI_WORKSPACE?.trim();
78
+ if (ws)
79
+ ctx.localWorkspacePath = ws;
80
+ }
81
+ if (activeVulnerabilityId) {
82
+ ctx.vulnerabilityId = activeVulnerabilityId;
83
+ ctx.finding = { vulnerabilityId: activeVulnerabilityId };
84
+ }
85
+ return ctx;
86
+ }
87
+ async function executeRemoteTool(baseUrl, apiKey, name, args) {
88
+ const remembered = extractVulnerabilityIdFromParams(args);
89
+ if (remembered)
90
+ activeVulnerabilityId = remembered;
91
+ const res = await fetch(`${baseUrl}/v1/ai/assistant/tools/execute`, {
92
+ method: "POST",
93
+ headers: catalogHeaders(apiKey),
94
+ body: JSON.stringify({
95
+ name,
96
+ arguments: args,
97
+ context: buildToolContext(),
98
+ }),
99
+ });
100
+ if (!res.ok) {
101
+ const text = await res.text().catch(() => "");
102
+ throw new Error(`execute HTTP ${res.status}: ${text.slice(0, 200)}`);
103
+ }
104
+ return (await res.json());
105
+ }
106
+ api.on("session_start", async (_event, ctx) => {
107
+ activeVulnerabilityId = undefined;
108
+ const baseUrl = resolveApiBaseUrl();
109
+ const apiKey = resolveApiKey();
110
+ if (!baseUrl || !apiKey) {
111
+ ctx.ui?.setStatus("kubbisec-tools", "tools skipped");
112
+ ctx.ui?.notify("KubbiSec platform tools skipped (set KUBBISEC_API_URL + KUBBISEC_API_KEY)", "warning");
113
+ return;
114
+ }
115
+ let tools;
116
+ try {
117
+ tools = await fetchCatalog(baseUrl, apiKey);
118
+ }
119
+ catch (err) {
120
+ const message = err instanceof Error ? err.message : String(err);
121
+ ctx.ui?.setStatus("kubbisec-tools", "tools unavailable");
122
+ ctx.ui?.notify(`Could not load KubbiSec tool catalog: ${message}`, "warning");
123
+ return;
124
+ }
125
+ for (const tool of tools) {
126
+ api.registerTool({
127
+ name: tool.name,
128
+ label: tool.name,
129
+ description: tool.description,
130
+ parameters: catalogParametersSchema(tool.parameters),
131
+ async execute(_toolCallId, params) {
132
+ const remote = await executeRemoteTool(baseUrl, apiKey, tool.name, params);
133
+ const text = truncateToolText(JSON.stringify(remote.result, null, 2));
134
+ return {
135
+ content: [{ type: "text", text }],
136
+ details: { ok: remote.ok, name: tool.name },
137
+ };
138
+ },
139
+ });
140
+ }
141
+ ctx.ui?.setStatus("kubbisec-tools", `${tools.length} tools`);
142
+ });
143
+ }
144
+ //# sourceMappingURL=kubbisec-platform-tools.extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-platform-tools.extension.js","sourceRoot":"","sources":["../../src/extensions/kubbisec-platform-tools.extension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ type ExtensionApi = {
2
+ on: (event: string, handler: (event: unknown, ctx: ExtensionContext) => void | Promise<void>) => void;
3
+ };
4
+ type ExtensionContext = {
5
+ hasUI: boolean;
6
+ cwd: string;
7
+ ui: {
8
+ setStatus: (key: string, text: string | undefined) => void;
9
+ };
10
+ };
11
+ export default function kubbisecRuntimeStatus(api: ExtensionApi): void;
12
+ export {};
13
+ //# sourceMappingURL=kubbisec-runtime-status.extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-runtime-status.extension.d.ts","sourceRoot":"","sources":["../../src/extensions/kubbisec-runtime-status.extension.ts"],"names":[],"mappings":"AAQA,KAAK,YAAY,GAAG;IAClB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;CACvG,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE;QACF,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;KAC5D,CAAC;CACH,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAarE"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Footer status for loaded context file (AGENTS.md / CLAUDE.md) — not shown in chat startup listing.
3
+ */
4
+ import { findAgentsContextFile, formatKubbisecContextStatus, } from "../config/resolve-agents-context-file.js";
5
+ export default function kubbisecRuntimeStatus(api) {
6
+ api.on("session_start", async (_event, ctx) => {
7
+ if (!ctx.hasUI)
8
+ return;
9
+ const agentsFile = findAgentsContextFile(ctx.cwd);
10
+ if (!agentsFile) {
11
+ ctx.ui.setStatus("kubbisec-ctx", undefined);
12
+ return;
13
+ }
14
+ const home = process.env.HOME || process.env.USERPROFILE;
15
+ ctx.ui.setStatus("kubbisec-ctx", formatKubbisecContextStatus(agentsFile, home));
16
+ });
17
+ }
18
+ //# sourceMappingURL=kubbisec-runtime-status.extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-runtime-status.extension.js","sourceRoot":"","sources":["../../src/extensions/kubbisec-runtime-status.extension.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,0CAA0C,CAAC;AAclD,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,GAAiB;IAC7D,GAAG,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC5C,IAAI,CAAC,GAAG,CAAC,KAAK;YAAE,OAAO;QAEvB,MAAM,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACzD,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,2BAA2B,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC"}