siclaw 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +75 -114
- package/dist/agentbox/gateway-client.d.ts +2 -1
- package/dist/agentbox/gateway-client.js +6 -2
- package/dist/agentbox/gateway-client.js.map +1 -1
- package/dist/agentbox/http-server.js +184 -19
- package/dist/agentbox/http-server.js.map +1 -1
- package/dist/agentbox/resource-handlers.d.ts +1 -0
- package/dist/agentbox/resource-handlers.js +23 -23
- package/dist/agentbox/resource-handlers.js.map +1 -1
- package/dist/agentbox/session.js +85 -5
- package/dist/agentbox/session.js.map +1 -1
- package/dist/agentbox-main.d.ts +2 -1
- package/dist/agentbox-main.js +65 -18
- package/dist/agentbox-main.js.map +1 -1
- package/dist/cli-credentials.d.ts +1 -0
- package/dist/cli-credentials.js +109 -0
- package/dist/cli-credentials.js.map +1 -0
- package/dist/cli-first-run.d.ts +11 -0
- package/dist/cli-first-run.js +99 -0
- package/dist/cli-first-run.js.map +1 -0
- package/dist/cli-main.js +33 -11
- package/dist/cli-main.js.map +1 -1
- package/dist/cli-setup.d.ts +5 -11
- package/dist/cli-setup.js +12 -225
- package/dist/cli-setup.js.map +1 -1
- package/dist/core/agent-factory.d.ts +4 -0
- package/dist/core/agent-factory.js +102 -151
- package/dist/core/agent-factory.js.map +1 -1
- package/dist/core/config.d.ts +10 -3
- package/dist/core/config.js +11 -95
- package/dist/core/config.js.map +1 -1
- package/dist/core/extensions/deep-investigation.d.ts +2 -1
- package/dist/core/extensions/deep-investigation.js +144 -24
- package/dist/core/extensions/deep-investigation.js.map +1 -1
- package/dist/core/extensions/setup.d.ts +8 -0
- package/dist/core/extensions/setup.js +669 -0
- package/dist/core/extensions/setup.js.map +1 -0
- package/dist/core/llm-proxy.js +7 -3
- package/dist/core/llm-proxy.js.map +1 -1
- package/dist/core/mcp-client.d.ts +0 -10
- package/dist/core/mcp-client.js +0 -65
- package/dist/core/mcp-client.js.map +1 -1
- package/dist/core/prompt.d.ts +1 -1
- package/dist/core/prompt.js +42 -5
- package/dist/core/prompt.js.map +1 -1
- package/dist/core/provider-presets.d.ts +14 -0
- package/dist/core/provider-presets.js +81 -0
- package/dist/core/provider-presets.js.map +1 -0
- package/dist/cron/cron-coordinator.d.ts +2 -0
- package/dist/cron/cron-coordinator.js +46 -14
- package/dist/cron/cron-coordinator.js.map +1 -1
- package/dist/cron/cron-executor.js +33 -8
- package/dist/cron/cron-executor.js.map +1 -1
- package/dist/cron/cron-scheduler.d.ts +1 -1
- package/dist/cron/gateway-client.d.ts +5 -0
- package/dist/cron/gateway-client.js +43 -8
- package/dist/cron/gateway-client.js.map +1 -1
- package/dist/cron-main.js +39 -9
- package/dist/cron-main.js.map +1 -1
- package/dist/gateway/agentbox/client.d.ts +11 -0
- package/dist/gateway/agentbox/client.js +18 -0
- package/dist/gateway/agentbox/client.js.map +1 -1
- package/dist/gateway/agentbox/k8s-spawner.d.ts +11 -2
- package/dist/gateway/agentbox/k8s-spawner.js +95 -52
- package/dist/gateway/agentbox/k8s-spawner.js.map +1 -1
- package/dist/gateway/agentbox/local-spawner.d.ts +1 -1
- package/dist/gateway/agentbox/local-spawner.js +4 -2
- package/dist/gateway/agentbox/local-spawner.js.map +1 -1
- package/dist/gateway/agentbox/manager.d.ts +0 -10
- package/dist/gateway/agentbox/manager.js +11 -30
- package/dist/gateway/agentbox/manager.js.map +1 -1
- package/dist/gateway/agentbox/types.d.ts +6 -4
- package/dist/gateway/cron/cron-service.d.ts +49 -0
- package/dist/gateway/cron/cron-service.js +259 -0
- package/dist/gateway/cron/cron-service.js.map +1 -0
- package/dist/gateway/db/init-schema.js +44 -0
- package/dist/gateway/db/init-schema.js.map +1 -1
- package/dist/gateway/db/migrate-sqlite.js +73 -4
- package/dist/gateway/db/migrate-sqlite.js.map +1 -1
- package/dist/gateway/db/repositories/chat-repo.d.ts +56 -2
- package/dist/gateway/db/repositories/chat-repo.js +132 -2
- package/dist/gateway/db/repositories/chat-repo.js.map +1 -1
- package/dist/gateway/db/repositories/config-repo.d.ts +31 -2
- package/dist/gateway/db/repositories/config-repo.js +57 -7
- package/dist/gateway/db/repositories/config-repo.js.map +1 -1
- package/dist/gateway/db/repositories/env-repo.d.ts +14 -0
- package/dist/gateway/db/repositories/env-repo.js +15 -2
- package/dist/gateway/db/repositories/env-repo.js.map +1 -1
- package/dist/gateway/db/repositories/model-config-repo.d.ts +1 -1
- package/dist/gateway/db/repositories/model-config-repo.js +26 -12
- package/dist/gateway/db/repositories/model-config-repo.js.map +1 -1
- package/dist/gateway/db/repositories/skill-repo.d.ts +0 -5
- package/dist/gateway/db/repositories/skill-review-repo.d.ts +1 -0
- package/dist/gateway/db/repositories/skill-review-repo.js +4 -1
- package/dist/gateway/db/repositories/skill-review-repo.js.map +1 -1
- package/dist/gateway/db/repositories/skill-version-repo.js +0 -1
- package/dist/gateway/db/repositories/skill-version-repo.js.map +1 -1
- package/dist/gateway/db/repositories/system-config-repo.d.ts +1 -1
- package/dist/gateway/db/repositories/system-config-repo.js +2 -1
- package/dist/gateway/db/repositories/system-config-repo.js.map +1 -1
- package/dist/gateway/db/repositories/user-env-config-repo.d.ts +13 -0
- package/dist/gateway/db/repositories/user-env-config-repo.js +11 -0
- package/dist/gateway/db/repositories/user-env-config-repo.js.map +1 -1
- package/dist/gateway/db/repositories/workspace-repo.d.ts +3 -2
- package/dist/gateway/db/repositories/workspace-repo.js +6 -2
- package/dist/gateway/db/repositories/workspace-repo.js.map +1 -1
- package/dist/gateway/db/schema-mysql.d.ts +473 -51
- package/dist/gateway/db/schema-mysql.js +35 -4
- package/dist/gateway/db/schema-mysql.js.map +1 -1
- package/dist/gateway/db/schema-sqlite.d.ts +522 -57
- package/dist/gateway/db/schema-sqlite.js +38 -6
- package/dist/gateway/db/schema-sqlite.js.map +1 -1
- package/dist/gateway/db/schema.d.ts +471 -51
- package/dist/gateway/db/schema.js +1 -1
- package/dist/gateway/db/schema.js.map +1 -1
- package/dist/gateway/metrics-aggregator.d.ts +65 -0
- package/dist/gateway/metrics-aggregator.js +244 -0
- package/dist/gateway/metrics-aggregator.js.map +1 -0
- package/dist/gateway/plugins/channel-bridge.d.ts +4 -1
- package/dist/gateway/plugins/channel-bridge.js +78 -86
- package/dist/gateway/plugins/channel-bridge.js.map +1 -1
- package/dist/gateway/rpc-methods.d.ts +4 -2
- package/dist/gateway/rpc-methods.js +962 -163
- package/dist/gateway/rpc-methods.js.map +1 -1
- package/dist/gateway/security/cert-manager.d.ts +2 -2
- package/dist/gateway/security/cert-manager.js +4 -2
- package/dist/gateway/security/cert-manager.js.map +1 -1
- package/dist/gateway/server.d.ts +4 -8
- package/dist/gateway/server.js +297 -261
- package/dist/gateway/server.js.map +1 -1
- package/dist/gateway/skills/file-writer.js +17 -11
- package/dist/gateway/skills/file-writer.js.map +1 -1
- package/dist/gateway/skills/script-evaluator.js +12 -9
- package/dist/gateway/skills/script-evaluator.js.map +1 -1
- package/dist/gateway/web/dist/assets/index-0p17ZeTP.js +740 -0
- package/dist/gateway/web/dist/assets/index-9eP6nPUq.js +741 -0
- package/dist/gateway/web/dist/assets/index-9eP6nPUq.js.map +1 -0
- package/dist/gateway/web/dist/assets/index-CAmSY91d.js +675 -0
- package/dist/gateway/web/dist/assets/index-DMFEh8Pp.css +1 -0
- package/dist/gateway/web/dist/assets/index-DyowBCEj.css +1 -0
- package/dist/gateway/web/dist/assets/index-PDK5JJDO.css +1 -0
- package/dist/gateway/web/dist/index.html +2 -2
- package/dist/gateway-main.js +27 -10
- package/dist/gateway-main.js.map +1 -1
- package/dist/memory/embeddings.js +5 -4
- package/dist/memory/embeddings.js.map +1 -1
- package/dist/memory/indexer.d.ts +23 -3
- package/dist/memory/indexer.js +235 -23
- package/dist/memory/indexer.js.map +1 -1
- package/dist/memory/schema.js +15 -1
- package/dist/memory/schema.js.map +1 -1
- package/dist/memory/types.d.ts +18 -0
- package/dist/memory/types.js +6 -1
- package/dist/memory/types.js.map +1 -1
- package/dist/shared/detect-language.d.ts +12 -0
- package/dist/shared/detect-language.js +78 -0
- package/dist/shared/detect-language.js.map +1 -0
- package/dist/shared/diagnostic-events.d.ts +70 -0
- package/dist/shared/diagnostic-events.js +38 -0
- package/dist/shared/diagnostic-events.js.map +1 -0
- package/dist/shared/local-collector.d.ts +56 -0
- package/dist/shared/local-collector.js +284 -0
- package/dist/shared/local-collector.js.map +1 -0
- package/dist/shared/metrics-types.d.ts +64 -0
- package/dist/shared/metrics-types.js +25 -0
- package/dist/shared/metrics-types.js.map +1 -0
- package/dist/shared/metrics.d.ts +19 -0
- package/dist/shared/metrics.js +185 -0
- package/dist/shared/metrics.js.map +1 -0
- package/dist/shared/path-utils.d.ts +15 -0
- package/dist/shared/path-utils.js +23 -0
- package/dist/shared/path-utils.js.map +1 -0
- package/dist/shared/retry.d.ts +35 -0
- package/dist/shared/retry.js +61 -0
- package/dist/shared/retry.js.map +1 -0
- package/dist/tools/command-sets.d.ts +18 -2
- package/dist/tools/command-sets.js +207 -32
- package/dist/tools/command-sets.js.map +1 -1
- package/dist/tools/command-validator.d.ts +56 -0
- package/dist/tools/command-validator.js +357 -0
- package/dist/tools/command-validator.js.map +1 -0
- package/dist/tools/create-skill.js +26 -1
- package/dist/tools/create-skill.js.map +1 -1
- package/dist/tools/credential-list.js +1 -23
- package/dist/tools/credential-list.js.map +1 -1
- package/dist/tools/credential-manager.d.ts +98 -0
- package/dist/tools/credential-manager.js +313 -0
- package/dist/tools/credential-manager.js.map +1 -0
- package/dist/tools/deep-search/engine.js +184 -127
- package/dist/tools/deep-search/engine.js.map +1 -1
- package/dist/tools/deep-search/prompts.d.ts +10 -2
- package/dist/tools/deep-search/prompts.js +37 -36
- package/dist/tools/deep-search/prompts.js.map +1 -1
- package/dist/tools/deep-search/schemas.d.ts +87 -0
- package/dist/tools/deep-search/schemas.js +85 -0
- package/dist/tools/deep-search/schemas.js.map +1 -0
- package/dist/tools/deep-search/sub-agent.d.ts +21 -0
- package/dist/tools/deep-search/sub-agent.js +153 -4
- package/dist/tools/deep-search/sub-agent.js.map +1 -1
- package/dist/tools/deep-search/tool.js +1 -0
- package/dist/tools/deep-search/tool.js.map +1 -1
- package/dist/tools/deep-search/types.d.ts +2 -0
- package/dist/tools/deep-search/types.js.map +1 -1
- package/dist/tools/dp-tools.js +29 -5
- package/dist/tools/dp-tools.js.map +1 -1
- package/dist/tools/exec-utils.d.ts +85 -0
- package/dist/tools/exec-utils.js +294 -0
- package/dist/tools/exec-utils.js.map +1 -0
- package/dist/tools/fork-skill.js +14 -2
- package/dist/tools/fork-skill.js.map +1 -1
- package/dist/tools/investigation-feedback.d.ts +3 -0
- package/dist/tools/investigation-feedback.js +71 -0
- package/dist/tools/investigation-feedback.js.map +1 -0
- package/dist/tools/manage-schedule.js +16 -6
- package/dist/tools/manage-schedule.js.map +1 -1
- package/dist/tools/netns-script.js +27 -281
- package/dist/tools/netns-script.js.map +1 -1
- package/dist/tools/node-exec.d.ts +2 -14
- package/dist/tools/node-exec.js +18 -225
- package/dist/tools/node-exec.js.map +1 -1
- package/dist/tools/node-script.js +14 -168
- package/dist/tools/node-script.js.map +1 -1
- package/dist/tools/pod-exec.d.ts +1 -1
- package/dist/tools/pod-exec.js +10 -26
- package/dist/tools/pod-exec.js.map +1 -1
- package/dist/tools/pod-nsenter-exec.js +21 -225
- package/dist/tools/pod-nsenter-exec.js.map +1 -1
- package/dist/tools/pod-script.js +10 -19
- package/dist/tools/pod-script.js.map +1 -1
- package/dist/tools/restricted-bash.d.ts +1 -17
- package/dist/tools/restricted-bash.js +38 -252
- package/dist/tools/restricted-bash.js.map +1 -1
- package/dist/tools/run-skill.d.ts +3 -1
- package/dist/tools/run-skill.js +21 -1
- package/dist/tools/run-skill.js.map +1 -1
- package/dist/tools/script-resolver.d.ts +3 -1
- package/dist/tools/script-resolver.js +74 -30
- package/dist/tools/script-resolver.js.map +1 -1
- package/dist/tools/update-skill.js +17 -6
- package/dist/tools/update-skill.js.map +1 -1
- package/package.json +8 -6
- package/siclaw.mjs +10 -1
- package/skills/core/cluster-events/SKILL.md +1 -1
- package/skills/core/deep-investigation/SKILL.md +11 -0
- package/skills/core/deployment-rollout-debug/SKILL.md +1 -1
- package/skills/core/dns-debug/SKILL.md +1 -0
- package/skills/core/meta.json +12 -1
- package/skills/core/networkpolicy-debug/SKILL.md +332 -0
- package/skills/core/node-logs/scripts/get-node-logs.sh +19 -9
- package/skills/core/pod-pending-debug/SKILL.md +1 -0
- package/skills/core/quota-debug/SKILL.md +203 -0
- package/skills/core/service-debug/SKILL.md +1 -0
- package/skills/core/statefulset-debug/SKILL.md +280 -0
- package/skills/core/volcano-diagnose-pod/SKILL.md +196 -0
- package/skills/core/volcano-diagnose-pod/scripts/diagnose-pod.sh +175 -0
- package/skills/core/volcano-gang-scheduling/SKILL.md +299 -0
- package/skills/core/volcano-job-diagnose/SKILL.md +319 -0
- package/skills/core/volcano-job-diagnose/scripts/diagnose-job.sh +253 -0
- package/skills/core/volcano-node-resources/SKILL.md +334 -0
- package/skills/core/volcano-node-resources/scripts/get-node-resources.sh +281 -0
- package/skills/core/volcano-queue-diagnose/SKILL.md +294 -0
- package/skills/core/volcano-queue-diagnose/scripts/diagnose-queue.sh +283 -0
- package/skills/core/volcano-resource-insufficient/SKILL.md +315 -0
- package/skills/core/volcano-scheduler-config/SKILL.md +371 -0
- package/skills/core/volcano-scheduler-config/scripts/get-scheduler-config.sh +297 -0
- package/skills/core/volcano-scheduler-logs/SKILL.md +241 -0
- package/skills/core/volcano-scheduler-logs/scripts/get-scheduler-logs.sh +159 -0
- package/skills/platform/create-skill/SKILL.md +35 -3
- package/skills/platform/manage-skill/SKILL.md +9 -2
- package/skills/platform/update-skill/SKILL.md +17 -6
|
@@ -31,6 +31,8 @@ export interface InvestigationResult {
|
|
|
31
31
|
totalDurationMs: number;
|
|
32
32
|
timedOut: boolean;
|
|
33
33
|
debugTracePath?: string;
|
|
34
|
+
/** ID of the investigation record stored in SQLite (for feedback). */
|
|
35
|
+
investigationId?: string;
|
|
34
36
|
}
|
|
35
37
|
export interface DeepSearchBudget {
|
|
36
38
|
maxContextCalls: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tools/deep-search/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tools/deep-search/types.ts"],"names":[],"mappings":"AAmDA,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C,eAAe,EAAE,CAAC;IAClB,aAAa,EAAE,CAAC;IAChB,qBAAqB,EAAE,EAAE;IACzB,aAAa,EAAE,EAAE;IACjB,WAAW,EAAE,CAAC;IACd,aAAa,EAAE,OAAO,EAAE,YAAY;CACrC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAqB;IAC5C,eAAe,EAAE,CAAC;IAClB,aAAa,EAAE,CAAC;IAChB,qBAAqB,EAAE,CAAC;IACxB,aAAa,EAAE,EAAE;IACjB,WAAW,EAAE,CAAC;IACd,aAAa,EAAE,OAAO,EAAE,YAAY;CACrC,CAAC;AAEF,8BAA8B;AAE9B,oFAAoF;AACpF,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAE5C,qFAAqF;AACrF,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAE9C,kGAAkG;AAClG,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C,wEAAwE;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACxC,sDAAsD;AACtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACxC,sDAAsD;AACtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC,2BAA2B;AAE3B;;sDAEsD;AACtD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC,sEAAsE;AACtE,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC"}
|
package/dist/tools/dp-tools.js
CHANGED
|
@@ -109,9 +109,22 @@ export function createProposeHypothesesTool(dpState) {
|
|
|
109
109
|
"Works both inside and outside Deep Investigation mode. " +
|
|
110
110
|
"Always prefer this tool over plain-text hypotheses — it renders a proper interactive card.",
|
|
111
111
|
parameters: Type.Object({
|
|
112
|
-
hypotheses: Type.
|
|
113
|
-
description: "
|
|
114
|
-
|
|
112
|
+
hypotheses: Type.Array(Type.Object({
|
|
113
|
+
id: Type.String({ description: "Hypothesis identifier: H1, H2, H3, etc." }),
|
|
114
|
+
text: Type.String({
|
|
115
|
+
description: "A specific, testable hypothesis statement (one sentence). " +
|
|
116
|
+
"NOT a title, category name, or group heading. " +
|
|
117
|
+
'Good: "Firewall rules blocking inter-node communication on port 6443". ' +
|
|
118
|
+
'Bad: "Check cluster demo".',
|
|
119
|
+
}),
|
|
120
|
+
confidence: Type.Number({ description: "Prior confidence 0-100" }),
|
|
121
|
+
description: Type.Optional(Type.String({
|
|
122
|
+
description: "Brief explanation: why this hypothesis is plausible and how to validate it. " +
|
|
123
|
+
"Include relevant technical context, affected components, and key validation commands.",
|
|
124
|
+
})),
|
|
125
|
+
}), {
|
|
126
|
+
description: "Each element is one distinct, independent hypothesis. " +
|
|
127
|
+
"Do NOT include overall titles or summary items — only concrete hypotheses.",
|
|
115
128
|
}),
|
|
116
129
|
}),
|
|
117
130
|
async execute(_toolCallId, params) {
|
|
@@ -119,13 +132,24 @@ export function createProposeHypothesesTool(dpState) {
|
|
|
119
132
|
if (!dpState.checklist) {
|
|
120
133
|
// Outside DP mode — don't create a checklist, just present hypotheses
|
|
121
134
|
}
|
|
122
|
-
const { hypotheses:
|
|
135
|
+
const { hypotheses: rawHypotheses } = params;
|
|
136
|
+
// Post-validation: filter out non-hypothesis items the model sometimes includes
|
|
137
|
+
const hypotheses = rawHypotheses.filter((h) => {
|
|
138
|
+
const text = h.text.trim();
|
|
139
|
+
// Markdown table rows / headers
|
|
140
|
+
if (text.startsWith("|"))
|
|
141
|
+
return false;
|
|
142
|
+
// Meta-text about the hypotheses themselves (titles, proposal headings)
|
|
143
|
+
if (/假设提案|(?:revised|proposed|updated)\s*hypothes[ei]s/i.test(text))
|
|
144
|
+
return false;
|
|
145
|
+
return true;
|
|
146
|
+
});
|
|
123
147
|
const responseText = isDpMode
|
|
124
148
|
? "Hypotheses presented. In DP mode — consider waiting for user confirmation before proceeding to deep_search."
|
|
125
149
|
: "Hypotheses presented to user. Decide whether to proceed based on user engagement.";
|
|
126
150
|
return {
|
|
127
151
|
content: [{ type: "text", text: responseText }],
|
|
128
|
-
details: { hypotheses
|
|
152
|
+
details: { hypotheses },
|
|
129
153
|
};
|
|
130
154
|
},
|
|
131
155
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dp-tools.js","sourceRoot":"","sources":["../../src/tools/dp-tools.ts"],"names":[],"mappings":"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
|
|
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,4DAA4D;AAE5D,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,IAAI,UAAU,GAAG,EAAE,CAAC;AACpB,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,+CAA+C,CAAC,EAAE,OAAO,CAAC,CAAC;IACvG,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5D,CAAC;AAAC,MAAM,CAAC,CAAC,sDAAsD,CAAC,CAAC;AAElE,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,MAAM,KAAK,GAAG,CAAC,gEAAgE,QAAQ,EAAE,CAAC,CAAC;IAC3F,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,UAAU,kBAAkB,CAAC,CAAC;IAC/D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IACvE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,yCAAyC;AAEzC;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAgB;IACxD,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,gCAAgC;QACvC,WAAW,EACT,0DAA0D;YAC1D,yFAAyF;QAC3F,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACtB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC9B,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mEAAmE,EAAE,CAAC;gBACrG,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;oBACvB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;oBAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBACpB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;iBACxB,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;gBAClC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC,CAAC;aACtF,CAAC,CAAC;SACJ,CAAC;QACF,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM;YAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBACvB,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;YAC1C,CAAC;YAED,MAAM,EAAE,OAAO,EAAE,GAAG,MAA+E,CAAC;YACpG,MAAM,OAAO,GAAa,EAAE,CAAC;YAE7B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;gBACnE,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;oBAC5C,SAAS;gBACX,CAAC;gBACD,IAAI,GAAG,CAAC,MAAM;oBAAE,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,MAA6B,CAAC;gBACjE,IAAI,GAAG,CAAC,OAAO;oBAAE,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;YAC1D,CAAC;YAED,8CAA8C;YAC9C,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;YAClF,IAAI,cAAc,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;YAC3B,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,0BAA0B,EAAE,CAAC;gBAChH,OAAO,EAAE,EAAE;aACZ,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAAgB;IAC1D,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,0DAA0D;YAC1D,4GAA4G;YAC5G,yDAAyD;YACzD,4FAA4F;QAC9F,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACtB,UAAU,EAAE,IAAI,CAAC,KAAK,CACpB,IAAI,CAAC,MAAM,CAAC;gBACV,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yCAAyC,EAAE,CAAC;gBAC3E,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;oBAChB,WAAW,EACT,4DAA4D;wBAC5D,gDAAgD;wBAChD,yEAAyE;wBACzE,4BAA4B;iBAC/B,CAAC;gBACF,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC;gBAClE,WAAW,EAAE,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,MAAM,CAAC;oBACV,WAAW,EACT,8EAA8E;wBAC9E,uFAAuF;iBAC1F,CAAC,CACH;aACF,CAAC,EACF;gBACE,WAAW,EACT,wDAAwD;oBACxD,4EAA4E;aAC/E,CACF;SACF,CAAC;QACF,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM;YAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBACvB,sEAAsE;YACxE,CAAC;YAED,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,MAErC,CAAC;YAEF,gFAAgF;YAChF,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC3B,gCAAgC;gBAChC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACvC,wEAAwE;gBACxE,IAAI,oDAAoD,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAClF,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,QAAQ;gBAC3B,CAAC,CAAC,6GAA6G;gBAC/G,CAAC,CAAC,mFAAmF,CAAC;YAExF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;gBACxD,OAAO,EAAE,EAAE,UAAU,EAAE;aACxB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,+DAA+D;YAC/D,iFAAiF;YACjF,6EAA6E;YAC7E,mEAAmE;YACnE,gDAAgD;QAClD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;gBAClB,WAAW,EAAE,6FAA6F;aAC3G,CAAC;SACH,CAAC;QACF,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM;YAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBACvB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACtG,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAA4B,CAAC;YAChD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;gBAC3C,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;oBAC/D,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;oBACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;gBACxB,CAAC;YACH,CAAC;YACD,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,wBAAwB,MAAM,EAAE,EAAE,CAAC;gBAC5E,OAAO,EAAE,EAAE;aACZ,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { KubeconfigRef } from "../core/agent-factory.js";
|
|
2
|
+
/** Valid node name: RFC 1123 — alphanumeric, hyphens, dots. */
|
|
3
|
+
export declare const NODE_NAME_RE: RegExp;
|
|
4
|
+
/** Valid pod name: RFC 1123 subdomain — lowercase alphanumeric, hyphens, dots. */
|
|
5
|
+
export declare const POD_NAME_RE: RegExp;
|
|
6
|
+
export declare function validateNodeName(node: string): string | null;
|
|
7
|
+
export declare function validatePodName(pod: string): string | null;
|
|
8
|
+
export interface ExecEnv {
|
|
9
|
+
childEnv: NodeJS.ProcessEnv;
|
|
10
|
+
kubeconfigPath: string | null;
|
|
11
|
+
kubeconfigArgs: string[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Build a sanitised child-process environment with kubeconfig resolution.
|
|
15
|
+
* Sets KUBECONFIG=/dev/null to block default ~/.kube/config; passes
|
|
16
|
+
* explicit --kubeconfig= via kubeconfigArgs when credentials are available.
|
|
17
|
+
*/
|
|
18
|
+
export declare function prepareExecEnv(kubeconfigRef?: KubeconfigRef): ExecEnv;
|
|
19
|
+
/**
|
|
20
|
+
* Spawn a child process and collect stdout/stderr.
|
|
21
|
+
* Supports timeout and AbortSignal for cancellation.
|
|
22
|
+
*/
|
|
23
|
+
export declare function spawnAsync(cmd: string, args: string[], timeout: number, env?: NodeJS.ProcessEnv, signal?: AbortSignal): Promise<{
|
|
24
|
+
stdout: string;
|
|
25
|
+
stderr: string;
|
|
26
|
+
}>;
|
|
27
|
+
/**
|
|
28
|
+
* Filter out kubectl run informational lines from stderr
|
|
29
|
+
* (e.g. 'pod "node-debug-xxx" deleted').
|
|
30
|
+
*/
|
|
31
|
+
export declare function filterPodNoise(stderr: string): string;
|
|
32
|
+
export interface ExecResult {
|
|
33
|
+
stdout: string;
|
|
34
|
+
stderr: string;
|
|
35
|
+
exitCode: number | null;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Format an ExecResult into a standard tool result shape.
|
|
39
|
+
* Applies filterPodNoise and processToolOutput.
|
|
40
|
+
*/
|
|
41
|
+
export declare function formatExecOutput(result: ExecResult): {
|
|
42
|
+
content: Array<{
|
|
43
|
+
type: "text";
|
|
44
|
+
text: string;
|
|
45
|
+
}>;
|
|
46
|
+
details: {
|
|
47
|
+
exitCode: number | null;
|
|
48
|
+
error?: boolean;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
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
|
+
/**
|
|
72
|
+
* Resolve the network namespace of a container inside a pod.
|
|
73
|
+
* Returns the node name and container ID needed to construct nsenter commands.
|
|
74
|
+
*
|
|
75
|
+
* Steps:
|
|
76
|
+
* 1. Verify pod is Running, get its node name
|
|
77
|
+
* 2. Verify node is Ready
|
|
78
|
+
* 3. Get container ID, strip runtime prefix
|
|
79
|
+
*/
|
|
80
|
+
export declare function resolveContainerNetns(pod: string, namespace: string, container: string | undefined, env: ExecEnv): Promise<{
|
|
81
|
+
nodeName: string;
|
|
82
|
+
containerID: string;
|
|
83
|
+
} | {
|
|
84
|
+
error: string;
|
|
85
|
+
}>;
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execution infrastructure shared by all remote execution tools.
|
|
3
|
+
*
|
|
4
|
+
* Consolidates: process spawning, environment setup, name validation,
|
|
5
|
+
* debug pod lifecycle, container netns resolution, and output formatting.
|
|
6
|
+
*/
|
|
7
|
+
import { spawn } from "node:child_process";
|
|
8
|
+
import { randomBytes } from "node:crypto";
|
|
9
|
+
import { resolveKubeconfigPath } from "./kubeconfig-resolver.js";
|
|
10
|
+
import { sanitizeEnv } from "./sanitize-env.js";
|
|
11
|
+
import { processToolOutput } from "./tool-render.js";
|
|
12
|
+
import { checkNodeReady, waitForPodDone } from "./k8s-checks.js";
|
|
13
|
+
import { loadConfig } from "../core/config.js";
|
|
14
|
+
// ── Name validators ──────────────────────────────────────────────────
|
|
15
|
+
/** Valid node name: RFC 1123 — alphanumeric, hyphens, dots. */
|
|
16
|
+
export const NODE_NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9.\-]*$/;
|
|
17
|
+
/** Valid pod name: RFC 1123 subdomain — lowercase alphanumeric, hyphens, dots. */
|
|
18
|
+
export const POD_NAME_RE = /^[a-z0-9][a-z0-9.\-]*$/;
|
|
19
|
+
export function validateNodeName(node) {
|
|
20
|
+
if (!node || !node.trim()) {
|
|
21
|
+
return "Node name must not be empty.";
|
|
22
|
+
}
|
|
23
|
+
if (!NODE_NAME_RE.test(node)) {
|
|
24
|
+
return `Invalid node name "${node}". Node names may only contain letters, digits, hyphens, and dots.`;
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
export function validatePodName(pod) {
|
|
29
|
+
if (!pod || !pod.trim()) {
|
|
30
|
+
return "Pod name must not be empty.";
|
|
31
|
+
}
|
|
32
|
+
if (!POD_NAME_RE.test(pod)) {
|
|
33
|
+
return `Invalid pod name "${pod}". Pod names may only contain lowercase letters, digits, hyphens, and dots.`;
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Build a sanitised child-process environment with kubeconfig resolution.
|
|
39
|
+
* Sets KUBECONFIG=/dev/null to block default ~/.kube/config; passes
|
|
40
|
+
* explicit --kubeconfig= via kubeconfigArgs when credentials are available.
|
|
41
|
+
*/
|
|
42
|
+
export function prepareExecEnv(kubeconfigRef) {
|
|
43
|
+
const kubeconfigPath = resolveKubeconfigPath(kubeconfigRef?.credentialsDir);
|
|
44
|
+
return {
|
|
45
|
+
childEnv: {
|
|
46
|
+
...sanitizeEnv(process.env),
|
|
47
|
+
...(kubeconfigRef?.credentialsDir
|
|
48
|
+
? { SICLAW_CREDENTIALS_DIR: kubeconfigRef.credentialsDir }
|
|
49
|
+
: {}),
|
|
50
|
+
KUBECONFIG: "/dev/null",
|
|
51
|
+
},
|
|
52
|
+
kubeconfigPath,
|
|
53
|
+
kubeconfigArgs: kubeconfigPath ? [`--kubeconfig=${kubeconfigPath}`] : [],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
// ── Process utilities ────────────────────────────────────────────────
|
|
57
|
+
/**
|
|
58
|
+
* Spawn a child process and collect stdout/stderr.
|
|
59
|
+
* Supports timeout and AbortSignal for cancellation.
|
|
60
|
+
*/
|
|
61
|
+
export function spawnAsync(cmd, args, timeout, env, signal) {
|
|
62
|
+
return new Promise((resolve, reject) => {
|
|
63
|
+
let stdout = "";
|
|
64
|
+
let stderr = "";
|
|
65
|
+
const child = spawn(cmd, args, {
|
|
66
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
67
|
+
env,
|
|
68
|
+
});
|
|
69
|
+
const onAbort = () => child.kill("SIGKILL");
|
|
70
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
71
|
+
child.stdout.on("data", (chunk) => {
|
|
72
|
+
stdout += chunk.toString();
|
|
73
|
+
});
|
|
74
|
+
child.stderr.on("data", (chunk) => {
|
|
75
|
+
stderr += chunk.toString();
|
|
76
|
+
});
|
|
77
|
+
const timer = setTimeout(() => {
|
|
78
|
+
child.kill("SIGKILL");
|
|
79
|
+
}, timeout);
|
|
80
|
+
child.on("close", (code) => {
|
|
81
|
+
clearTimeout(timer);
|
|
82
|
+
signal?.removeEventListener("abort", onAbort);
|
|
83
|
+
if (code === 0)
|
|
84
|
+
resolve({ stdout, stderr });
|
|
85
|
+
else
|
|
86
|
+
reject(Object.assign(new Error(`exit ${code}`), { code, stdout, stderr }));
|
|
87
|
+
});
|
|
88
|
+
child.on("error", (err) => {
|
|
89
|
+
clearTimeout(timer);
|
|
90
|
+
signal?.removeEventListener("abort", onAbort);
|
|
91
|
+
reject(err);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Filter out kubectl run informational lines from stderr
|
|
97
|
+
* (e.g. 'pod "node-debug-xxx" deleted').
|
|
98
|
+
*/
|
|
99
|
+
export function filterPodNoise(stderr) {
|
|
100
|
+
return stderr
|
|
101
|
+
.split("\n")
|
|
102
|
+
.filter((line) => !line.match(/^pod "node-debug-.*" deleted$/))
|
|
103
|
+
.join("\n")
|
|
104
|
+
.trim();
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Format an ExecResult into a standard tool result shape.
|
|
108
|
+
* Applies filterPodNoise and processToolOutput.
|
|
109
|
+
*/
|
|
110
|
+
export function formatExecOutput(result) {
|
|
111
|
+
const filteredStderr = filterPodNoise(result.stderr);
|
|
112
|
+
const output = result.stdout.trim() +
|
|
113
|
+
(filteredStderr ? `\n\nSTDERR:\n${filteredStderr}` : "");
|
|
114
|
+
if (result.exitCode === 0 || (result.exitCode === null && result.stdout.trim())) {
|
|
115
|
+
return {
|
|
116
|
+
content: [{ type: "text", text: processToolOutput(output) }],
|
|
117
|
+
details: { exitCode: result.exitCode ?? 0 },
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
const errOutput = `Exit code: ${result.exitCode ?? "unknown"}\n${output}`;
|
|
122
|
+
return {
|
|
123
|
+
content: [{ type: "text", text: processToolOutput(errOutput) }],
|
|
124
|
+
details: { exitCode: result.exitCode, error: true },
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
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
|
+
// ── Container netns resolution ───────────────────────────────────────
|
|
219
|
+
/**
|
|
220
|
+
* Resolve the network namespace of a container inside a pod.
|
|
221
|
+
* Returns the node name and container ID needed to construct nsenter commands.
|
|
222
|
+
*
|
|
223
|
+
* Steps:
|
|
224
|
+
* 1. Verify pod is Running, get its node name
|
|
225
|
+
* 2. Verify node is Ready
|
|
226
|
+
* 3. Get container ID, strip runtime prefix
|
|
227
|
+
*/
|
|
228
|
+
export async function resolveContainerNetns(pod, namespace, container, env) {
|
|
229
|
+
// Step 1: Get pod phase + node
|
|
230
|
+
let nodeName;
|
|
231
|
+
try {
|
|
232
|
+
const result = await spawnAsync("kubectl", [
|
|
233
|
+
...env.kubeconfigArgs,
|
|
234
|
+
"get", "pod", pod, "-n", namespace,
|
|
235
|
+
"-o", "jsonpath={.status.phase},{.spec.nodeName}",
|
|
236
|
+
], 10_000, env.childEnv);
|
|
237
|
+
const parts = result.stdout.trim().split(",");
|
|
238
|
+
const phase = parts[0];
|
|
239
|
+
nodeName = parts[1] || "";
|
|
240
|
+
if (phase !== "Running") {
|
|
241
|
+
return {
|
|
242
|
+
error: `Pod "${pod}" in namespace "${namespace}" is not Running (phase: ${phase || "unknown"}). Cannot enter its network namespace.`,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
if (!nodeName) {
|
|
246
|
+
return {
|
|
247
|
+
error: `Could not determine node for pod "${pod}" in namespace "${namespace}".`,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
catch (err) {
|
|
252
|
+
const stderr = (err.stderr?.trim() || err.message);
|
|
253
|
+
if (stderr.includes("not found")) {
|
|
254
|
+
return {
|
|
255
|
+
error: `Pod "${pod}" not found in namespace "${namespace}". Check the pod name and namespace.`,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
return { error: `Failed to get pod info: ${stderr}` };
|
|
259
|
+
}
|
|
260
|
+
// Step 2: Check node is Ready
|
|
261
|
+
const nodeCheckErr = await checkNodeReady(nodeName, env.childEnv, env.kubeconfigPath ?? undefined);
|
|
262
|
+
if (nodeCheckErr) {
|
|
263
|
+
return { error: nodeCheckErr };
|
|
264
|
+
}
|
|
265
|
+
// Step 3: Get container ID
|
|
266
|
+
try {
|
|
267
|
+
const jsonpathExpr = container?.trim()
|
|
268
|
+
? `{.status.containerStatuses[?(@.name=="${container.trim()}")].containerID}`
|
|
269
|
+
: "{.status.containerStatuses[0].containerID}";
|
|
270
|
+
const result = await spawnAsync("kubectl", [
|
|
271
|
+
...env.kubeconfigArgs,
|
|
272
|
+
"get", "pod", pod, "-n", namespace,
|
|
273
|
+
"-o", `jsonpath=${jsonpathExpr}`,
|
|
274
|
+
], 10_000, env.childEnv);
|
|
275
|
+
let containerID = result.stdout.trim();
|
|
276
|
+
if (!containerID) {
|
|
277
|
+
return {
|
|
278
|
+
error: `Could not determine container ID for pod "${pod}". Is the pod running?`,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
// Strip the runtime prefix (e.g. "containerd://")
|
|
282
|
+
const prefixIdx = containerID.indexOf("://");
|
|
283
|
+
if (prefixIdx !== -1) {
|
|
284
|
+
containerID = containerID.slice(prefixIdx + 3);
|
|
285
|
+
}
|
|
286
|
+
return { nodeName, containerID };
|
|
287
|
+
}
|
|
288
|
+
catch (err) {
|
|
289
|
+
return {
|
|
290
|
+
error: `Failed to get container ID: ${err.stderr?.trim() || err.message}`,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=exec-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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
|
@@ -15,10 +15,22 @@ This tool outputs a structured fork definition that the user can preview and sav
|
|
|
15
15
|
|
|
16
16
|
**When to use this tool vs others:**
|
|
17
17
|
- \`fork_skill\`: Fork an existing builtin/team skill to personal (with or without modifications)
|
|
18
|
-
- \`create_skill\`: Create a brand-new skill from scratch
|
|
18
|
+
- \`create_skill\`: Create a brand-new skill from scratch (only when no existing skill covers the same functionality)
|
|
19
19
|
- \`update_skill\`: Update an existing personal skill
|
|
20
20
|
|
|
21
|
-
**IMPORTANT**: Before calling this tool, check
|
|
21
|
+
**IMPORTANT**: Before calling this tool, check \`<available_skills>\` in your system prompt and read the source skill's SKILL.md to understand its current content. You need the exact skill name.
|
|
22
|
+
|
|
23
|
+
**Prefer forking over creating**: If a user wants to create a skill that overlaps with an existing builtin or team skill, recommend forking instead. This avoids duplicate skills that confuse the model. Fork lets them customize while keeping a clear lineage.
|
|
24
|
+
|
|
25
|
+
## Environments and Approval Workflow
|
|
26
|
+
|
|
27
|
+
| Environment | Behavior |
|
|
28
|
+
|-------------|----------|
|
|
29
|
+
| **Dev / Test** | Forked skill (draft) is immediately visible and testable. |
|
|
30
|
+
| **Production** | Forked skill must be **approved** before it appears. |
|
|
31
|
+
|
|
32
|
+
- Forked skills with scripts require admin approval before production use.
|
|
33
|
+
- In dev/test, the forked copy is available immediately for testing.
|
|
22
34
|
|
|
23
35
|
Parameters:
|
|
24
36
|
- source: The exact name of the builtin or team skill to fork (e.g. "find-node", "roce-perftest-pod")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fork-skill.js","sourceRoot":"","sources":["../../src/tools/fork-skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AASjF,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE
|
|
1
|
+
{"version":3,"file":"fork-skill.js","sourceRoot":"","sources":["../../src/tools/fork-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Type } from "@sinclair/typebox";
|
|
2
|
+
import { FEEDBACK_SIGNALS } from "../memory/types.js";
|
|
3
|
+
export function createInvestigationFeedbackTool(memoryRef) {
|
|
4
|
+
return {
|
|
5
|
+
name: "investigation_feedback",
|
|
6
|
+
label: "Investigation Feedback",
|
|
7
|
+
description: `Submit feedback on a completed investigation's diagnosis accuracy.
|
|
8
|
+
This adjusts retrieval weighting so correct diagnoses get boosted and wrong ones get suppressed in future investigations.
|
|
9
|
+
|
|
10
|
+
Use after presenting deep_search findings when the user confirms, corrects, or rejects the diagnosis.
|
|
11
|
+
The investigationId comes from the deep_search result details.`,
|
|
12
|
+
parameters: Type.Object({
|
|
13
|
+
investigationId: Type.String({ description: "ID from the deep_search result" }),
|
|
14
|
+
status: Type.Union([
|
|
15
|
+
Type.Literal("confirmed"),
|
|
16
|
+
Type.Literal("corrected"),
|
|
17
|
+
Type.Literal("rejected"),
|
|
18
|
+
], { description: "confirmed = diagnosis was correct, corrected = partially right but root cause was different, rejected = diagnosis was wrong" }),
|
|
19
|
+
correctedRootCause: Type.Optional(Type.String({ description: "The actual root cause (when status is 'corrected')" })),
|
|
20
|
+
note: Type.Optional(Type.String({ description: "Additional context about the feedback" })),
|
|
21
|
+
}),
|
|
22
|
+
async execute(_toolCallId, rawParams) {
|
|
23
|
+
const params = rawParams;
|
|
24
|
+
const indexer = memoryRef.indexer;
|
|
25
|
+
if (!indexer) {
|
|
26
|
+
return {
|
|
27
|
+
content: [{ type: "text", text: "Memory indexer not available. Feedback not saved." }],
|
|
28
|
+
details: { error: true },
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// Validate that the investigation exists
|
|
32
|
+
const record = indexer.getInvestigationById(params.investigationId);
|
|
33
|
+
if (!record) {
|
|
34
|
+
return {
|
|
35
|
+
content: [{ type: "text", text: `Investigation not found: ${params.investigationId}` }],
|
|
36
|
+
details: { error: true },
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Build feedback note: encode status + optional correction/note
|
|
40
|
+
const signal = FEEDBACK_SIGNALS[params.status];
|
|
41
|
+
let note = params.status;
|
|
42
|
+
if (params.status === "corrected" && params.correctedRootCause) {
|
|
43
|
+
note = `corrected: ${params.correctedRootCause}`;
|
|
44
|
+
}
|
|
45
|
+
if (params.note) {
|
|
46
|
+
note += ` | ${params.note}`;
|
|
47
|
+
}
|
|
48
|
+
const updated = indexer.updateInvestigationFeedback(params.investigationId, signal, note);
|
|
49
|
+
if (!updated) {
|
|
50
|
+
return {
|
|
51
|
+
content: [{ type: "text", text: "Failed to update investigation feedback." }],
|
|
52
|
+
details: { error: true },
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const statusLabels = {
|
|
56
|
+
confirmed: `Diagnosis confirmed (weight boosted to ${signal}x)`,
|
|
57
|
+
corrected: `Diagnosis corrected (weight reduced to ${signal}x)`,
|
|
58
|
+
rejected: `Diagnosis rejected (weight reduced to ${signal}x)`,
|
|
59
|
+
};
|
|
60
|
+
return {
|
|
61
|
+
content: [{ type: "text", text: `Feedback recorded: ${statusLabels[params.status]}. Future investigations will be adjusted accordingly.` }],
|
|
62
|
+
details: {
|
|
63
|
+
investigationId: params.investigationId,
|
|
64
|
+
status: params.status,
|
|
65
|
+
signal,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=investigation-feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"investigation-feedback.js","sourceRoot":"","sources":["../../src/tools/investigation-feedback.ts"],"names":[],"mappings":"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"}
|