@kubbisec/ai-linux-x64 0.1.4 → 0.1.6
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/bundled/clarify/clarify-gate.d.ts +27 -0
- package/bundled/clarify/clarify-gate.d.ts.map +1 -0
- package/bundled/clarify/clarify-gate.js +152 -0
- package/bundled/clarify/clarify-gate.js.map +1 -0
- package/bundled/clarify/clarify-ui-state.d.ts +12 -0
- package/bundled/clarify/clarify-ui-state.d.ts.map +1 -0
- package/bundled/clarify/clarify-ui-state.js +27 -0
- package/bundled/clarify/clarify-ui-state.js.map +1 -0
- package/bundled/clarify/parse-clarify-answer.d.ts +16 -0
- package/bundled/clarify/parse-clarify-answer.d.ts.map +1 -0
- package/bundled/clarify/parse-clarify-answer.js +22 -0
- package/bundled/clarify/parse-clarify-answer.js.map +1 -0
- package/bundled/clarify/question-format.d.ts +36 -0
- package/bundled/clarify/question-format.d.ts.map +1 -0
- package/bundled/clarify/question-format.js +150 -0
- package/bundled/clarify/question-format.js.map +1 -0
- package/bundled/clarify/questionnaire-tool.d.ts +25 -0
- package/bundled/clarify/questionnaire-tool.d.ts.map +1 -0
- package/bundled/clarify/questionnaire-tool.js +157 -0
- package/bundled/clarify/questionnaire-tool.js.map +1 -0
- package/bundled/clarify/session-questionnaire.d.ts +23 -0
- package/bundled/clarify/session-questionnaire.d.ts.map +1 -0
- package/bundled/clarify/session-questionnaire.js +319 -0
- package/bundled/clarify/session-questionnaire.js.map +1 -0
- package/bundled/clarify/session-questionnaire.types.d.ts +45 -0
- package/bundled/clarify/session-questionnaire.types.d.ts.map +1 -0
- package/bundled/clarify/session-questionnaire.types.js +13 -0
- package/bundled/clarify/session-questionnaire.types.js.map +1 -0
- package/bundled/config/config.d.ts +14 -0
- package/bundled/config/config.d.ts.map +1 -0
- package/bundled/config/config.js +66 -0
- package/bundled/config/config.js.map +1 -0
- package/bundled/config/ensure-kubbisec-project-settings.d.ts +20 -0
- package/bundled/config/ensure-kubbisec-project-settings.d.ts.map +1 -0
- package/bundled/config/ensure-kubbisec-project-settings.js +65 -0
- package/bundled/config/ensure-kubbisec-project-settings.js.map +1 -0
- package/bundled/config/feature-flags.d.ts +2 -0
- package/bundled/config/feature-flags.d.ts.map +1 -0
- package/bundled/config/feature-flags.js +2 -0
- package/bundled/config/feature-flags.js.map +1 -0
- package/bundled/config/format-kubbisec-footer-status.d.ts +2 -0
- package/bundled/config/format-kubbisec-footer-status.d.ts.map +1 -0
- package/bundled/config/format-kubbisec-footer-status.js +21 -0
- package/bundled/config/format-kubbisec-footer-status.js.map +1 -0
- package/bundled/config/resolve-agents-context-file.d.ts +4 -0
- package/bundled/config/resolve-agents-context-file.d.ts.map +1 -0
- package/bundled/config/resolve-agents-context-file.js +48 -0
- package/bundled/config/resolve-agents-context-file.js.map +1 -0
- package/bundled/config/resource-budget.d.ts +17 -0
- package/bundled/config/resource-budget.d.ts.map +1 -0
- package/bundled/config/resource-budget.js +35 -0
- package/bundled/config/resource-budget.js.map +1 -0
- package/bundled/copy/kubbisec-shell-copy.d.ts +8 -0
- package/bundled/copy/kubbisec-shell-copy.d.ts.map +1 -0
- package/bundled/copy/kubbisec-shell-copy.js +8 -0
- package/bundled/copy/kubbisec-shell-copy.js.map +1 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/client.d.ts +20 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/client.d.ts.map +1 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/client.js +121 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/client.js.map +1 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/feature-flags.d.ts +15 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/feature-flags.d.ts.map +1 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/feature-flags.js +34 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/feature-flags.js.map +1 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/index.d.ts +12 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/index.d.ts.map +1 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/index.js +35 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/index.js.map +1 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/sanitizer.d.ts +4 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/sanitizer.d.ts.map +1 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/sanitizer.js +89 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/sanitizer.js.map +1 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/storage-paths.d.ts +2 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/storage-paths.d.ts.map +1 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/storage-paths.js +13 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/storage-paths.js.map +1 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/types.d.ts +24 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/types.d.ts.map +1 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/types.js +9 -0
- package/bundled/node_modules/@kubbisec/chat-memory/dist/types.js.map +1 -0
- package/bundled/node_modules/@kubbisec/chat-memory/package.json +32 -0
- package/bundled/node_modules/@kubbisec/home/dist/api-url.d.ts +8 -0
- package/bundled/node_modules/@kubbisec/home/dist/api-url.d.ts.map +1 -0
- package/bundled/node_modules/@kubbisec/home/dist/api-url.js +19 -0
- package/bundled/node_modules/@kubbisec/home/dist/api-url.js.map +1 -0
- package/bundled/node_modules/@kubbisec/home/dist/cli-auth.types.d.ts +16 -0
- package/bundled/node_modules/@kubbisec/home/dist/cli-auth.types.d.ts.map +1 -0
- package/bundled/node_modules/@kubbisec/home/dist/cli-auth.types.js +22 -0
- package/bundled/node_modules/@kubbisec/home/dist/cli-auth.types.js.map +1 -0
- package/bundled/node_modules/@kubbisec/home/dist/index.d.ts +5 -0
- package/bundled/node_modules/@kubbisec/home/dist/index.d.ts.map +1 -0
- package/bundled/node_modules/@kubbisec/home/dist/index.js +5 -0
- package/bundled/node_modules/@kubbisec/home/dist/index.js.map +1 -0
- package/bundled/node_modules/@kubbisec/home/dist/migrate.d.ts +10 -0
- package/bundled/node_modules/@kubbisec/home/dist/migrate.d.ts.map +1 -0
- package/bundled/node_modules/@kubbisec/home/dist/migrate.js +107 -0
- package/bundled/node_modules/@kubbisec/home/dist/migrate.js.map +1 -0
- package/bundled/node_modules/@kubbisec/home/dist/paths.d.ts +22 -0
- package/bundled/node_modules/@kubbisec/home/dist/paths.d.ts.map +1 -0
- package/bundled/node_modules/@kubbisec/home/dist/paths.js +69 -0
- package/bundled/node_modules/@kubbisec/home/dist/paths.js.map +1 -0
- package/bundled/node_modules/@kubbisec/home/package.json +26 -0
- package/bundled/resolve-bundled-dist-root.js +165 -0
- package/bundled/resolve-bundled-dist-root.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export { MEMORY_ALLOWED_TOPICS } from "./types.js";
|
|
2
|
+
export { sanitizeMemoryText, MEMORY_BLOCKLIST } from "./sanitizer.js";
|
|
3
|
+
export { searchChatMemory, addChatMemoryTurn, forgetChatMemory, forgetAllChatMemory, listChatMemories, getMemoryStatus, resetChatMemoryStoreForTests, } from "./client.js";
|
|
4
|
+
export { resolveMemoryDir } from "./storage-paths.js";
|
|
5
|
+
export { envFlagOn, isMemoryEnabled, isSkillRouterEnabled, parseChatMode, resolveFeatureFlags, } from "./feature-flags.js";
|
|
6
|
+
export const MEMORY_INJECT_HEADER = "## KubbiSec — memórias relevantes\n";
|
|
7
|
+
export function buildMemoryInjectBlock(memories, maxBytes = 2048) {
|
|
8
|
+
if (memories.length === 0)
|
|
9
|
+
return "";
|
|
10
|
+
const lines = memories.map((m) => `- ${m.text.trim()}`);
|
|
11
|
+
let block = `${MEMORY_INJECT_HEADER}${lines.join("\n")}`;
|
|
12
|
+
while (Buffer.byteLength(block, "utf8") > maxBytes && lines.length > 1) {
|
|
13
|
+
lines.shift();
|
|
14
|
+
block = `${MEMORY_INJECT_HEADER}${lines.join("\n")}\n…`;
|
|
15
|
+
}
|
|
16
|
+
return block;
|
|
17
|
+
}
|
|
18
|
+
export function extractRememberCandidates(userMessage, assistantMessage) {
|
|
19
|
+
const candidates = [];
|
|
20
|
+
const combined = `${userMessage}\n${assistantMessage}`;
|
|
21
|
+
const patterns = [
|
|
22
|
+
/\b(severity|severityMin)\s*(HIGH|CRITICAL|MEDIUM|LOW)\b/gi,
|
|
23
|
+
/\bremediationMode\s*(auto|guided|patch_only)\b/gi,
|
|
24
|
+
/\bprojectId\s*[:\s]+[\w-]+/gi,
|
|
25
|
+
/\b(sempre auto|prefer HIGH|prefer high)\b/gi,
|
|
26
|
+
];
|
|
27
|
+
for (const pattern of patterns) {
|
|
28
|
+
const matches = combined.match(pattern);
|
|
29
|
+
if (matches) {
|
|
30
|
+
candidates.push(...matches.map((m) => m.trim()));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return [...new Set(candidates)].slice(0, 3);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,4BAA4B,GAE7B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACL,SAAS,EACT,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,mBAAmB,GAGpB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,MAAM,oBAAoB,GAAG,qCAAqC,CAAC;AAE1E,MAAM,UAAU,sBAAsB,CACpC,QAAiC,EACjC,QAAQ,GAAG,IAAI;IAEf,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACxD,IAAI,KAAK,GAAG,GAAG,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAEzD,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvE,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,KAAK,GAAG,GAAG,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,WAAmB,EAAE,gBAAwB;IACrF,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,GAAG,WAAW,KAAK,gBAAgB,EAAE,CAAC;IAEvD,MAAM,QAAQ,GAAG;QACf,2DAA2D;QAC3D,kDAAkD;QAClD,8BAA8B;QAC9B,6CAA6C;KAC9C,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../src/sanitizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAOpC,CAAC;AA6CF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CA8ChE"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
export const MEMORY_BLOCKLIST = [
|
|
2
|
+
/\b(sk|pk)[_-]?live[_-]?[a-zA-Z0-9]{10,}\b/i,
|
|
3
|
+
/-----BEGIN (RSA |EC )?PRIVATE KEY-----/,
|
|
4
|
+
/Bearer\s+[A-Za-z0-9\-._~+/]+=*/,
|
|
5
|
+
/\b(AWS|GITHUB|OPENAI)_\w+KEY\s*=\s*\S+/i,
|
|
6
|
+
/\bghp_[a-zA-Z0-9]{20,}\b/,
|
|
7
|
+
/\bsk-[a-zA-Z0-9]{20,}\b/,
|
|
8
|
+
];
|
|
9
|
+
const MAX_MEMORY_LENGTH = 512;
|
|
10
|
+
const REDACTION_REJECT_RATIO = 0.3;
|
|
11
|
+
const PREFERENCE_PHRASES = [
|
|
12
|
+
/\bsempre auto\b/i,
|
|
13
|
+
/\bprefer HIGH\b/i,
|
|
14
|
+
/\bprefer high\b/i,
|
|
15
|
+
/\bseverity (HIGH|CRITICAL|MEDIUM|LOW)\b/i,
|
|
16
|
+
/\bremediationMode\b/i,
|
|
17
|
+
/\bnausConstraints\b/i,
|
|
18
|
+
/\blanguagePreference\b/i,
|
|
19
|
+
/\bprojectId\b/i,
|
|
20
|
+
/\bseverityMin\b/i,
|
|
21
|
+
];
|
|
22
|
+
const UUID_PATTERN = /\b[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\b/i;
|
|
23
|
+
function matchesAllowlist(input) {
|
|
24
|
+
if (PREFERENCE_PHRASES.some((p) => p.test(input)))
|
|
25
|
+
return true;
|
|
26
|
+
if (UUID_PATTERN.test(input))
|
|
27
|
+
return true;
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
function applyBlocklist(input) {
|
|
31
|
+
let text = input;
|
|
32
|
+
let redactionCount = 0;
|
|
33
|
+
for (const pattern of MEMORY_BLOCKLIST) {
|
|
34
|
+
try {
|
|
35
|
+
const matches = text.match(new RegExp(pattern.source, pattern.flags + "g"));
|
|
36
|
+
if (matches) {
|
|
37
|
+
redactionCount += matches.length;
|
|
38
|
+
text = text.replace(new RegExp(pattern.source, pattern.flags + "g"), "[REDACTED]");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return { text: input, redactionCount: input.length };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return { text, redactionCount };
|
|
46
|
+
}
|
|
47
|
+
export function sanitizeMemoryText(input) {
|
|
48
|
+
try {
|
|
49
|
+
const trimmed = input.trim();
|
|
50
|
+
if (!trimmed) {
|
|
51
|
+
return { text: "", redacted: false, redactionCount: 0, rejected: true, reason: "empty" };
|
|
52
|
+
}
|
|
53
|
+
const { text: redactedText, redactionCount } = applyBlocklist(trimmed);
|
|
54
|
+
const originalLen = trimmed.length;
|
|
55
|
+
const redacted = redactionCount > 0;
|
|
56
|
+
if (originalLen > 0 && redactionCount / originalLen > REDACTION_REJECT_RATIO) {
|
|
57
|
+
return {
|
|
58
|
+
text: redactedText.slice(0, MAX_MEMORY_LENGTH),
|
|
59
|
+
redacted: true,
|
|
60
|
+
redactionCount,
|
|
61
|
+
rejected: true,
|
|
62
|
+
reason: "high_redaction_ratio",
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (!matchesAllowlist(redactedText)) {
|
|
66
|
+
return {
|
|
67
|
+
text: redactedText.slice(0, MAX_MEMORY_LENGTH),
|
|
68
|
+
redacted,
|
|
69
|
+
redactionCount,
|
|
70
|
+
rejected: true,
|
|
71
|
+
reason: "allowlist_fail",
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const capped = redactedText.length > MAX_MEMORY_LENGTH
|
|
75
|
+
? redactedText.slice(0, MAX_MEMORY_LENGTH)
|
|
76
|
+
: redactedText;
|
|
77
|
+
return { text: capped, redacted, redactionCount, rejected: false };
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return {
|
|
81
|
+
text: "",
|
|
82
|
+
redacted: false,
|
|
83
|
+
redactionCount: 0,
|
|
84
|
+
rejected: true,
|
|
85
|
+
reason: "sanitize_error",
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=sanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../src/sanitizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-paths.d.ts","sourceRoot":"","sources":["../src/storage-paths.ts"],"names":[],"mappings":"AAKA,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAQ7E"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as os from "node:os";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { getMemoryDir } from "@kubbisec/home";
|
|
4
|
+
export function resolveMemoryDir(env = process.env) {
|
|
5
|
+
const fromEnv = env.KUBBISEC_MEMORY_DIR?.trim();
|
|
6
|
+
if (fromEnv) {
|
|
7
|
+
return fromEnv.startsWith("~")
|
|
8
|
+
? path.join(os.homedir(), fromEnv.slice(1))
|
|
9
|
+
: fromEnv;
|
|
10
|
+
}
|
|
11
|
+
return getMemoryDir();
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=storage-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-paths.js","sourceRoot":"","sources":["../src/storage-paths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,UAAU,gBAAgB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACnE,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC;IAChD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC,CAAC,OAAO,CAAC;IACd,CAAC;IACD,OAAO,YAAY,EAAE,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type MemoryScope = {
|
|
2
|
+
userId: string;
|
|
3
|
+
organizationId: string;
|
|
4
|
+
projectId?: string;
|
|
5
|
+
sessionId?: string;
|
|
6
|
+
agentId?: string;
|
|
7
|
+
};
|
|
8
|
+
export type MemoryRecord = {
|
|
9
|
+
id: string;
|
|
10
|
+
text: string;
|
|
11
|
+
scope: MemoryScope;
|
|
12
|
+
createdAt: string;
|
|
13
|
+
metadata?: Record<string, string>;
|
|
14
|
+
};
|
|
15
|
+
export type SanitizeResult = {
|
|
16
|
+
text: string;
|
|
17
|
+
redacted: boolean;
|
|
18
|
+
redactionCount: number;
|
|
19
|
+
rejected: boolean;
|
|
20
|
+
reason?: string;
|
|
21
|
+
};
|
|
22
|
+
export declare const MEMORY_ALLOWED_TOPICS: readonly ["projectId", "severityMin", "remediationMode", "nausConstraints", "extendedContext", "languagePreference"];
|
|
23
|
+
export type MemoryAllowedTopic = (typeof MEMORY_ALLOWED_TOPICS)[number];
|
|
24
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,qBAAqB,sHAOxB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,WAAW;IACX,aAAa;IACb,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,oBAAoB;CACZ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kubbisec/chat-memory",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"description": "KubbiSec chat memory — mem0 wrapper with in-memory fallback",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"check-types": "tsc --noEmit",
|
|
18
|
+
"test": "vitest",
|
|
19
|
+
"test:run": "vitest run"
|
|
20
|
+
},
|
|
21
|
+
"optionalDependencies": {
|
|
22
|
+
"mem0ai": "^2.1.30"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@kubbisec/home": "workspace:*"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^20.0.0",
|
|
29
|
+
"typescript": "^5.9.2",
|
|
30
|
+
"vitest": "^4.1.4"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Production KubbiSec API base URL (no trailing slash). */
|
|
2
|
+
export declare const DEFAULT_KUBBISEC_API_URL = "https://api.kubbisec.com";
|
|
3
|
+
/**
|
|
4
|
+
* Resolves API base URL: explicit override → env → cloud default.
|
|
5
|
+
* Env override is for development/self-hosted only; end-user CLIs do not expose URL flags.
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveKubbisecApiUrl(override?: string): string;
|
|
8
|
+
//# sourceMappingURL=api-url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-url.d.ts","sourceRoot":"","sources":["../src/api-url.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAMnE;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAS/D"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Production KubbiSec API base URL (no trailing slash). */
|
|
2
|
+
export const DEFAULT_KUBBISEC_API_URL = "https://api.kubbisec.com";
|
|
3
|
+
function trimTrailingSlash(url) {
|
|
4
|
+
return url.replace(/\/+$/, "");
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Resolves API base URL: explicit override → env → cloud default.
|
|
8
|
+
* Env override is for development/self-hosted only; end-user CLIs do not expose URL flags.
|
|
9
|
+
*/
|
|
10
|
+
export function resolveKubbisecApiUrl(override) {
|
|
11
|
+
const fromOverride = override?.trim();
|
|
12
|
+
if (fromOverride)
|
|
13
|
+
return trimTrailingSlash(fromOverride);
|
|
14
|
+
const fromEnv = process.env.KUBBISEC_API_URL?.trim() || process.env.ASPM_API_URL?.trim() || "";
|
|
15
|
+
if (fromEnv)
|
|
16
|
+
return trimTrailingSlash(fromEnv);
|
|
17
|
+
return DEFAULT_KUBBISEC_API_URL;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=api-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-url.js","sourceRoot":"","sources":["../src/api-url.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;AAEnE,SAAS,iBAAiB,CAAC,GAAW;IACpC,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAiB;IACrD,MAAM,YAAY,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC;IACtC,IAAI,YAAY;QAAE,OAAO,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAEzD,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjF,IAAI,OAAO;QAAE,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE/C,OAAO,wBAAwB,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type CliAuthOrganization = {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
slug: string;
|
|
5
|
+
};
|
|
6
|
+
export type CliAuthContext = {
|
|
7
|
+
defaultOrganizationId: string;
|
|
8
|
+
organizations: CliAuthOrganization[];
|
|
9
|
+
apiKeyScope: "organization" | "user";
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Picks organization for CLI login when no interactive picker is needed.
|
|
13
|
+
* Returns null when the caller must prompt (multiple orgs, no --org flag).
|
|
14
|
+
*/
|
|
15
|
+
export declare function pickLoginOrganization(context: CliAuthContext, orgFlag?: string): string | null;
|
|
16
|
+
//# sourceMappingURL=cli-auth.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-auth.types.d.ts","sourceRoot":"","sources":["../src/cli-auth.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,WAAW,EAAE,cAAc,GAAG,MAAM,CAAC;CACtC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAqBf"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Picks organization for CLI login when no interactive picker is needed.
|
|
3
|
+
* Returns null when the caller must prompt (multiple orgs, no --org flag).
|
|
4
|
+
*/
|
|
5
|
+
export function pickLoginOrganization(context, orgFlag) {
|
|
6
|
+
const trimmedFlag = orgFlag?.trim();
|
|
7
|
+
if (trimmedFlag) {
|
|
8
|
+
const match = context.organizations.find((org) => org.id === trimmedFlag);
|
|
9
|
+
if (!match) {
|
|
10
|
+
throw new Error(`Organization "${trimmedFlag}" is not available for this API key. Choose one of: ${context.organizations.map((o) => o.name).join(", ")}`);
|
|
11
|
+
}
|
|
12
|
+
return trimmedFlag;
|
|
13
|
+
}
|
|
14
|
+
if (context.organizations.length === 0) {
|
|
15
|
+
throw new Error("No workspaces found for this API key.");
|
|
16
|
+
}
|
|
17
|
+
if (context.organizations.length === 1) {
|
|
18
|
+
return context.organizations[0].id;
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=cli-auth.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-auth.types.js","sourceRoot":"","sources":["../src/cli-auth.types.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAuB,EACvB,OAAgB;IAEhB,MAAM,WAAW,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC;IACpC,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QAC1E,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,iBAAiB,WAAW,uDAAuD,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzI,CAAC;QACJ,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;IACtC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { DEFAULT_KUBBISEC_API_URL, resolveKubbisecApiUrl } from "./api-url.js";
|
|
2
|
+
export { pickLoginOrganization, type CliAuthContext, type CliAuthOrganization, } from "./cli-auth.types.js";
|
|
3
|
+
export { getAiStateDir, getAspmConfigPath, getAspmStateDir, getKbsConfigPath, getKubbisecConfigPath, getKubbisecHomeDir, getMemoryDir, getNausStateDir, getSkillOptBaseDir, getTelemetryDir, } from "./paths.js";
|
|
4
|
+
export { migrateLegacyKubbisecPaths, resetMigrationGuardForTests } from "./migrate.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EACL,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { DEFAULT_KUBBISEC_API_URL, resolveKubbisecApiUrl } from "./api-url.js";
|
|
2
|
+
export { pickLoginOrganization, } from "./cli-auth.types.js";
|
|
3
|
+
export { getAiStateDir, getAspmConfigPath, getAspmStateDir, getKbsConfigPath, getKubbisecConfigPath, getKubbisecHomeDir, getMemoryDir, getNausStateDir, getSkillOptBaseDir, getTelemetryDir, } from "./paths.js";
|
|
4
|
+
export { migrateLegacyKubbisecPaths, resetMigrationGuardForTests } from "./migrate.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EACL,qBAAqB,GAGtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-time idempotent migration from legacy paths:
|
|
3
|
+
* - `~/.naus` → `~/.kubbisec/naus`
|
|
4
|
+
* - `~/.kubbisec/config.json` → `~/.kubbisec/aspm/config.json`
|
|
5
|
+
* - AI artifacts at `~/.kubbisec/*` → `~/.kubbisec/ai/*`
|
|
6
|
+
*/
|
|
7
|
+
export declare function migrateLegacyKubbisecPaths(): void;
|
|
8
|
+
/** Test helper — reset in-process migration guard. */
|
|
9
|
+
export declare function resetMigrationGuardForTests(): void;
|
|
10
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAmEA;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAsCjD;AAED,sDAAsD;AACtD,wBAAgB,2BAA2B,IAAI,IAAI,CAElD"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as os from "node:os";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { getAiStateDir, getAspmConfigPath, getKubbisecHomeDir, getNausStateDir, } from "./paths.js";
|
|
5
|
+
const AI_ROOT_ENTRIES = [
|
|
6
|
+
"kubbisec.json",
|
|
7
|
+
"kbs.json",
|
|
8
|
+
"daemon",
|
|
9
|
+
"memory",
|
|
10
|
+
"skill-opt",
|
|
11
|
+
"telemetry",
|
|
12
|
+
"tools",
|
|
13
|
+
];
|
|
14
|
+
function pathExists(p) {
|
|
15
|
+
try {
|
|
16
|
+
fs.accessSync(p);
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function dirIsEmpty(dir) {
|
|
24
|
+
if (!pathExists(dir))
|
|
25
|
+
return true;
|
|
26
|
+
try {
|
|
27
|
+
return fs.readdirSync(dir).length === 0;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function ensureDir(dir) {
|
|
34
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
35
|
+
}
|
|
36
|
+
/** Move `src` → `dest` when dest is absent; skip if src missing. */
|
|
37
|
+
function moveIfAbsent(src, dest) {
|
|
38
|
+
if (!pathExists(src))
|
|
39
|
+
return false;
|
|
40
|
+
if (pathExists(dest))
|
|
41
|
+
return false;
|
|
42
|
+
ensureDir(path.dirname(dest));
|
|
43
|
+
fs.renameSync(src, dest);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
/** Move directory when dest absent or empty. */
|
|
47
|
+
function moveDirIfAbsent(src, dest) {
|
|
48
|
+
if (!pathExists(src))
|
|
49
|
+
return false;
|
|
50
|
+
if (pathExists(dest) && !dirIsEmpty(dest))
|
|
51
|
+
return false;
|
|
52
|
+
if (pathExists(dest) && dirIsEmpty(dest)) {
|
|
53
|
+
fs.rmdirSync(dest);
|
|
54
|
+
}
|
|
55
|
+
ensureDir(path.dirname(dest));
|
|
56
|
+
fs.renameSync(src, dest);
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
let migrationDone = false;
|
|
60
|
+
/**
|
|
61
|
+
* One-time idempotent migration from legacy paths:
|
|
62
|
+
* - `~/.naus` → `~/.kubbisec/naus`
|
|
63
|
+
* - `~/.kubbisec/config.json` → `~/.kubbisec/aspm/config.json`
|
|
64
|
+
* - AI artifacts at `~/.kubbisec/*` → `~/.kubbisec/ai/*`
|
|
65
|
+
*/
|
|
66
|
+
export function migrateLegacyKubbisecPaths() {
|
|
67
|
+
if (migrationDone)
|
|
68
|
+
return;
|
|
69
|
+
migrationDone = true;
|
|
70
|
+
if (process.env.KUBBISEC_SKIP_HOME_MIGRATION === "1")
|
|
71
|
+
return;
|
|
72
|
+
const legacyNaus = path.join(os.homedir(), ".naus");
|
|
73
|
+
const nausDest = getNausStateDir();
|
|
74
|
+
if (!process.env.NAUS_STATE_DIR?.trim()) {
|
|
75
|
+
moveDirIfAbsent(legacyNaus, nausDest);
|
|
76
|
+
}
|
|
77
|
+
const home = getKubbisecHomeDir();
|
|
78
|
+
ensureDir(home);
|
|
79
|
+
const legacyAspmConfig = path.join(home, "config.json");
|
|
80
|
+
const aspmConfig = getAspmConfigPath();
|
|
81
|
+
if (!process.env.ASPM_STATE_DIR?.trim() && !process.env.KUBBISEC_ASPM_DIR?.trim()) {
|
|
82
|
+
moveIfAbsent(legacyAspmConfig, aspmConfig);
|
|
83
|
+
}
|
|
84
|
+
const aiDir = getAiStateDir();
|
|
85
|
+
if (!process.env.KUBBISEC_STATE_DIR?.trim()) {
|
|
86
|
+
ensureDir(aiDir);
|
|
87
|
+
for (const entry of AI_ROOT_ENTRIES) {
|
|
88
|
+
const src = path.join(home, entry);
|
|
89
|
+
const dest = path.join(aiDir, entry);
|
|
90
|
+
const stat = pathExists(src) ? fs.statSync(src) : null;
|
|
91
|
+
if (!stat)
|
|
92
|
+
continue;
|
|
93
|
+
if (stat.isDirectory()) {
|
|
94
|
+
moveDirIfAbsent(src, dest);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
moveIfAbsent(src, dest);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
moveIfAbsent(path.join(aiDir, "kbs.json"), path.join(aiDir, "kubbisec.json"));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/** Test helper — reset in-process migration guard. */
|
|
104
|
+
export function resetMigrationGuardForTests() {
|
|
105
|
+
migrationDone = false;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Root KubbiSec user data directory: `~/.kubbisec`. */
|
|
2
|
+
export declare function getKubbisecHomeDir(): string;
|
|
3
|
+
/** NAUS runner state (certs, config, workspaces). Override: `NAUS_STATE_DIR`. */
|
|
4
|
+
export declare function getNausStateDir(): string;
|
|
5
|
+
/** ASPM CLI config directory. Overrides: `ASPM_STATE_DIR`, `KUBBISEC_ASPM_DIR`. */
|
|
6
|
+
export declare function getAspmStateDir(): string;
|
|
7
|
+
export declare function getAspmConfigPath(): string;
|
|
8
|
+
/**
|
|
9
|
+
* KubbiSec AI CLI state (kubbisec.json, daemon, memory, skill-opt, telemetry, tools).
|
|
10
|
+
* Override: `KUBBISEC_STATE_DIR` (legacy name kept for compatibility).
|
|
11
|
+
*/
|
|
12
|
+
export declare function getAiStateDir(): string;
|
|
13
|
+
export declare function getKubbisecConfigPath(): string;
|
|
14
|
+
/** @deprecated Use {@link getKubbisecConfigPath}. */
|
|
15
|
+
export declare function getKbsConfigPath(): string;
|
|
16
|
+
/** Default chat memory store under AI state. Override: `KUBBISEC_MEMORY_DIR`. */
|
|
17
|
+
export declare function getMemoryDir(): string;
|
|
18
|
+
/** Default skill-opt store under AI state. Override: `KUBBISEC_SKILL_OPT_DIR`. */
|
|
19
|
+
export declare function getSkillOptBaseDir(): string;
|
|
20
|
+
/** Telemetry exports under AI state. */
|
|
21
|
+
export declare function getTelemetryDir(): string;
|
|
22
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAGA,wDAAwD;AACxD,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C;AAED,iFAAiF;AACjF,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AAED,mFAAmF;AACnF,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,qDAAqD;AACrD,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,iFAAiF;AACjF,wBAAgB,YAAY,IAAI,MAAM,CAIrC;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C;AAED,wCAAwC;AACxC,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import * as os from "node:os";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
/** Root KubbiSec user data directory: `~/.kubbisec`. */
|
|
4
|
+
export function getKubbisecHomeDir() {
|
|
5
|
+
const override = process.env.KUBBISEC_HOME?.trim();
|
|
6
|
+
if (override)
|
|
7
|
+
return expandHome(override);
|
|
8
|
+
return path.join(os.homedir(), ".kubbisec");
|
|
9
|
+
}
|
|
10
|
+
/** NAUS runner state (certs, config, workspaces). Override: `NAUS_STATE_DIR`. */
|
|
11
|
+
export function getNausStateDir() {
|
|
12
|
+
const raw = process.env.NAUS_STATE_DIR?.trim();
|
|
13
|
+
if (raw)
|
|
14
|
+
return raw;
|
|
15
|
+
return path.join(getKubbisecHomeDir(), "naus");
|
|
16
|
+
}
|
|
17
|
+
/** ASPM CLI config directory. Overrides: `ASPM_STATE_DIR`, `KUBBISEC_ASPM_DIR`. */
|
|
18
|
+
export function getAspmStateDir() {
|
|
19
|
+
const override = process.env.ASPM_STATE_DIR?.trim() || process.env.KUBBISEC_ASPM_DIR?.trim();
|
|
20
|
+
if (override)
|
|
21
|
+
return expandHome(override);
|
|
22
|
+
return path.join(getKubbisecHomeDir(), "aspm");
|
|
23
|
+
}
|
|
24
|
+
export function getAspmConfigPath() {
|
|
25
|
+
return path.join(getAspmStateDir(), "config.json");
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* KubbiSec AI CLI state (kubbisec.json, daemon, memory, skill-opt, telemetry, tools).
|
|
29
|
+
* Override: `KUBBISEC_STATE_DIR` (legacy name kept for compatibility).
|
|
30
|
+
*/
|
|
31
|
+
export function getAiStateDir() {
|
|
32
|
+
const override = process.env.KUBBISEC_STATE_DIR?.trim();
|
|
33
|
+
if (override)
|
|
34
|
+
return expandHome(override);
|
|
35
|
+
return path.join(getKubbisecHomeDir(), "ai");
|
|
36
|
+
}
|
|
37
|
+
export function getKubbisecConfigPath() {
|
|
38
|
+
return path.join(getAiStateDir(), "kubbisec.json");
|
|
39
|
+
}
|
|
40
|
+
/** @deprecated Use {@link getKubbisecConfigPath}. */
|
|
41
|
+
export function getKbsConfigPath() {
|
|
42
|
+
return getKubbisecConfigPath();
|
|
43
|
+
}
|
|
44
|
+
/** Default chat memory store under AI state. Override: `KUBBISEC_MEMORY_DIR`. */
|
|
45
|
+
export function getMemoryDir() {
|
|
46
|
+
const fromEnv = process.env.KUBBISEC_MEMORY_DIR?.trim();
|
|
47
|
+
if (fromEnv)
|
|
48
|
+
return expandHome(fromEnv);
|
|
49
|
+
return path.join(getAiStateDir(), "memory");
|
|
50
|
+
}
|
|
51
|
+
/** Default skill-opt store under AI state. Override: `KUBBISEC_SKILL_OPT_DIR`. */
|
|
52
|
+
export function getSkillOptBaseDir() {
|
|
53
|
+
const override = process.env.KUBBISEC_SKILL_OPT_DIR?.trim();
|
|
54
|
+
if (override)
|
|
55
|
+
return expandHome(override);
|
|
56
|
+
return path.join(getAiStateDir(), "skill-opt");
|
|
57
|
+
}
|
|
58
|
+
/** Telemetry exports under AI state. */
|
|
59
|
+
export function getTelemetryDir() {
|
|
60
|
+
return path.join(getAiStateDir(), "telemetry");
|
|
61
|
+
}
|
|
62
|
+
function expandHome(p) {
|
|
63
|
+
if (p.startsWith("~/"))
|
|
64
|
+
return path.join(os.homedir(), p.slice(2));
|
|
65
|
+
if (p === "~")
|
|
66
|
+
return os.homedir();
|
|
67
|
+
return p;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kubbisec/home",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"description": "KubbiSec CLI home directory layout (~/.kubbisec/{naus,aspm,ai})",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"check-types": "tsc --noEmit",
|
|
18
|
+
"test": "vitest",
|
|
19
|
+
"test:run": "vitest run"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@types/node": "^22.0.0",
|
|
23
|
+
"typescript": "^5.9.2",
|
|
24
|
+
"vitest": "^4.1.4"
|
|
25
|
+
}
|
|
26
|
+
}
|