siclaw 0.1.0

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 (460) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +268 -0
  3. package/dist/agentbox/gateway-client.d.ts +41 -0
  4. package/dist/agentbox/gateway-client.js +108 -0
  5. package/dist/agentbox/gateway-client.js.map +1 -0
  6. package/dist/agentbox/http-server.d.ts +12 -0
  7. package/dist/agentbox/http-server.js +700 -0
  8. package/dist/agentbox/http-server.js.map +1 -0
  9. package/dist/agentbox/mcp-sync.d.ts +6 -0
  10. package/dist/agentbox/mcp-sync.js +26 -0
  11. package/dist/agentbox/mcp-sync.js.map +1 -0
  12. package/dist/agentbox/resource-handlers.d.ts +40 -0
  13. package/dist/agentbox/resource-handlers.js +116 -0
  14. package/dist/agentbox/resource-handlers.js.map +1 -0
  15. package/dist/agentbox/resource-sync.d.ts +28 -0
  16. package/dist/agentbox/resource-sync.js +74 -0
  17. package/dist/agentbox/resource-sync.js.map +1 -0
  18. package/dist/agentbox/session.d.ts +145 -0
  19. package/dist/agentbox/session.js +444 -0
  20. package/dist/agentbox/session.js.map +1 -0
  21. package/dist/agentbox-main.d.ts +7 -0
  22. package/dist/agentbox-main.js +90 -0
  23. package/dist/agentbox-main.js.map +1 -0
  24. package/dist/cli-main.d.ts +1 -0
  25. package/dist/cli-main.js +187 -0
  26. package/dist/cli-main.js.map +1 -0
  27. package/dist/cli-setup.d.ts +17 -0
  28. package/dist/cli-setup.js +247 -0
  29. package/dist/cli-setup.js.map +1 -0
  30. package/dist/core/agent-factory.d.ts +52 -0
  31. package/dist/core/agent-factory.js +547 -0
  32. package/dist/core/agent-factory.js.map +1 -0
  33. package/dist/core/brain-session.d.ts +67 -0
  34. package/dist/core/brain-session.js +15 -0
  35. package/dist/core/brain-session.js.map +1 -0
  36. package/dist/core/brains/claude-sdk-brain.d.ts +76 -0
  37. package/dist/core/brains/claude-sdk-brain.js +403 -0
  38. package/dist/core/brains/claude-sdk-brain.js.map +1 -0
  39. package/dist/core/brains/pi-agent-brain.d.ts +28 -0
  40. package/dist/core/brains/pi-agent-brain.js +84 -0
  41. package/dist/core/brains/pi-agent-brain.js.map +1 -0
  42. package/dist/core/config.d.ts +109 -0
  43. package/dist/core/config.js +294 -0
  44. package/dist/core/config.js.map +1 -0
  45. package/dist/core/extensions/context-pruning.d.ts +38 -0
  46. package/dist/core/extensions/context-pruning.js +162 -0
  47. package/dist/core/extensions/context-pruning.js.map +1 -0
  48. package/dist/core/extensions/deep-investigation.d.ts +2 -0
  49. package/dist/core/extensions/deep-investigation.js +541 -0
  50. package/dist/core/extensions/deep-investigation.js.map +1 -0
  51. package/dist/core/extensions/memory-flush.d.ts +20 -0
  52. package/dist/core/extensions/memory-flush.js +120 -0
  53. package/dist/core/extensions/memory-flush.js.map +1 -0
  54. package/dist/core/llm-proxy.d.ts +37 -0
  55. package/dist/core/llm-proxy.js +578 -0
  56. package/dist/core/llm-proxy.js.map +1 -0
  57. package/dist/core/mcp-client.d.ts +80 -0
  58. package/dist/core/mcp-client.js +285 -0
  59. package/dist/core/mcp-client.js.map +1 -0
  60. package/dist/core/prompt.d.ts +1 -0
  61. package/dist/core/prompt.js +64 -0
  62. package/dist/core/prompt.js.map +1 -0
  63. package/dist/core/tool-adapter.d.ts +45 -0
  64. package/dist/core/tool-adapter.js +154 -0
  65. package/dist/core/tool-adapter.js.map +1 -0
  66. package/dist/cron/cron-api.d.ts +9 -0
  67. package/dist/cron/cron-api.js +94 -0
  68. package/dist/cron/cron-api.js.map +1 -0
  69. package/dist/cron/cron-coordinator.d.ts +29 -0
  70. package/dist/cron/cron-coordinator.js +150 -0
  71. package/dist/cron/cron-coordinator.js.map +1 -0
  72. package/dist/cron/cron-executor.d.ts +15 -0
  73. package/dist/cron/cron-executor.js +90 -0
  74. package/dist/cron/cron-executor.js.map +1 -0
  75. package/dist/cron/cron-matcher.d.ts +19 -0
  76. package/dist/cron/cron-matcher.js +114 -0
  77. package/dist/cron/cron-matcher.js.map +1 -0
  78. package/dist/cron/cron-scheduler.d.ts +42 -0
  79. package/dist/cron/cron-scheduler.js +91 -0
  80. package/dist/cron/cron-scheduler.js.map +1 -0
  81. package/dist/cron/gateway-client.d.ts +32 -0
  82. package/dist/cron/gateway-client.js +91 -0
  83. package/dist/cron/gateway-client.js.map +1 -0
  84. package/dist/cron-main.d.ts +10 -0
  85. package/dist/cron-main.js +75 -0
  86. package/dist/cron-main.js.map +1 -0
  87. package/dist/gateway/agentbox/client.d.ts +187 -0
  88. package/dist/gateway/agentbox/client.js +314 -0
  89. package/dist/gateway/agentbox/client.js.map +1 -0
  90. package/dist/gateway/agentbox/index.d.ts +10 -0
  91. package/dist/gateway/agentbox/index.js +11 -0
  92. package/dist/gateway/agentbox/index.js.map +1 -0
  93. package/dist/gateway/agentbox/k8s-spawner.d.ts +70 -0
  94. package/dist/gateway/agentbox/k8s-spawner.js +466 -0
  95. package/dist/gateway/agentbox/k8s-spawner.js.map +1 -0
  96. package/dist/gateway/agentbox/local-spawner.d.ts +63 -0
  97. package/dist/gateway/agentbox/local-spawner.js +234 -0
  98. package/dist/gateway/agentbox/local-spawner.js.map +1 -0
  99. package/dist/gateway/agentbox/manager.d.ts +121 -0
  100. package/dist/gateway/agentbox/manager.js +325 -0
  101. package/dist/gateway/agentbox/manager.js.map +1 -0
  102. package/dist/gateway/agentbox/process-spawner.d.ts +21 -0
  103. package/dist/gateway/agentbox/process-spawner.js +168 -0
  104. package/dist/gateway/agentbox/process-spawner.js.map +1 -0
  105. package/dist/gateway/agentbox/spawner.d.ts +33 -0
  106. package/dist/gateway/agentbox/spawner.js +10 -0
  107. package/dist/gateway/agentbox/spawner.js.map +1 -0
  108. package/dist/gateway/agentbox/types.d.ts +39 -0
  109. package/dist/gateway/agentbox/types.js +5 -0
  110. package/dist/gateway/agentbox/types.js.map +1 -0
  111. package/dist/gateway/auth/bind-code-store.d.ts +31 -0
  112. package/dist/gateway/auth/bind-code-store.js +73 -0
  113. package/dist/gateway/auth/bind-code-store.js.map +1 -0
  114. package/dist/gateway/auth/index.d.ts +9 -0
  115. package/dist/gateway/auth/index.js +10 -0
  116. package/dist/gateway/auth/index.js.map +1 -0
  117. package/dist/gateway/auth/jwt.d.ts +23 -0
  118. package/dist/gateway/auth/jwt.js +82 -0
  119. package/dist/gateway/auth/jwt.js.map +1 -0
  120. package/dist/gateway/auth/login.d.ts +26 -0
  121. package/dist/gateway/auth/login.js +74 -0
  122. package/dist/gateway/auth/login.js.map +1 -0
  123. package/dist/gateway/auth/middleware.d.ts +23 -0
  124. package/dist/gateway/auth/middleware.js +67 -0
  125. package/dist/gateway/auth/middleware.js.map +1 -0
  126. package/dist/gateway/auth/oauth2.d.ts +57 -0
  127. package/dist/gateway/auth/oauth2.js +113 -0
  128. package/dist/gateway/auth/oauth2.js.map +1 -0
  129. package/dist/gateway/auth/user-store.d.ts +95 -0
  130. package/dist/gateway/auth/user-store.js +291 -0
  131. package/dist/gateway/auth/user-store.js.map +1 -0
  132. package/dist/gateway/channels/channel-manager.d.ts +42 -0
  133. package/dist/gateway/channels/channel-manager.js +156 -0
  134. package/dist/gateway/channels/channel-manager.js.map +1 -0
  135. package/dist/gateway/channels/channel-rpc.d.ts +9 -0
  136. package/dist/gateway/channels/channel-rpc.js +104 -0
  137. package/dist/gateway/channels/channel-rpc.js.map +1 -0
  138. package/dist/gateway/channels/channel-store.d.ts +32 -0
  139. package/dist/gateway/channels/channel-store.js +114 -0
  140. package/dist/gateway/channels/channel-store.js.map +1 -0
  141. package/dist/gateway/channels/discord.d.ts +5 -0
  142. package/dist/gateway/channels/discord.js +177 -0
  143. package/dist/gateway/channels/discord.js.map +1 -0
  144. package/dist/gateway/channels/lark-format.d.ts +41 -0
  145. package/dist/gateway/channels/lark-format.js +620 -0
  146. package/dist/gateway/channels/lark-format.js.map +1 -0
  147. package/dist/gateway/channels/lark.d.ts +5 -0
  148. package/dist/gateway/channels/lark.js +1000 -0
  149. package/dist/gateway/channels/lark.js.map +1 -0
  150. package/dist/gateway/channels/slack.d.ts +5 -0
  151. package/dist/gateway/channels/slack.js +170 -0
  152. package/dist/gateway/channels/slack.js.map +1 -0
  153. package/dist/gateway/channels/telegram.d.ts +5 -0
  154. package/dist/gateway/channels/telegram.js +173 -0
  155. package/dist/gateway/channels/telegram.js.map +1 -0
  156. package/dist/gateway/channels/utils.d.ts +34 -0
  157. package/dist/gateway/channels/utils.js +115 -0
  158. package/dist/gateway/channels/utils.js.map +1 -0
  159. package/dist/gateway/config.d.ts +14 -0
  160. package/dist/gateway/config.js +12 -0
  161. package/dist/gateway/config.js.map +1 -0
  162. package/dist/gateway/cron/notify.d.ts +14 -0
  163. package/dist/gateway/cron/notify.js +40 -0
  164. package/dist/gateway/cron/notify.js.map +1 -0
  165. package/dist/gateway/db/dialect-helpers.d.ts +8 -0
  166. package/dist/gateway/db/dialect-helpers.js +26 -0
  167. package/dist/gateway/db/dialect-helpers.js.map +1 -0
  168. package/dist/gateway/db/index.d.ts +20 -0
  169. package/dist/gateway/db/index.js +140 -0
  170. package/dist/gateway/db/index.js.map +1 -0
  171. package/dist/gateway/db/init-schema.d.ts +8 -0
  172. package/dist/gateway/db/init-schema.js +385 -0
  173. package/dist/gateway/db/init-schema.js.map +1 -0
  174. package/dist/gateway/db/migrate-sqlite.d.ts +8 -0
  175. package/dist/gateway/db/migrate-sqlite.js +335 -0
  176. package/dist/gateway/db/migrate-sqlite.js.map +1 -0
  177. package/dist/gateway/db/repositories/chat-repo.d.ts +64 -0
  178. package/dist/gateway/db/repositories/chat-repo.js +115 -0
  179. package/dist/gateway/db/repositories/chat-repo.js.map +1 -0
  180. package/dist/gateway/db/repositories/config-repo.d.ts +164 -0
  181. package/dist/gateway/db/repositories/config-repo.js +267 -0
  182. package/dist/gateway/db/repositories/config-repo.js.map +1 -0
  183. package/dist/gateway/db/repositories/credential-repo.d.ts +51 -0
  184. package/dist/gateway/db/repositories/credential-repo.js +70 -0
  185. package/dist/gateway/db/repositories/credential-repo.js.map +1 -0
  186. package/dist/gateway/db/repositories/env-repo.d.ts +37 -0
  187. package/dist/gateway/db/repositories/env-repo.js +74 -0
  188. package/dist/gateway/db/repositories/env-repo.js.map +1 -0
  189. package/dist/gateway/db/repositories/mcp-server-repo.d.ts +97 -0
  190. package/dist/gateway/db/repositories/mcp-server-repo.js +83 -0
  191. package/dist/gateway/db/repositories/mcp-server-repo.js.map +1 -0
  192. package/dist/gateway/db/repositories/model-config-repo.d.ts +141 -0
  193. package/dist/gateway/db/repositories/model-config-repo.js +439 -0
  194. package/dist/gateway/db/repositories/model-config-repo.js.map +1 -0
  195. package/dist/gateway/db/repositories/notification-repo.d.ts +50 -0
  196. package/dist/gateway/db/repositories/notification-repo.js +105 -0
  197. package/dist/gateway/db/repositories/notification-repo.js.map +1 -0
  198. package/dist/gateway/db/repositories/permission-repo.d.ts +28 -0
  199. package/dist/gateway/db/repositories/permission-repo.js +74 -0
  200. package/dist/gateway/db/repositories/permission-repo.js.map +1 -0
  201. package/dist/gateway/db/repositories/skill-content-repo.d.ts +29 -0
  202. package/dist/gateway/db/repositories/skill-content-repo.js +90 -0
  203. package/dist/gateway/db/repositories/skill-content-repo.js.map +1 -0
  204. package/dist/gateway/db/repositories/skill-repo.d.ts +170 -0
  205. package/dist/gateway/db/repositories/skill-repo.js +185 -0
  206. package/dist/gateway/db/repositories/skill-repo.js.map +1 -0
  207. package/dist/gateway/db/repositories/skill-review-repo.d.ts +44 -0
  208. package/dist/gateway/db/repositories/skill-review-repo.js +44 -0
  209. package/dist/gateway/db/repositories/skill-review-repo.js.map +1 -0
  210. package/dist/gateway/db/repositories/skill-version-repo.d.ts +30 -0
  211. package/dist/gateway/db/repositories/skill-version-repo.js +56 -0
  212. package/dist/gateway/db/repositories/skill-version-repo.js.map +1 -0
  213. package/dist/gateway/db/repositories/system-config-repo.d.ts +21 -0
  214. package/dist/gateway/db/repositories/system-config-repo.js +86 -0
  215. package/dist/gateway/db/repositories/system-config-repo.js.map +1 -0
  216. package/dist/gateway/db/repositories/user-env-config-repo.d.ts +32 -0
  217. package/dist/gateway/db/repositories/user-env-config-repo.js +79 -0
  218. package/dist/gateway/db/repositories/user-env-config-repo.js.map +1 -0
  219. package/dist/gateway/db/repositories/user-repo.d.ts +59 -0
  220. package/dist/gateway/db/repositories/user-repo.js +83 -0
  221. package/dist/gateway/db/repositories/user-repo.js.map +1 -0
  222. package/dist/gateway/db/repositories/vote-repo.d.ts +26 -0
  223. package/dist/gateway/db/repositories/vote-repo.js +97 -0
  224. package/dist/gateway/db/repositories/vote-repo.js.map +1 -0
  225. package/dist/gateway/db/repositories/workspace-repo.d.ts +27 -0
  226. package/dist/gateway/db/repositories/workspace-repo.js +145 -0
  227. package/dist/gateway/db/repositories/workspace-repo.js.map +1 -0
  228. package/dist/gateway/db/schema-mysql.d.ts +3897 -0
  229. package/dist/gateway/db/schema-mysql.js +354 -0
  230. package/dist/gateway/db/schema-mysql.js.map +1 -0
  231. package/dist/gateway/db/schema-sqlite.d.ts +4147 -0
  232. package/dist/gateway/db/schema-sqlite.js +345 -0
  233. package/dist/gateway/db/schema-sqlite.js.map +1 -0
  234. package/dist/gateway/db/schema.d.ts +3869 -0
  235. package/dist/gateway/db/schema.js +16 -0
  236. package/dist/gateway/db/schema.js.map +1 -0
  237. package/dist/gateway/mcp-config-builder.d.ts +8 -0
  238. package/dist/gateway/mcp-config-builder.js +39 -0
  239. package/dist/gateway/mcp-config-builder.js.map +1 -0
  240. package/dist/gateway/output-redactor.d.ts +27 -0
  241. package/dist/gateway/output-redactor.js +101 -0
  242. package/dist/gateway/output-redactor.js.map +1 -0
  243. package/dist/gateway/plugins/api.d.ts +181 -0
  244. package/dist/gateway/plugins/api.js +28 -0
  245. package/dist/gateway/plugins/api.js.map +1 -0
  246. package/dist/gateway/plugins/channel-bridge.d.ts +72 -0
  247. package/dist/gateway/plugins/channel-bridge.js +586 -0
  248. package/dist/gateway/plugins/channel-bridge.js.map +1 -0
  249. package/dist/gateway/plugins/loader.d.ts +2 -0
  250. package/dist/gateway/plugins/loader.js +83 -0
  251. package/dist/gateway/plugins/loader.js.map +1 -0
  252. package/dist/gateway/plugins/runtime.d.ts +25 -0
  253. package/dist/gateway/plugins/runtime.js +64 -0
  254. package/dist/gateway/plugins/runtime.js.map +1 -0
  255. package/dist/gateway/resource-notifier.d.ts +36 -0
  256. package/dist/gateway/resource-notifier.js +123 -0
  257. package/dist/gateway/resource-notifier.js.map +1 -0
  258. package/dist/gateway/rpc-methods.d.ts +34 -0
  259. package/dist/gateway/rpc-methods.js +3198 -0
  260. package/dist/gateway/rpc-methods.js.map +1 -0
  261. package/dist/gateway/security/cert-manager.d.ts +77 -0
  262. package/dist/gateway/security/cert-manager.js +280 -0
  263. package/dist/gateway/security/cert-manager.js.map +1 -0
  264. package/dist/gateway/security/mtls-middleware.d.ts +33 -0
  265. package/dist/gateway/security/mtls-middleware.js +89 -0
  266. package/dist/gateway/security/mtls-middleware.js.map +1 -0
  267. package/dist/gateway/server.d.ts +54 -0
  268. package/dist/gateway/server.js +1146 -0
  269. package/dist/gateway/server.js.map +1 -0
  270. package/dist/gateway/skill-labels.d.ts +16 -0
  271. package/dist/gateway/skill-labels.js +79 -0
  272. package/dist/gateway/skill-labels.js.map +1 -0
  273. package/dist/gateway/skills/file-writer.d.ts +75 -0
  274. package/dist/gateway/skills/file-writer.js +320 -0
  275. package/dist/gateway/skills/file-writer.js.map +1 -0
  276. package/dist/gateway/skills/script-evaluator.d.ts +42 -0
  277. package/dist/gateway/skills/script-evaluator.js +204 -0
  278. package/dist/gateway/skills/script-evaluator.js.map +1 -0
  279. package/dist/gateway/skills/skill-bundle.d.ts +34 -0
  280. package/dist/gateway/skills/skill-bundle.js +83 -0
  281. package/dist/gateway/skills/skill-bundle.js.map +1 -0
  282. package/dist/gateway/web/dist/assets/index-BF6CtvnV.css +1 -0
  283. package/dist/gateway/web/dist/assets/index-Dumzqsr-.js +680 -0
  284. package/dist/gateway/web/dist/assets/index-n4IMHP1Q.js +675 -0
  285. package/dist/gateway/web/dist/index.html +14 -0
  286. package/dist/gateway/web/dist/noise.png +1 -0
  287. package/dist/gateway/web/dist/robots.txt +2 -0
  288. package/dist/gateway/web/dist/vite.svg +1 -0
  289. package/dist/gateway/ws-protocol.d.ts +68 -0
  290. package/dist/gateway/ws-protocol.js +106 -0
  291. package/dist/gateway/ws-protocol.js.map +1 -0
  292. package/dist/gateway-main.d.ts +1 -0
  293. package/dist/gateway-main.js +129 -0
  294. package/dist/gateway-main.js.map +1 -0
  295. package/dist/lib/s3-backup.d.ts +28 -0
  296. package/dist/lib/s3-backup.js +85 -0
  297. package/dist/lib/s3-backup.js.map +1 -0
  298. package/dist/lib/s3-storage.d.ts +45 -0
  299. package/dist/lib/s3-storage.js +210 -0
  300. package/dist/lib/s3-storage.js.map +1 -0
  301. package/dist/memory/chunker.d.ts +15 -0
  302. package/dist/memory/chunker.js +94 -0
  303. package/dist/memory/chunker.js.map +1 -0
  304. package/dist/memory/embeddings.d.ts +14 -0
  305. package/dist/memory/embeddings.js +143 -0
  306. package/dist/memory/embeddings.js.map +1 -0
  307. package/dist/memory/index.d.ts +18 -0
  308. package/dist/memory/index.js +15 -0
  309. package/dist/memory/index.js.map +1 -0
  310. package/dist/memory/indexer.d.ts +70 -0
  311. package/dist/memory/indexer.js +567 -0
  312. package/dist/memory/indexer.js.map +1 -0
  313. package/dist/memory/mmr.d.ts +22 -0
  314. package/dist/memory/mmr.js +82 -0
  315. package/dist/memory/mmr.js.map +1 -0
  316. package/dist/memory/schema.d.ts +2 -0
  317. package/dist/memory/schema.js +85 -0
  318. package/dist/memory/schema.js.map +1 -0
  319. package/dist/memory/session-summarizer.d.ts +19 -0
  320. package/dist/memory/session-summarizer.js +139 -0
  321. package/dist/memory/session-summarizer.js.map +1 -0
  322. package/dist/memory/stop-words.d.ts +13 -0
  323. package/dist/memory/stop-words.js +132 -0
  324. package/dist/memory/stop-words.js.map +1 -0
  325. package/dist/memory/temporal-decay.d.ts +20 -0
  326. package/dist/memory/temporal-decay.js +63 -0
  327. package/dist/memory/temporal-decay.js.map +1 -0
  328. package/dist/memory/types.d.ts +40 -0
  329. package/dist/memory/types.js +2 -0
  330. package/dist/memory/types.js.map +1 -0
  331. package/dist/shared/resource-sync.d.ts +80 -0
  332. package/dist/shared/resource-sync.js +24 -0
  333. package/dist/shared/resource-sync.js.map +1 -0
  334. package/dist/tools/command-sets.d.ts +61 -0
  335. package/dist/tools/command-sets.js +845 -0
  336. package/dist/tools/command-sets.js.map +1 -0
  337. package/dist/tools/create-skill.d.ts +2 -0
  338. package/dist/tools/create-skill.js +169 -0
  339. package/dist/tools/create-skill.js.map +1 -0
  340. package/dist/tools/credential-list.d.ts +8 -0
  341. package/dist/tools/credential-list.js +139 -0
  342. package/dist/tools/credential-list.js.map +1 -0
  343. package/dist/tools/deep-search/engine.d.ts +40 -0
  344. package/dist/tools/deep-search/engine.js +594 -0
  345. package/dist/tools/deep-search/engine.js.map +1 -0
  346. package/dist/tools/deep-search/events.d.ts +11 -0
  347. package/dist/tools/deep-search/events.js +10 -0
  348. package/dist/tools/deep-search/events.js.map +1 -0
  349. package/dist/tools/deep-search/format.d.ts +11 -0
  350. package/dist/tools/deep-search/format.js +143 -0
  351. package/dist/tools/deep-search/format.js.map +1 -0
  352. package/dist/tools/deep-search/prompts.d.ts +30 -0
  353. package/dist/tools/deep-search/prompts.js +237 -0
  354. package/dist/tools/deep-search/prompts.js.map +1 -0
  355. package/dist/tools/deep-search/sre-knowledge.d.ts +21 -0
  356. package/dist/tools/deep-search/sre-knowledge.js +112 -0
  357. package/dist/tools/deep-search/sre-knowledge.js.map +1 -0
  358. package/dist/tools/deep-search/sub-agent.d.ts +71 -0
  359. package/dist/tools/deep-search/sub-agent.js +401 -0
  360. package/dist/tools/deep-search/sub-agent.js.map +1 -0
  361. package/dist/tools/deep-search/tool.d.ts +9 -0
  362. package/dist/tools/deep-search/tool.js +201 -0
  363. package/dist/tools/deep-search/tool.js.map +1 -0
  364. package/dist/tools/deep-search/types.d.ts +67 -0
  365. package/dist/tools/deep-search/types.js +41 -0
  366. package/dist/tools/deep-search/types.js.map +1 -0
  367. package/dist/tools/dp-tools.d.ts +47 -0
  368. package/dist/tools/dp-tools.js +170 -0
  369. package/dist/tools/dp-tools.js.map +1 -0
  370. package/dist/tools/fork-skill.d.ts +2 -0
  371. package/dist/tools/fork-skill.js +93 -0
  372. package/dist/tools/fork-skill.js.map +1 -0
  373. package/dist/tools/k8s-checks.d.ts +18 -0
  374. package/dist/tools/k8s-checks.js +105 -0
  375. package/dist/tools/k8s-checks.js.map +1 -0
  376. package/dist/tools/kubeconfig-resolver.d.ts +11 -0
  377. package/dist/tools/kubeconfig-resolver.js +53 -0
  378. package/dist/tools/kubeconfig-resolver.js.map +1 -0
  379. package/dist/tools/kubectl.d.ts +12 -0
  380. package/dist/tools/kubectl.js +169 -0
  381. package/dist/tools/kubectl.js.map +1 -0
  382. package/dist/tools/manage-schedule.d.ts +3 -0
  383. package/dist/tools/manage-schedule.js +189 -0
  384. package/dist/tools/manage-schedule.js.map +1 -0
  385. package/dist/tools/memory-get.d.ts +2 -0
  386. package/dist/tools/memory-get.js +99 -0
  387. package/dist/tools/memory-get.js.map +1 -0
  388. package/dist/tools/memory-search.d.ts +3 -0
  389. package/dist/tools/memory-search.js +93 -0
  390. package/dist/tools/memory-search.js.map +1 -0
  391. package/dist/tools/netns-script.d.ts +3 -0
  392. package/dist/tools/netns-script.js +394 -0
  393. package/dist/tools/netns-script.js.map +1 -0
  394. package/dist/tools/node-exec.d.ts +18 -0
  395. package/dist/tools/node-exec.js +342 -0
  396. package/dist/tools/node-exec.js.map +1 -0
  397. package/dist/tools/node-script.d.ts +3 -0
  398. package/dist/tools/node-script.js +266 -0
  399. package/dist/tools/node-script.js.map +1 -0
  400. package/dist/tools/pod-exec.d.ts +4 -0
  401. package/dist/tools/pod-exec.js +146 -0
  402. package/dist/tools/pod-exec.js.map +1 -0
  403. package/dist/tools/pod-nsenter-exec.d.ts +3 -0
  404. package/dist/tools/pod-nsenter-exec.js +333 -0
  405. package/dist/tools/pod-nsenter-exec.js.map +1 -0
  406. package/dist/tools/pod-script.d.ts +3 -0
  407. package/dist/tools/pod-script.js +176 -0
  408. package/dist/tools/pod-script.js.map +1 -0
  409. package/dist/tools/restricted-bash.d.ts +41 -0
  410. package/dist/tools/restricted-bash.js +503 -0
  411. package/dist/tools/restricted-bash.js.map +1 -0
  412. package/dist/tools/run-skill.d.ts +3 -0
  413. package/dist/tools/run-skill.js +169 -0
  414. package/dist/tools/run-skill.js.map +1 -0
  415. package/dist/tools/sanitize-env.d.ts +14 -0
  416. package/dist/tools/sanitize-env.js +95 -0
  417. package/dist/tools/sanitize-env.js.map +1 -0
  418. package/dist/tools/script-resolver.d.ts +35 -0
  419. package/dist/tools/script-resolver.js +213 -0
  420. package/dist/tools/script-resolver.js.map +1 -0
  421. package/dist/tools/tool-render.d.ts +20 -0
  422. package/dist/tools/tool-render.js +77 -0
  423. package/dist/tools/tool-render.js.map +1 -0
  424. package/dist/tools/update-skill.d.ts +2 -0
  425. package/dist/tools/update-skill.js +169 -0
  426. package/dist/tools/update-skill.js.map +1 -0
  427. package/package.json +106 -0
  428. package/settings.example.json +74 -0
  429. package/siclaw.mjs +48 -0
  430. package/skills/core/cluster-events/SKILL.md +150 -0
  431. package/skills/core/deep-investigation/SKILL.md +87 -0
  432. package/skills/core/deep-investigation/default-memory.md +8 -0
  433. package/skills/core/deployment-rollout-debug/SKILL.md +144 -0
  434. package/skills/core/dns-debug/SKILL.md +144 -0
  435. package/skills/core/find-node/SKILL.md +23 -0
  436. package/skills/core/find-node/scripts/find-node.sh +9 -0
  437. package/skills/core/hpa-debug/SKILL.md +159 -0
  438. package/skills/core/image-pull-debug/SKILL.md +151 -0
  439. package/skills/core/ingress-debug/SKILL.md +189 -0
  440. package/skills/core/job-debug/SKILL.md +180 -0
  441. package/skills/core/meta.json +23 -0
  442. package/skills/core/node-health-check/SKILL.md +150 -0
  443. package/skills/core/node-logs/SKILL.md +68 -0
  444. package/skills/core/node-logs/scripts/get-node-logs.sh +78 -0
  445. package/skills/core/node-ping-gateway/SKILL.md +54 -0
  446. package/skills/core/node-ping-gateway/scripts/ping-node-gateway.sh +71 -0
  447. package/skills/core/node-show-gateway/SKILL.md +55 -0
  448. package/skills/core/node-show-gateway/scripts/show-node-gateway.sh +90 -0
  449. package/skills/core/pod-crash-debug/SKILL.md +135 -0
  450. package/skills/core/pod-pending-debug/SKILL.md +146 -0
  451. package/skills/core/pod-ping-gateway/SKILL.md +44 -0
  452. package/skills/core/pod-ping-gateway/scripts/ping-gateway.sh +76 -0
  453. package/skills/core/pod-show-gateway/SKILL.md +54 -0
  454. package/skills/core/pod-show-gateway/scripts/show-gateway.sh +115 -0
  455. package/skills/core/pvc-debug/SKILL.md +169 -0
  456. package/skills/core/service-debug/SKILL.md +164 -0
  457. package/skills/extension/.gitkeep +0 -0
  458. package/skills/platform/create-skill/SKILL.md +288 -0
  459. package/skills/platform/manage-skill/SKILL.md +23 -0
  460. package/skills/platform/update-skill/SKILL.md +52 -0
