@build-astron-co/nimbus 0.2.0 → 0.4.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 (469) hide show
  1. package/bin/nimbus +26 -10
  2. package/bin/nimbus.cmd +41 -0
  3. package/bin/nimbus.mjs +70 -0
  4. package/completions/nimbus.bash +38 -0
  5. package/completions/nimbus.fish +48 -0
  6. package/completions/nimbus.zsh +81 -0
  7. package/dist/src/agent/compaction-agent.js +215 -0
  8. package/dist/src/agent/context-manager.js +385 -0
  9. package/dist/src/agent/context.js +322 -0
  10. package/dist/src/agent/deploy-preview.js +395 -0
  11. package/dist/src/agent/expand-files.js +95 -0
  12. package/dist/src/agent/index.js +18 -0
  13. package/dist/src/agent/loop.js +1535 -0
  14. package/dist/src/agent/modes.js +347 -0
  15. package/dist/src/agent/permissions.js +396 -0
  16. package/dist/src/agent/subagents/base.js +67 -0
  17. package/dist/src/agent/subagents/cost.js +45 -0
  18. package/dist/src/agent/subagents/explore.js +36 -0
  19. package/dist/src/agent/subagents/general.js +41 -0
  20. package/dist/src/agent/subagents/index.js +88 -0
  21. package/dist/src/agent/subagents/infra.js +52 -0
  22. package/dist/src/agent/subagents/security.js +60 -0
  23. package/dist/src/agent/system-prompt.js +860 -0
  24. package/dist/src/app.js +152 -0
  25. package/dist/src/audit/activity-log.js +209 -0
  26. package/dist/src/audit/compliance-checker.js +419 -0
  27. package/dist/src/audit/cost-tracker.js +231 -0
  28. package/dist/src/audit/index.js +10 -0
  29. package/dist/src/audit/security-scanner.js +490 -0
  30. package/dist/src/auth/guard.js +64 -0
  31. package/dist/src/auth/index.js +19 -0
  32. package/dist/src/auth/keychain.js +79 -0
  33. package/dist/src/auth/oauth.js +389 -0
  34. package/dist/src/auth/providers.js +415 -0
  35. package/dist/src/auth/sso.js +87 -0
  36. package/dist/src/auth/store.js +424 -0
  37. package/dist/src/auth/types.js +5 -0
  38. package/dist/src/cli/index.js +8 -0
  39. package/dist/src/cli/init.js +1048 -0
  40. package/dist/src/cli/openapi-spec.js +346 -0
  41. package/dist/src/cli/run.js +505 -0
  42. package/dist/src/cli/serve-auth.js +56 -0
  43. package/dist/src/cli/serve.js +432 -0
  44. package/dist/src/cli/web.js +50 -0
  45. package/dist/src/cli.js +1574 -0
  46. package/dist/src/clients/core-engine-client.js +156 -0
  47. package/dist/src/clients/enterprise-client.js +246 -0
  48. package/dist/src/clients/generator-client.js +219 -0
  49. package/dist/src/clients/git-client.js +367 -0
  50. package/dist/src/clients/github-client.js +229 -0
  51. package/dist/src/clients/helm-client.js +299 -0
  52. package/dist/src/clients/index.js +18 -0
  53. package/dist/src/clients/k8s-client.js +270 -0
  54. package/dist/src/clients/llm-client.js +119 -0
  55. package/dist/src/clients/rest-client.js +104 -0
  56. package/dist/src/clients/service-discovery.js +35 -0
  57. package/dist/src/clients/terraform-client.js +302 -0
  58. package/dist/src/clients/tools-client.js +1227 -0
  59. package/dist/src/clients/ws-client.js +93 -0
  60. package/dist/src/commands/alias.js +91 -0
  61. package/dist/src/commands/analyze/index.js +313 -0
  62. package/dist/src/commands/apply/helm.js +375 -0
  63. package/dist/src/commands/apply/index.js +176 -0
  64. package/dist/src/commands/apply/k8s.js +350 -0
  65. package/dist/src/commands/apply/terraform.js +465 -0
  66. package/dist/src/commands/ask.js +137 -0
  67. package/dist/src/commands/audit/index.js +322 -0
  68. package/dist/src/commands/auth-cloud.js +345 -0
  69. package/dist/src/commands/auth-list.js +112 -0
  70. package/dist/src/commands/auth-profile.js +104 -0
  71. package/dist/src/commands/auth-refresh.js +161 -0
  72. package/dist/src/commands/auth-status.js +122 -0
  73. package/dist/src/commands/aws/ec2.js +402 -0
  74. package/dist/src/commands/aws/iam.js +304 -0
  75. package/dist/src/commands/aws/index.js +108 -0
  76. package/dist/src/commands/aws/lambda.js +317 -0
  77. package/dist/src/commands/aws/rds.js +345 -0
  78. package/dist/src/commands/aws/s3.js +346 -0
  79. package/dist/src/commands/aws/vpc.js +302 -0
  80. package/dist/src/commands/aws-discover.js +413 -0
  81. package/dist/src/commands/aws-terraform.js +618 -0
  82. package/dist/src/commands/azure/aks.js +305 -0
  83. package/dist/src/commands/azure/functions.js +200 -0
  84. package/dist/src/commands/azure/index.js +93 -0
  85. package/dist/src/commands/azure/storage.js +378 -0
  86. package/dist/src/commands/azure/vm.js +291 -0
  87. package/dist/src/commands/billing/index.js +224 -0
  88. package/dist/src/commands/chat.js +259 -0
  89. package/dist/src/commands/completions.js +255 -0
  90. package/dist/src/commands/config.js +291 -0
  91. package/dist/src/commands/cost/cloud-cost-estimator.js +211 -0
  92. package/dist/src/commands/cost/estimator.js +73 -0
  93. package/dist/src/commands/cost/index.js +625 -0
  94. package/dist/src/commands/cost/parsers/terraform.js +234 -0
  95. package/dist/src/commands/cost/parsers/types.js +4 -0
  96. package/dist/src/commands/cost/pricing/aws.js +501 -0
  97. package/dist/src/commands/cost/pricing/azure.js +462 -0
  98. package/dist/src/commands/cost/pricing/gcp.js +359 -0
  99. package/dist/src/commands/cost/pricing/index.js +24 -0
  100. package/dist/src/commands/demo.js +196 -0
  101. package/dist/src/commands/deploy.js +215 -0
  102. package/dist/src/commands/doctor.js +1291 -0
  103. package/dist/src/commands/drift/index.js +674 -0
  104. package/dist/src/commands/explain.js +235 -0
  105. package/dist/src/commands/export.js +120 -0
  106. package/dist/src/commands/feedback.js +319 -0
  107. package/dist/src/commands/fix.js +263 -0
  108. package/dist/src/commands/fs/index.js +338 -0
  109. package/dist/src/commands/gcp/compute.js +266 -0
  110. package/dist/src/commands/gcp/functions.js +221 -0
  111. package/dist/src/commands/gcp/gke.js +357 -0
  112. package/dist/src/commands/gcp/iam.js +295 -0
  113. package/dist/src/commands/gcp/index.js +105 -0
  114. package/dist/src/commands/gcp/storage.js +232 -0
  115. package/dist/src/commands/generate-helm.js +1026 -0
  116. package/dist/src/commands/generate-k8s.js +1263 -0
  117. package/dist/src/commands/generate-terraform.js +1058 -0
  118. package/dist/src/commands/gh/index.js +663 -0
  119. package/dist/src/commands/git/index.js +1208 -0
  120. package/dist/src/commands/helm/index.js +985 -0
  121. package/dist/src/commands/help.js +639 -0
  122. package/dist/src/commands/history.js +120 -0
  123. package/dist/src/commands/import.js +782 -0
  124. package/dist/src/commands/incident.js +144 -0
  125. package/dist/src/commands/index.js +109 -0
  126. package/dist/src/commands/init.js +955 -0
  127. package/dist/src/commands/k8s/index.js +979 -0
  128. package/dist/src/commands/login.js +588 -0
  129. package/dist/src/commands/logout.js +61 -0
  130. package/dist/src/commands/logs.js +160 -0
  131. package/dist/src/commands/onboarding.js +382 -0
  132. package/dist/src/commands/pipeline.js +153 -0
  133. package/dist/src/commands/plan/display.js +216 -0
  134. package/dist/src/commands/plan/index.js +525 -0
  135. package/dist/src/commands/plugin.js +325 -0
  136. package/dist/src/commands/preview.js +356 -0
  137. package/dist/src/commands/profile.js +297 -0
  138. package/dist/src/commands/questionnaire.js +1021 -0
  139. package/dist/src/commands/resume.js +35 -0
  140. package/dist/src/commands/rollback.js +259 -0
  141. package/dist/src/commands/rollout.js +74 -0
  142. package/dist/src/commands/runbook.js +307 -0
  143. package/dist/src/commands/schedule.js +202 -0
  144. package/dist/src/commands/status.js +213 -0
  145. package/dist/src/commands/team/index.js +309 -0
  146. package/dist/src/commands/team-context.js +200 -0
  147. package/dist/src/commands/template.js +204 -0
  148. package/dist/src/commands/tf/index.js +989 -0
  149. package/dist/src/commands/upgrade.js +515 -0
  150. package/dist/src/commands/usage/index.js +118 -0
  151. package/dist/src/commands/version.js +145 -0
  152. package/dist/src/commands/watch.js +127 -0
  153. package/dist/src/compat/index.js +2 -0
  154. package/dist/src/compat/runtime.js +10 -0
  155. package/dist/src/compat/sqlite.js +144 -0
  156. package/dist/src/config/index.js +6 -0
  157. package/dist/src/config/manager.js +469 -0
  158. package/dist/src/config/mode-store.js +57 -0
  159. package/dist/src/config/profiles.js +66 -0
  160. package/dist/src/config/safety-policy.js +251 -0
  161. package/dist/src/config/schema.js +107 -0
  162. package/dist/src/config/types.js +311 -0
  163. package/dist/src/config/workspace-state.js +38 -0
  164. package/dist/src/context/context-db.js +138 -0
  165. package/dist/src/demo/index.js +295 -0
  166. package/dist/src/demo/scenarios/full-journey.js +226 -0
  167. package/dist/src/demo/scenarios/getting-started.js +124 -0
  168. package/dist/src/demo/scenarios/helm-release.js +334 -0
  169. package/dist/src/demo/scenarios/k8s-deployment.js +190 -0
  170. package/dist/src/demo/scenarios/terraform-vpc.js +167 -0
  171. package/dist/src/demo/types.js +6 -0
  172. package/dist/src/engine/cost-estimator.js +334 -0
  173. package/dist/src/engine/diagram-generator.js +192 -0
  174. package/dist/src/engine/drift-detector.js +688 -0
  175. package/dist/src/engine/executor.js +832 -0
  176. package/dist/src/engine/index.js +39 -0
  177. package/dist/src/engine/orchestrator.js +436 -0
  178. package/dist/src/engine/planner.js +616 -0
  179. package/dist/src/engine/safety.js +609 -0
  180. package/dist/src/engine/verifier.js +664 -0
  181. package/dist/src/enterprise/audit.js +241 -0
  182. package/dist/src/enterprise/auth.js +189 -0
  183. package/dist/src/enterprise/billing.js +512 -0
  184. package/dist/src/enterprise/index.js +16 -0
  185. package/dist/src/enterprise/teams.js +315 -0
  186. package/dist/src/generator/best-practices.js +1375 -0
  187. package/dist/src/generator/helm.js +495 -0
  188. package/dist/src/generator/index.js +11 -0
  189. package/dist/src/generator/intent-parser.js +420 -0
  190. package/dist/src/generator/kubernetes.js +773 -0
  191. package/dist/src/generator/terraform.js +1472 -0
  192. package/dist/src/history/index.js +6 -0
  193. package/dist/src/history/manager.js +199 -0
  194. package/dist/src/history/types.js +6 -0
  195. package/dist/src/hooks/config.js +318 -0
  196. package/dist/src/hooks/engine.js +317 -0
  197. package/dist/src/hooks/index.js +2 -0
  198. package/dist/src/llm/auth-bridge.js +157 -0
  199. package/dist/src/llm/circuit-breaker.js +116 -0
  200. package/dist/src/llm/config-loader.js +172 -0
  201. package/dist/src/llm/cost-calculator.js +137 -0
  202. package/dist/src/llm/index.js +7 -0
  203. package/dist/src/llm/model-aliases.js +99 -0
  204. package/dist/src/llm/provider-registry.js +57 -0
  205. package/dist/src/llm/providers/anthropic.js +430 -0
  206. package/dist/src/llm/providers/bedrock.js +409 -0
  207. package/dist/src/llm/providers/google.js +344 -0
  208. package/dist/src/llm/providers/ollama.js +661 -0
  209. package/dist/src/llm/providers/openai-compatible.js +289 -0
  210. package/dist/src/llm/providers/openai.js +284 -0
  211. package/dist/src/llm/providers/openrouter.js +293 -0
  212. package/dist/src/llm/router.js +844 -0
  213. package/dist/src/llm/types.js +69 -0
  214. package/dist/src/lsp/client.js +239 -0
  215. package/dist/src/lsp/languages.js +95 -0
  216. package/dist/src/lsp/manager.js +243 -0
  217. package/dist/src/mcp/client.js +289 -0
  218. package/dist/src/mcp/index.js +5 -0
  219. package/dist/src/mcp/manager.js +113 -0
  220. package/dist/src/nimbus.js +212 -0
  221. package/dist/src/plugins/index.js +13 -0
  222. package/dist/src/plugins/loader.js +280 -0
  223. package/dist/src/plugins/manager.js +282 -0
  224. package/dist/src/plugins/types.js +23 -0
  225. package/dist/src/scanners/cicd-scanner.js +230 -0
  226. package/dist/src/scanners/cloud-scanner.js +415 -0
  227. package/dist/src/scanners/framework-scanner.js +430 -0
  228. package/dist/src/scanners/iac-scanner.js +350 -0
  229. package/dist/src/scanners/index.js +454 -0
  230. package/dist/src/scanners/language-scanner.js +258 -0
  231. package/dist/src/scanners/package-manager-scanner.js +252 -0
  232. package/dist/src/scanners/types.js +6 -0
  233. package/dist/src/sessions/manager.js +395 -0
  234. package/dist/src/sessions/types.js +4 -0
  235. package/dist/src/sharing/sync.js +238 -0
  236. package/dist/src/sharing/viewer.js +131 -0
  237. package/dist/src/snapshots/index.js +1 -0
  238. package/dist/src/snapshots/manager.js +432 -0
  239. package/dist/src/state/artifacts.js +94 -0
  240. package/dist/src/state/audit.js +73 -0
  241. package/dist/src/state/billing.js +126 -0
  242. package/dist/src/state/checkpoints.js +81 -0
  243. package/dist/src/state/config.js +58 -0
  244. package/dist/src/state/conversations.js +7 -0
  245. package/dist/src/state/credentials.js +96 -0
  246. package/dist/src/state/db.js +53 -0
  247. package/dist/src/state/index.js +23 -0
  248. package/dist/src/state/messages.js +76 -0
  249. package/dist/src/state/projects.js +92 -0
  250. package/dist/src/state/schema.js +233 -0
  251. package/dist/src/state/sessions.js +79 -0
  252. package/dist/src/state/teams.js +131 -0
  253. package/dist/src/telemetry.js +91 -0
  254. package/dist/src/tools/aws-ops.js +747 -0
  255. package/dist/src/tools/azure-ops.js +491 -0
  256. package/dist/src/tools/file-ops.js +451 -0
  257. package/dist/src/tools/gcp-ops.js +559 -0
  258. package/dist/src/tools/git-ops.js +557 -0
  259. package/dist/src/tools/github-ops.js +460 -0
  260. package/dist/src/tools/helm-ops.js +634 -0
  261. package/dist/src/tools/index.js +16 -0
  262. package/dist/src/tools/k8s-ops.js +579 -0
  263. package/dist/src/tools/schemas/converter.js +129 -0
  264. package/dist/src/tools/schemas/devops.js +3319 -0
  265. package/dist/src/tools/schemas/index.js +19 -0
  266. package/dist/src/tools/schemas/standard.js +966 -0
  267. package/dist/src/tools/schemas/types.js +409 -0
  268. package/dist/src/tools/spawn-exec.js +109 -0
  269. package/dist/src/tools/terraform-ops.js +627 -0
  270. package/dist/src/types/config.js +1 -0
  271. package/dist/src/types/drift.js +4 -0
  272. package/dist/src/types/enterprise.js +5 -0
  273. package/dist/src/types/index.js +14 -0
  274. package/dist/src/types/plan.js +1 -0
  275. package/dist/src/types/request.js +1 -0
  276. package/dist/src/types/response.js +1 -0
  277. package/dist/src/types/service.js +1 -0
  278. package/dist/src/ui/App.js +1672 -0
  279. package/dist/src/ui/DeployPreview.js +60 -0
  280. package/dist/src/ui/FileDiffModal.js +108 -0
  281. package/dist/src/ui/Header.js +46 -0
  282. package/dist/src/ui/HelpModal.js +9 -0
  283. package/dist/src/ui/InputBox.js +408 -0
  284. package/dist/src/ui/MessageList.js +795 -0
  285. package/dist/src/ui/PermissionPrompt.js +72 -0
  286. package/dist/src/ui/StatusBar.js +109 -0
  287. package/dist/src/ui/TerminalPane.js +31 -0
  288. package/dist/src/ui/ToolCallDisplay.js +303 -0
  289. package/dist/src/ui/TreePane.js +83 -0
  290. package/dist/src/ui/chat-ui.js +721 -0
  291. package/dist/src/ui/index.js +11 -0
  292. package/dist/src/ui/ink/index.js +1325 -0
  293. package/dist/src/ui/streaming.js +137 -0
  294. package/dist/src/ui/theme.js +78 -0
  295. package/dist/src/ui/types.js +7 -0
  296. package/dist/src/utils/analytics.js +61 -0
  297. package/dist/src/utils/cost-warning.js +25 -0
  298. package/dist/src/utils/env.js +42 -0
  299. package/dist/src/utils/errors.js +54 -0
  300. package/dist/src/utils/event-bus.js +22 -0
  301. package/dist/src/utils/index.js +16 -0
  302. package/dist/src/utils/logger.js +150 -0
  303. package/dist/src/utils/rate-limiter.js +90 -0
  304. package/dist/src/utils/service-auth.js +36 -0
  305. package/dist/src/utils/validation.js +39 -0
  306. package/dist/src/version.js +3 -0
  307. package/dist/src/watcher/index.js +192 -0
  308. package/dist/src/wizard/approval.js +275 -0
  309. package/dist/src/wizard/index.js +13 -0
  310. package/dist/src/wizard/prompts.js +273 -0
  311. package/dist/src/wizard/types.js +4 -0
  312. package/dist/src/wizard/ui.js +453 -0
  313. package/dist/src/wizard/wizard.js +227 -0
  314. package/package.json +31 -23
  315. package/src/__tests__/alias.test.ts +133 -0
  316. package/src/__tests__/app.test.ts +1 -1
  317. package/src/__tests__/audit.test.ts +1 -1
  318. package/src/__tests__/circuit-breaker.test.ts +1 -1
  319. package/src/__tests__/cli-run.test.ts +237 -1
  320. package/src/__tests__/compat-sqlite.test.ts +68 -0
  321. package/src/__tests__/context-manager.test.ts +131 -1
  322. package/src/__tests__/context.test.ts +1 -1
  323. package/src/__tests__/devops-terminal-gaps.test.ts +718 -0
  324. package/src/__tests__/doctor.test.ts +48 -0
  325. package/src/__tests__/enterprise.test.ts +1 -1
  326. package/src/__tests__/export.test.ts +236 -0
  327. package/src/__tests__/gap-11-18-20.test.ts +958 -0
  328. package/src/__tests__/generator.test.ts +1 -1
  329. package/src/__tests__/helm-streaming.test.ts +127 -0
  330. package/src/__tests__/hooks.test.ts +1 -1
  331. package/src/__tests__/incident.test.ts +179 -0
  332. package/src/__tests__/init.test.ts +55 -4
  333. package/src/__tests__/intent-parser.test.ts +1 -1
  334. package/src/__tests__/llm-router.test.ts +1 -1
  335. package/src/__tests__/logs.test.ts +107 -0
  336. package/src/__tests__/loop-errors.test.ts +244 -0
  337. package/src/__tests__/lsp.test.ts +1 -1
  338. package/src/__tests__/modes.test.ts +1 -1
  339. package/src/__tests__/perf-optimizations.test.ts +847 -0
  340. package/src/__tests__/permissions.test.ts +1 -1
  341. package/src/__tests__/pipeline.test.ts +50 -0
  342. package/src/__tests__/polish-phase3.test.ts +340 -0
  343. package/src/__tests__/profile.test.ts +237 -0
  344. package/src/__tests__/rollback.test.ts +83 -0
  345. package/src/__tests__/runbook.test.ts +219 -0
  346. package/src/__tests__/schedule.test.ts +206 -0
  347. package/src/__tests__/serve.test.ts +1 -1
  348. package/src/__tests__/sessions.test.ts +96 -1
  349. package/src/__tests__/sharing.test.ts +53 -1
  350. package/src/__tests__/snapshots.test.ts +1 -1
  351. package/src/__tests__/standalone-migration.test.ts +199 -0
  352. package/src/__tests__/state-db.test.ts +1 -1
  353. package/src/__tests__/status.test.ts +158 -0
  354. package/src/__tests__/stream-with-tools.test.ts +71 -25
  355. package/src/__tests__/subagents.test.ts +1 -1
  356. package/src/__tests__/system-prompt.test.ts +82 -3
  357. package/src/__tests__/terminal-gap-v2.test.ts +395 -0
  358. package/src/__tests__/terminal-parity.test.ts +393 -0
  359. package/src/__tests__/tf-apply.test.ts +187 -0
  360. package/src/__tests__/tool-converter.test.ts +1 -1
  361. package/src/__tests__/tool-schemas.test.ts +209 -4
  362. package/src/__tests__/tools.test.ts +4 -3
  363. package/src/__tests__/version-json.test.ts +184 -0
  364. package/src/__tests__/version.test.ts +1 -1
  365. package/src/__tests__/watch.test.ts +129 -0
  366. package/src/agent/compaction-agent.ts +40 -1
  367. package/src/agent/context-manager.ts +67 -3
  368. package/src/agent/deploy-preview.ts +62 -1
  369. package/src/agent/expand-files.ts +108 -0
  370. package/src/agent/loop.ts +1312 -31
  371. package/src/agent/permissions.ts +51 -4
  372. package/src/agent/system-prompt.ts +573 -19
  373. package/src/app.ts +58 -0
  374. package/src/audit/security-scanner.ts +45 -0
  375. package/src/auth/keychain.ts +82 -0
  376. package/src/auth/oauth.ts +15 -5
  377. package/src/cli/init.ts +378 -5
  378. package/src/cli/run.ts +407 -16
  379. package/src/cli/serve.ts +78 -1
  380. package/src/cli/web.ts +10 -6
  381. package/src/cli.ts +312 -1
  382. package/src/clients/service-discovery.ts +30 -25
  383. package/src/commands/alias.ts +100 -0
  384. package/src/commands/audit/index.ts +121 -2
  385. package/src/commands/auth-cloud.ts +113 -0
  386. package/src/commands/auth-refresh.ts +187 -0
  387. package/src/commands/aws-discover.ts +144 -251
  388. package/src/commands/aws-terraform.ts +68 -118
  389. package/src/commands/chat.ts +9 -3
  390. package/src/commands/completions.ts +268 -0
  391. package/src/commands/config.ts +26 -0
  392. package/src/commands/cost/index.ts +218 -2
  393. package/src/commands/deploy.ts +260 -0
  394. package/src/commands/doctor.ts +744 -152
  395. package/src/commands/drift/index.ts +371 -23
  396. package/src/commands/export.ts +146 -0
  397. package/src/commands/generate-k8s.ts +9 -61
  398. package/src/commands/generate-terraform.ts +191 -449
  399. package/src/commands/help.ts +212 -36
  400. package/src/commands/history.ts +8 -1
  401. package/src/commands/incident.ts +166 -0
  402. package/src/commands/init.ts +5 -0
  403. package/src/commands/login.ts +86 -1
  404. package/src/commands/logs.ts +167 -0
  405. package/src/commands/onboarding.ts +211 -34
  406. package/src/commands/pipeline.ts +186 -0
  407. package/src/commands/plugin.ts +398 -0
  408. package/src/commands/profile.ts +342 -0
  409. package/src/commands/questionnaire.ts +0 -98
  410. package/src/commands/resume.ts +26 -34
  411. package/src/commands/rollback.ts +315 -0
  412. package/src/commands/rollout.ts +88 -0
  413. package/src/commands/runbook.ts +346 -0
  414. package/src/commands/schedule.ts +236 -0
  415. package/src/commands/status.ts +252 -0
  416. package/src/commands/team-context.ts +220 -0
  417. package/src/commands/template.ts +58 -57
  418. package/src/commands/tf/index.ts +70 -11
  419. package/src/commands/upgrade.ts +57 -0
  420. package/src/commands/version.ts +54 -50
  421. package/src/commands/watch.ts +153 -0
  422. package/src/compat/runtime.ts +1 -1
  423. package/src/compat/sqlite.ts +75 -5
  424. package/src/config/mode-store.ts +62 -0
  425. package/src/config/profiles.ts +84 -0
  426. package/src/config/types.ts +83 -1
  427. package/src/config/workspace-state.ts +53 -0
  428. package/src/engine/cost-estimator.ts +52 -10
  429. package/src/engine/executor.ts +33 -2
  430. package/src/engine/planner.ts +68 -1
  431. package/src/generator/terraform.ts +8 -0
  432. package/src/history/manager.ts +2 -74
  433. package/src/hooks/engine.ts +5 -4
  434. package/src/llm/cost-calculator.ts +2 -2
  435. package/src/llm/providers/anthropic.ts +50 -21
  436. package/src/llm/router.ts +76 -7
  437. package/src/lsp/languages.ts +3 -0
  438. package/src/lsp/manager.ts +21 -5
  439. package/src/nimbus.ts +37 -18
  440. package/src/sessions/manager.ts +108 -1
  441. package/src/sharing/sync.ts +4 -0
  442. package/src/sharing/viewer.ts +66 -0
  443. package/src/tools/file-ops.ts +22 -0
  444. package/src/tools/schemas/devops.ts +3007 -117
  445. package/src/tools/schemas/standard.ts +5 -1
  446. package/src/tools/schemas/types.ts +31 -1
  447. package/src/tools/spawn-exec.ts +148 -0
  448. package/src/ui/App.tsx +1183 -66
  449. package/src/ui/DeployPreview.tsx +62 -57
  450. package/src/ui/FileDiffModal.tsx +162 -0
  451. package/src/ui/Header.tsx +87 -24
  452. package/src/ui/HelpModal.tsx +57 -0
  453. package/src/ui/InputBox.tsx +163 -10
  454. package/src/ui/MessageList.tsx +487 -40
  455. package/src/ui/PermissionPrompt.tsx +17 -5
  456. package/src/ui/StatusBar.tsx +122 -3
  457. package/src/ui/TerminalPane.tsx +84 -0
  458. package/src/ui/ToolCallDisplay.tsx +252 -18
  459. package/src/ui/TreePane.tsx +132 -0
  460. package/src/ui/chat-ui.ts +41 -44
  461. package/src/ui/ink/index.ts +771 -38
  462. package/src/ui/streaming.ts +1 -1
  463. package/src/ui/theme.ts +104 -0
  464. package/src/ui/types.ts +18 -0
  465. package/src/version.ts +1 -1
  466. package/src/watcher/index.ts +66 -15
  467. package/src/wizard/types.ts +1 -0
  468. package/src/wizard/ui.ts +1 -1
  469. package/tsconfig.json +2 -2
