siclaw 0.1.2 → 0.1.4
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/dist/agentbox/gateway-client.d.ts +4 -0
- package/dist/agentbox/gateway-client.js +9 -1
- package/dist/agentbox/gateway-client.js.map +1 -1
- package/dist/agentbox/http-server.js +25 -1
- package/dist/agentbox/http-server.js.map +1 -1
- package/dist/agentbox/session.d.ts +2 -0
- package/dist/agentbox/session.js +11 -7
- package/dist/agentbox/session.js.map +1 -1
- package/dist/agentbox-main.js +10 -0
- package/dist/agentbox-main.js.map +1 -1
- package/dist/cli-main.js +19 -3
- package/dist/cli-main.js.map +1 -1
- package/dist/core/agent-factory.d.ts +2 -0
- package/dist/core/agent-factory.js +87 -21
- package/dist/core/agent-factory.js.map +1 -1
- package/dist/core/compaction.d.ts +80 -0
- package/dist/core/compaction.js +442 -0
- package/dist/core/compaction.js.map +1 -0
- package/dist/core/config.d.ts +7 -0
- package/dist/core/config.js +27 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/extensions/compaction-safeguard.d.ts +2 -0
- package/dist/core/extensions/compaction-safeguard.js +681 -0
- package/dist/core/extensions/compaction-safeguard.js.map +1 -0
- package/dist/core/extensions/deep-investigation.js +47 -73
- package/dist/core/extensions/deep-investigation.js.map +1 -1
- package/dist/core/extensions/memory-flush.d.ts +2 -10
- package/dist/core/extensions/memory-flush.js +4 -86
- package/dist/core/extensions/memory-flush.js.map +1 -1
- package/dist/core/llm-proxy.js +25 -6
- package/dist/core/llm-proxy.js.map +1 -1
- package/dist/core/message-utils.d.ts +18 -0
- package/dist/core/message-utils.js +28 -0
- package/dist/core/message-utils.js.map +1 -0
- package/dist/core/prompt.js +4 -5
- package/dist/core/prompt.js.map +1 -1
- package/dist/core/session-tool-result-guard.d.ts +2 -0
- package/dist/core/session-tool-result-guard.js +159 -0
- package/dist/core/session-tool-result-guard.js.map +1 -0
- package/dist/core/stream-wrappers.d.ts +41 -0
- package/dist/core/stream-wrappers.js +369 -0
- package/dist/core/stream-wrappers.js.map +1 -0
- package/dist/core/thinking-blocks.d.ts +20 -0
- package/dist/core/thinking-blocks.js +45 -0
- package/dist/core/thinking-blocks.js.map +1 -0
- package/dist/core/tool-call-id.d.ts +22 -0
- package/dist/core/tool-call-id.js +226 -0
- package/dist/core/tool-call-id.js.map +1 -0
- package/dist/core/tool-call-repair.d.ts +18 -0
- package/dist/core/tool-call-repair.js +73 -0
- package/dist/core/tool-call-repair.js.map +1 -0
- package/dist/core/tool-result-context-guard.d.ts +36 -0
- package/dist/core/tool-result-context-guard.js +272 -0
- package/dist/core/tool-result-context-guard.js.map +1 -0
- package/dist/cron/cron-limits.d.ts +16 -0
- package/dist/cron/cron-limits.js +17 -0
- package/dist/cron/cron-limits.js.map +1 -0
- package/dist/cron/cron-matcher.d.ts +14 -0
- package/dist/cron/cron-matcher.js +29 -0
- package/dist/cron/cron-matcher.js.map +1 -1
- package/dist/gateway/agentbox/client.d.ts +0 -2
- package/dist/gateway/agentbox/client.js.map +1 -1
- package/dist/gateway/agentbox/k8s-spawner.d.ts +10 -10
- package/dist/gateway/agentbox/k8s-spawner.js +27 -55
- package/dist/gateway/agentbox/k8s-spawner.js.map +1 -1
- package/dist/gateway/agentbox/local-spawner.d.ts +5 -0
- package/dist/gateway/agentbox/local-spawner.js +10 -0
- package/dist/gateway/agentbox/local-spawner.js.map +1 -1
- package/dist/gateway/cron/cron-service.js +7 -0
- package/dist/gateway/cron/cron-service.js.map +1 -1
- package/dist/gateway/db/index.js +9 -1
- package/dist/gateway/db/index.js.map +1 -1
- package/dist/gateway/db/init-schema.js +65 -16
- package/dist/gateway/db/init-schema.js.map +1 -1
- package/dist/gateway/db/migrate-sqlite.js +73 -20
- package/dist/gateway/db/migrate-sqlite.js.map +1 -1
- package/dist/gateway/db/repositories/cluster-repo.d.ts +59 -0
- package/dist/gateway/db/repositories/cluster-repo.js +107 -0
- package/dist/gateway/db/repositories/cluster-repo.js.map +1 -0
- package/dist/gateway/db/repositories/config-repo.d.ts +4 -5
- package/dist/gateway/db/repositories/config-repo.js +17 -0
- package/dist/gateway/db/repositories/config-repo.js.map +1 -1
- package/dist/gateway/db/repositories/feedback-repo.d.ts +71 -0
- package/dist/gateway/db/repositories/feedback-repo.js +52 -0
- package/dist/gateway/db/repositories/feedback-repo.js.map +1 -0
- package/dist/gateway/db/repositories/knowledge-doc-repo.d.ts +37 -0
- package/dist/gateway/db/repositories/knowledge-doc-repo.js +48 -0
- package/dist/gateway/db/repositories/knowledge-doc-repo.js.map +1 -0
- package/dist/gateway/db/repositories/user-cluster-config-repo.d.ts +45 -0
- package/dist/gateway/db/repositories/user-cluster-config-repo.js +90 -0
- package/dist/gateway/db/repositories/user-cluster-config-repo.js.map +1 -0
- package/dist/gateway/db/repositories/workspace-repo.d.ts +2 -2
- package/dist/gateway/db/repositories/workspace-repo.js +12 -12
- package/dist/gateway/db/repositories/workspace-repo.js.map +1 -1
- package/dist/gateway/db/schema-mysql.d.ts +437 -44
- package/dist/gateway/db/schema-mysql.js +36 -9
- package/dist/gateway/db/schema-mysql.js.map +1 -1
- package/dist/gateway/db/schema-sqlite.d.ts +459 -46
- package/dist/gateway/db/schema-sqlite.js +36 -9
- package/dist/gateway/db/schema-sqlite.js.map +1 -1
- package/dist/gateway/db/schema.d.ts +435 -44
- package/dist/gateway/db/schema.js +1 -1
- package/dist/gateway/db/schema.js.map +1 -1
- package/dist/gateway/plugins/channel-bridge.js +1 -1
- package/dist/gateway/plugins/channel-bridge.js.map +1 -1
- package/dist/gateway/rpc-methods.d.ts +2 -1
- package/dist/gateway/rpc-methods.js +507 -172
- package/dist/gateway/rpc-methods.js.map +1 -1
- package/dist/gateway/server.js +191 -51
- package/dist/gateway/server.js.map +1 -1
- package/dist/gateway/web/dist/assets/index-DTD0P9j8.css +1 -0
- package/dist/gateway/web/dist/assets/index-DhqsS2E0.js +756 -0
- package/dist/gateway/web/dist/assets/index-DhqsS2E0.js.map +1 -0
- package/dist/gateway/web/dist/index.html +2 -2
- package/dist/gateway-main.js +1 -3
- package/dist/gateway-main.js.map +1 -1
- package/dist/memory/indexer.d.ts +13 -0
- package/dist/memory/indexer.js +91 -1
- package/dist/memory/indexer.js.map +1 -1
- package/dist/memory/knowledge-extractor.d.ts +47 -0
- package/dist/memory/knowledge-extractor.js +165 -0
- package/dist/memory/knowledge-extractor.js.map +1 -0
- package/dist/memory/overview-generator.d.ts +16 -0
- package/dist/memory/overview-generator.js +233 -0
- package/dist/memory/overview-generator.js.map +1 -0
- package/dist/memory/session-summarizer.d.ts +28 -0
- package/dist/memory/session-summarizer.js +20 -2
- package/dist/memory/session-summarizer.js.map +1 -1
- package/dist/memory/temporal-decay.js +2 -2
- package/dist/memory/temporal-decay.js.map +1 -1
- package/dist/memory/topic-consolidator.d.ts +52 -0
- package/dist/memory/topic-consolidator.js +197 -0
- package/dist/memory/topic-consolidator.js.map +1 -0
- package/dist/tools/cluster-info.d.ts +9 -0
- package/dist/tools/cluster-info.js +74 -0
- package/dist/tools/cluster-info.js.map +1 -0
- package/dist/tools/command-sets.js +15 -5
- package/dist/tools/command-sets.js.map +1 -1
- package/dist/tools/create-skill.js +1 -1
- package/dist/tools/create-skill.js.map +1 -1
- package/dist/tools/debug-pod.d.ts +217 -0
- package/dist/tools/debug-pod.js +603 -0
- package/dist/tools/debug-pod.js.map +1 -0
- package/dist/tools/deep-search/engine.d.ts +0 -5
- package/dist/tools/deep-search/engine.js +68 -28
- package/dist/tools/deep-search/engine.js.map +1 -1
- package/dist/tools/deep-search/format.d.ts +1 -1
- package/dist/tools/deep-search/format.js +1 -2
- package/dist/tools/deep-search/format.js.map +1 -1
- package/dist/tools/deep-search/prompts.d.ts +4 -1
- package/dist/tools/deep-search/prompts.js +47 -29
- package/dist/tools/deep-search/prompts.js.map +1 -1
- package/dist/tools/deep-search/quality-gate.d.ts +25 -0
- package/dist/tools/deep-search/quality-gate.js +81 -0
- package/dist/tools/deep-search/quality-gate.js.map +1 -0
- package/dist/tools/deep-search/schemas.d.ts +25 -0
- package/dist/tools/deep-search/schemas.js +26 -1
- package/dist/tools/deep-search/schemas.js.map +1 -1
- package/dist/tools/deep-search/sre-knowledge.d.ts +6 -10
- package/dist/tools/deep-search/sre-knowledge.js +21 -52
- package/dist/tools/deep-search/sre-knowledge.js.map +1 -1
- package/dist/tools/deep-search/sub-agent.js +24 -8
- package/dist/tools/deep-search/sub-agent.js.map +1 -1
- package/dist/tools/deep-search/tool.js +3 -6
- package/dist/tools/deep-search/tool.js.map +1 -1
- package/dist/tools/deep-search/types.d.ts +13 -0
- package/dist/tools/deep-search/types.js +4 -4
- package/dist/tools/deep-search/types.js.map +1 -1
- package/dist/tools/dp-tools.d.ts +9 -6
- package/dist/tools/dp-tools.js +26 -55
- package/dist/tools/dp-tools.js.map +1 -1
- package/dist/tools/exec-utils.d.ts +8 -21
- package/dist/tools/exec-utils.js +11 -95
- package/dist/tools/exec-utils.js.map +1 -1
- package/dist/tools/fork-skill.js +1 -1
- package/dist/tools/fork-skill.js.map +1 -1
- package/dist/tools/k8s-checks.d.ts +11 -5
- package/dist/tools/k8s-checks.js +28 -9
- package/dist/tools/k8s-checks.js.map +1 -1
- package/dist/tools/knowledge-search.d.ts +3 -0
- package/dist/tools/knowledge-search.js +115 -0
- package/dist/tools/knowledge-search.js.map +1 -0
- package/dist/tools/kubeconfig-resolver.d.ts +22 -0
- package/dist/tools/kubeconfig-resolver.js +98 -18
- package/dist/tools/kubeconfig-resolver.js.map +1 -1
- package/dist/tools/manage-schedule.js +23 -1
- package/dist/tools/manage-schedule.js.map +1 -1
- package/dist/tools/netns-script.d.ts +1 -1
- package/dist/tools/netns-script.js +19 -7
- package/dist/tools/netns-script.js.map +1 -1
- package/dist/tools/node-exec.d.ts +1 -1
- package/dist/tools/node-exec.js +19 -7
- package/dist/tools/node-exec.js.map +1 -1
- package/dist/tools/node-script.d.ts +1 -1
- package/dist/tools/node-script.js +19 -7
- package/dist/tools/node-script.js.map +1 -1
- package/dist/tools/pod-exec.js +12 -1
- package/dist/tools/pod-exec.js.map +1 -1
- package/dist/tools/pod-nsenter-exec.d.ts +1 -1
- package/dist/tools/pod-nsenter-exec.js +19 -7
- package/dist/tools/pod-nsenter-exec.js.map +1 -1
- package/dist/tools/pod-script.js +12 -1
- package/dist/tools/pod-script.js.map +1 -1
- package/dist/tools/restricted-bash.js +10 -3
- package/dist/tools/restricted-bash.js.map +1 -1
- package/dist/tools/run-skill.js +14 -2
- package/dist/tools/run-skill.js.map +1 -1
- package/dist/tools/save-feedback.d.ts +7 -0
- package/dist/tools/save-feedback.js +125 -0
- package/dist/tools/save-feedback.js.map +1 -0
- package/dist/tools/update-skill.js +1 -1
- package/dist/tools/update-skill.js.map +1 -1
- package/package.json +1 -1
- package/skills/core/deep-investigation/SKILL.md +11 -14
- package/skills/core/session-feedback/SKILL.md +146 -0
package/dist/tools/dp-tools.js
CHANGED
|
@@ -23,6 +23,31 @@ export function createChecklist(question) {
|
|
|
23
23
|
],
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Apply a phase number (1-4) to checklist items.
|
|
28
|
+
* Forward-only: items already done/skipped are not regressed.
|
|
29
|
+
* Phase mapping: 1→triage, 2→hypotheses, 3→deep_search, 4→conclusion
|
|
30
|
+
* (coupled to createChecklist() item order at indices 0-3).
|
|
31
|
+
*/
|
|
32
|
+
export function applyPhaseToChecklist(items, phaseNum) {
|
|
33
|
+
for (let i = 0; i < items.length; i++) {
|
|
34
|
+
if (i < phaseNum - 1) {
|
|
35
|
+
if (items[i].status !== "done" && items[i].status !== "skipped") {
|
|
36
|
+
items[i].status = "done";
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else if (i === phaseNum - 1) {
|
|
40
|
+
if (items[i].status !== "done" && items[i].status !== "skipped") {
|
|
41
|
+
items[i].status = "in_progress";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Parse phase number from engine phase string (e.g. "Phase 3/4" → 3). Returns 0 if unparseable. */
|
|
47
|
+
export function parsePhaseNum(phaseStr) {
|
|
48
|
+
const m = phaseStr.match(/(\d+)/);
|
|
49
|
+
return m ? parseInt(m[1], 10) : 0;
|
|
50
|
+
}
|
|
26
51
|
// --- Load SKILL.md workflow (one-time, at module init) ---
|
|
27
52
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
28
53
|
let dpWorkflow = "";
|
|
@@ -43,59 +68,6 @@ export function buildActivationMessage(question) {
|
|
|
43
68
|
return parts.join("");
|
|
44
69
|
}
|
|
45
70
|
// --- Tool factories (for SDK brain) ---
|
|
46
|
-
/**
|
|
47
|
-
* Create the manage_checklist tool.
|
|
48
|
-
* Updates checklist item statuses. When conclusion is marked done,
|
|
49
|
-
* automatically disables DP mode.
|
|
50
|
-
*/
|
|
51
|
-
export function createManageChecklistTool(dpState) {
|
|
52
|
-
return {
|
|
53
|
-
name: "manage_checklist",
|
|
54
|
-
label: "Manage Investigation Checklist",
|
|
55
|
-
description: "Update checklist item status during deep investigation. " +
|
|
56
|
-
"Supports batch updates in one call. Items: triage, hypotheses, deep_search, conclusion.",
|
|
57
|
-
parameters: Type.Object({
|
|
58
|
-
updates: Type.Array(Type.Object({
|
|
59
|
-
id: Type.String({ description: "Checklist item id: triage | hypotheses | deep_search | conclusion" }),
|
|
60
|
-
status: Type.Optional(Type.Union([
|
|
61
|
-
Type.Literal("pending"),
|
|
62
|
-
Type.Literal("in_progress"),
|
|
63
|
-
Type.Literal("done"),
|
|
64
|
-
Type.Literal("skipped"),
|
|
65
|
-
], { description: "New status" })),
|
|
66
|
-
summary: Type.Optional(Type.String({ description: "Brief summary (1-2 sentences)" })),
|
|
67
|
-
})),
|
|
68
|
-
}),
|
|
69
|
-
async execute(_toolCallId, params) {
|
|
70
|
-
if (!dpState.checklist) {
|
|
71
|
-
dpState.checklist = createChecklist("");
|
|
72
|
-
}
|
|
73
|
-
const { updates } = params;
|
|
74
|
-
const results = [];
|
|
75
|
-
for (const upd of updates) {
|
|
76
|
-
const found = dpState.checklist.items.find((i) => i.id === upd.id);
|
|
77
|
-
if (!found) {
|
|
78
|
-
results.push(`update ${upd.id}: not found`);
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
if (upd.status)
|
|
82
|
-
found.status = upd.status;
|
|
83
|
-
if (upd.summary)
|
|
84
|
-
found.summary = upd.summary;
|
|
85
|
-
results.push(`update ${upd.id}: ${upd.status ?? "ok"}`);
|
|
86
|
-
}
|
|
87
|
-
// Auto-cleanup when conclusion is marked done
|
|
88
|
-
const conclusionItem = dpState.checklist.items.find((i) => i.id === "conclusion");
|
|
89
|
-
if (conclusionItem?.status === "done") {
|
|
90
|
-
dpState.checklist = null;
|
|
91
|
-
}
|
|
92
|
-
return {
|
|
93
|
-
content: [{ type: "text", text: results.length > 0 ? results.join("; ") : "No operations specified." }],
|
|
94
|
-
details: {},
|
|
95
|
-
};
|
|
96
|
-
},
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
71
|
/**
|
|
100
72
|
* Create the propose_hypotheses tool.
|
|
101
73
|
* Non-blocking: shows hypotheses to user and immediately proceeds to deep_search.
|
|
@@ -163,8 +135,7 @@ export function createEndInvestigationTool(dpState) {
|
|
|
163
135
|
name: "end_investigation",
|
|
164
136
|
label: "End Investigation",
|
|
165
137
|
description: "End the current deep investigation early with a single call. " +
|
|
166
|
-
"Automatically marks ALL remaining pending phases as skipped and exits DP mode
|
|
167
|
-
"Do NOT manually skip phases via manage_checklist — use this tool instead.\n" +
|
|
138
|
+
"Automatically marks ALL remaining pending phases as skipped and exits DP mode.\n" +
|
|
168
139
|
"Use when: 1) User confirms triage is sufficient (MUST ask first) " +
|
|
169
140
|
"2) User explicitly requests to stop/terminate.",
|
|
170
141
|
parameters: Type.Object({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dp-tools.js","sourceRoot":"","sources":["../../src/tools/dp-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AA0BzC,yBAAyB;AAEzB,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO;QACL,QAAQ;QACR,KAAK,EAAE;YACL,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;YAC1D,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,SAAS,EAAE;YACpE,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,SAAS,EAAE;YACzE,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE;SACnE;KACF,CAAC;AACJ,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"dp-tools.js","sourceRoot":"","sources":["../../src/tools/dp-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,8 +14,14 @@ export interface ExecEnv {
|
|
|
14
14
|
* Build a sanitised child-process environment with kubeconfig resolution.
|
|
15
15
|
* Sets KUBECONFIG=/dev/null to block default ~/.kube/config; passes
|
|
16
16
|
* explicit --kubeconfig= via kubeconfigArgs when credentials are available.
|
|
17
|
+
*
|
|
18
|
+
* @param kubeconfigRef — credential directory reference
|
|
19
|
+
* @param resolvedKubeconfigPath — pre-resolved kubeconfig path (from resolveRequiredKubeconfig).
|
|
20
|
+
* `undefined` = auto-resolve via resolveKubeconfigPath (legacy single-cluster fallback).
|
|
21
|
+
* `null` = explicitly no kubeconfig (KUBECONFIG will be /dev/null).
|
|
22
|
+
* `string` = use this exact path.
|
|
17
23
|
*/
|
|
18
|
-
export declare function prepareExecEnv(kubeconfigRef?: KubeconfigRef): ExecEnv;
|
|
24
|
+
export declare function prepareExecEnv(kubeconfigRef?: KubeconfigRef, resolvedKubeconfigPath?: string | null): ExecEnv;
|
|
19
25
|
/**
|
|
20
26
|
* Spawn a child process and collect stdout/stderr.
|
|
21
27
|
* Supports timeout and AbortSignal for cancellation.
|
|
@@ -33,6 +39,7 @@ export interface ExecResult {
|
|
|
33
39
|
stdout: string;
|
|
34
40
|
stderr: string;
|
|
35
41
|
exitCode: number | null;
|
|
42
|
+
timedOut?: boolean;
|
|
36
43
|
}
|
|
37
44
|
/**
|
|
38
45
|
* Format an ExecResult into a standard tool result shape.
|
|
@@ -48,26 +55,6 @@ export declare function formatExecOutput(result: ExecResult): {
|
|
|
48
55
|
error?: boolean;
|
|
49
56
|
};
|
|
50
57
|
};
|
|
51
|
-
export interface DebugPodSpec {
|
|
52
|
-
nodeName: string;
|
|
53
|
-
/** Full command array for the container (including nsenter if needed). */
|
|
54
|
-
command: string[];
|
|
55
|
-
image?: string;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Run a command inside a privileged debug pod on a specific node.
|
|
59
|
-
*
|
|
60
|
-
* Manages the full 5-phase lifecycle:
|
|
61
|
-
* 1. Create pod (kubectl run)
|
|
62
|
-
* 2. Wait for terminal phase (Succeeded / Failed)
|
|
63
|
-
* 3. Fetch logs
|
|
64
|
-
* 4. Get exit code
|
|
65
|
-
* 5. Cleanup (delete pod)
|
|
66
|
-
*/
|
|
67
|
-
export declare function runInDebugPod(spec: DebugPodSpec, env: ExecEnv, opts: {
|
|
68
|
-
timeoutMs: number;
|
|
69
|
-
signal?: AbortSignal;
|
|
70
|
-
}): Promise<ExecResult>;
|
|
71
58
|
/**
|
|
72
59
|
* Resolve the network namespace of a container inside a pod.
|
|
73
60
|
* Returns the node name and container ID needed to construct nsenter commands.
|
package/dist/tools/exec-utils.js
CHANGED
|
@@ -5,12 +5,10 @@
|
|
|
5
5
|
* debug pod lifecycle, container netns resolution, and output formatting.
|
|
6
6
|
*/
|
|
7
7
|
import { spawn } from "node:child_process";
|
|
8
|
-
import { randomBytes } from "node:crypto";
|
|
9
8
|
import { resolveKubeconfigPath } from "./kubeconfig-resolver.js";
|
|
10
9
|
import { sanitizeEnv } from "./sanitize-env.js";
|
|
11
10
|
import { processToolOutput } from "./tool-render.js";
|
|
12
|
-
import { checkNodeReady
|
|
13
|
-
import { loadConfig } from "../core/config.js";
|
|
11
|
+
import { checkNodeReady } from "./k8s-checks.js";
|
|
14
12
|
// ── Name validators ──────────────────────────────────────────────────
|
|
15
13
|
/** Valid node name: RFC 1123 — alphanumeric, hyphens, dots. */
|
|
16
14
|
export const NODE_NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9.\-]*$/;
|
|
@@ -38,9 +36,17 @@ export function validatePodName(pod) {
|
|
|
38
36
|
* Build a sanitised child-process environment with kubeconfig resolution.
|
|
39
37
|
* Sets KUBECONFIG=/dev/null to block default ~/.kube/config; passes
|
|
40
38
|
* explicit --kubeconfig= via kubeconfigArgs when credentials are available.
|
|
39
|
+
*
|
|
40
|
+
* @param kubeconfigRef — credential directory reference
|
|
41
|
+
* @param resolvedKubeconfigPath — pre-resolved kubeconfig path (from resolveRequiredKubeconfig).
|
|
42
|
+
* `undefined` = auto-resolve via resolveKubeconfigPath (legacy single-cluster fallback).
|
|
43
|
+
* `null` = explicitly no kubeconfig (KUBECONFIG will be /dev/null).
|
|
44
|
+
* `string` = use this exact path.
|
|
41
45
|
*/
|
|
42
|
-
export function prepareExecEnv(kubeconfigRef) {
|
|
43
|
-
const kubeconfigPath =
|
|
46
|
+
export function prepareExecEnv(kubeconfigRef, resolvedKubeconfigPath) {
|
|
47
|
+
const kubeconfigPath = resolvedKubeconfigPath !== undefined
|
|
48
|
+
? resolvedKubeconfigPath
|
|
49
|
+
: resolveKubeconfigPath(kubeconfigRef?.credentialsDir);
|
|
44
50
|
return {
|
|
45
51
|
childEnv: {
|
|
46
52
|
...sanitizeEnv(process.env),
|
|
@@ -125,96 +131,6 @@ export function formatExecOutput(result) {
|
|
|
125
131
|
};
|
|
126
132
|
}
|
|
127
133
|
}
|
|
128
|
-
/**
|
|
129
|
-
* Run a command inside a privileged debug pod on a specific node.
|
|
130
|
-
*
|
|
131
|
-
* Manages the full 5-phase lifecycle:
|
|
132
|
-
* 1. Create pod (kubectl run)
|
|
133
|
-
* 2. Wait for terminal phase (Succeeded / Failed)
|
|
134
|
-
* 3. Fetch logs
|
|
135
|
-
* 4. Get exit code
|
|
136
|
-
* 5. Cleanup (delete pod)
|
|
137
|
-
*/
|
|
138
|
-
export async function runInDebugPod(spec, env, opts) {
|
|
139
|
-
const image = spec.image || loadConfig().debugImage;
|
|
140
|
-
const podId = randomBytes(4).toString("hex");
|
|
141
|
-
const podName = `node-debug-${podId}`;
|
|
142
|
-
const cleanup = () => {
|
|
143
|
-
spawnAsync("kubectl", [...env.kubeconfigArgs, "delete", "pod", podName, "--force", "--grace-period=0"], 10_000, env.childEnv).catch(() => { });
|
|
144
|
-
};
|
|
145
|
-
const overrides = JSON.stringify({
|
|
146
|
-
spec: {
|
|
147
|
-
nodeName: spec.nodeName,
|
|
148
|
-
hostPID: true,
|
|
149
|
-
hostNetwork: true,
|
|
150
|
-
containers: [{
|
|
151
|
-
name: podName,
|
|
152
|
-
image,
|
|
153
|
-
securityContext: { privileged: true },
|
|
154
|
-
command: spec.command,
|
|
155
|
-
}],
|
|
156
|
-
restartPolicy: "Never",
|
|
157
|
-
},
|
|
158
|
-
});
|
|
159
|
-
try {
|
|
160
|
-
// Phase 1: Create pod
|
|
161
|
-
await spawnAsync("kubectl", [
|
|
162
|
-
...env.kubeconfigArgs,
|
|
163
|
-
"run", podName,
|
|
164
|
-
"--restart=Never",
|
|
165
|
-
`--image=${image}`,
|
|
166
|
-
`--overrides=${overrides}`,
|
|
167
|
-
], 30_000, env.childEnv, opts.signal);
|
|
168
|
-
// Phase 2: Wait for pod to reach terminal phase (Succeeded or Failed)
|
|
169
|
-
try {
|
|
170
|
-
await waitForPodDone(podName, opts.timeoutMs, env.childEnv, opts.signal, env.kubeconfigPath ?? undefined);
|
|
171
|
-
}
|
|
172
|
-
catch {
|
|
173
|
-
// Timed out — still fetch logs before cleanup
|
|
174
|
-
}
|
|
175
|
-
if (opts.signal?.aborted) {
|
|
176
|
-
cleanup();
|
|
177
|
-
return { stdout: "", stderr: "Aborted.", exitCode: null };
|
|
178
|
-
}
|
|
179
|
-
// Phase 3: Fetch logs
|
|
180
|
-
let stdout = "";
|
|
181
|
-
let stderr = "";
|
|
182
|
-
try {
|
|
183
|
-
const logsResult = await spawnAsync("kubectl", [...env.kubeconfigArgs, "logs", podName], 10_000, env.childEnv);
|
|
184
|
-
stdout = logsResult.stdout;
|
|
185
|
-
stderr = logsResult.stderr;
|
|
186
|
-
}
|
|
187
|
-
catch (logErr) {
|
|
188
|
-
stdout = logErr.stdout ?? "";
|
|
189
|
-
stderr = logErr.stderr ?? "";
|
|
190
|
-
}
|
|
191
|
-
// Phase 4: Get exit code from pod status
|
|
192
|
-
let exitCode = null;
|
|
193
|
-
try {
|
|
194
|
-
const statusResult = await spawnAsync("kubectl", [
|
|
195
|
-
...env.kubeconfigArgs, "get", "pod", podName,
|
|
196
|
-
"-o", "jsonpath={.status.containerStatuses[0].state.terminated.exitCode}",
|
|
197
|
-
], 5_000, env.childEnv);
|
|
198
|
-
const code = parseInt(statusResult.stdout.trim(), 10);
|
|
199
|
-
if (!isNaN(code))
|
|
200
|
-
exitCode = code;
|
|
201
|
-
}
|
|
202
|
-
catch {
|
|
203
|
-
// ignore — exitCode stays null
|
|
204
|
-
}
|
|
205
|
-
// Phase 5: Cleanup
|
|
206
|
-
cleanup();
|
|
207
|
-
return { stdout, stderr, exitCode };
|
|
208
|
-
}
|
|
209
|
-
catch (err) {
|
|
210
|
-
cleanup();
|
|
211
|
-
return {
|
|
212
|
-
stdout: err.stdout?.trim() ?? "",
|
|
213
|
-
stderr: err.stderr?.trim() ?? err.message,
|
|
214
|
-
exitCode: typeof err.code === "number" ? err.code : null,
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
134
|
// ── Container netns resolution ───────────────────────────────────────
|
|
219
135
|
/**
|
|
220
136
|
* Resolve the network namespace of a container inside a pod.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec-utils.js","sourceRoot":"","sources":["../../src/tools/exec-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"exec-utils.js","sourceRoot":"","sources":["../../src/tools/exec-utils.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/fork-skill.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fork-skill.js","sourceRoot":"","sources":["../../src/tools/fork-skill.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"fork-skill.js","sourceRoot":"","sources":["../../src/tools/fork-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,13 +4,19 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export declare function checkNodeReady(node: string, env?: NodeJS.ProcessEnv, kubeconfigPath?: string): Promise<string | null>;
|
|
6
6
|
/**
|
|
7
|
-
* Poll a pod until it reaches a
|
|
8
|
-
* Returns the
|
|
7
|
+
* Poll a pod until it reaches a target phase.
|
|
8
|
+
* Returns the matched phase string, or throws on timeout / abort.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* When `targetPhase` is `"Running"`: returns as soon as the pod reaches
|
|
11
|
+
* Running (or any terminal phase, to avoid hanging on immediate failure).
|
|
12
|
+
* When `targetPhase` is `"terminal"` or omitted: waits for Succeeded/Failed
|
|
13
|
+
* (original behavior).
|
|
14
|
+
*
|
|
15
|
+
* Uses adaptive backoff polling: starts at 500ms and increases by 1.5x
|
|
16
|
+
* each iteration up to a 5s cap — reduces cold-start latency while
|
|
17
|
+
* avoiding tight loops on long-running pods.
|
|
12
18
|
*/
|
|
13
|
-
export declare function waitForPodDone(podName: string, timeoutMs: number, env?: NodeJS.ProcessEnv, signal?: AbortSignal, kubeconfigPath?: string): Promise<string>;
|
|
19
|
+
export declare function waitForPodDone(podName: string, timeoutMs: number, env?: NodeJS.ProcessEnv, signal?: AbortSignal, kubeconfigPath?: string, namespace?: string, targetPhase?: "Running" | "terminal"): Promise<string>;
|
|
14
20
|
/**
|
|
15
21
|
* Check that a Kubernetes pod exists and is in Running phase.
|
|
16
22
|
* Returns an error message string on failure, or null if the pod is running.
|
package/dist/tools/k8s-checks.js
CHANGED
|
@@ -36,15 +36,25 @@ export async function checkNodeReady(node, env, kubeconfigPath) {
|
|
|
36
36
|
}
|
|
37
37
|
/** Terminal pod phases — once a pod reaches one of these, it won't change. */
|
|
38
38
|
const TERMINAL_PHASES = new Set(["Succeeded", "Failed"]);
|
|
39
|
+
/** Adaptive polling constants — start fast (500ms) and back off to 5s cap. */
|
|
40
|
+
const POLL_INITIAL_MS = 500;
|
|
41
|
+
const POLL_MAX_MS = 5_000;
|
|
42
|
+
const POLL_BACKOFF_FACTOR = 1.5;
|
|
39
43
|
/**
|
|
40
|
-
* Poll a pod until it reaches a
|
|
41
|
-
* Returns the
|
|
44
|
+
* Poll a pod until it reaches a target phase.
|
|
45
|
+
* Returns the matched phase string, or throws on timeout / abort.
|
|
42
46
|
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
47
|
+
* When `targetPhase` is `"Running"`: returns as soon as the pod reaches
|
|
48
|
+
* Running (or any terminal phase, to avoid hanging on immediate failure).
|
|
49
|
+
* When `targetPhase` is `"terminal"` or omitted: waits for Succeeded/Failed
|
|
50
|
+
* (original behavior).
|
|
51
|
+
*
|
|
52
|
+
* Uses adaptive backoff polling: starts at 500ms and increases by 1.5x
|
|
53
|
+
* each iteration up to a 5s cap — reduces cold-start latency while
|
|
54
|
+
* avoiding tight loops on long-running pods.
|
|
45
55
|
*/
|
|
46
|
-
export async function waitForPodDone(podName, timeoutMs, env, signal, kubeconfigPath) {
|
|
47
|
-
|
|
56
|
+
export async function waitForPodDone(podName, timeoutMs, env, signal, kubeconfigPath, namespace, targetPhase) {
|
|
57
|
+
let pollInterval = POLL_INITIAL_MS;
|
|
48
58
|
const deadline = Date.now() + timeoutMs;
|
|
49
59
|
while (Date.now() < deadline) {
|
|
50
60
|
if (signal?.aborted)
|
|
@@ -52,11 +62,19 @@ export async function waitForPodDone(podName, timeoutMs, env, signal, kubeconfig
|
|
|
52
62
|
try {
|
|
53
63
|
const { stdout } = await execFileAsync("kubectl", [
|
|
54
64
|
...(kubeconfigPath ? [`--kubeconfig=${kubeconfigPath}`] : []),
|
|
55
|
-
"get", "pod", podName,
|
|
65
|
+
"get", "pod", podName,
|
|
66
|
+
...(namespace ? ["-n", namespace] : []),
|
|
67
|
+
"-o", "jsonpath={.status.phase}",
|
|
56
68
|
], { timeout: KUBECTL_TIMEOUT, env });
|
|
57
69
|
const phase = stdout.trim();
|
|
58
|
-
if (
|
|
59
|
-
|
|
70
|
+
if (targetPhase === "Running") {
|
|
71
|
+
if (phase === "Running" || TERMINAL_PHASES.has(phase))
|
|
72
|
+
return phase;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
if (TERMINAL_PHASES.has(phase))
|
|
76
|
+
return phase;
|
|
77
|
+
}
|
|
60
78
|
}
|
|
61
79
|
catch {
|
|
62
80
|
// kubectl transient error — keep polling
|
|
@@ -69,6 +87,7 @@ export async function waitForPodDone(podName, timeoutMs, env, signal, kubeconfig
|
|
|
69
87
|
signal.addEventListener("abort", onAbort, { once: true });
|
|
70
88
|
}
|
|
71
89
|
});
|
|
90
|
+
pollInterval = Math.min(pollInterval * POLL_BACKOFF_FACTOR, POLL_MAX_MS);
|
|
72
91
|
}
|
|
73
92
|
throw new Error(`Timed out waiting for pod "${podName}" to complete`);
|
|
74
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"k8s-checks.js","sourceRoot":"","sources":["../../src/tools/k8s-checks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,iCAAiC;AAEjE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,GAAuB,EACvB,cAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CACpC,SAAS,EACT;YACE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,gBAAgB,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,KAAK;YACL,MAAM;YACN,IAAI;YACJ,IAAI;YACJ,4DAA4D;SAC7D,EACD,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,CAClC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,SAAS,IAAI,2BAA2B,MAAM,IAAI,SAAS,4DAA4D,CAAC;QACjI,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,CAAW,CAAC;QAC7D,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACjC,OAAO,SAAS,IAAI,qEAAqE,CAAC;QAC5F,CAAC;QACD,OAAO,yBAAyB,IAAI,MAAM,MAAM,EAAE,CAAC;IACrD,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEzD
|
|
1
|
+
{"version":3,"file":"k8s-checks.js","sourceRoot":"","sources":["../../src/tools/k8s-checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { Type } from "@sinclair/typebox";
|
|
2
|
+
import { Text } from "@mariozechner/pi-tui";
|
|
3
|
+
import { renderTextResult } from "./tool-render.js";
|
|
4
|
+
/** Truncate string without splitting UTF-16 surrogate pairs */
|
|
5
|
+
function truncateUtf16Safe(str, maxLen) {
|
|
6
|
+
if (str.length <= maxLen)
|
|
7
|
+
return str;
|
|
8
|
+
const code = str.charCodeAt(maxLen - 1);
|
|
9
|
+
const end = code >= 0xd800 && code <= 0xdbff ? maxLen - 1 : maxLen;
|
|
10
|
+
return str.slice(0, end);
|
|
11
|
+
}
|
|
12
|
+
export function createKnowledgeSearchTool(indexer) {
|
|
13
|
+
// Cache GatewayClient in K8s mode to avoid re-reading TLS certs on every call
|
|
14
|
+
let cachedClient;
|
|
15
|
+
return {
|
|
16
|
+
name: "knowledge_search",
|
|
17
|
+
label: "Knowledge Search",
|
|
18
|
+
renderCall(args, theme) {
|
|
19
|
+
return new Text(theme.fg("toolTitle", theme.bold("knowledge_search")) +
|
|
20
|
+
" " + theme.fg("accent", args?.query || ""), 0, 0);
|
|
21
|
+
},
|
|
22
|
+
renderResult: renderTextResult,
|
|
23
|
+
description: `Search the team knowledge base for internal documentation, runbooks, architecture guides, and infrastructure reference.
|
|
24
|
+
Use this tool when the user asks about internal procedures, known configurations, or team-specific documentation.
|
|
25
|
+
|
|
26
|
+
Parameters:
|
|
27
|
+
- query: Natural language search query
|
|
28
|
+
- topK: Max results to return (default: 5)
|
|
29
|
+
- minScore: Minimum relevance score threshold (default: 0.35)
|
|
30
|
+
|
|
31
|
+
Returns matching document chunks with file path, heading context, content snippet, and relevance score.`,
|
|
32
|
+
parameters: Type.Object({
|
|
33
|
+
query: Type.String({ description: "Natural language search query" }),
|
|
34
|
+
topK: Type.Optional(Type.Number({ description: "Max results (default: 5)" })),
|
|
35
|
+
minScore: Type.Optional(Type.Number({ description: "Minimum score threshold (default: 0.35)" })),
|
|
36
|
+
}),
|
|
37
|
+
async execute(_toolCallId, rawParams) {
|
|
38
|
+
const params = rawParams;
|
|
39
|
+
const query = params.query?.trim();
|
|
40
|
+
if (!query) {
|
|
41
|
+
return {
|
|
42
|
+
content: [{ type: "text", text: JSON.stringify({ error: "Empty query" }) }],
|
|
43
|
+
details: {},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// Clamp topK to prevent context window abuse
|
|
47
|
+
const topK = Math.min(params.topK ?? 5, 20);
|
|
48
|
+
const minScore = params.minScore ?? 0.35;
|
|
49
|
+
try {
|
|
50
|
+
let result;
|
|
51
|
+
if (indexer) {
|
|
52
|
+
// Local mode: use indexer directly
|
|
53
|
+
result = await indexer.search(query, topK, minScore);
|
|
54
|
+
}
|
|
55
|
+
else if (process.env.SICLAW_GATEWAY_URL) {
|
|
56
|
+
// K8s mode: call Gateway internal API (client cached across calls)
|
|
57
|
+
if (!cachedClient) {
|
|
58
|
+
const { GatewayClient } = await import("../agentbox/gateway-client.js");
|
|
59
|
+
cachedClient = new GatewayClient({ gatewayUrl: process.env.SICLAW_GATEWAY_URL });
|
|
60
|
+
}
|
|
61
|
+
result = await cachedClient.searchKnowledge(query, topK, minScore);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
return {
|
|
65
|
+
content: [{ type: "text", text: JSON.stringify({
|
|
66
|
+
error: "Knowledge base is not available. Embedding config may not be set up.",
|
|
67
|
+
}) }],
|
|
68
|
+
details: {},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
if (result.chunks.length === 0) {
|
|
72
|
+
return {
|
|
73
|
+
content: [{
|
|
74
|
+
type: "text",
|
|
75
|
+
text: JSON.stringify({
|
|
76
|
+
results: [],
|
|
77
|
+
message: "No matching knowledge base documents found.",
|
|
78
|
+
totalFiles: result.totalFiles,
|
|
79
|
+
totalChunks: result.totalChunks,
|
|
80
|
+
}, null, 2),
|
|
81
|
+
}],
|
|
82
|
+
details: {},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const formatted = result.chunks.map((c, i) => ({
|
|
86
|
+
rank: i + 1,
|
|
87
|
+
file: c.file,
|
|
88
|
+
heading: c.heading,
|
|
89
|
+
score: Math.round((c.score ?? 0) * 1000) / 1000,
|
|
90
|
+
content: truncateUtf16Safe(c.content, 500),
|
|
91
|
+
}));
|
|
92
|
+
return {
|
|
93
|
+
content: [{
|
|
94
|
+
type: "text",
|
|
95
|
+
text: JSON.stringify({
|
|
96
|
+
results: formatted,
|
|
97
|
+
totalFiles: result.totalFiles,
|
|
98
|
+
totalChunks: result.totalChunks,
|
|
99
|
+
}, null, 2),
|
|
100
|
+
}],
|
|
101
|
+
details: {},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
106
|
+
console.error("[knowledge_search] Search failed:", err);
|
|
107
|
+
return {
|
|
108
|
+
content: [{ type: "text", text: JSON.stringify({ error: message }) }],
|
|
109
|
+
details: {},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=knowledge-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-search.js","sourceRoot":"","sources":["../../src/tools/knowledge-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,3 +9,25 @@ export declare function resolveKubeconfigPath(credentialsDir?: string): string |
|
|
|
9
9
|
* Returns null if no match found.
|
|
10
10
|
*/
|
|
11
11
|
export declare function resolveKubeconfigByName(credentialsDir: string, name: string): string | null;
|
|
12
|
+
/**
|
|
13
|
+
* Resolve kubeconfig with mandatory selection when multiple clusters exist.
|
|
14
|
+
*
|
|
15
|
+
* - 0 kubeconfigs → { path: null }
|
|
16
|
+
* - 1 kubeconfig, no name → auto-select
|
|
17
|
+
* - 1 kubeconfig, name given → resolve by name (error if mismatch)
|
|
18
|
+
* - >1 kubeconfigs, no name → error (ambiguous)
|
|
19
|
+
* - >1 kubeconfigs, name given → resolve by name (error if not found)
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveRequiredKubeconfig(credentialsDir: string | undefined, name: string | undefined): {
|
|
22
|
+
path: string | null;
|
|
23
|
+
} | {
|
|
24
|
+
error: string;
|
|
25
|
+
availableNames?: string[];
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the debug image for a specific kubeconfig credential.
|
|
29
|
+
* Returns the per-cluster debugImage from manifest metadata, or null if not set.
|
|
30
|
+
*
|
|
31
|
+
* When name is undefined and there's exactly one kubeconfig, auto-selects it.
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveDebugImage(credentialsDir: string | undefined, name: string | undefined): string | null;
|