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.
Files changed (270) hide show
  1. package/README.md +75 -114
  2. package/dist/agentbox/gateway-client.d.ts +2 -1
  3. package/dist/agentbox/gateway-client.js +6 -2
  4. package/dist/agentbox/gateway-client.js.map +1 -1
  5. package/dist/agentbox/http-server.js +184 -19
  6. package/dist/agentbox/http-server.js.map +1 -1
  7. package/dist/agentbox/resource-handlers.d.ts +1 -0
  8. package/dist/agentbox/resource-handlers.js +23 -23
  9. package/dist/agentbox/resource-handlers.js.map +1 -1
  10. package/dist/agentbox/session.js +85 -5
  11. package/dist/agentbox/session.js.map +1 -1
  12. package/dist/agentbox-main.d.ts +2 -1
  13. package/dist/agentbox-main.js +65 -18
  14. package/dist/agentbox-main.js.map +1 -1
  15. package/dist/cli-credentials.d.ts +1 -0
  16. package/dist/cli-credentials.js +109 -0
  17. package/dist/cli-credentials.js.map +1 -0
  18. package/dist/cli-first-run.d.ts +11 -0
  19. package/dist/cli-first-run.js +99 -0
  20. package/dist/cli-first-run.js.map +1 -0
  21. package/dist/cli-main.js +33 -11
  22. package/dist/cli-main.js.map +1 -1
  23. package/dist/cli-setup.d.ts +5 -11
  24. package/dist/cli-setup.js +12 -225
  25. package/dist/cli-setup.js.map +1 -1
  26. package/dist/core/agent-factory.d.ts +4 -0
  27. package/dist/core/agent-factory.js +102 -151
  28. package/dist/core/agent-factory.js.map +1 -1
  29. package/dist/core/config.d.ts +10 -3
  30. package/dist/core/config.js +11 -95
  31. package/dist/core/config.js.map +1 -1
  32. package/dist/core/extensions/deep-investigation.d.ts +2 -1
  33. package/dist/core/extensions/deep-investigation.js +144 -24
  34. package/dist/core/extensions/deep-investigation.js.map +1 -1
  35. package/dist/core/extensions/setup.d.ts +8 -0
  36. package/dist/core/extensions/setup.js +669 -0
  37. package/dist/core/extensions/setup.js.map +1 -0
  38. package/dist/core/llm-proxy.js +7 -3
  39. package/dist/core/llm-proxy.js.map +1 -1
  40. package/dist/core/mcp-client.d.ts +0 -10
  41. package/dist/core/mcp-client.js +0 -65
  42. package/dist/core/mcp-client.js.map +1 -1
  43. package/dist/core/prompt.d.ts +1 -1
  44. package/dist/core/prompt.js +42 -5
  45. package/dist/core/prompt.js.map +1 -1
  46. package/dist/core/provider-presets.d.ts +14 -0
  47. package/dist/core/provider-presets.js +81 -0
  48. package/dist/core/provider-presets.js.map +1 -0
  49. package/dist/cron/cron-coordinator.d.ts +2 -0
  50. package/dist/cron/cron-coordinator.js +46 -14
  51. package/dist/cron/cron-coordinator.js.map +1 -1
  52. package/dist/cron/cron-executor.js +33 -8
  53. package/dist/cron/cron-executor.js.map +1 -1
  54. package/dist/cron/cron-scheduler.d.ts +1 -1
  55. package/dist/cron/gateway-client.d.ts +5 -0
  56. package/dist/cron/gateway-client.js +43 -8
  57. package/dist/cron/gateway-client.js.map +1 -1
  58. package/dist/cron-main.js +39 -9
  59. package/dist/cron-main.js.map +1 -1
  60. package/dist/gateway/agentbox/client.d.ts +11 -0
  61. package/dist/gateway/agentbox/client.js +18 -0
  62. package/dist/gateway/agentbox/client.js.map +1 -1
  63. package/dist/gateway/agentbox/k8s-spawner.d.ts +11 -2
  64. package/dist/gateway/agentbox/k8s-spawner.js +95 -52
  65. package/dist/gateway/agentbox/k8s-spawner.js.map +1 -1
  66. package/dist/gateway/agentbox/local-spawner.d.ts +1 -1
  67. package/dist/gateway/agentbox/local-spawner.js +4 -2
  68. package/dist/gateway/agentbox/local-spawner.js.map +1 -1
  69. package/dist/gateway/agentbox/manager.d.ts +0 -10
  70. package/dist/gateway/agentbox/manager.js +11 -30
  71. package/dist/gateway/agentbox/manager.js.map +1 -1
  72. package/dist/gateway/agentbox/types.d.ts +6 -4
  73. package/dist/gateway/cron/cron-service.d.ts +49 -0
  74. package/dist/gateway/cron/cron-service.js +259 -0
  75. package/dist/gateway/cron/cron-service.js.map +1 -0
  76. package/dist/gateway/db/init-schema.js +44 -0
  77. package/dist/gateway/db/init-schema.js.map +1 -1
  78. package/dist/gateway/db/migrate-sqlite.js +73 -4
  79. package/dist/gateway/db/migrate-sqlite.js.map +1 -1
  80. package/dist/gateway/db/repositories/chat-repo.d.ts +56 -2
  81. package/dist/gateway/db/repositories/chat-repo.js +132 -2
  82. package/dist/gateway/db/repositories/chat-repo.js.map +1 -1
  83. package/dist/gateway/db/repositories/config-repo.d.ts +31 -2
  84. package/dist/gateway/db/repositories/config-repo.js +57 -7
  85. package/dist/gateway/db/repositories/config-repo.js.map +1 -1
  86. package/dist/gateway/db/repositories/env-repo.d.ts +14 -0
  87. package/dist/gateway/db/repositories/env-repo.js +15 -2
  88. package/dist/gateway/db/repositories/env-repo.js.map +1 -1
  89. package/dist/gateway/db/repositories/model-config-repo.d.ts +1 -1
  90. package/dist/gateway/db/repositories/model-config-repo.js +26 -12
  91. package/dist/gateway/db/repositories/model-config-repo.js.map +1 -1
  92. package/dist/gateway/db/repositories/skill-repo.d.ts +0 -5
  93. package/dist/gateway/db/repositories/skill-review-repo.d.ts +1 -0
  94. package/dist/gateway/db/repositories/skill-review-repo.js +4 -1
  95. package/dist/gateway/db/repositories/skill-review-repo.js.map +1 -1
  96. package/dist/gateway/db/repositories/skill-version-repo.js +0 -1
  97. package/dist/gateway/db/repositories/skill-version-repo.js.map +1 -1
  98. package/dist/gateway/db/repositories/system-config-repo.d.ts +1 -1
  99. package/dist/gateway/db/repositories/system-config-repo.js +2 -1
  100. package/dist/gateway/db/repositories/system-config-repo.js.map +1 -1
  101. package/dist/gateway/db/repositories/user-env-config-repo.d.ts +13 -0
  102. package/dist/gateway/db/repositories/user-env-config-repo.js +11 -0
  103. package/dist/gateway/db/repositories/user-env-config-repo.js.map +1 -1
  104. package/dist/gateway/db/repositories/workspace-repo.d.ts +3 -2
  105. package/dist/gateway/db/repositories/workspace-repo.js +6 -2
  106. package/dist/gateway/db/repositories/workspace-repo.js.map +1 -1
  107. package/dist/gateway/db/schema-mysql.d.ts +473 -51
  108. package/dist/gateway/db/schema-mysql.js +35 -4
  109. package/dist/gateway/db/schema-mysql.js.map +1 -1
  110. package/dist/gateway/db/schema-sqlite.d.ts +522 -57
  111. package/dist/gateway/db/schema-sqlite.js +38 -6
  112. package/dist/gateway/db/schema-sqlite.js.map +1 -1
  113. package/dist/gateway/db/schema.d.ts +471 -51
  114. package/dist/gateway/db/schema.js +1 -1
  115. package/dist/gateway/db/schema.js.map +1 -1
  116. package/dist/gateway/metrics-aggregator.d.ts +65 -0
  117. package/dist/gateway/metrics-aggregator.js +244 -0
  118. package/dist/gateway/metrics-aggregator.js.map +1 -0
  119. package/dist/gateway/plugins/channel-bridge.d.ts +4 -1
  120. package/dist/gateway/plugins/channel-bridge.js +78 -86
  121. package/dist/gateway/plugins/channel-bridge.js.map +1 -1
  122. package/dist/gateway/rpc-methods.d.ts +4 -2
  123. package/dist/gateway/rpc-methods.js +962 -163
  124. package/dist/gateway/rpc-methods.js.map +1 -1
  125. package/dist/gateway/security/cert-manager.d.ts +2 -2
  126. package/dist/gateway/security/cert-manager.js +4 -2
  127. package/dist/gateway/security/cert-manager.js.map +1 -1
  128. package/dist/gateway/server.d.ts +4 -8
  129. package/dist/gateway/server.js +297 -261
  130. package/dist/gateway/server.js.map +1 -1
  131. package/dist/gateway/skills/file-writer.js +17 -11
  132. package/dist/gateway/skills/file-writer.js.map +1 -1
  133. package/dist/gateway/skills/script-evaluator.js +12 -9
  134. package/dist/gateway/skills/script-evaluator.js.map +1 -1
  135. package/dist/gateway/web/dist/assets/index-0p17ZeTP.js +740 -0
  136. package/dist/gateway/web/dist/assets/index-9eP6nPUq.js +741 -0
  137. package/dist/gateway/web/dist/assets/index-9eP6nPUq.js.map +1 -0
  138. package/dist/gateway/web/dist/assets/index-CAmSY91d.js +675 -0
  139. package/dist/gateway/web/dist/assets/index-DMFEh8Pp.css +1 -0
  140. package/dist/gateway/web/dist/assets/index-DyowBCEj.css +1 -0
  141. package/dist/gateway/web/dist/assets/index-PDK5JJDO.css +1 -0
  142. package/dist/gateway/web/dist/index.html +2 -2
  143. package/dist/gateway-main.js +27 -10
  144. package/dist/gateway-main.js.map +1 -1
  145. package/dist/memory/embeddings.js +5 -4
  146. package/dist/memory/embeddings.js.map +1 -1
  147. package/dist/memory/indexer.d.ts +23 -3
  148. package/dist/memory/indexer.js +235 -23
  149. package/dist/memory/indexer.js.map +1 -1
  150. package/dist/memory/schema.js +15 -1
  151. package/dist/memory/schema.js.map +1 -1
  152. package/dist/memory/types.d.ts +18 -0
  153. package/dist/memory/types.js +6 -1
  154. package/dist/memory/types.js.map +1 -1
  155. package/dist/shared/detect-language.d.ts +12 -0
  156. package/dist/shared/detect-language.js +78 -0
  157. package/dist/shared/detect-language.js.map +1 -0
  158. package/dist/shared/diagnostic-events.d.ts +70 -0
  159. package/dist/shared/diagnostic-events.js +38 -0
  160. package/dist/shared/diagnostic-events.js.map +1 -0
  161. package/dist/shared/local-collector.d.ts +56 -0
  162. package/dist/shared/local-collector.js +284 -0
  163. package/dist/shared/local-collector.js.map +1 -0
  164. package/dist/shared/metrics-types.d.ts +64 -0
  165. package/dist/shared/metrics-types.js +25 -0
  166. package/dist/shared/metrics-types.js.map +1 -0
  167. package/dist/shared/metrics.d.ts +19 -0
  168. package/dist/shared/metrics.js +185 -0
  169. package/dist/shared/metrics.js.map +1 -0
  170. package/dist/shared/path-utils.d.ts +15 -0
  171. package/dist/shared/path-utils.js +23 -0
  172. package/dist/shared/path-utils.js.map +1 -0
  173. package/dist/shared/retry.d.ts +35 -0
  174. package/dist/shared/retry.js +61 -0
  175. package/dist/shared/retry.js.map +1 -0
  176. package/dist/tools/command-sets.d.ts +18 -2
  177. package/dist/tools/command-sets.js +207 -32
  178. package/dist/tools/command-sets.js.map +1 -1
  179. package/dist/tools/command-validator.d.ts +56 -0
  180. package/dist/tools/command-validator.js +357 -0
  181. package/dist/tools/command-validator.js.map +1 -0
  182. package/dist/tools/create-skill.js +26 -1
  183. package/dist/tools/create-skill.js.map +1 -1
  184. package/dist/tools/credential-list.js +1 -23
  185. package/dist/tools/credential-list.js.map +1 -1
  186. package/dist/tools/credential-manager.d.ts +98 -0
  187. package/dist/tools/credential-manager.js +313 -0
  188. package/dist/tools/credential-manager.js.map +1 -0
  189. package/dist/tools/deep-search/engine.js +184 -127
  190. package/dist/tools/deep-search/engine.js.map +1 -1
  191. package/dist/tools/deep-search/prompts.d.ts +10 -2
  192. package/dist/tools/deep-search/prompts.js +37 -36
  193. package/dist/tools/deep-search/prompts.js.map +1 -1
  194. package/dist/tools/deep-search/schemas.d.ts +87 -0
  195. package/dist/tools/deep-search/schemas.js +85 -0
  196. package/dist/tools/deep-search/schemas.js.map +1 -0
  197. package/dist/tools/deep-search/sub-agent.d.ts +21 -0
  198. package/dist/tools/deep-search/sub-agent.js +153 -4
  199. package/dist/tools/deep-search/sub-agent.js.map +1 -1
  200. package/dist/tools/deep-search/tool.js +1 -0
  201. package/dist/tools/deep-search/tool.js.map +1 -1
  202. package/dist/tools/deep-search/types.d.ts +2 -0
  203. package/dist/tools/deep-search/types.js.map +1 -1
  204. package/dist/tools/dp-tools.js +29 -5
  205. package/dist/tools/dp-tools.js.map +1 -1
  206. package/dist/tools/exec-utils.d.ts +85 -0
  207. package/dist/tools/exec-utils.js +294 -0
  208. package/dist/tools/exec-utils.js.map +1 -0
  209. package/dist/tools/fork-skill.js +14 -2
  210. package/dist/tools/fork-skill.js.map +1 -1
  211. package/dist/tools/investigation-feedback.d.ts +3 -0
  212. package/dist/tools/investigation-feedback.js +71 -0
  213. package/dist/tools/investigation-feedback.js.map +1 -0
  214. package/dist/tools/manage-schedule.js +16 -6
  215. package/dist/tools/manage-schedule.js.map +1 -1
  216. package/dist/tools/netns-script.js +27 -281
  217. package/dist/tools/netns-script.js.map +1 -1
  218. package/dist/tools/node-exec.d.ts +2 -14
  219. package/dist/tools/node-exec.js +18 -225
  220. package/dist/tools/node-exec.js.map +1 -1
  221. package/dist/tools/node-script.js +14 -168
  222. package/dist/tools/node-script.js.map +1 -1
  223. package/dist/tools/pod-exec.d.ts +1 -1
  224. package/dist/tools/pod-exec.js +10 -26
  225. package/dist/tools/pod-exec.js.map +1 -1
  226. package/dist/tools/pod-nsenter-exec.js +21 -225
  227. package/dist/tools/pod-nsenter-exec.js.map +1 -1
  228. package/dist/tools/pod-script.js +10 -19
  229. package/dist/tools/pod-script.js.map +1 -1
  230. package/dist/tools/restricted-bash.d.ts +1 -17
  231. package/dist/tools/restricted-bash.js +38 -252
  232. package/dist/tools/restricted-bash.js.map +1 -1
  233. package/dist/tools/run-skill.d.ts +3 -1
  234. package/dist/tools/run-skill.js +21 -1
  235. package/dist/tools/run-skill.js.map +1 -1
  236. package/dist/tools/script-resolver.d.ts +3 -1
  237. package/dist/tools/script-resolver.js +74 -30
  238. package/dist/tools/script-resolver.js.map +1 -1
  239. package/dist/tools/update-skill.js +17 -6
  240. package/dist/tools/update-skill.js.map +1 -1
  241. package/package.json +8 -6
  242. package/siclaw.mjs +10 -1
  243. package/skills/core/cluster-events/SKILL.md +1 -1
  244. package/skills/core/deep-investigation/SKILL.md +11 -0
  245. package/skills/core/deployment-rollout-debug/SKILL.md +1 -1
  246. package/skills/core/dns-debug/SKILL.md +1 -0
  247. package/skills/core/meta.json +12 -1
  248. package/skills/core/networkpolicy-debug/SKILL.md +332 -0
  249. package/skills/core/node-logs/scripts/get-node-logs.sh +19 -9
  250. package/skills/core/pod-pending-debug/SKILL.md +1 -0
  251. package/skills/core/quota-debug/SKILL.md +203 -0
  252. package/skills/core/service-debug/SKILL.md +1 -0
  253. package/skills/core/statefulset-debug/SKILL.md +280 -0
  254. package/skills/core/volcano-diagnose-pod/SKILL.md +196 -0
  255. package/skills/core/volcano-diagnose-pod/scripts/diagnose-pod.sh +175 -0
  256. package/skills/core/volcano-gang-scheduling/SKILL.md +299 -0
  257. package/skills/core/volcano-job-diagnose/SKILL.md +319 -0
  258. package/skills/core/volcano-job-diagnose/scripts/diagnose-job.sh +253 -0
  259. package/skills/core/volcano-node-resources/SKILL.md +334 -0
  260. package/skills/core/volcano-node-resources/scripts/get-node-resources.sh +281 -0
  261. package/skills/core/volcano-queue-diagnose/SKILL.md +294 -0
  262. package/skills/core/volcano-queue-diagnose/scripts/diagnose-queue.sh +283 -0
  263. package/skills/core/volcano-resource-insufficient/SKILL.md +315 -0
  264. package/skills/core/volcano-scheduler-config/SKILL.md +371 -0
  265. package/skills/core/volcano-scheduler-config/scripts/get-scheduler-config.sh +297 -0
  266. package/skills/core/volcano-scheduler-logs/SKILL.md +241 -0
  267. package/skills/core/volcano-scheduler-logs/scripts/get-scheduler-logs.sh +159 -0
  268. package/skills/platform/create-skill/SKILL.md +35 -3
  269. package/skills/platform/manage-skill/SKILL.md +9 -2
  270. 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":"AAiDA,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"}
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"}
@@ -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.String({
113
- description: "Formatted hypothesis list in markdown. Each hypothesis should include: " +
114
- "description, validation method (skill script paths), and confidence percentage.",
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: hypothesesText } = params;
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: hypothesesText },
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":"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"}
@@ -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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"}
@@ -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 the Skill Scripts Reference in your context and read the source skill's SKILL.md to understand its current content. You need the exact skill name.
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":"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"}
1
+ {"version":3,"file":"fork-skill.js","sourceRoot":"","sources":["../../src/tools/fork-skill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDefinition } from "@mariozechner/pi-coding-agent";
2
+ import type { MemoryRef } from "./deep-search/tool.js";
3
+ export declare function createInvestigationFeedbackTool(memoryRef: MemoryRef): ToolDefinition;
@@ -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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"}