@@ -0,0 +1,299 @@
1
+ /**
2
+ * Helm Tools Client
3
+ *
4
+ * REST client for communicating with the Helm Tools Service
5
+ */
6
+ import { RestClient, ServiceURLs } from '.';
7
+ /**
8
+ * Client for Helm Tools Service
9
+ */
10
+ export class HelmClient {
11
+ client;
12
+ constructor(baseUrl) {
13
+ this.client = new RestClient(baseUrl || ServiceURLs.HELM_TOOLS);
14
+ }
15
+ /**
16
+ * List Helm releases
17
+ */
18
+ async list(options) {
19
+ const params = new URLSearchParams();
20
+ if (options?.namespace) {
21
+ params.set('namespace', options.namespace);
22
+ }
23
+ if (options?.allNamespaces) {
24
+ params.set('all-namespaces', 'true');
25
+ }
26
+ const response = await this.client.get(`/api/helm/list?${params.toString()}`);
27
+ if (response.success && response.data) {
28
+ return response.data;
29
+ }
30
+ return { success: false, releases: [], error: response.error?.message || 'Unknown error' };
31
+ }
32
+ /**
33
+ * Install a Helm chart
34
+ */
35
+ async install(releaseName, chart, options) {
36
+ const response = await this.client.post('/api/helm/install', {
37
+ releaseName,
38
+ chart,
39
+ ...options,
40
+ });
41
+ if (response.success && response.data) {
42
+ return response.data;
43
+ }
44
+ return {
45
+ success: false,
46
+ release: {
47
+ name: '',
48
+ namespace: '',
49
+ revision: 0,
50
+ status: '',
51
+ chart: '',
52
+ appVersion: '',
53
+ updated: '',
54
+ },
55
+ output: '',
56
+ error: response.error?.message || 'Unknown error',
57
+ };
58
+ }
59
+ /**
60
+ * Upgrade a Helm release
61
+ */
62
+ async upgrade(releaseName, chart, options) {
63
+ const response = await this.client.post('/api/helm/upgrade', {
64
+ releaseName,
65
+ chart,
66
+ ...options,
67
+ });
68
+ if (response.success && response.data) {
69
+ return response.data;
70
+ }
71
+ return {
72
+ success: false,
73
+ release: {
74
+ name: '',
75
+ namespace: '',
76
+ revision: 0,
77
+ status: '',
78
+ chart: '',
79
+ appVersion: '',
80
+ updated: '',
81
+ },
82
+ output: '',
83
+ error: response.error?.message || 'Unknown error',
84
+ };
85
+ }
86
+ /**
87
+ * Uninstall a Helm release
88
+ */
89
+ async uninstall(releaseName, options) {
90
+ const response = await this.client.post('/api/helm/uninstall', { releaseName, ...options });
91
+ if (response.success && response.data) {
92
+ return response.data;
93
+ }
94
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
95
+ }
96
+ /**
97
+ * Rollback a Helm release
98
+ */
99
+ async rollback(releaseName, revision, options) {
100
+ const response = await this.client.post('/api/helm/rollback', { releaseName, revision, ...options });
101
+ if (response.success && response.data) {
102
+ return response.data;
103
+ }
104
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
105
+ }
106
+ /**
107
+ * Get release history
108
+ */
109
+ async history(releaseName, options) {
110
+ const params = new URLSearchParams();
111
+ params.set('release', releaseName);
112
+ if (options?.namespace) {
113
+ params.set('namespace', options.namespace);
114
+ }
115
+ const response = await this.client.get(`/api/helm/history?${params.toString()}`);
116
+ if (response.success && response.data) {
117
+ return response.data;
118
+ }
119
+ return { success: false, history: [], error: response.error?.message || 'Unknown error' };
120
+ }
121
+ /**
122
+ * Search for Helm charts
123
+ */
124
+ async search(keyword, options) {
125
+ const params = new URLSearchParams();
126
+ params.set('keyword', keyword);
127
+ if (options?.repo) {
128
+ params.set('repo', options.repo);
129
+ }
130
+ const response = await this.client.get(`/api/helm/search?${params.toString()}`);
131
+ if (response.success && response.data) {
132
+ return response.data;
133
+ }
134
+ return { success: false, charts: [], error: response.error?.message || 'Unknown error' };
135
+ }
136
+ /**
137
+ * Add a Helm repository
138
+ */
139
+ async repoAdd(name, url) {
140
+ const response = await this.client.post('/api/helm/repo/add', { name, url });
141
+ if (response.success && response.data) {
142
+ return response.data;
143
+ }
144
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
145
+ }
146
+ /**
147
+ * Update Helm repositories
148
+ */
149
+ async repoUpdate() {
150
+ const response = await this.client.post('/api/helm/repo/update', {});
151
+ if (response.success && response.data) {
152
+ return response.data;
153
+ }
154
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
155
+ }
156
+ /**
157
+ * Show chart information
158
+ */
159
+ async show(chart, options) {
160
+ const params = new URLSearchParams();
161
+ params.set('chart', chart);
162
+ if (options?.subcommand) {
163
+ params.set('subcommand', options.subcommand);
164
+ }
165
+ if (options?.version) {
166
+ params.set('version', options.version);
167
+ }
168
+ const response = await this.client.get(`/api/helm/show?${params.toString()}`);
169
+ if (response.success && response.data) {
170
+ return response.data;
171
+ }
172
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
173
+ }
174
+ /**
175
+ * Lint a Helm chart
176
+ */
177
+ async lint(chartPath, options) {
178
+ const response = await this.client.post('/api/helm/lint', {
179
+ chartPath,
180
+ ...options,
181
+ });
182
+ if (response.success && response.data) {
183
+ return response.data;
184
+ }
185
+ return { success: false, error: response.error?.message || 'Unknown error' };
186
+ }
187
+ /**
188
+ * Get status of a Helm release
189
+ */
190
+ async status(releaseName, options) {
191
+ const params = new URLSearchParams();
192
+ params.set('release', releaseName);
193
+ if (options?.namespace) {
194
+ params.set('namespace', options.namespace);
195
+ }
196
+ const response = await this.client.get(`/api/helm/status?${params.toString()}`);
197
+ if (response.success && response.data) {
198
+ return response.data;
199
+ }
200
+ return { success: false, error: response.error?.message || 'Unknown error' };
201
+ }
202
+ /**
203
+ * Show chart values
204
+ */
205
+ async showValues(chart, options) {
206
+ const params = new URLSearchParams();
207
+ params.set('chart', chart);
208
+ if (options?.version) {
209
+ params.set('version', options.version);
210
+ }
211
+ const response = await this.client.get(`/api/helm/show/values?${params.toString()}`);
212
+ if (response.success && response.data) {
213
+ return response.data;
214
+ }
215
+ return { success: false, values: '', error: response.error?.message || 'Unknown error' };
216
+ }
217
+ /**
218
+ * Render chart templates locally without installing
219
+ */
220
+ async template(releaseName, chart, options) {
221
+ const response = await this.client.post('/api/helm/template', {
222
+ name: releaseName,
223
+ chart,
224
+ ...options,
225
+ });
226
+ if (response.success && response.data) {
227
+ return response.data;
228
+ }
229
+ return { success: false, error: response.error?.message || 'Unknown error' };
230
+ }
231
+ /**
232
+ * Package a chart directory into a chart archive
233
+ */
234
+ async package(chartPath, options) {
235
+ const response = await this.client.post('/api/helm/package', {
236
+ chartPath,
237
+ ...options,
238
+ });
239
+ if (response.success && response.data) {
240
+ return response.data;
241
+ }
242
+ return { success: false, error: response.error?.message || 'Unknown error' };
243
+ }
244
+ /**
245
+ * Update chart dependencies
246
+ */
247
+ async dependencyUpdate(chartPath) {
248
+ const response = await this.client.post('/api/helm/dependency/update', {
249
+ chartPath,
250
+ });
251
+ if (response.success && response.data) {
252
+ return response.data;
253
+ }
254
+ return { success: false, error: response.error?.message || 'Unknown error' };
255
+ }
256
+ /**
257
+ * Build chart dependencies
258
+ */
259
+ async dependencyBuild(chartPath) {
260
+ const response = await this.client.post('/api/helm/dependency/build', {
261
+ chartPath,
262
+ });
263
+ if (response.success && response.data) {
264
+ return response.data;
265
+ }
266
+ return { success: false, error: response.error?.message || 'Unknown error' };
267
+ }
268
+ /**
269
+ * Get detailed status of a Helm release with optional revision
270
+ */
271
+ async statusDetailed(releaseName, options) {
272
+ const params = new URLSearchParams();
273
+ params.set('name', releaseName);
274
+ if (options?.namespace) {
275
+ params.set('namespace', options.namespace);
276
+ }
277
+ if (options?.revision !== undefined) {
278
+ params.set('revision', options.revision.toString());
279
+ }
280
+ const response = await this.client.get(`/api/helm/status?${params.toString()}`);
281
+ if (response.success && response.data) {
282
+ return response.data;
283
+ }
284
+ return { success: false, error: response.error?.message || 'Unknown error' };
285
+ }
286
+ /**
287
+ * Check if service is available
288
+ */
289
+ async isAvailable() {
290
+ try {
291
+ const response = await this.client.get('/health');
292
+ return response.success && response.data?.status === 'healthy';
293
+ }
294
+ catch {
295
+ return false;
296
+ }
297
+ }
298
+ }
299
+ export const helmClient = new HelmClient();
@@ -0,0 +1,18 @@
1
+ /**
2
+ * CLI Service Clients
3
+ *
4
+ * Exports clients for communicating with backend services
5
+ */
6
+ // Low-level shared clients
7
+ export { RestClient } from './rest-client';
8
+ export { WebSocketClient } from './ws-client';
9
+ export { ServiceURLs, WebSocketURLs } from './service-discovery';
10
+ export { ToolsClient } from './tools-client';
11
+ // High-level service clients
12
+ export { LLMClient, llmClient, } from './llm-client';
13
+ export { TerraformClient, terraformClient, } from './terraform-client';
14
+ export { K8sClient, k8sClient, } from './k8s-client';
15
+ export { HelmClient, helmClient, } from './helm-client';
16
+ export { GitClient, gitClient, } from './git-client';
17
+ export { GeneratorClient, generatorClient, } from './generator-client';
18
+ export { CoreEngineClient, } from './core-engine-client';
@@ -0,0 +1,270 @@
1
+ /**
2
+ * Kubernetes Tools Client
3
+ *
4
+ * REST client for communicating with the K8s Tools Service
5
+ */
6
+ import { RestClient, ServiceURLs } from '.';
7
+ /**
8
+ * Client for Kubernetes Tools Service
9
+ */
10
+ export class K8sClient {
11
+ client;
12
+ constructor(baseUrl) {
13
+ this.client = new RestClient(baseUrl || ServiceURLs.K8S_TOOLS);
14
+ }
15
+ /**
16
+ * Get Kubernetes resources
17
+ */
18
+ async get(resource, options) {
19
+ const params = new URLSearchParams();
20
+ params.set('resource', resource);
21
+ if (options?.namespace) {
22
+ params.set('namespace', options.namespace);
23
+ }
24
+ if (options?.name) {
25
+ params.set('name', options.name);
26
+ }
27
+ if (options?.output) {
28
+ params.set('output', options.output);
29
+ }
30
+ if (options?.labels) {
31
+ params.set('labels', JSON.stringify(options.labels));
32
+ }
33
+ const response = await this.client.get(`/api/k8s/get?${params.toString()}`);
34
+ if (response.success && response.data) {
35
+ return response.data;
36
+ }
37
+ return { success: false, items: [], error: response.error?.message || 'Unknown error' };
38
+ }
39
+ /**
40
+ * Apply Kubernetes manifests
41
+ */
42
+ async apply(manifests, options) {
43
+ const response = await this.client.post('/api/k8s/apply', {
44
+ manifests,
45
+ ...options,
46
+ });
47
+ if (response.success && response.data) {
48
+ return response.data;
49
+ }
50
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
51
+ }
52
+ /**
53
+ * Delete Kubernetes resources
54
+ */
55
+ async delete(resource, name, options) {
56
+ const response = await this.client.post('/api/k8s/delete', {
57
+ resource,
58
+ name,
59
+ ...options,
60
+ });
61
+ if (response.success && response.data) {
62
+ return response.data;
63
+ }
64
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
65
+ }
66
+ /**
67
+ * Get logs from a pod
68
+ */
69
+ async logs(podName, options) {
70
+ const params = new URLSearchParams();
71
+ params.set('pod', podName);
72
+ if (options?.namespace) {
73
+ params.set('namespace', options.namespace);
74
+ }
75
+ if (options?.container) {
76
+ params.set('container', options.container);
77
+ }
78
+ if (options?.tail) {
79
+ params.set('tail', String(options.tail));
80
+ }
81
+ if (options?.since) {
82
+ params.set('since', options.since);
83
+ }
84
+ const response = await this.client.get(`/api/k8s/logs?${params.toString()}`);
85
+ if (response.success && response.data) {
86
+ return response.data;
87
+ }
88
+ return { success: false, logs: '', error: response.error?.message || 'Unknown error' };
89
+ }
90
+ /**
91
+ * Describe a Kubernetes resource
92
+ */
93
+ async describe(resource, name, options) {
94
+ const params = new URLSearchParams();
95
+ params.set('resource', resource);
96
+ params.set('name', name);
97
+ if (options?.namespace) {
98
+ params.set('namespace', options.namespace);
99
+ }
100
+ const response = await this.client.get(`/api/k8s/describe?${params.toString()}`);
101
+ if (response.success && response.data) {
102
+ return response.data;
103
+ }
104
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
105
+ }
106
+ /**
107
+ * Scale a deployment/replicaset
108
+ */
109
+ async scale(resource, name, replicas, options) {
110
+ const response = await this.client.post('/api/k8s/scale', { resource, name, replicas, ...options });
111
+ if (response.success && response.data) {
112
+ return response.data;
113
+ }
114
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
115
+ }
116
+ /**
117
+ * Execute a command in a pod
118
+ */
119
+ async exec(pod, command, options) {
120
+ const response = await this.client.post('/api/k8s/exec', { pod, command, ...options });
121
+ if (response.success && response.data) {
122
+ return response.data;
123
+ }
124
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
125
+ }
126
+ /**
127
+ * Manage rollouts
128
+ */
129
+ async rollout(resource, name, action, options) {
130
+ const response = await this.client.post('/api/k8s/rollout', { action, resource, name, ...options });
131
+ if (response.success && response.data) {
132
+ return response.data;
133
+ }
134
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
135
+ }
136
+ /**
137
+ * Get events from a namespace
138
+ */
139
+ async events(options) {
140
+ const params = new URLSearchParams();
141
+ if (options?.namespace) {
142
+ params.set('namespace', options.namespace);
143
+ }
144
+ if (options?.fieldSelector) {
145
+ params.set('fieldSelector', options.fieldSelector);
146
+ }
147
+ const response = await this.client.get(`/api/k8s/events?${params.toString()}`);
148
+ if (response.success && response.data) {
149
+ return response.data;
150
+ }
151
+ return { success: false, events: [], error: response.error?.message || 'Unknown error' };
152
+ }
153
+ /**
154
+ * Forward local ports to a pod
155
+ */
156
+ async portForward(pod, ports, options) {
157
+ const response = await this.client.post('/api/k8s/port-forward', { pod, ports, ...options });
158
+ if (response.success && response.data) {
159
+ return response.data;
160
+ }
161
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
162
+ }
163
+ /**
164
+ * List namespaces
165
+ */
166
+ async listNamespaces(options) {
167
+ const params = new URLSearchParams();
168
+ if (options?.kubeconfig) {
169
+ params.set('kubeconfig', options.kubeconfig);
170
+ }
171
+ if (options?.context) {
172
+ params.set('context', options.context);
173
+ }
174
+ const query = params.toString() ? `?${params.toString()}` : '';
175
+ const response = await this.client.get(`/api/k8s/namespaces${query}`);
176
+ if (response.success && response.data) {
177
+ return response.data;
178
+ }
179
+ return { success: false, namespaces: [], error: response.error?.message || 'Unknown error' };
180
+ }
181
+ /**
182
+ * Create a namespace
183
+ */
184
+ async createNamespace(name, options) {
185
+ const response = await this.client.post('/api/k8s/namespace', { name, ...options });
186
+ if (response.success && response.data) {
187
+ return response.data;
188
+ }
189
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
190
+ }
191
+ /**
192
+ * Delete a namespace
193
+ */
194
+ async deleteNamespace(name, options) {
195
+ const response = await this.client.post('/api/k8s/namespace/delete', { name, ...options });
196
+ if (response.success && response.data) {
197
+ return response.data;
198
+ }
199
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
200
+ }
201
+ /**
202
+ * Get top resource usage for pods or nodes
203
+ */
204
+ async top(resourceType, options) {
205
+ const params = new URLSearchParams();
206
+ if (options?.namespace) {
207
+ params.set('namespace', options.namespace);
208
+ }
209
+ if (options?.kubeconfig) {
210
+ params.set('kubeconfig', options.kubeconfig);
211
+ }
212
+ if (options?.context) {
213
+ params.set('context', options.context);
214
+ }
215
+ const query = params.toString() ? `?${params.toString()}` : '';
216
+ const response = await this.client.get(`/api/k8s/top/${resourceType}${query}`);
217
+ if (response.success && response.data) {
218
+ return response.data;
219
+ }
220
+ return {
221
+ success: false,
222
+ output: '',
223
+ items: [],
224
+ error: response.error?.message || 'Unknown error',
225
+ };
226
+ }
227
+ /**
228
+ * Patch a Kubernetes resource
229
+ */
230
+ async patch(resource, name, patch, options) {
231
+ const response = await this.client.post('/api/k8s/patch', { resource, name, patch, ...options });
232
+ if (response.success && response.data) {
233
+ return response.data;
234
+ }
235
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
236
+ }
237
+ /**
238
+ * Label a Kubernetes resource
239
+ */
240
+ async label(resource, name, labels, options) {
241
+ const response = await this.client.post('/api/k8s/label', { resource, name, labels, ...options });
242
+ if (response.success && response.data) {
243
+ return response.data;
244
+ }
245
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
246
+ }
247
+ /**
248
+ * Annotate a Kubernetes resource
249
+ */
250
+ async annotate(resource, name, annotations, options) {
251
+ const response = await this.client.post('/api/k8s/annotate', { resource, name, annotations, ...options });
252
+ if (response.success && response.data) {
253
+ return response.data;
254
+ }
255
+ return { success: false, output: '', error: response.error?.message || 'Unknown error' };
256
+ }
257
+ /**
258
+ * Check if service is available
259
+ */
260
+ async isAvailable() {
261
+ try {
262
+ const response = await this.client.get('/health');
263
+ return response.success && response.data?.status === 'healthy';
264
+ }
265
+ catch {
266
+ return false;
267
+ }
268
+ }
269
+ }
270
+ export const k8sClient = new K8sClient();