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,74 @@
1
+ /**
2
+ * Login API
3
+ *
4
+ * Handles user login requests and returns a JWT token.
5
+ */
6
+ import { signJwt } from "./jwt.js";
7
+ /**
8
+ * Create the login handler
9
+ */
10
+ export function createLoginHandler(userStore, jwtSecret) {
11
+ /**
12
+ * Parse the JSON request body
13
+ */
14
+ async function parseBody(req) {
15
+ return new Promise((resolve, reject) => {
16
+ let body = "";
17
+ req.on("data", (chunk) => (body += chunk));
18
+ req.on("end", () => {
19
+ try {
20
+ resolve(body ? JSON.parse(body) : {});
21
+ }
22
+ catch {
23
+ reject(new Error("Invalid JSON"));
24
+ }
25
+ });
26
+ req.on("error", reject);
27
+ });
28
+ }
29
+ /**
30
+ * Handle a login request
31
+ */
32
+ async function handleLogin(req, res) {
33
+ // Only accept POST
34
+ if (req.method !== "POST") {
35
+ res.writeHead(405, { "Content-Type": "application/json" });
36
+ res.end(JSON.stringify({ ok: false, error: "Method not allowed" }));
37
+ return;
38
+ }
39
+ try {
40
+ const { username, password } = await parseBody(req);
41
+ if (!username || !password) {
42
+ res.writeHead(400, { "Content-Type": "application/json" });
43
+ res.end(JSON.stringify({ ok: false, error: "Missing username or password" }));
44
+ return;
45
+ }
46
+ // Authenticate the user
47
+ const user = userStore.authenticate(username, password);
48
+ if (!user) {
49
+ res.writeHead(401, { "Content-Type": "application/json" });
50
+ res.end(JSON.stringify({ ok: false, error: "Invalid credentials" }));
51
+ return;
52
+ }
53
+ // Issue token
54
+ const token = signJwt({ userId: user.id, username: user.username }, jwtSecret);
55
+ const response = {
56
+ ok: true,
57
+ token,
58
+ user: {
59
+ id: user.id,
60
+ username: user.username,
61
+ },
62
+ };
63
+ res.writeHead(200, { "Content-Type": "application/json" });
64
+ res.end(JSON.stringify(response));
65
+ }
66
+ catch (err) {
67
+ console.error("[login] Error:", err);
68
+ res.writeHead(500, { "Content-Type": "application/json" });
69
+ res.end(JSON.stringify({ ok: false, error: "Internal server error" }));
70
+ }
71
+ }
72
+ return { handleLogin };
73
+ }
74
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/gateway/auth/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Authentication middleware
3
+ *
4
+ * Handles authentication for HTTP and WebSocket requests.
5
+ */
6
+ import type http from "node:http";
7
+ /** Authenticated request context */
8
+ export interface AuthContext {
9
+ userId: string;
10
+ username: string;
11
+ }
12
+ /** Extended request type with auth context */
13
+ export interface AuthenticatedRequest extends http.IncomingMessage {
14
+ auth?: AuthContext;
15
+ }
16
+ /**
17
+ * Create the authentication middleware
18
+ */
19
+ export declare function createAuthMiddleware(jwtSecret: string): {
20
+ authenticateRequest: (req: http.IncomingMessage) => AuthContext | null;
21
+ authenticateWebSocket: (req: http.IncomingMessage) => AuthContext | null;
22
+ authenticateFromQuery: (url: string | undefined, host: string | undefined) => AuthContext | null;
23
+ };
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Authentication middleware
3
+ *
4
+ * Handles authentication for HTTP and WebSocket requests.
5
+ */
6
+ import { extractBearerToken, verifyJwt } from "./jwt.js";
7
+ /**
8
+ * Create the authentication middleware
9
+ */
10
+ export function createAuthMiddleware(jwtSecret) {
11
+ /**
12
+ * Authenticate an HTTP request
13
+ */
14
+ function authenticateRequest(req) {
15
+ const authHeader = req.headers.authorization;
16
+ const token = extractBearerToken(authHeader);
17
+ if (!token)
18
+ return null;
19
+ const payload = verifyJwt(token, jwtSecret);
20
+ if (!payload)
21
+ return null;
22
+ return {
23
+ userId: payload.userId,
24
+ username: payload.username,
25
+ };
26
+ }
27
+ /**
28
+ * Get token from URL query parameters (used for WebSocket)
29
+ */
30
+ function authenticateFromQuery(url, host) {
31
+ if (!url)
32
+ return null;
33
+ try {
34
+ const fullUrl = new URL(url, `http://${host || "localhost"}`);
35
+ const token = fullUrl.searchParams.get("token");
36
+ if (!token)
37
+ return null;
38
+ const payload = verifyJwt(token, jwtSecret);
39
+ if (!payload)
40
+ return null;
41
+ return {
42
+ userId: payload.userId,
43
+ username: payload.username,
44
+ };
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ }
50
+ /**
51
+ * Authenticate a WebSocket upgrade request
52
+ */
53
+ function authenticateWebSocket(req) {
54
+ // Try Authorization header first
55
+ const auth = authenticateRequest(req);
56
+ if (auth)
57
+ return auth;
58
+ // Fall back to query parameter
59
+ return authenticateFromQuery(req.url, req.headers.host);
60
+ }
61
+ return {
62
+ authenticateRequest,
63
+ authenticateWebSocket,
64
+ authenticateFromQuery,
65
+ };
66
+ }
67
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/gateway/auth/middleware.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAmB,MAAM,UAAU,CAAC;AAa1E;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD;;OAEG;IACH,SAAS,mBAAmB,CAAC,GAAyB;QACpD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;QAC7C,MAAM,KAAK,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAE7C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS,qBAAqB,CAAC,GAAuB,EAAE,IAAwB;QAC9E,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;YAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEhD,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YAExB,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC5C,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAE1B,OAAO;gBACL,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,qBAAqB,CAAC,GAAyB;QACtD,iCAAiC;QACjC,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QAEtB,+BAA+B;QAC/B,OAAO,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO;QACL,mBAAmB;QACnB,qBAAqB;QACrB,qBAAqB;KACtB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * OAuth2 Authorization Code Flow — Dex / Generic OIDC
3
+ *
4
+ * Handles the server-side OAuth2 flow:
5
+ * 1. Build authorize URL (redirect user to IdP)
6
+ * 2. Exchange authorization code for tokens
7
+ * 3. Fetch user info from IdP
8
+ *
9
+ * Config is loaded from DB overrides → SICLAW_SSO_* environment variables.
10
+ * If neither is set, SSO is disabled and loadOAuth2Config() returns null.
11
+ */
12
+ export interface OAuth2Config {
13
+ issuer: string;
14
+ clientId: string;
15
+ clientSecret: string;
16
+ redirectUri: string;
17
+ /** Derived endpoints (from issuer) */
18
+ authorizeUrl: string;
19
+ tokenUrl: string;
20
+ userInfoUrl: string;
21
+ }
22
+ /**
23
+ * Load OAuth2 config from DB overrides → environment variables.
24
+ * Returns null if SSO is not configured.
25
+ *
26
+ * Priority: dbOverrides > SICLAW_SSO_* env vars > null
27
+ */
28
+ export declare function loadOAuth2Config(dbOverrides?: Record<string, string>): OAuth2Config | null;
29
+ /** Generate a cryptographic random state and store it */
30
+ export declare function generateState(): string;
31
+ /** Validate and consume a state (returns true if valid) */
32
+ export declare function consumeState(state: string): boolean;
33
+ /**
34
+ * Step 1: Build the authorization URL that the user's browser should redirect to.
35
+ */
36
+ export declare function buildAuthorizeUrl(config: OAuth2Config, state: string): string;
37
+ /**
38
+ * Step 2: Exchange the authorization code for tokens.
39
+ */
40
+ export interface TokenResponse {
41
+ access_token: string;
42
+ id_token?: string;
43
+ token_type: string;
44
+ expires_in?: number;
45
+ refresh_token?: string;
46
+ }
47
+ export declare function exchangeCode(config: OAuth2Config, code: string): Promise<TokenResponse>;
48
+ /**
49
+ * Step 3: Fetch user info using the access token.
50
+ */
51
+ export interface SsoUserInfo {
52
+ sub: string;
53
+ email?: string;
54
+ name?: string;
55
+ preferred_username?: string;
56
+ }
57
+ export declare function fetchUserInfo(config: OAuth2Config, accessToken: string): Promise<SsoUserInfo>;
@@ -0,0 +1,113 @@
1
+ /**
2
+ * OAuth2 Authorization Code Flow — Dex / Generic OIDC
3
+ *
4
+ * Handles the server-side OAuth2 flow:
5
+ * 1. Build authorize URL (redirect user to IdP)
6
+ * 2. Exchange authorization code for tokens
7
+ * 3. Fetch user info from IdP
8
+ *
9
+ * Config is loaded from DB overrides → SICLAW_SSO_* environment variables.
10
+ * If neither is set, SSO is disabled and loadOAuth2Config() returns null.
11
+ */
12
+ import crypto from "node:crypto";
13
+ /**
14
+ * Load OAuth2 config from DB overrides → environment variables.
15
+ * Returns null if SSO is not configured.
16
+ *
17
+ * Priority: dbOverrides > SICLAW_SSO_* env vars > null
18
+ */
19
+ export function loadOAuth2Config(dbOverrides) {
20
+ const issuer = dbOverrides?.["sso.issuer"] ?? process.env.SICLAW_SSO_ISSUER;
21
+ if (!issuer)
22
+ return null;
23
+ const clientId = dbOverrides?.["sso.clientId"] ?? process.env.SICLAW_SSO_CLIENT_ID;
24
+ const clientSecret = dbOverrides?.["sso.clientSecret"] ?? process.env.SICLAW_SSO_CLIENT_SECRET;
25
+ const redirectUri = dbOverrides?.["sso.redirectUri"] ?? process.env.SICLAW_SSO_REDIRECT_URI;
26
+ if (!clientId || !clientSecret || !redirectUri) {
27
+ console.warn("[oauth2] SSO issuer is set but missing clientId, clientSecret, or redirectUri — SSO disabled");
28
+ return null;
29
+ }
30
+ // Standard OIDC endpoints (Dex follows this convention)
31
+ const base = issuer.replace(/\/+$/, "");
32
+ return {
33
+ issuer: base,
34
+ clientId,
35
+ clientSecret,
36
+ redirectUri,
37
+ authorizeUrl: `${base}/auth`,
38
+ tokenUrl: `${base}/token`,
39
+ userInfoUrl: `${base}/userinfo`,
40
+ };
41
+ }
42
+ // ─── CSRF State Store ───────────────────────────────
43
+ const pendingStates = new Map();
44
+ const STATE_TTL_MS = 5 * 60 * 1000; // 5 minutes
45
+ /** Generate a cryptographic random state and store it */
46
+ export function generateState() {
47
+ const state = crypto.randomBytes(16).toString("hex");
48
+ pendingStates.set(state, { createdAt: Date.now() });
49
+ return state;
50
+ }
51
+ /** Validate and consume a state (returns true if valid) */
52
+ export function consumeState(state) {
53
+ const entry = pendingStates.get(state);
54
+ if (!entry)
55
+ return false;
56
+ pendingStates.delete(state);
57
+ return Date.now() - entry.createdAt < STATE_TTL_MS;
58
+ }
59
+ /** Periodic cleanup of expired states */
60
+ setInterval(() => {
61
+ const now = Date.now();
62
+ for (const [key, entry] of pendingStates) {
63
+ if (now - entry.createdAt > STATE_TTL_MS) {
64
+ pendingStates.delete(key);
65
+ }
66
+ }
67
+ }, 60_000);
68
+ // ─── OAuth2 Flow Steps ──────────────────────────────
69
+ /**
70
+ * Step 1: Build the authorization URL that the user's browser should redirect to.
71
+ */
72
+ export function buildAuthorizeUrl(config, state) {
73
+ const params = new URLSearchParams({
74
+ response_type: "code",
75
+ client_id: config.clientId,
76
+ redirect_uri: config.redirectUri,
77
+ scope: "openid profile email",
78
+ state,
79
+ });
80
+ return `${config.authorizeUrl}?${params.toString()}`;
81
+ }
82
+ export async function exchangeCode(config, code) {
83
+ const body = new URLSearchParams({
84
+ grant_type: "authorization_code",
85
+ code,
86
+ client_id: config.clientId,
87
+ client_secret: config.clientSecret,
88
+ redirect_uri: config.redirectUri,
89
+ });
90
+ const res = await fetch(config.tokenUrl, {
91
+ method: "POST",
92
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
93
+ body: body.toString(),
94
+ signal: AbortSignal.timeout(10_000),
95
+ });
96
+ if (!res.ok) {
97
+ const text = await res.text().catch(() => "");
98
+ throw new Error(`Token exchange failed (${res.status}): ${text}`);
99
+ }
100
+ return res.json();
101
+ }
102
+ export async function fetchUserInfo(config, accessToken) {
103
+ const res = await fetch(config.userInfoUrl, {
104
+ headers: { Authorization: `Bearer ${accessToken}` },
105
+ signal: AbortSignal.timeout(10_000),
106
+ });
107
+ if (!res.ok) {
108
+ const text = await res.text().catch(() => "");
109
+ throw new Error(`UserInfo fetch failed (${res.status}): ${text}`);
110
+ }
111
+ return res.json();
112
+ }
113
+ //# sourceMappingURL=oauth2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth2.js","sourceRoot":"","sources":["../../../src/gateway/auth/oauth2.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * User store
3
+ *
4
+ * DB-first: falls back to in-memory when no DB is available.
5
+ */
6
+ import type { Database } from "../db/index.js";
7
+ export interface User {
8
+ id: string;
9
+ username: string;
10
+ passwordHash: string;
11
+ createdAt: Date;
12
+ /** Channel bindings */
13
+ bindings?: Record<string, string>;
14
+ /** Intern flag: restricted to test environments only */
15
+ testOnly?: boolean;
16
+ /** SSO user flag: password changes are not supported */
17
+ ssoUser?: boolean;
18
+ }
19
+ export interface CreateUserInput {
20
+ username: string;
21
+ password: string;
22
+ testOnly?: boolean;
23
+ ssoUser?: boolean;
24
+ }
25
+ export declare class UserStore {
26
+ private users;
27
+ private usernameIndex;
28
+ private repo;
29
+ constructor(db: Database | null);
30
+ /**
31
+ * Async initialization — loads users from DB or creates the default admin
32
+ */
33
+ init(): Promise<void>;
34
+ /**
35
+ * Create the default admin user
36
+ */
37
+ private createDefaultAdmin;
38
+ /**
39
+ * Create a user (async, writes to DB)
40
+ */
41
+ createAsync(input: CreateUserInput): Promise<User>;
42
+ /**
43
+ * Create a user (sync compat, in-memory only)
44
+ */
45
+ create(input: CreateUserInput): User;
46
+ /**
47
+ * Get a user by ID
48
+ */
49
+ getById(id: string): User | undefined;
50
+ /**
51
+ * Get a user by username
52
+ */
53
+ getByUsername(username: string): User | undefined;
54
+ /**
55
+ * Authenticate a login attempt
56
+ */
57
+ authenticate(username: string, password: string): User | null;
58
+ /**
59
+ * Find a user by channel binding
60
+ */
61
+ getByBinding(channel: string, channelUserId: string): User | undefined;
62
+ /**
63
+ * Add a channel binding
64
+ */
65
+ addBinding(userId: string, channel: string, channelUserId: string): void;
66
+ /**
67
+ * Remove a channel binding
68
+ */
69
+ removeBinding(userId: string, channel: string): void;
70
+ /**
71
+ * SSO login: finds an existing user by username, or auto-creates one if not found
72
+ */
73
+ findOrCreateBySso(ssoInfo: {
74
+ sub: string;
75
+ email?: string;
76
+ name?: string;
77
+ preferredUsername?: string;
78
+ }): Promise<User>;
79
+ /**
80
+ * Change password (requires verification of the old password)
81
+ */
82
+ changePassword(userId: string, oldPassword: string, newPassword: string): Promise<void>;
83
+ /**
84
+ * Reset password (admin use — no verification of old password)
85
+ */
86
+ resetPassword(userId: string, newPassword: string): Promise<void>;
87
+ /**
88
+ * Set the testOnly flag
89
+ */
90
+ setTestOnly(userId: string, testOnly: boolean): Promise<void>;
91
+ /**
92
+ * List all users
93
+ */
94
+ list(): User[];
95
+ }