@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,627 @@
1
+ /**
2
+ * Terraform Operations — Embedded tool (stripped HTTP wrappers)
3
+ *
4
+ * Copied from services/terraform-tools-service/src/terraform/operations.ts
5
+ * Provides direct terraform CLI operations for the embedded CLI binary.
6
+ */
7
+ import { exec } from 'child_process';
8
+ import { promisify } from 'util';
9
+ import * as fs from 'fs/promises';
10
+ import * as path from 'path';
11
+ import { logger } from '../utils';
12
+ const execAsync = promisify(exec);
13
+ export class TerraformOperations {
14
+ workingDir;
15
+ terraformPath;
16
+ constructor(workingDir = process.cwd(), terraformPath = 'terraform') {
17
+ this.workingDir = workingDir;
18
+ this.terraformPath = terraformPath;
19
+ }
20
+ /**
21
+ * Build command arguments array
22
+ */
23
+ buildArgs(baseArgs, options) {
24
+ const args = [...baseArgs];
25
+ if (options) {
26
+ for (const [key, value] of Object.entries(options)) {
27
+ if (value === undefined || value === null) {
28
+ continue;
29
+ }
30
+ if (key === 'var' && typeof value === 'object') {
31
+ for (const [varName, varValue] of Object.entries(value)) {
32
+ args.push('-var', `${varName}=${varValue}`);
33
+ }
34
+ }
35
+ else if (key === 'backendConfig' && typeof value === 'object') {
36
+ for (const [configKey, configValue] of Object.entries(value)) {
37
+ args.push('-backend-config', `${configKey}=${configValue}`);
38
+ }
39
+ }
40
+ else if (key === 'target' && Array.isArray(value)) {
41
+ for (const target of value) {
42
+ args.push('-target', target);
43
+ }
44
+ }
45
+ else if (typeof value === 'boolean') {
46
+ if (value) {
47
+ args.push(`-${key}`);
48
+ }
49
+ else if (key === 'backend') {
50
+ args.push('-backend=false');
51
+ }
52
+ }
53
+ else if (typeof value === 'number') {
54
+ args.push(`-${key}=${value}`);
55
+ }
56
+ else if (typeof value === 'string') {
57
+ args.push(`-${key}=${value}`);
58
+ }
59
+ }
60
+ }
61
+ return args;
62
+ }
63
+ /**
64
+ * Execute terraform command
65
+ */
66
+ async execute(args, options) {
67
+ const command = `${this.terraformPath} ${args.join(' ')}`;
68
+ logger.info(`Executing: ${command} in ${this.workingDir}`);
69
+ try {
70
+ const result = await execAsync(command, {
71
+ cwd: this.workingDir,
72
+ maxBuffer: 50 * 1024 * 1024, // 50MB buffer
73
+ timeout: options?.timeout || 600000, // 10 minute default timeout
74
+ env: {
75
+ ...process.env,
76
+ TF_IN_AUTOMATION: 'true',
77
+ TF_INPUT: 'false',
78
+ },
79
+ });
80
+ return result;
81
+ }
82
+ catch (error) {
83
+ // Terraform often writes useful info to stderr even on failure
84
+ if (error.stdout || error.stderr) {
85
+ throw new Error(error.stderr || error.stdout || error.message);
86
+ }
87
+ throw error;
88
+ }
89
+ }
90
+ /**
91
+ * Initialize terraform working directory
92
+ */
93
+ async init(options = {}) {
94
+ logger.info(`Terraform init in ${this.workingDir}`);
95
+ const args = this.buildArgs(['init', '-no-color'], {
96
+ backend: options.backend,
97
+ upgrade: options.upgrade,
98
+ reconfigure: options.reconfigure,
99
+ backendConfig: options.backendConfig,
100
+ });
101
+ const result = await this.execute(args);
102
+ return { success: true, output: result.stdout || result.stderr };
103
+ }
104
+ /**
105
+ * Create execution plan
106
+ */
107
+ async plan(options = {}) {
108
+ logger.info(`Terraform plan in ${this.workingDir}`);
109
+ const args = this.buildArgs(['plan', '-no-color', '-detailed-exitcode'], {
110
+ 'var-file': options.varFile,
111
+ out: options.out,
112
+ destroy: options.destroy,
113
+ target: options.target,
114
+ var: options.var,
115
+ refresh: options.refresh,
116
+ });
117
+ try {
118
+ const result = await this.execute(args);
119
+ return { success: true, output: result.stdout, hasChanges: false };
120
+ }
121
+ catch (error) {
122
+ // Exit code 2 means there are changes
123
+ if (error.message?.includes('exit code 2') || error.code === 2) {
124
+ return { success: true, output: error.stdout || error.message, hasChanges: true };
125
+ }
126
+ throw error;
127
+ }
128
+ }
129
+ /**
130
+ * Apply changes
131
+ */
132
+ async apply(options = {}) {
133
+ logger.info(`Terraform apply in ${this.workingDir}`);
134
+ const args = this.buildArgs(['apply', '-no-color'], {
135
+ 'auto-approve': options.autoApprove,
136
+ 'var-file': options.varFile,
137
+ target: options.target,
138
+ var: options.var,
139
+ parallelism: options.parallelism,
140
+ });
141
+ // If a plan file is provided, append it at the end
142
+ if (options.planFile) {
143
+ args.push(options.planFile);
144
+ }
145
+ const result = await this.execute(args, { timeout: 1800000 }); // 30 minute timeout for apply
146
+ return { success: true, output: result.stdout || result.stderr };
147
+ }
148
+ /**
149
+ * Destroy infrastructure
150
+ */
151
+ async destroy(options = {}) {
152
+ logger.info(`Terraform destroy in ${this.workingDir}`);
153
+ const args = this.buildArgs(['destroy', '-no-color'], {
154
+ 'auto-approve': options.autoApprove,
155
+ 'var-file': options.varFile,
156
+ target: options.target,
157
+ var: options.var,
158
+ });
159
+ const result = await this.execute(args, { timeout: 1800000 }); // 30 minute timeout
160
+ return { success: true, output: result.stdout || result.stderr };
161
+ }
162
+ /**
163
+ * Get outputs
164
+ */
165
+ async output(options = {}) {
166
+ logger.info(`Terraform output in ${this.workingDir}`);
167
+ const args = ['output', '-no-color'];
168
+ if (options.json !== false) {
169
+ args.push('-json');
170
+ }
171
+ if (options.name) {
172
+ args.push(options.name);
173
+ }
174
+ const result = await this.execute(args);
175
+ if (options.json !== false) {
176
+ try {
177
+ return JSON.parse(result.stdout);
178
+ }
179
+ catch {
180
+ return result.stdout;
181
+ }
182
+ }
183
+ return result.stdout;
184
+ }
185
+ /**
186
+ * Show state or plan
187
+ */
188
+ async show(planFile) {
189
+ logger.info(`Terraform show in ${this.workingDir}`);
190
+ const args = ['show', '-no-color'];
191
+ if (planFile) {
192
+ args.push('-json', planFile);
193
+ }
194
+ const result = await this.execute(args);
195
+ if (planFile) {
196
+ try {
197
+ return { output: result.stdout, json: JSON.parse(result.stdout) };
198
+ }
199
+ catch {
200
+ return { output: result.stdout };
201
+ }
202
+ }
203
+ return { output: result.stdout };
204
+ }
205
+ /**
206
+ * Validate configuration
207
+ */
208
+ async validate() {
209
+ logger.info(`Terraform validate in ${this.workingDir}`);
210
+ try {
211
+ const result = await this.execute(['validate', '-json']);
212
+ const parsed = JSON.parse(result.stdout);
213
+ return {
214
+ valid: parsed.valid,
215
+ errorCount: parsed.error_count || 0,
216
+ warningCount: parsed.warning_count || 0,
217
+ diagnostics: (parsed.diagnostics || []).map((d) => ({
218
+ severity: d.severity,
219
+ summary: d.summary,
220
+ detail: d.detail,
221
+ })),
222
+ };
223
+ }
224
+ catch (error) {
225
+ try {
226
+ const parsed = JSON.parse(error.message);
227
+ return {
228
+ valid: false,
229
+ errorCount: parsed.error_count || 1,
230
+ warningCount: parsed.warning_count || 0,
231
+ diagnostics: (parsed.diagnostics || []).map((d) => ({
232
+ severity: d.severity,
233
+ summary: d.summary,
234
+ detail: d.detail,
235
+ })),
236
+ };
237
+ }
238
+ catch {
239
+ return {
240
+ valid: false,
241
+ errorCount: 1,
242
+ warningCount: 0,
243
+ diagnostics: [{ severity: 'error', summary: error.message }],
244
+ };
245
+ }
246
+ }
247
+ }
248
+ /**
249
+ * Format configuration files
250
+ */
251
+ async fmt(options) {
252
+ logger.info(`Terraform fmt in ${this.workingDir}`);
253
+ const args = ['fmt', '-no-color'];
254
+ if (options?.check) {
255
+ args.push('-check');
256
+ }
257
+ if (options?.recursive) {
258
+ args.push('-recursive');
259
+ }
260
+ if (options?.diff) {
261
+ args.push('-diff');
262
+ }
263
+ try {
264
+ const result = await this.execute(args);
265
+ const formatted = result.stdout.split('\n').filter(f => f.trim());
266
+ return { success: true, output: result.stdout, formatted };
267
+ }
268
+ catch (error) {
269
+ // Exit code 3 means files need formatting
270
+ if (error.code === 3) {
271
+ return { success: false, output: error.stdout || 'Files need formatting' };
272
+ }
273
+ throw error;
274
+ }
275
+ }
276
+ /**
277
+ * Run tflint and/or checkov linting
278
+ */
279
+ async lint(options) {
280
+ const runTflint = options?.tflint !== false;
281
+ const runCheckov = options?.checkov !== false;
282
+ const result = {};
283
+ if (runTflint) {
284
+ try {
285
+ const tflintResult = await execAsync('tflint --format json --no-color', {
286
+ cwd: this.workingDir,
287
+ timeout: 120000,
288
+ });
289
+ const parsed = JSON.parse(tflintResult.stdout || '{}');
290
+ const issues = (parsed.issues || []).map((issue) => ({
291
+ rule: issue.rule?.name || 'unknown',
292
+ severity: issue.rule?.severity || 'warning',
293
+ message: issue.message || '',
294
+ file: issue.range?.filename,
295
+ line: issue.range?.start?.line,
296
+ }));
297
+ result.tflint = {
298
+ available: true,
299
+ success: issues.length === 0 || !issues.some((i) => i.severity === 'error'),
300
+ issues,
301
+ };
302
+ }
303
+ catch (err) {
304
+ if (err.code === 'ENOENT' ||
305
+ err.message?.includes('ENOENT') ||
306
+ err.message?.includes('not found')) {
307
+ result.tflint = { available: false, success: false, issues: [] };
308
+ }
309
+ else {
310
+ try {
311
+ const parsed = JSON.parse(err.stdout || '{}');
312
+ const issues = (parsed.issues || []).map((issue) => ({
313
+ rule: issue.rule?.name || 'unknown',
314
+ severity: issue.rule?.severity || 'warning',
315
+ message: issue.message || '',
316
+ file: issue.range?.filename,
317
+ line: issue.range?.start?.line,
318
+ }));
319
+ result.tflint = {
320
+ available: true,
321
+ success: false,
322
+ issues,
323
+ };
324
+ }
325
+ catch {
326
+ result.tflint = {
327
+ available: true,
328
+ success: false,
329
+ issues: [{ rule: 'unknown', severity: 'error', message: err.message }],
330
+ };
331
+ }
332
+ }
333
+ }
334
+ }
335
+ if (runCheckov) {
336
+ try {
337
+ const checkovResult = await execAsync(`checkov -d ${this.workingDir} --framework terraform --output json --compact`, { cwd: this.workingDir, timeout: 300000 });
338
+ const parsed = JSON.parse(checkovResult.stdout || '{}');
339
+ const summary = parsed.summary || {};
340
+ const checks = (parsed.results?.passed_checks || [])
341
+ .map((c) => ({
342
+ id: c.check_id,
343
+ name: c.check_name || c.name,
344
+ result: 'passed',
345
+ file: c.file_path,
346
+ }))
347
+ .concat((parsed.results?.failed_checks || []).map((c) => ({
348
+ id: c.check_id,
349
+ name: c.check_name || c.name,
350
+ result: 'failed',
351
+ file: c.file_path,
352
+ })));
353
+ result.checkov = {
354
+ available: true,
355
+ success: (summary.failed || 0) === 0,
356
+ passed: summary.passed || 0,
357
+ failed: summary.failed || 0,
358
+ skipped: summary.skipped || 0,
359
+ checks,
360
+ };
361
+ }
362
+ catch (err) {
363
+ if (err.code === 'ENOENT' ||
364
+ err.message?.includes('ENOENT') ||
365
+ err.message?.includes('not found')) {
366
+ result.checkov = {
367
+ available: false,
368
+ success: false,
369
+ passed: 0,
370
+ failed: 0,
371
+ skipped: 0,
372
+ checks: [],
373
+ };
374
+ }
375
+ else {
376
+ try {
377
+ const parsed = JSON.parse(err.stdout || '{}');
378
+ const summary = parsed.summary || {};
379
+ const checks = (parsed.results?.passed_checks || [])
380
+ .map((c) => ({
381
+ id: c.check_id,
382
+ name: c.check_name || c.name,
383
+ result: 'passed',
384
+ file: c.file_path,
385
+ }))
386
+ .concat((parsed.results?.failed_checks || []).map((c) => ({
387
+ id: c.check_id,
388
+ name: c.check_name || c.name,
389
+ result: 'failed',
390
+ file: c.file_path,
391
+ })));
392
+ result.checkov = {
393
+ available: true,
394
+ success: false,
395
+ passed: summary.passed || 0,
396
+ failed: summary.failed || 0,
397
+ skipped: summary.skipped || 0,
398
+ checks,
399
+ };
400
+ }
401
+ catch {
402
+ result.checkov = {
403
+ available: true,
404
+ success: false,
405
+ passed: 0,
406
+ failed: 0,
407
+ skipped: 0,
408
+ checks: [{ id: 'unknown', name: 'checkov error', result: 'failed', file: undefined }],
409
+ };
410
+ }
411
+ }
412
+ }
413
+ }
414
+ return result;
415
+ }
416
+ /**
417
+ * List workspaces
418
+ */
419
+ async workspaceList() {
420
+ logger.info(`Terraform workspace list in ${this.workingDir}`);
421
+ const result = await this.execute(['workspace', 'list']);
422
+ const lines = result.stdout.split('\n').filter(line => line.trim());
423
+ let current = 'default';
424
+ const workspaces = [];
425
+ for (const line of lines) {
426
+ const trimmed = line.trim();
427
+ if (trimmed.startsWith('*')) {
428
+ current = trimmed.replace(/\*/g, '').trim();
429
+ workspaces.push(current);
430
+ }
431
+ else if (trimmed) {
432
+ workspaces.push(trimmed);
433
+ }
434
+ }
435
+ return { current, workspaces };
436
+ }
437
+ /**
438
+ * Select workspace
439
+ */
440
+ async workspaceSelect(name) {
441
+ logger.info(`Terraform workspace select ${name} in ${this.workingDir}`);
442
+ await this.execute(['workspace', 'select', name]);
443
+ return { success: true, workspace: name };
444
+ }
445
+ /**
446
+ * Create new workspace
447
+ */
448
+ async workspaceNew(name) {
449
+ logger.info(`Terraform workspace new ${name} in ${this.workingDir}`);
450
+ await this.execute(['workspace', 'new', name]);
451
+ return { success: true, workspace: name };
452
+ }
453
+ /**
454
+ * Delete workspace
455
+ */
456
+ async workspaceDelete(name, force = false) {
457
+ logger.info(`Terraform workspace delete ${name} in ${this.workingDir}`);
458
+ const args = ['workspace', 'delete'];
459
+ if (force) {
460
+ args.push('-force');
461
+ }
462
+ args.push(name);
463
+ await this.execute(args);
464
+ return { success: true };
465
+ }
466
+ /**
467
+ * Get state list
468
+ */
469
+ async stateList() {
470
+ logger.info(`Terraform state list in ${this.workingDir}`);
471
+ const result = await this.execute(['state', 'list']);
472
+ return result.stdout.split('\n').filter(line => line.trim());
473
+ }
474
+ /**
475
+ * Show specific resource in state
476
+ */
477
+ async stateShow(address) {
478
+ logger.info(`Terraform state show ${address} in ${this.workingDir}`);
479
+ const result = await this.execute(['state', 'show', address]);
480
+ return result.stdout;
481
+ }
482
+ /**
483
+ * Remove resource from state
484
+ */
485
+ async stateRm(address) {
486
+ logger.info(`Terraform state rm ${address} in ${this.workingDir}`);
487
+ await this.execute(['state', 'rm', address]);
488
+ return { success: true };
489
+ }
490
+ /**
491
+ * Import existing resource
492
+ */
493
+ async import(address, id, options) {
494
+ logger.info(`Terraform import ${address} ${id} in ${this.workingDir}`);
495
+ const args = this.buildArgs(['import', '-no-color'], {
496
+ 'var-file': options?.varFile,
497
+ });
498
+ args.push(address, id);
499
+ const result = await this.execute(args);
500
+ return { success: true, output: result.stdout || result.stderr };
501
+ }
502
+ /**
503
+ * Refresh state
504
+ */
505
+ async refresh(options) {
506
+ logger.info(`Terraform refresh in ${this.workingDir}`);
507
+ const args = this.buildArgs(['refresh', '-no-color'], {
508
+ 'var-file': options?.varFile,
509
+ });
510
+ const result = await this.execute(args);
511
+ return { success: true, output: result.stdout || result.stderr };
512
+ }
513
+ /**
514
+ * Get providers
515
+ */
516
+ async providers() {
517
+ logger.info(`Terraform providers in ${this.workingDir}`);
518
+ const result = await this.execute(['providers']);
519
+ return result.stdout;
520
+ }
521
+ /**
522
+ * Get version
523
+ */
524
+ async version() {
525
+ logger.info('Terraform version');
526
+ const result = await this.execute(['version', '-json']);
527
+ const parsed = JSON.parse(result.stdout);
528
+ return {
529
+ terraform: parsed.terraform_version,
530
+ providers: parsed.provider_selections || {},
531
+ };
532
+ }
533
+ /**
534
+ * Check if terraform is initialized
535
+ */
536
+ async isInitialized() {
537
+ const tfDir = path.join(this.workingDir, '.terraform');
538
+ try {
539
+ await fs.access(tfDir);
540
+ return true;
541
+ }
542
+ catch {
543
+ return false;
544
+ }
545
+ }
546
+ /**
547
+ * Move a resource in state
548
+ */
549
+ async stateMove(source, destination) {
550
+ logger.info(`Terraform state mv ${source} ${destination} in ${this.workingDir}`);
551
+ const result = await this.execute(['state', 'mv', source, destination]);
552
+ return { success: true, output: result.stdout || result.stderr };
553
+ }
554
+ /**
555
+ * Taint a resource (mark for recreation)
556
+ */
557
+ async taint(address) {
558
+ logger.info(`Terraform taint ${address} in ${this.workingDir}`);
559
+ const result = await this.execute(['taint', address]);
560
+ return { success: true, output: result.stdout || result.stderr };
561
+ }
562
+ /**
563
+ * Untaint a resource (unmark for recreation)
564
+ */
565
+ async untaint(address) {
566
+ logger.info(`Terraform untaint ${address} in ${this.workingDir}`);
567
+ const result = await this.execute(['untaint', address]);
568
+ return { success: true, output: result.stdout || result.stderr };
569
+ }
570
+ /**
571
+ * Pull remote state
572
+ */
573
+ async statePull() {
574
+ logger.info(`Terraform state pull in ${this.workingDir}`);
575
+ const result = await this.execute(['state', 'pull']);
576
+ return { success: true, state: result.stdout };
577
+ }
578
+ /**
579
+ * Push local state to remote
580
+ */
581
+ async statePush(stateFile, force) {
582
+ logger.info(`Terraform state push in ${this.workingDir}`);
583
+ const args = ['state', 'push'];
584
+ if (force) {
585
+ args.push('-force');
586
+ }
587
+ if (stateFile) {
588
+ args.push(stateFile);
589
+ }
590
+ const result = await this.execute(args);
591
+ return { success: true, output: result.stdout || result.stderr };
592
+ }
593
+ /**
594
+ * Replace a provider in state
595
+ */
596
+ async stateReplaceProvider(fromProvider, toProvider) {
597
+ logger.info(`Terraform state replace-provider ${fromProvider} ${toProvider} in ${this.workingDir}`);
598
+ const result = await this.execute([
599
+ 'state',
600
+ 'replace-provider',
601
+ '-auto-approve',
602
+ fromProvider,
603
+ toProvider,
604
+ ]);
605
+ return { success: true, output: result.stdout || result.stderr };
606
+ }
607
+ /**
608
+ * Get graph of resources
609
+ */
610
+ async graph(type) {
611
+ logger.info(`Terraform graph in ${this.workingDir}`);
612
+ const args = ['graph'];
613
+ if (type) {
614
+ args.push('-type', type);
615
+ }
616
+ const result = await this.execute(args);
617
+ return { success: true, graph: result.stdout };
618
+ }
619
+ /**
620
+ * Force unlock state
621
+ */
622
+ async forceUnlock(lockId) {
623
+ logger.info(`Terraform force-unlock ${lockId} in ${this.workingDir}`);
624
+ const result = await this.execute(['force-unlock', '-force', lockId]);
625
+ return { success: true, output: result.stdout || result.stderr };
626
+ }
627
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Drift Detection and Remediation Types
3
+ */
4
+ export {};
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Enterprise Types
3
+ * Types for team collaboration, billing, audit, and SSO features
4
+ */
5
+ export {};
@@ -0,0 +1,14 @@
1
+ // Service types
2
+ export * from './service';
3
+ // Request types
4
+ export * from './request';
5
+ // Response types
6
+ export * from './response';
7
+ // Plan types
8
+ export * from './plan';
9
+ // Config types
10
+ export * from './config';
11
+ // Enterprise types
12
+ export * from './enterprise';
13
+ // Drift types
14
+ export * from './drift';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};