@kubbisec/ai-linux-arm64 0.1.30 → 0.1.31
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.
- package/bin/kubbisec +0 -0
- package/package.json +1 -1
- package/bundled/config/ensure-kbs-project-settings.d.ts +0 -20
- package/bundled/config/ensure-kbs-project-settings.d.ts.map +0 -1
- package/bundled/config/ensure-kbs-project-settings.js +0 -46
- package/bundled/config/ensure-kbs-project-settings.js.map +0 -1
- package/bundled/extensions/kubbisec-clarify.extension.d.ts +0 -50
- package/bundled/extensions/kubbisec-clarify.extension.d.ts.map +0 -1
- package/bundled/extensions/kubbisec-clarify.extension.js +0 -363
- package/bundled/extensions/kubbisec-clarify.extension.js.map +0 -1
package/bin/kubbisec
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export declare const KBS_PROJECT_CONFIG_DIR = ".kbs";
|
|
2
|
-
export declare const KBS_PROJECT_SETTINGS_FILE = "settings.json";
|
|
3
|
-
export declare const KBS_SPECS_DIR = "specs";
|
|
4
|
-
export declare const KBS_PLANS_DIR = "plans";
|
|
5
|
-
export declare const KBS_CONTEXT_DIR = "context";
|
|
6
|
-
export type KbsProjectSettings = {
|
|
7
|
-
quietStartup?: boolean;
|
|
8
|
-
enableSkillCommands?: boolean;
|
|
9
|
-
workflow?: {
|
|
10
|
-
lastSpecSlug?: string;
|
|
11
|
-
lastPlanSlug?: string;
|
|
12
|
-
};
|
|
13
|
-
[key: string]: unknown;
|
|
14
|
-
};
|
|
15
|
-
/** Create `.kbs/specs`, `.kbs/plans`, `.kbs/context` (ART-003). */
|
|
16
|
-
export declare function ensureKbsProjectLayout(cwd: string): void;
|
|
17
|
-
export declare function resolveKbsProjectSettingsPath(cwd: string): string;
|
|
18
|
-
/** Merge KubbiSec defaults into `<cwd>/.kbs/settings.json` without removing user keys. */
|
|
19
|
-
export declare function ensureKbsProjectSettings(cwd?: string): string;
|
|
20
|
-
//# sourceMappingURL=ensure-kbs-project-settings.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-kbs-project-settings.d.ts","sourceRoot":"","sources":["../../src/config/ensure-kbs-project-settings.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAC7C,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AACzD,eAAO,MAAM,aAAa,UAAU,CAAC;AACrC,eAAO,MAAM,aAAa,UAAU,CAAC;AACrC,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,mEAAmE;AACnE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAKxD;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjE;AAeD,0FAA0F;AAC1F,wBAAgB,wBAAwB,CAAC,GAAG,SAAgB,GAAG,MAAM,CAcpE"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import * as fs from "node:fs";
|
|
2
|
-
import * as path from "node:path";
|
|
3
|
-
export const KBS_PROJECT_CONFIG_DIR = ".kbs";
|
|
4
|
-
export const KBS_PROJECT_SETTINGS_FILE = "settings.json";
|
|
5
|
-
export const KBS_SPECS_DIR = "specs";
|
|
6
|
-
export const KBS_PLANS_DIR = "plans";
|
|
7
|
-
export const KBS_CONTEXT_DIR = "context";
|
|
8
|
-
/** Create `.kbs/specs`, `.kbs/plans`, `.kbs/context` (ART-003). */
|
|
9
|
-
export function ensureKbsProjectLayout(cwd) {
|
|
10
|
-
const base = path.join(cwd, KBS_PROJECT_CONFIG_DIR);
|
|
11
|
-
for (const sub of [KBS_SPECS_DIR, KBS_PLANS_DIR, KBS_CONTEXT_DIR]) {
|
|
12
|
-
fs.mkdirSync(path.join(base, sub), { recursive: true, mode: 0o755 });
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
export function resolveKbsProjectSettingsPath(cwd) {
|
|
16
|
-
return path.join(cwd, KBS_PROJECT_CONFIG_DIR, KBS_PROJECT_SETTINGS_FILE);
|
|
17
|
-
}
|
|
18
|
-
function readExistingSettings(filePath) {
|
|
19
|
-
try {
|
|
20
|
-
const raw = fs.readFileSync(filePath, "utf8");
|
|
21
|
-
const parsed = JSON.parse(raw);
|
|
22
|
-
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
23
|
-
return parsed;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
/* missing or invalid — start fresh */
|
|
28
|
-
}
|
|
29
|
-
return {};
|
|
30
|
-
}
|
|
31
|
-
/** Merge KubbiSec defaults into `<cwd>/.kbs/settings.json` without removing user keys. */
|
|
32
|
-
export function ensureKbsProjectSettings(cwd = process.cwd()) {
|
|
33
|
-
const dir = path.join(cwd, KBS_PROJECT_CONFIG_DIR);
|
|
34
|
-
const filePath = resolveKbsProjectSettingsPath(cwd);
|
|
35
|
-
fs.mkdirSync(dir, { recursive: true, mode: 0o755 });
|
|
36
|
-
ensureKbsProjectLayout(cwd);
|
|
37
|
-
const existing = readExistingSettings(filePath);
|
|
38
|
-
const merged = {
|
|
39
|
-
...existing,
|
|
40
|
-
quietStartup: true,
|
|
41
|
-
enableSkillCommands: false,
|
|
42
|
-
};
|
|
43
|
-
fs.writeFileSync(filePath, `${JSON.stringify(merged, null, 2)}\n`, "utf8");
|
|
44
|
-
return filePath;
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=ensure-kbs-project-settings.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-kbs-project-settings.js","sourceRoot":"","sources":["../../src/config/ensure-kbs-project-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAC7C,MAAM,CAAC,MAAM,yBAAyB,GAAG,eAAe,CAAC;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AACrC,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAYzC,mEAAmE;AACnE,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACpD,KAAK,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC,EAAE,CAAC;QAClE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,GAAW;IACvD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,EAAE,yBAAyB,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,OAAO,MAA4B,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,wBAAwB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,6BAA6B,CAAC,GAAG,CAAC,CAAC;IACpD,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAE5B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,MAAM,GAAuB;QACjC,GAAG,QAAQ;QACX,YAAY,EAAE,IAAI;QAClB,mBAAmB,EAAE,KAAK;KAC3B,CAAC;IACF,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3E,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import type { Component, TUI } from "@earendil-works/pi-tui";
|
|
2
|
-
import type { SessionQuestionnaire } from "../clarify/session-questionnaire.types.js";
|
|
3
|
-
export declare const CLARIFY_MUTATION_TOOLS: Set<string>;
|
|
4
|
-
export declare const CLARIFY_READ_ONLY_TOOLS: Set<string>;
|
|
5
|
-
export declare const CLARIFY_TOOL_BLOCK_REASON = "Complete o question\u00E1rio de escopo (use o painel acima ou escreva a resposta) antes de editar ficheiros.";
|
|
6
|
-
export declare function isClarifyMutationTool(toolName: string): boolean;
|
|
7
|
-
export declare function shouldBlockClarifyTool(toolName: string, gateActive: boolean, questionnaire: SessionQuestionnaire | null): boolean;
|
|
8
|
-
export declare function detectChatMode(prompt: string): "plan" | "default";
|
|
9
|
-
export declare function buildClarifyContextMessage(questionnaire: SessionQuestionnaire): string;
|
|
10
|
-
export declare function syncClarifyUi(questionnaire: SessionQuestionnaire): void;
|
|
11
|
-
export declare function autoAskNextQuestion(questionnaire: SessionQuestionnaire, prompt: string): SessionQuestionnaire;
|
|
12
|
-
type ExtensionApi = {
|
|
13
|
-
on: (event: string, handler: (event: unknown, ctx: ExtensionContext) => undefined | Promise<unknown>) => void;
|
|
14
|
-
registerTool: (def: {
|
|
15
|
-
name: string;
|
|
16
|
-
label: string;
|
|
17
|
-
description: string;
|
|
18
|
-
parameters: unknown;
|
|
19
|
-
execute: (toolCallId: string, params: Record<string, unknown>, signal: AbortSignal) => Promise<{
|
|
20
|
-
content: Array<{
|
|
21
|
-
type: "text";
|
|
22
|
-
text: string;
|
|
23
|
-
}>;
|
|
24
|
-
details?: unknown;
|
|
25
|
-
}>;
|
|
26
|
-
}) => void;
|
|
27
|
-
};
|
|
28
|
-
type ExtensionContext = {
|
|
29
|
-
hasUI: boolean;
|
|
30
|
-
cwd: string;
|
|
31
|
-
ui: {
|
|
32
|
-
notify: (message: string, level?: string) => void;
|
|
33
|
-
setStatus: (key: string, text: string | undefined) => void;
|
|
34
|
-
setWidget: (id: string, factory: (tui: TUI, theme: {
|
|
35
|
-
fg: (role: string, text: string) => string;
|
|
36
|
-
bold?: (text: string) => string;
|
|
37
|
-
}) => Component, options?: {
|
|
38
|
-
placement?: string;
|
|
39
|
-
}) => void;
|
|
40
|
-
theme: {
|
|
41
|
-
fg: (role: string, text: string) => string;
|
|
42
|
-
bold?: (text: string) => string;
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
export declare function updateClarifyStatus(ctx: ExtensionContext, questionnaire: SessionQuestionnaire): void;
|
|
47
|
-
export declare function processClarifyPrompt(questionnaire: SessionQuestionnaire, prompt: string, cwd: string, clarifyMaxRounds: number): SessionQuestionnaire;
|
|
48
|
-
export default function kubbisecClarify(api: ExtensionApi): void;
|
|
49
|
-
export {};
|
|
50
|
-
//# sourceMappingURL=kubbisec-clarify.extension.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kubbisec-clarify.extension.d.ts","sourceRoot":"","sources":["../../src/extensions/kubbisec-clarify.extension.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAiC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAItF,eAAO,MAAM,sBAAsB,aAQjC,CAAC;AAEH,eAAO,MAAM,uBAAuB,aAUlC,CAAC;AAEH,eAAO,MAAM,yBAAyB,iHACqE,CAAC;AAE5G,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG/D;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,OAAO,EACnB,aAAa,EAAE,oBAAoB,GAAG,IAAI,GACzC,OAAO,CAKT;AAaD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAejE;AAiCD,wBAAgB,0BAA0B,CAAC,aAAa,EAAE,oBAAoB,GAAG,MAAM,CAMtF;AAUD,wBAAgB,aAAa,CAAC,aAAa,EAAE,oBAAoB,GAAG,IAAI,CAsCvE;AAmBD,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,oBAAoB,EACnC,MAAM,EAAE,MAAM,GACb,oBAAoB,CAWtB;AAcD,KAAK,YAAY,GAAG;IAClB,EAAE,EAAE,CACF,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,KAAK,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,KAC7E,IAAI,CAAC;IACV,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,CAAC;YAAC,OAAO,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;KACrF,KAAK,IAAI,CAAC;CACZ,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE;QACF,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAClD,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;QAC3D,SAAS,EAAE,CACT,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,CACP,GAAG,EAAE,GAAG,EACR,KAAK,EAAE;YAAE,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;SAAE,KACnF,SAAS,EACd,OAAO,CAAC,EAAE;YAAE,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,KAC7B,IAAI,CAAC;QACV,KAAK,EAAE;YAAE,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;SAAE,CAAC;KACxF,CAAC;CACH,CAAC;AAUF,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,gBAAgB,EACrB,aAAa,EAAE,oBAAoB,GAClC,IAAI,CAcN;AAED,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,oBAAoB,EACnC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,gBAAgB,EAAE,MAAM,GACvB,oBAAoB,CAgBtB;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAkK/D"}
|
|
@@ -1,363 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* KubbiSec clarify: scope gate, questionnaire tool, and mutation blocking until ready.
|
|
3
|
-
*/
|
|
4
|
-
import { randomUUID } from "node:crypto";
|
|
5
|
-
import * as fs from "node:fs";
|
|
6
|
-
import { getKubbisecConfigPath } from "@kubbisec/home";
|
|
7
|
-
import { shouldClarify, } from "../clarify/clarify-gate.js";
|
|
8
|
-
import { setClarifyGateActive } from "../clarify/clarify-gate-state.js";
|
|
9
|
-
import { renderClarifySelectPanel } from "../clarify/clarify-select-panel.js";
|
|
10
|
-
import { getClarifyUiSnapshot, resetClarifyUiSnapshot, setClarifyUiChangeListener, setClarifyUiSnapshot, } from "../clarify/clarify-ui-state.js";
|
|
11
|
-
import { parseClarifyAnswer } from "../clarify/parse-clarify-answer.js";
|
|
12
|
-
import { inferScenarioFromMessage } from "../clarify/question-format.js";
|
|
13
|
-
import { applyParsedUserAnswerIfPending, executeQuestionnaireTool, questionnaireToolParametersSchema, } from "../clarify/questionnaire-tool.js";
|
|
14
|
-
import { discoverScopeHints } from "../clarify/scope-discovery.js";
|
|
15
|
-
import { buildClarifyProgressLabel, finalizeQuestionnaireAtRoundLimit, hasMinimumScopeForScenario, readDefaultProjectId, readSessionQuestionnaire, shouldAcceptClarifyAnswer, writeSessionQuestionnaire, } from "../clarify/session-questionnaire.js";
|
|
16
|
-
import { resolveResourceBudget } from "../config/resource-budget.js";
|
|
17
|
-
import { getSessionWorkflowMode } from "../workflow/session-workflow-mode.js";
|
|
18
|
-
export const CLARIFY_MUTATION_TOOLS = new Set([
|
|
19
|
-
"edit",
|
|
20
|
-
"write",
|
|
21
|
-
"bash",
|
|
22
|
-
"delete",
|
|
23
|
-
"patch",
|
|
24
|
-
"apply_patch",
|
|
25
|
-
"set_pipeline_yaml",
|
|
26
|
-
]);
|
|
27
|
-
export const CLARIFY_READ_ONLY_TOOLS = new Set([
|
|
28
|
-
"read",
|
|
29
|
-
"grep",
|
|
30
|
-
"find",
|
|
31
|
-
"ls",
|
|
32
|
-
"glob",
|
|
33
|
-
"questionnaire",
|
|
34
|
-
"aspm_docs",
|
|
35
|
-
"naus_pipeline_docs",
|
|
36
|
-
"list_findings",
|
|
37
|
-
]);
|
|
38
|
-
export const CLARIFY_TOOL_BLOCK_REASON = "Complete o questionário de escopo (use o painel acima ou escreva a resposta) antes de editar ficheiros.";
|
|
39
|
-
export function isClarifyMutationTool(toolName) {
|
|
40
|
-
if (CLARIFY_READ_ONLY_TOOLS.has(toolName))
|
|
41
|
-
return false;
|
|
42
|
-
return CLARIFY_MUTATION_TOOLS.has(toolName);
|
|
43
|
-
}
|
|
44
|
-
export function shouldBlockClarifyTool(toolName, gateActive, questionnaire) {
|
|
45
|
-
if (!gateActive)
|
|
46
|
-
return false;
|
|
47
|
-
if (!questionnaire || questionnaire.status === "ready")
|
|
48
|
-
return false;
|
|
49
|
-
if (!isClarifyMutationTool(toolName))
|
|
50
|
-
return false;
|
|
51
|
-
return true;
|
|
52
|
-
}
|
|
53
|
-
function readDefaultProjectConfigured() {
|
|
54
|
-
if (readDefaultProjectId())
|
|
55
|
-
return true;
|
|
56
|
-
try {
|
|
57
|
-
const raw = fs.readFileSync(getKubbisecConfigPath(), "utf8");
|
|
58
|
-
const parsed = JSON.parse(raw);
|
|
59
|
-
return Boolean(parsed.defaultProject?.trim());
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
export function detectChatMode(prompt) {
|
|
66
|
-
if (getSessionWorkflowMode() === "plan") {
|
|
67
|
-
return "plan";
|
|
68
|
-
}
|
|
69
|
-
const trimmed = prompt.trim();
|
|
70
|
-
if (trimmed.startsWith("/mode:plan") ||
|
|
71
|
-
/@plan\b/i.test(trimmed) ||
|
|
72
|
-
/@planejar\b/i.test(trimmed)) {
|
|
73
|
-
return "plan";
|
|
74
|
-
}
|
|
75
|
-
const envMode = process.env.KUBBISEC_CHAT_MODE?.trim().toLowerCase();
|
|
76
|
-
if (envMode === "plan")
|
|
77
|
-
return "plan";
|
|
78
|
-
return "default";
|
|
79
|
-
}
|
|
80
|
-
function resolveSurface() {
|
|
81
|
-
const surface = process.env.KUBBISEC_CLARIFY_SURFACE?.trim().toLowerCase();
|
|
82
|
-
if (surface === "fix" || surface === "watch" || surface === "task-consumer") {
|
|
83
|
-
return surface;
|
|
84
|
-
}
|
|
85
|
-
if (process.env.KUBBISEC_FIX_MODE === "1" || process.env.KUBBISEC_WATCH_MODE === "1") {
|
|
86
|
-
return process.env.KUBBISEC_WATCH_MODE === "1" ? "watch" : "fix";
|
|
87
|
-
}
|
|
88
|
-
return "chat";
|
|
89
|
-
}
|
|
90
|
-
function buildGateInput(prompt, questionnaire) {
|
|
91
|
-
const msg = prompt.trim();
|
|
92
|
-
const budget = resolveResourceBudget();
|
|
93
|
-
const scenario = questionnaire.scenario ?? inferScenarioFromMessage(msg);
|
|
94
|
-
return {
|
|
95
|
-
surface: resolveSurface(),
|
|
96
|
-
userMessage: msg,
|
|
97
|
-
hasProjectId: readDefaultProjectConfigured() || questionnaire.fields.projectIds.length > 0,
|
|
98
|
-
hasVulnerabilityId: /\b(cve-|vuln|finding)/i.test(msg),
|
|
99
|
-
hasSeverityFilter: Boolean(questionnaire.fields.severityMin) || /\b(severity|critical|high)\b/i.test(msg),
|
|
100
|
-
mode: detectChatMode(msg),
|
|
101
|
-
scenario,
|
|
102
|
-
questionnaireStatus: questionnaire.status,
|
|
103
|
-
fields: questionnaire.fields,
|
|
104
|
-
historyCount: questionnaire.history.length,
|
|
105
|
-
clarifyMaxRounds: budget.clarifyMaxRounds,
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
export function buildClarifyContextMessage(questionnaire) {
|
|
109
|
-
const panelReady = questionnaire.awaitingUserAnswer && questionnaire.pending?.questionMarkdown;
|
|
110
|
-
return `[SCOPE GATE — internal only, never repeat to user]
|
|
111
|
-
${panelReady ? "Questionnaire panel is visible — do NOT ask user to look at the panel." : "Scope still missing — questionnaire auto-ask may run."}
|
|
112
|
-
Read-only until scope ready. User-facing replies: max 2 sentences; no chain-of-thought.
|
|
113
|
-
${questionnaire.awaitingUserAnswer ? "Wait for panel answer or free text." : "Use questionnaire record if user already gave scope in prose."}`;
|
|
114
|
-
}
|
|
115
|
-
function extractQuestionText(markdown) {
|
|
116
|
-
for (const line of markdown.split("\n")) {
|
|
117
|
-
const trimmed = line.trim();
|
|
118
|
-
if (trimmed && !/^[A-D]\)/.test(trimmed))
|
|
119
|
-
return trimmed;
|
|
120
|
-
}
|
|
121
|
-
return markdown.split("\n")[0]?.trim() ?? "";
|
|
122
|
-
}
|
|
123
|
-
export function syncClarifyUi(questionnaire) {
|
|
124
|
-
if (questionnaire.status === "ready") {
|
|
125
|
-
setClarifyUiSnapshot({
|
|
126
|
-
phase: "ready",
|
|
127
|
-
progressLabel: null,
|
|
128
|
-
questionMarkdown: null,
|
|
129
|
-
questionText: null,
|
|
130
|
-
optionLabels: [],
|
|
131
|
-
selected: [],
|
|
132
|
-
focusedIndex: 0,
|
|
133
|
-
});
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
if (!questionnaire.awaitingUserAnswer || !questionnaire.pending?.questionMarkdown) {
|
|
137
|
-
setClarifyUiSnapshot({
|
|
138
|
-
phase: "idle",
|
|
139
|
-
progressLabel: null,
|
|
140
|
-
questionMarkdown: null,
|
|
141
|
-
questionText: null,
|
|
142
|
-
optionLabels: [],
|
|
143
|
-
selected: [],
|
|
144
|
-
focusedIndex: 0,
|
|
145
|
-
});
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
const pending = questionnaire.pending;
|
|
149
|
-
setClarifyUiSnapshot({
|
|
150
|
-
phase: "asking",
|
|
151
|
-
progressLabel: buildClarifyProgressLabel(questionnaire),
|
|
152
|
-
questionMarkdown: pending.questionMarkdown,
|
|
153
|
-
questionText: extractQuestionText(pending.questionMarkdown),
|
|
154
|
-
optionLabels: pending.optionLabels,
|
|
155
|
-
selectionMode: pending.selectionMode ?? "single",
|
|
156
|
-
selected: [],
|
|
157
|
-
focusedIndex: 0,
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
function applyDiscoveredScope(questionnaire, prompt, cwd) {
|
|
161
|
-
const discovered = discoverScopeHints(cwd, prompt);
|
|
162
|
-
if (!discovered.fields || Object.keys(discovered.fields).length === 0) {
|
|
163
|
-
return questionnaire;
|
|
164
|
-
}
|
|
165
|
-
const result = executeQuestionnaireTool(questionnaire, {
|
|
166
|
-
action: "record",
|
|
167
|
-
scenario: discovered.scenario,
|
|
168
|
-
fields: discovered.fields,
|
|
169
|
-
});
|
|
170
|
-
return result.questionnaire;
|
|
171
|
-
}
|
|
172
|
-
export function autoAskNextQuestion(questionnaire, prompt) {
|
|
173
|
-
if (questionnaire.awaitingUserAnswer || questionnaire.status === "ready") {
|
|
174
|
-
return questionnaire;
|
|
175
|
-
}
|
|
176
|
-
const scenario = questionnaire.scenario ?? inferScenarioFromMessage(prompt);
|
|
177
|
-
const result = executeQuestionnaireTool(questionnaire, {
|
|
178
|
-
action: "ask",
|
|
179
|
-
scenario,
|
|
180
|
-
});
|
|
181
|
-
if (!result.ok)
|
|
182
|
-
return questionnaire;
|
|
183
|
-
return result.questionnaire;
|
|
184
|
-
}
|
|
185
|
-
function maybeMarkReady(questionnaire) {
|
|
186
|
-
const scenario = questionnaire.scenario ?? "remediation";
|
|
187
|
-
if (questionnaire.status === "collecting" &&
|
|
188
|
-
!questionnaire.awaitingUserAnswer &&
|
|
189
|
-
hasMinimumScopeForScenario(scenario, questionnaire.fields)) {
|
|
190
|
-
return { ...questionnaire, status: "ready", pending: null };
|
|
191
|
-
}
|
|
192
|
-
return questionnaire;
|
|
193
|
-
}
|
|
194
|
-
export function updateClarifyStatus(ctx, questionnaire) {
|
|
195
|
-
if (!ctx.hasUI)
|
|
196
|
-
return;
|
|
197
|
-
if (questionnaire.status === "ready") {
|
|
198
|
-
ctx.ui.setStatus("kubbisec-clarify", undefined);
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
if (questionnaire.awaitingUserAnswer) {
|
|
202
|
-
ctx.ui.setStatus("kubbisec-clarify", ctx.ui.theme.fg("warning", `questionário · ${questionnaire.status}`));
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
ctx.ui.setStatus("kubbisec-clarify", undefined);
|
|
206
|
-
}
|
|
207
|
-
export function processClarifyPrompt(questionnaire, prompt, cwd, clarifyMaxRounds) {
|
|
208
|
-
let next = questionnaire;
|
|
209
|
-
if (next.status === "collecting" && prompt.trim()) {
|
|
210
|
-
const selectionMode = next.pending?.selectionMode ?? "single";
|
|
211
|
-
const parsed = parseClarifyAnswer(prompt, selectionMode);
|
|
212
|
-
if (shouldAcceptClarifyAnswer(next, parsed)) {
|
|
213
|
-
next = applyParsedUserAnswerIfPending(next, parsed);
|
|
214
|
-
next = finalizeQuestionnaireAtRoundLimit(next, clarifyMaxRounds);
|
|
215
|
-
next = maybeMarkReady(next);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
next = applyDiscoveredScope(next, prompt, cwd);
|
|
219
|
-
next = maybeMarkReady(next);
|
|
220
|
-
return next;
|
|
221
|
-
}
|
|
222
|
-
export default function kubbisecClarify(api) {
|
|
223
|
-
const sessionId = randomUUID();
|
|
224
|
-
let questionnaire = readSessionQuestionnaire(process.cwd(), sessionId);
|
|
225
|
-
let gateActive = false;
|
|
226
|
-
let clarifyWidgetRegistered = false;
|
|
227
|
-
let lastUserMessage = "";
|
|
228
|
-
let sessionCwd = process.cwd();
|
|
229
|
-
function persist(ctx, next) {
|
|
230
|
-
questionnaire = next;
|
|
231
|
-
try {
|
|
232
|
-
writeSessionQuestionnaire(ctx.cwd, next);
|
|
233
|
-
}
|
|
234
|
-
catch (error) {
|
|
235
|
-
console.warn("[kubbisec-clarify] Failed to persist session questionnaire:", error);
|
|
236
|
-
}
|
|
237
|
-
updateClarifyStatus(ctx, next);
|
|
238
|
-
syncClarifyUi(next);
|
|
239
|
-
}
|
|
240
|
-
function ensureClarifyWidget(ctx) {
|
|
241
|
-
if (!ctx.hasUI || clarifyWidgetRegistered)
|
|
242
|
-
return;
|
|
243
|
-
clarifyWidgetRegistered = true;
|
|
244
|
-
ctx.ui.setWidget("kubbisec-clarify-panel", (tui, theme) => {
|
|
245
|
-
setClarifyUiChangeListener(() => {
|
|
246
|
-
tui.requestRender();
|
|
247
|
-
});
|
|
248
|
-
return {
|
|
249
|
-
dispose() {
|
|
250
|
-
setClarifyUiChangeListener(undefined);
|
|
251
|
-
},
|
|
252
|
-
invalidate() {
|
|
253
|
-
tui.requestRender();
|
|
254
|
-
},
|
|
255
|
-
render(w) {
|
|
256
|
-
return renderClarifySelectPanel(w, getClarifyUiSnapshot(), theme);
|
|
257
|
-
},
|
|
258
|
-
};
|
|
259
|
-
}, { placement: "aboveEditor" });
|
|
260
|
-
}
|
|
261
|
-
api.registerTool({
|
|
262
|
-
name: "questionnaire",
|
|
263
|
-
label: "Scope questionnaire",
|
|
264
|
-
description: "Format and track contextual scope questions (ask/record/status/complete). KubbiSec renders options in the panel above the editor.",
|
|
265
|
-
parameters: questionnaireToolParametersSchema(),
|
|
266
|
-
async execute(_toolCallId, params) {
|
|
267
|
-
const input = params;
|
|
268
|
-
const result = executeQuestionnaireTool(questionnaire, input, lastUserMessage);
|
|
269
|
-
questionnaire = result.questionnaire;
|
|
270
|
-
try {
|
|
271
|
-
writeSessionQuestionnaire(sessionCwd, questionnaire);
|
|
272
|
-
}
|
|
273
|
-
catch {
|
|
274
|
-
// best effort
|
|
275
|
-
}
|
|
276
|
-
syncClarifyUi(questionnaire);
|
|
277
|
-
return {
|
|
278
|
-
content: [{ type: "text", text: result.message }],
|
|
279
|
-
details: { ok: result.ok, status: result.status, action: result.action },
|
|
280
|
-
};
|
|
281
|
-
},
|
|
282
|
-
});
|
|
283
|
-
api.on("session_start", async (_event, ctx) => {
|
|
284
|
-
sessionCwd = ctx.cwd;
|
|
285
|
-
questionnaire = readSessionQuestionnaire(ctx.cwd, sessionId);
|
|
286
|
-
gateActive = false;
|
|
287
|
-
setClarifyGateActive(false);
|
|
288
|
-
lastUserMessage = "";
|
|
289
|
-
resetClarifyUiSnapshot();
|
|
290
|
-
ensureClarifyWidget(ctx);
|
|
291
|
-
updateClarifyStatus(ctx, questionnaire);
|
|
292
|
-
syncClarifyUi(questionnaire);
|
|
293
|
-
});
|
|
294
|
-
api.on("session_shutdown", async () => {
|
|
295
|
-
resetClarifyUiSnapshot();
|
|
296
|
-
setClarifyGateActive(false);
|
|
297
|
-
});
|
|
298
|
-
api.on("before_agent_start", async (event, ctx) => {
|
|
299
|
-
const { prompt } = event;
|
|
300
|
-
lastUserMessage = prompt;
|
|
301
|
-
const surface = resolveSurface();
|
|
302
|
-
ensureClarifyWidget(ctx);
|
|
303
|
-
if (surface !== "chat") {
|
|
304
|
-
gateActive = false;
|
|
305
|
-
setClarifyGateActive(false);
|
|
306
|
-
resetClarifyUiSnapshot();
|
|
307
|
-
return undefined;
|
|
308
|
-
}
|
|
309
|
-
const budget = resolveResourceBudget();
|
|
310
|
-
let next = readSessionQuestionnaire(ctx.cwd, questionnaire.sessionId);
|
|
311
|
-
next = processClarifyPrompt(next, prompt, ctx.cwd, budget.clarifyMaxRounds);
|
|
312
|
-
const gateInput = buildGateInput(prompt, next);
|
|
313
|
-
gateActive = shouldClarify(gateInput);
|
|
314
|
-
setClarifyGateActive(gateActive);
|
|
315
|
-
if (!gateActive) {
|
|
316
|
-
next = maybeMarkReady(next);
|
|
317
|
-
persist(ctx, next);
|
|
318
|
-
return undefined;
|
|
319
|
-
}
|
|
320
|
-
if (next.status === "collecting" && !next.awaitingUserAnswer) {
|
|
321
|
-
next = autoAskNextQuestion(next, prompt);
|
|
322
|
-
next = maybeMarkReady(next);
|
|
323
|
-
persist(ctx, next);
|
|
324
|
-
if (next.awaitingUserAnswer) {
|
|
325
|
-
return {
|
|
326
|
-
message: {
|
|
327
|
-
customType: "kubbisec-clarify",
|
|
328
|
-
content: buildClarifyContextMessage(next),
|
|
329
|
-
display: false,
|
|
330
|
-
},
|
|
331
|
-
};
|
|
332
|
-
}
|
|
333
|
-
return {
|
|
334
|
-
message: {
|
|
335
|
-
customType: "kubbisec-clarify",
|
|
336
|
-
content: buildClarifyContextMessage(next),
|
|
337
|
-
display: false,
|
|
338
|
-
},
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
persist(ctx, next);
|
|
342
|
-
return undefined;
|
|
343
|
-
});
|
|
344
|
-
api.on("tool_call", async (event, ctx) => {
|
|
345
|
-
const surface = resolveSurface();
|
|
346
|
-
if (surface !== "chat") {
|
|
347
|
-
return undefined;
|
|
348
|
-
}
|
|
349
|
-
questionnaire = readSessionQuestionnaire(ctx.cwd, questionnaire.sessionId);
|
|
350
|
-
const { toolName } = event;
|
|
351
|
-
if (toolName === "questionnaire") {
|
|
352
|
-
return undefined;
|
|
353
|
-
}
|
|
354
|
-
if (!shouldBlockClarifyTool(toolName, gateActive, questionnaire)) {
|
|
355
|
-
return undefined;
|
|
356
|
-
}
|
|
357
|
-
return {
|
|
358
|
-
block: true,
|
|
359
|
-
reason: CLARIFY_TOOL_BLOCK_REASON,
|
|
360
|
-
};
|
|
361
|
-
});
|
|
362
|
-
}
|
|
363
|
-
//# sourceMappingURL=kubbisec-clarify.extension.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kubbisec-clarify.extension.js","sourceRoot":"","sources":["../../src/extensions/kubbisec-clarify.extension.ts"],"names":[],"mappings":"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"}
|