@@ -0,0 +1,169 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { spawn } from "node:child_process";
3
+ import { Text } from "@mariozechner/pi-tui";
4
+ import { processToolOutput, renderTextResult } from "./tool-render.js";
5
+ import { loadConfig } from "../core/config.js";
6
+ import { resolveKubeconfigPath } from "./kubeconfig-resolver.js";
7
+ import { sanitizeEnv } from "./sanitize-env.js";
8
+ import { parseArgs } from "./command-sets.js";
9
+ import { resolveSkillScript, listSkillScripts, listAllSkillsWithScripts, } from "./script-resolver.js";
10
+ export function createRunSkillTool(kubeconfigRef) {
11
+ return {
12
+ name: "run_skill",
13
+ label: "Run Skill",
14
+ renderCall(args, theme) {
15
+ return new Text(theme.fg("toolTitle", theme.bold("run_skill")) +
16
+ " " + theme.fg("accent", args?.skill || "") +
17
+ "/" + theme.fg("accent", args?.script || "") +
18
+ (args?.args ? " " + theme.fg("muted", args.args) : ""), 0, 0);
19
+ },
20
+ renderResult: renderTextResult,
21
+ description: `Execute a skill script by skill name and script filename.
22
+
23
+ Skills have helper scripts under their scripts/ directory. Use this tool to run them instead of calling bash directly.
24
+
25
+ Parameters:
26
+ - skill: Skill name (e.g. "find-node", "roce-perftest-pod")
27
+ - script: Script filename (e.g. "find-node.sh", "run-perftest.py")
28
+ - args: Optional command-line arguments
29
+ - timeout_seconds: Timeout (default: 180, max: 300)
30
+
31
+ Examples:
32
+ - skill: "find-node", script: "find-node.sh", args: "A100"
33
+ - skill: "roce-perftest-pod", script: "run-perftest.py", args: "--server-pod srv --client-pod cli --server-ns ns --client-ns ns"
34
+ - skill: "roce-check-node-config", script: "check-node-config.py", args: "--node node1 --mode sriov-switchdev"
35
+
36
+ Do NOT use the bash tool to run skill scripts. Always use this tool instead.
37
+ Read the skill's SKILL.md first to understand required parameters and usage.`,
38
+ parameters: Type.Object({
39
+ skill: Type.String({
40
+ description: "Skill name (e.g. 'find-node', 'roce-perftest-pod')",
41
+ }),
42
+ script: Type.String({
43
+ description: "Script filename within the skill (e.g. 'find-node.sh', 'run-perftest.py')",
44
+ }),
45
+ args: Type.Optional(Type.String({
46
+ description: "Command-line arguments to pass to the script",
47
+ })),
48
+ timeout_seconds: Type.Optional(Type.Number({
49
+ description: "Timeout in seconds (default: 180, max: 300)",
50
+ })),
51
+ }),
52
+ async execute(_toolCallId, rawParams, signal) {
53
+ const params = rawParams;
54
+ const skill = params.skill?.trim();
55
+ const script = params.script?.trim();
56
+ if (!skill || !script) {
57
+ return {
58
+ content: [{ type: "text", text: "Error: both skill and script are required." }],
59
+ details: { error: true },
60
+ };
61
+ }
62
+ // Validate no path traversal
63
+ if (skill.includes("/") || skill.includes("\\") || script.includes("/") || script.includes("\\")) {
64
+ return {
65
+ content: [{ type: "text", text: "Error: skill and script names must not contain path separators." }],
66
+ details: { error: true },
67
+ };
68
+ }
69
+ const resolved = resolveSkillScript(skill, script);
70
+ if (!resolved) {
71
+ const available = listSkillScripts(skill);
72
+ let hint;
73
+ if (available.length > 0) {
74
+ hint = `Available scripts for "${skill}": ${available.join(", ")}`;
75
+ }
76
+ else {
77
+ // List all skills that DO have scripts to help the LLM
78
+ const allSkillsWithScripts = listAllSkillsWithScripts();
79
+ hint = `Skill "${skill}" has no scripts directory — follow its SKILL.md instructions using bash/other tools instead.`;
80
+ if (allSkillsWithScripts.length > 0) {
81
+ hint += `\n\nSkills with scripts: ${allSkillsWithScripts.map((s) => `${s.skill} (${s.scripts.join(", ")})`).join("; ")}`;
82
+ }
83
+ }
84
+ return {
85
+ content: [{ type: "text", text: `Error: script "${script}" not found in skill "${skill}". ${hint}` }],
86
+ details: { error: true },
87
+ };
88
+ }
89
+ const args = params.args?.trim() || "";
90
+ // Security: parse args into array and pass via spawn() — never interpolate
91
+ // into a shell command string (prevents shell injection via args parameter)
92
+ const cmdArgs = args ? parseArgs(args) : [];
93
+ const timeout = Math.min(params.timeout_seconds ?? 180, 300) * 1000;
94
+ try {
95
+ const child = spawn(resolved.interpreter, [resolved.path, ...cmdArgs], {
96
+ detached: true, // make child a process group leader for clean group kill
97
+ stdio: ["ignore", "pipe", "pipe"],
98
+ env: {
99
+ ...sanitizeEnv(process.env),
100
+ SICLAW_DEBUG_IMAGE: loadConfig().debugImage,
101
+ ...(kubeconfigRef?.credentialsDir ? { SICLAW_CREDENTIALS_DIR: kubeconfigRef.credentialsDir } : {}),
102
+ KUBECONFIG: resolveKubeconfigPath(kubeconfigRef?.credentialsDir) || "/dev/null",
103
+ },
104
+ });
105
+ const onAbort = () => {
106
+ // Kill the entire process group so cleanup doesn't block the abort.
107
+ try {
108
+ process.kill(-child.pid, "SIGKILL");
109
+ }
110
+ catch {
111
+ child.kill("SIGKILL");
112
+ }
113
+ };
114
+ signal?.addEventListener("abort", onAbort, { once: true });
115
+ const timer = setTimeout(() => {
116
+ try {
117
+ process.kill(-child.pid, "SIGKILL");
118
+ }
119
+ catch {
120
+ child.kill("SIGKILL");
121
+ }
122
+ }, timeout);
123
+ const MAX_OUTPUT = 10 * 1024 * 1024; // 10 MB — matches old exec() maxBuffer
124
+ const { stdout, stderr } = await new Promise((resolve, reject) => {
125
+ let stdout = "";
126
+ let stderr = "";
127
+ let totalSize = 0;
128
+ child.stdout.on("data", (chunk) => {
129
+ totalSize += chunk.length;
130
+ if (totalSize <= MAX_OUTPUT)
131
+ stdout += chunk.toString();
132
+ });
133
+ child.stderr.on("data", (chunk) => {
134
+ totalSize += chunk.length;
135
+ if (totalSize <= MAX_OUTPUT)
136
+ stderr += chunk.toString();
137
+ });
138
+ child.on("close", (code) => {
139
+ clearTimeout(timer);
140
+ signal?.removeEventListener("abort", onAbort);
141
+ if (code === 0)
142
+ resolve({ stdout, stderr });
143
+ else
144
+ reject(Object.assign(new Error(`exit ${code}`), { code, stdout, stderr }));
145
+ });
146
+ child.on("error", (err) => {
147
+ clearTimeout(timer);
148
+ signal?.removeEventListener("abort", onAbort);
149
+ reject(err);
150
+ });
151
+ });
152
+ const output = stdout.trim() +
153
+ (stderr.trim() ? `\n\nSTDERR:\n${stderr.trim()}` : "");
154
+ return {
155
+ content: [{ type: "text", text: processToolOutput(output) }],
156
+ details: { exitCode: 0 },
157
+ };
158
+ }
159
+ catch (err) {
160
+ const output = `Exit code: ${err.code ?? "unknown"}\n${err.stdout?.trim() ?? ""}\n${err.stderr?.trim() ?? err.message}`;
161
+ return {
162
+ content: [{ type: "text", text: processToolOutput(output) }],
163
+ details: { exitCode: err.code, error: true },
164
+ };
165
+ }
166
+ },
167
+ };
168
+ }
169
+ //# sourceMappingURL=run-skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-skill.js","sourceRoot":"","sources":["../../src/tools/run-skill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Sanitize environment variables for child processes.
3
+ *
4
+ * Filters out sensitive env vars (API keys, tokens, secrets) before spawning
5
+ * subprocess shells, preventing the model from using `printenv` to leak them.
6
+ *
7
+ * Strategy: block known-dangerous suffixes/names, pass through everything else
8
+ * (PATH, HOME, LANG, etc.) to keep tools functional.
9
+ */
10
+ /**
11
+ * Return a sanitized copy of the given env vars object.
12
+ * Sensitive keys are removed entirely (not masked).
13
+ */
14
+ export declare function sanitizeEnv(env: Record<string, string | undefined>): Record<string, string | undefined>;
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Sanitize environment variables for child processes.
3
+ *
4
+ * Filters out sensitive env vars (API keys, tokens, secrets) before spawning
5
+ * subprocess shells, preventing the model from using `printenv` to leak them.
6
+ *
7
+ * Strategy: block known-dangerous suffixes/names, pass through everything else
8
+ * (PATH, HOME, LANG, etc.) to keep tools functional.
9
+ */
10
+ /** Env var names that are always blocked (exact match, case-insensitive). */
11
+ const BLOCKED_EXACT = new Set([
12
+ "ANTHROPIC_API_KEY",
13
+ "OPENAI_API_KEY",
14
+ "OPENAI_API_BASE",
15
+ "AZURE_OPENAI_API_KEY",
16
+ "GOOGLE_API_KEY",
17
+ "AWS_SECRET_ACCESS_KEY",
18
+ "AWS_SESSION_TOKEN",
19
+ "TELEGRAM_BOT_TOKEN",
20
+ "SLACK_TOKEN",
21
+ "SLACK_BOT_TOKEN",
22
+ "GITHUB_TOKEN",
23
+ "GH_TOKEN",
24
+ "GITLAB_TOKEN",
25
+ "NPM_TOKEN",
26
+ "DOCKER_PASSWORD",
27
+ "DATABASE_URL",
28
+ "REDIS_URL",
29
+ ]);
30
+ /** Suffixes that indicate a sensitive env var. */
31
+ const BLOCKED_SUFFIXES = [
32
+ "_API_KEY",
33
+ "_APIKEY",
34
+ "_SECRET",
35
+ "_SECRET_KEY",
36
+ "_TOKEN",
37
+ "_PASSWORD",
38
+ "_PRIVATE_KEY",
39
+ "_CREDENTIALS",
40
+ ];
41
+ /** SICLAW_* vars that are safe to pass through (non-secret config). */
42
+ const SICLAW_SAFE = new Set([
43
+ "SICLAW_DEBUG_IMAGE",
44
+ "SICLAW_CREDENTIALS_DIR",
45
+ ]);
46
+ /** Prefixes to always allow even if they match a suffix pattern. */
47
+ const ALLOW_PREFIXES = [
48
+ "KUBECONFIG", // handled separately
49
+ "PATH",
50
+ "HOME",
51
+ "LANG",
52
+ "LC_",
53
+ "TERM",
54
+ "SHELL",
55
+ "USER",
56
+ "LOGNAME",
57
+ "HOSTNAME",
58
+ "NODE_",
59
+ "NPM_CONFIG_",
60
+ "EDITOR",
61
+ "TZ",
62
+ "TMPDIR",
63
+ "XDG_",
64
+ ];
65
+ function isSensitive(name) {
66
+ const upper = name.toUpperCase();
67
+ // SICLAW_* vars: only allow explicitly safe ones
68
+ if (upper.startsWith("SICLAW_")) {
69
+ return !SICLAW_SAFE.has(upper);
70
+ }
71
+ // Explicit allow-list takes precedence
72
+ if (ALLOW_PREFIXES.some((p) => upper.startsWith(p)))
73
+ return false;
74
+ // Exact match blocklist
75
+ if (BLOCKED_EXACT.has(upper))
76
+ return true;
77
+ // Suffix match
78
+ if (BLOCKED_SUFFIXES.some((s) => upper.endsWith(s)))
79
+ return true;
80
+ return false;
81
+ }
82
+ /**
83
+ * Return a sanitized copy of the given env vars object.
84
+ * Sensitive keys are removed entirely (not masked).
85
+ */
86
+ export function sanitizeEnv(env) {
87
+ const result = {};
88
+ for (const [key, value] of Object.entries(env)) {
89
+ if (!isSensitive(key)) {
90
+ result[key] = value;
91
+ }
92
+ }
93
+ return result;
94
+ }
95
+ //# sourceMappingURL=sanitize-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize-env.js","sourceRoot":"","sources":["../../src/tools/sanitize-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,6EAA6E;AAC7E,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,mBAAmB;IACnB,gBAAgB;IAChB,iBAAiB;IACjB,sBAAsB;IACtB,gBAAgB;IAChB,uBAAuB;IACvB,mBAAmB;IACnB,oBAAoB;IACpB,aAAa;IACb,iBAAiB;IACjB,cAAc;IACd,UAAU;IACV,cAAc;IACd,WAAW;IACX,iBAAiB;IACjB,cAAc;IACd,WAAW;CACZ,CAAC,CAAC;AAEH,kDAAkD;AAClD,MAAM,gBAAgB,GAAG;IACvB,UAAU;IACV,SAAS;IACT,SAAS;IACT,aAAa;IACb,QAAQ;IACR,WAAW;IACX,cAAc;IACd,cAAc;CACf,CAAC;AAEF,uEAAuE;AACvE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,oBAAoB;IACpB,wBAAwB;CACzB,CAAC,CAAC;AAEH,oEAAoE;AACpE,MAAM,cAAc,GAAG;IACrB,YAAY,EAAK,qBAAqB;IACtC,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,MAAM;IACN,SAAS;IACT,UAAU;IACV,OAAO;IACP,aAAa;IACb,QAAQ;IACR,IAAI;IACJ,QAAQ;IACR,MAAM;CACP,CAAC;AAEF,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAEjC,iDAAiD;IACjD,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,uCAAuC;IACvC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAElE,wBAAwB;IACxB,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1C,eAAe;IACf,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjE,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAuC;IACjE,MAAM,MAAM,GAAuC,EAAE,CAAC;IACtD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,35 @@
1
+ /** Check if a skill exists in the materialized bundle (personal/team) */
2
+ export declare function skillExistsInBundle(skillName: string): boolean;
3
+ /** Check if a skill exists as a non-disabled builtin (skills/core/) */
4
+ export declare function skillExistsAsBuiltin(skillName: string): boolean;
5
+ export interface ResolvedScript {
6
+ path: string;
7
+ content: string;
8
+ interpreter: "bash" | "python3";
9
+ }
10
+ /**
11
+ * Resolve a skill script.
12
+ * Searches the single skills directory (bundle model) or scope dirs (CLI fallback).
13
+ */
14
+ export declare function resolveSkillScript(skill: string, script: string): ResolvedScript | null;
15
+ /**
16
+ * List available scripts for a given skill.
17
+ */
18
+ export declare function listSkillScripts(skill: string): string[];
19
+ /**
20
+ * List all skills that have scripts.
21
+ */
22
+ export declare function listAllSkillsWithScripts(): Array<{
23
+ skill: string;
24
+ scripts: string[];
25
+ }>;
26
+ /**
27
+ * Unified entry point: resolve a script from skill scripts.
28
+ * Requires a skill name.
29
+ */
30
+ export declare function resolveScript(params: {
31
+ skill?: string;
32
+ script: string;
33
+ }): ResolvedScript | {
34
+ error: string;
35
+ };
@@ -0,0 +1,213 @@
1
+ import * as path from "node:path";
2
+ import * as fs from "node:fs";
3
+ import { loadConfig } from "../core/config.js";
4
+ function skillsBase() {
5
+ const config = loadConfig();
6
+ return path.resolve(process.cwd(), config.paths.skillsDir);
7
+ }
8
+ /** Builtin skills directory (baked into Docker image at skills/core/) */
9
+ function builtinCoreDir() {
10
+ return path.resolve(process.cwd(), "skills", "core");
11
+ }
12
+ /** Load disabled builtins list (written by agentbox startup from bundle API) */
13
+ function loadDisabledBuiltins() {
14
+ try {
15
+ const filePath = path.join(skillsBase(), ".disabled-builtins.json");
16
+ if (fs.existsSync(filePath)) {
17
+ return new Set(JSON.parse(fs.readFileSync(filePath, "utf-8")));
18
+ }
19
+ }
20
+ catch { /* ignore malformed file */ }
21
+ return new Set();
22
+ }
23
+ /**
24
+ * Skill scope directories to search (in priority order, CLI fallback).
25
+ * Higher-specificity scopes first: personal > team > builtin.
26
+ */
27
+ const SKILL_SCOPES = ["user", "extension", "team", "core"];
28
+ /**
29
+ * Build the list of directories to search for a specific skill's scripts.
30
+ *
31
+ * Priority: personal/team (bundle) > builtin (Docker image).
32
+ * 1. Bundle-materialized (skillsBase/<skill>/) — contains personal or team
33
+ * 2. CLI fallback: scope subdirectories (user > team > core)
34
+ * 3. Builtin fallback (skills/core/) — unless disabled
35
+ */
36
+ function getSkillScriptDirs(skill) {
37
+ const base = skillsBase();
38
+ // 1. Bundle-materialized skills (personal/team override builtins)
39
+ const directPath = path.join(base, skill, "scripts");
40
+ if (fs.existsSync(directPath))
41
+ return [directPath];
42
+ // 2. CLI fallback: search all scope directories (user > team > core)
43
+ const dirs = [];
44
+ for (const scope of SKILL_SCOPES) {
45
+ const dir = path.join(base, scope, skill, "scripts");
46
+ if (fs.existsSync(dir))
47
+ dirs.push(dir);
48
+ }
49
+ if (dirs.length > 0)
50
+ return dirs;
51
+ // 3. Builtin fallback (skills/core/) — for skills not in the bundle
52
+ const disabled = loadDisabledBuiltins();
53
+ if (!disabled.has(skill)) {
54
+ const builtinPath = path.join(builtinCoreDir(), skill, "scripts");
55
+ if (fs.existsSync(builtinPath))
56
+ return [builtinPath];
57
+ }
58
+ return [];
59
+ }
60
+ /**
61
+ * Build the list of base directories for enumerating all skills.
62
+ *
63
+ * Priority: personal/team (bundle) > builtin (Docker image).
64
+ * Uses seenSkills dedup in callers so first-wins = highest priority.
65
+ */
66
+ function getSkillBaseDirs() {
67
+ const base = skillsBase();
68
+ // 1. Bundle-materialized skills (personal/team first)
69
+ const hasDirectSkills = fs.existsSync(base) && fs.readdirSync(base).some((entry) => !entry.startsWith(".") && !SKILL_SCOPES.includes(entry) &&
70
+ fs.statSync(path.join(base, entry)).isDirectory());
71
+ if (hasDirectSkills) {
72
+ const dirs = [base];
73
+ // Builtin as fallback for skills not in the bundle
74
+ const coreDir = builtinCoreDir();
75
+ if (fs.existsSync(coreDir))
76
+ dirs.push(coreDir);
77
+ return dirs;
78
+ }
79
+ // 2. CLI fallback: search all scope directories (user > team > core)
80
+ return SKILL_SCOPES
81
+ .map((scope) => path.join(base, scope))
82
+ .filter((dir) => fs.existsSync(dir));
83
+ }
84
+ /** Check if a skill exists in the materialized bundle (personal/team) */
85
+ export function skillExistsInBundle(skillName) {
86
+ const dir = path.join(skillsBase(), skillName);
87
+ return fs.existsSync(dir) && fs.statSync(dir).isDirectory();
88
+ }
89
+ /** Check if a skill exists as a non-disabled builtin (skills/core/) */
90
+ export function skillExistsAsBuiltin(skillName) {
91
+ const disabled = loadDisabledBuiltins();
92
+ if (disabled.has(skillName))
93
+ return false;
94
+ const dir = path.join(builtinCoreDir(), skillName);
95
+ return fs.existsSync(dir) && fs.statSync(dir).isDirectory();
96
+ }
97
+ /**
98
+ * Resolve a skill script.
99
+ * Searches the single skills directory (bundle model) or scope dirs (CLI fallback).
100
+ */
101
+ export function resolveSkillScript(skill, script) {
102
+ for (const dir of getSkillScriptDirs(skill)) {
103
+ const scriptPath = path.join(dir, script);
104
+ if (fs.existsSync(scriptPath)) {
105
+ return {
106
+ path: scriptPath,
107
+ content: fs.readFileSync(scriptPath, "utf-8"),
108
+ interpreter: script.endsWith(".py") ? "python3" : "bash",
109
+ };
110
+ }
111
+ }
112
+ return null;
113
+ }
114
+ /**
115
+ * List available scripts for a given skill.
116
+ */
117
+ export function listSkillScripts(skill) {
118
+ const scripts = new Set();
119
+ for (const dir of getSkillScriptDirs(skill)) {
120
+ try {
121
+ for (const f of fs.readdirSync(dir)) {
122
+ if (f.endsWith(".sh") || f.endsWith(".py"))
123
+ scripts.add(f);
124
+ }
125
+ }
126
+ catch {
127
+ /* dir may not exist */
128
+ }
129
+ }
130
+ return [...scripts];
131
+ }
132
+ /**
133
+ * List all skills that have scripts.
134
+ */
135
+ export function listAllSkillsWithScripts() {
136
+ const result = [];
137
+ const seen = new Set();
138
+ const disabled = loadDisabledBuiltins();
139
+ const coreDir = builtinCoreDir();
140
+ for (const base of getSkillBaseDirs()) {
141
+ const isBuiltinDir = base === coreDir;
142
+ try {
143
+ for (const d of fs.readdirSync(base, { withFileTypes: true })) {
144
+ if (d.name.startsWith("_"))
145
+ continue; // skip _lib etc.
146
+ if ((!d.isDirectory() && !d.isSymbolicLink()) || seen.has(d.name))
147
+ continue;
148
+ // Skip disabled builtins so they don't shadow bundle overrides
149
+ if (isBuiltinDir && disabled.has(d.name))
150
+ continue;
151
+ const scriptsDir = path.join(base, d.name, "scripts");
152
+ try {
153
+ const scripts = fs
154
+ .readdirSync(scriptsDir)
155
+ .filter((f) => f.endsWith(".sh") || f.endsWith(".py"));
156
+ if (scripts.length > 0) {
157
+ seen.add(d.name);
158
+ result.push({ skill: d.name, scripts });
159
+ }
160
+ }
161
+ catch {
162
+ /* no scripts dir */
163
+ }
164
+ }
165
+ }
166
+ catch {
167
+ /* dir doesn't exist */
168
+ }
169
+ }
170
+ return result;
171
+ }
172
+ /**
173
+ * Unified entry point: resolve a script from skill scripts.
174
+ * Requires a skill name.
175
+ */
176
+ export function resolveScript(params) {
177
+ const script = params.script?.trim();
178
+ if (!script) {
179
+ return { error: "Script name is required." };
180
+ }
181
+ if (script.includes("/") ||
182
+ script.includes("\\")) {
183
+ return {
184
+ error: "Script name must not contain path separators.",
185
+ };
186
+ }
187
+ const skill = params.skill?.trim();
188
+ if (!skill) {
189
+ return { error: "Skill name is required." };
190
+ }
191
+ if (skill.includes("/") || skill.includes("\\")) {
192
+ return {
193
+ error: "Skill name must not contain path separators.",
194
+ };
195
+ }
196
+ const resolved = resolveSkillScript(skill, script);
197
+ if (!resolved) {
198
+ const available = listSkillScripts(skill);
199
+ if (available.length > 0) {
200
+ return {
201
+ error: `Script "${script}" not found in skill "${skill}". Available: ${available.join(", ")}`,
202
+ };
203
+ }
204
+ const allSkills = listAllSkillsWithScripts();
205
+ let hint = `Skill "${skill}" has no scripts directory.`;
206
+ if (allSkills.length > 0) {
207
+ hint += `\nSkills with scripts: ${allSkills.map((s) => `${s.skill} (${s.scripts.join(", ")})`).join("; ")}`;
208
+ }
209
+ return { error: hint };
210
+ }
211
+ return resolved;
212
+ }
213
+ //# sourceMappingURL=script-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-resolver.js","sourceRoot":"","sources":["../../src/tools/script-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { Text } from "@mariozechner/pi-tui";
2
+ /**
3
+ * Strip ANSI escape codes and control characters from output.
4
+ * Keeps tabs, newlines, and carriage returns.
5
+ */
6
+ export declare function sanitizeOutput(text: string): string;
7
+ /**
8
+ * Sanitize and truncate tool output for the LLM.
9
+ * - Strips ANSI codes and control characters
10
+ * - When truncated, saves full output to a temp file and tells the LLM the path
11
+ * - Keeps the first HEAD_CHARS and last TAIL_CHARS characters, drops the middle
12
+ */
13
+ export declare function processToolOutput(text: string): string;
14
+ /** @deprecated Use processToolOutput instead */
15
+ export declare const truncateOutput: typeof processToolOutput;
16
+ /**
17
+ * Shared renderResult for custom tools.
18
+ * Shows last PREVIEW_LINES when collapsed; all lines when expanded (ctrl+o).
19
+ */
20
+ export declare function renderTextResult(result: any, options: any, theme: any): Text;
@@ -0,0 +1,77 @@
1
+ import * as fs from "node:fs";
2
+ import * as os from "node:os";
3
+ import * as path from "node:path";
4
+ import { randomBytes } from "node:crypto";
5
+ import { Text } from "@mariozechner/pi-tui";
6
+ const PREVIEW_LINES = 5;
7
+ /**
8
+ * Maximum characters of tool output sent to the LLM.
9
+ * Keeps head + tail and drops the middle, so the model sees
10
+ * both the beginning (headers, config) and end (results, errors).
11
+ */
12
+ const MAX_CHARS = 8000;
13
+ const HEAD_CHARS = 3000;
14
+ const TAIL_CHARS = 3000;
15
+ // ANSI escape code pattern (same regex as strip-ansi package)
16
+ // eslint-disable-next-line no-control-regex
17
+ const ANSI_RE = /[\u001B\u009B][[\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\d/#&.:=?%@~_]+)*|[a-zA-Z\d]+(?:;[-a-zA-Z\d/#&.:=?%@~_]*)*)?\u0007)|(?:(?:\d{1,4}(?:;\d{0,4})*)?[\dA-PR-TZcf-nq-uy=><~]))/g;
18
+ // Control characters except tab(0x09), newline(0x0A), carriage return(0x0D)
19
+ // eslint-disable-next-line no-control-regex
20
+ const CTRL_RE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g;
21
+ /**
22
+ * Strip ANSI escape codes and control characters from output.
23
+ * Keeps tabs, newlines, and carriage returns.
24
+ */
25
+ export function sanitizeOutput(text) {
26
+ return text.replace(ANSI_RE, "").replace(CTRL_RE, "");
27
+ }
28
+ /**
29
+ * Save text to a temporary file, return the file path.
30
+ */
31
+ function saveTempFile(text) {
32
+ const id = randomBytes(4).toString("hex");
33
+ const filePath = path.join(os.tmpdir(), `siclaw-output-${id}.log`);
34
+ fs.writeFileSync(filePath, text, "utf-8");
35
+ return filePath;
36
+ }
37
+ /**
38
+ * Sanitize and truncate tool output for the LLM.
39
+ * - Strips ANSI codes and control characters
40
+ * - When truncated, saves full output to a temp file and tells the LLM the path
41
+ * - Keeps the first HEAD_CHARS and last TAIL_CHARS characters, drops the middle
42
+ */
43
+ export function processToolOutput(text) {
44
+ const clean = sanitizeOutput(text);
45
+ if (clean.length <= MAX_CHARS)
46
+ return clean;
47
+ const fullPath = saveTempFile(clean);
48
+ const head = clean.slice(0, HEAD_CHARS);
49
+ const tail = clean.slice(-TAIL_CHARS);
50
+ const totalLines = clean.split("\n").length;
51
+ return `${head}\n\n... [${totalLines} lines total, output truncated. Full output saved to: ${fullPath}]\n\n${tail}`;
52
+ }
53
+ /** @deprecated Use processToolOutput instead */
54
+ export const truncateOutput = processToolOutput;
55
+ /**
56
+ * Shared renderResult for custom tools.
57
+ * Shows last PREVIEW_LINES when collapsed; all lines when expanded (ctrl+o).
58
+ */
59
+ export function renderTextResult(result, options, theme) {
60
+ const textBlocks = (result.content || []).filter((c) => c.type === "text");
61
+ const output = textBlocks
62
+ .map((c) => c.text || "")
63
+ .join("\n")
64
+ .trim();
65
+ if (!output)
66
+ return new Text("", 0, 0);
67
+ const lines = output.split("\n");
68
+ const styled = lines.map((l) => theme.fg("toolOutput", l));
69
+ if (options.expanded || lines.length <= PREVIEW_LINES) {
70
+ return new Text("\n" + styled.join("\n"), 0, 0);
71
+ }
72
+ const preview = styled.slice(-PREVIEW_LINES);
73
+ const skipped = lines.length - PREVIEW_LINES;
74
+ const hint = theme.fg("muted", `... (${skipped} earlier lines, ctrl+o to expand)`);
75
+ return new Text("\n" + hint + "\n" + preview.join("\n"), 0, 0);
76
+ }
77
+ //# sourceMappingURL=tool-render.js.map