@build-astron-co/nimbus 0.4.1 → 0.4.3

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 (435) hide show
  1. package/CHANGELOG.md +268 -89
  2. package/README.md +26 -567
  3. package/dist/src/agent/compaction-agent.js +24 -12
  4. package/dist/src/agent/context-manager.js +2 -1
  5. package/dist/src/agent/expand-files.js +2 -1
  6. package/dist/src/agent/loop.js +71 -33
  7. package/dist/src/agent/permissions.js +4 -2
  8. package/dist/src/agent/system-prompt.js +34 -17
  9. package/dist/src/app.js +1 -1
  10. package/dist/src/auth/keychain.js +8 -4
  11. package/dist/src/auth/store.js +70 -107
  12. package/dist/src/cli/init.js +35 -19
  13. package/dist/src/cli/run.js +18 -10
  14. package/dist/src/cli/serve.js +4 -2
  15. package/dist/src/cli.js +52 -11
  16. package/dist/src/commands/alias.js +5 -3
  17. package/dist/src/commands/audit/index.js +2 -1
  18. package/dist/src/commands/aws-terraform.js +36 -18
  19. package/dist/src/commands/completions.js +1 -1
  20. package/dist/src/commands/config.js +3 -2
  21. package/dist/src/commands/connect-github.js +92 -0
  22. package/dist/src/commands/cost/index.js +3 -2
  23. package/dist/src/commands/deploy.js +15 -10
  24. package/dist/src/commands/doctor.js +9 -6
  25. package/dist/src/commands/drift/index.js +2 -1
  26. package/dist/src/commands/export.js +5 -3
  27. package/dist/src/commands/generate-terraform.js +110 -2
  28. package/dist/src/commands/import.js +3 -3
  29. package/dist/src/commands/incident.js +10 -5
  30. package/dist/src/commands/login.js +8 -93
  31. package/dist/src/commands/logs.js +16 -8
  32. package/dist/src/commands/onboarding.js +6 -4
  33. package/dist/src/commands/pipeline.js +6 -3
  34. package/dist/src/commands/plugin.js +3 -2
  35. package/dist/src/commands/profile.js +27 -14
  36. package/dist/src/commands/questionnaire.js +1 -1
  37. package/dist/src/commands/rollback.js +3 -2
  38. package/dist/src/commands/rollout.js +5 -3
  39. package/dist/src/commands/runbook.js +17 -10
  40. package/dist/src/commands/schedule.js +10 -5
  41. package/dist/src/commands/status.js +2 -1
  42. package/dist/src/commands/team-context.js +12 -7
  43. package/dist/src/commands/template.js +1 -1
  44. package/dist/src/commands/tf/index.js +6 -3
  45. package/dist/src/commands/upgrade.js +5 -3
  46. package/dist/src/commands/version.js +6 -3
  47. package/dist/src/commands/watch.js +6 -3
  48. package/dist/src/compat/sqlite.js +5 -3
  49. package/dist/src/config/mode-store.js +2 -1
  50. package/dist/src/config/profiles.js +4 -2
  51. package/dist/src/config/types.js +2 -1
  52. package/dist/src/engine/executor.js +8 -4
  53. package/dist/src/engine/planner.js +9 -5
  54. package/dist/src/llm/providers/anthropic.js +6 -3
  55. package/dist/src/llm/providers/ollama.js +1 -1
  56. package/dist/src/llm/router.js +22 -7
  57. package/dist/src/nimbus.js +1 -0
  58. package/dist/src/sessions/manager.js +6 -3
  59. package/dist/src/sharing/viewer.js +2 -1
  60. package/dist/src/tools/file-ops.js +1 -2
  61. package/dist/src/tools/schemas/devops.js +197 -108
  62. package/dist/src/tools/schemas/standard.js +1 -1
  63. package/dist/src/ui/App.js +25 -13
  64. package/dist/src/ui/FileDiffModal.js +22 -11
  65. package/dist/src/ui/HelpModal.js +2 -1
  66. package/dist/src/ui/InputBox.js +6 -3
  67. package/dist/src/ui/MessageList.js +40 -20
  68. package/dist/src/ui/TerminalPane.js +2 -1
  69. package/dist/src/ui/ToolCallDisplay.js +12 -6
  70. package/dist/src/ui/TreePane.js +2 -1
  71. package/dist/src/ui/ink/index.js +37 -21
  72. package/dist/src/version.js +1 -1
  73. package/dist/src/watcher/index.js +8 -4
  74. package/package.json +3 -5
  75. package/src/__tests__/alias.test.ts +0 -133
  76. package/src/__tests__/app.test.ts +0 -76
  77. package/src/__tests__/audit.test.ts +0 -877
  78. package/src/__tests__/circuit-breaker.test.ts +0 -116
  79. package/src/__tests__/cli-run.test.ts +0 -351
  80. package/src/__tests__/compat-sqlite.test.ts +0 -68
  81. package/src/__tests__/context-manager.test.ts +0 -632
  82. package/src/__tests__/context.test.ts +0 -242
  83. package/src/__tests__/devops-terminal-gaps.test.ts +0 -718
  84. package/src/__tests__/doctor.test.ts +0 -48
  85. package/src/__tests__/enterprise.test.ts +0 -401
  86. package/src/__tests__/export.test.ts +0 -236
  87. package/src/__tests__/gap-11-18-20.test.ts +0 -958
  88. package/src/__tests__/generator.test.ts +0 -433
  89. package/src/__tests__/helm-streaming.test.ts +0 -127
  90. package/src/__tests__/hooks.test.ts +0 -582
  91. package/src/__tests__/incident.test.ts +0 -179
  92. package/src/__tests__/init.test.ts +0 -487
  93. package/src/__tests__/intent-parser.test.ts +0 -229
  94. package/src/__tests__/llm-router.test.ts +0 -209
  95. package/src/__tests__/logs.test.ts +0 -107
  96. package/src/__tests__/loop-errors.test.ts +0 -244
  97. package/src/__tests__/lsp.test.ts +0 -293
  98. package/src/__tests__/modes.test.ts +0 -336
  99. package/src/__tests__/perf-optimizations.test.ts +0 -847
  100. package/src/__tests__/permissions.test.ts +0 -338
  101. package/src/__tests__/pipeline.test.ts +0 -50
  102. package/src/__tests__/polish-phase3.test.ts +0 -340
  103. package/src/__tests__/profile.test.ts +0 -237
  104. package/src/__tests__/rollback.test.ts +0 -83
  105. package/src/__tests__/runbook.test.ts +0 -219
  106. package/src/__tests__/schedule.test.ts +0 -206
  107. package/src/__tests__/serve.test.ts +0 -275
  108. package/src/__tests__/sessions.test.ts +0 -322
  109. package/src/__tests__/sharing.test.ts +0 -340
  110. package/src/__tests__/snapshots.test.ts +0 -581
  111. package/src/__tests__/standalone-migration.test.ts +0 -199
  112. package/src/__tests__/state-db.test.ts +0 -334
  113. package/src/__tests__/status.test.ts +0 -158
  114. package/src/__tests__/stream-with-tools.test.ts +0 -778
  115. package/src/__tests__/subagents.test.ts +0 -176
  116. package/src/__tests__/system-prompt.test.ts +0 -248
  117. package/src/__tests__/terminal-gap-v2.test.ts +0 -395
  118. package/src/__tests__/terminal-parity.test.ts +0 -393
  119. package/src/__tests__/tf-apply.test.ts +0 -187
  120. package/src/__tests__/tool-converter.test.ts +0 -256
  121. package/src/__tests__/tool-schemas.test.ts +0 -602
  122. package/src/__tests__/tools.test.ts +0 -144
  123. package/src/__tests__/version-json.test.ts +0 -184
  124. package/src/__tests__/version.test.ts +0 -49
  125. package/src/__tests__/watch.test.ts +0 -129
  126. package/src/agent/compaction-agent.ts +0 -266
  127. package/src/agent/context-manager.ts +0 -499
  128. package/src/agent/context.ts +0 -427
  129. package/src/agent/deploy-preview.ts +0 -487
  130. package/src/agent/expand-files.ts +0 -108
  131. package/src/agent/index.ts +0 -68
  132. package/src/agent/loop.ts +0 -1998
  133. package/src/agent/modes.ts +0 -429
  134. package/src/agent/permissions.ts +0 -513
  135. package/src/agent/subagents/base.ts +0 -116
  136. package/src/agent/subagents/cost.ts +0 -51
  137. package/src/agent/subagents/explore.ts +0 -42
  138. package/src/agent/subagents/general.ts +0 -54
  139. package/src/agent/subagents/index.ts +0 -102
  140. package/src/agent/subagents/infra.ts +0 -59
  141. package/src/agent/subagents/security.ts +0 -69
  142. package/src/agent/system-prompt.ts +0 -990
  143. package/src/app.ts +0 -180
  144. package/src/audit/activity-log.ts +0 -290
  145. package/src/audit/compliance-checker.ts +0 -540
  146. package/src/audit/cost-tracker.ts +0 -318
  147. package/src/audit/index.ts +0 -23
  148. package/src/audit/security-scanner.ts +0 -641
  149. package/src/auth/guard.ts +0 -75
  150. package/src/auth/index.ts +0 -56
  151. package/src/auth/keychain.ts +0 -82
  152. package/src/auth/oauth.ts +0 -465
  153. package/src/auth/providers.ts +0 -470
  154. package/src/auth/sso.ts +0 -113
  155. package/src/auth/store.ts +0 -505
  156. package/src/auth/types.ts +0 -187
  157. package/src/build.ts +0 -141
  158. package/src/cli/index.ts +0 -16
  159. package/src/cli/init.ts +0 -1227
  160. package/src/cli/openapi-spec.ts +0 -356
  161. package/src/cli/run.ts +0 -628
  162. package/src/cli/serve-auth.ts +0 -80
  163. package/src/cli/serve.ts +0 -539
  164. package/src/cli/web.ts +0 -71
  165. package/src/cli.ts +0 -1728
  166. package/src/clients/core-engine-client.ts +0 -227
  167. package/src/clients/enterprise-client.ts +0 -334
  168. package/src/clients/generator-client.ts +0 -351
  169. package/src/clients/git-client.ts +0 -627
  170. package/src/clients/github-client.ts +0 -410
  171. package/src/clients/helm-client.ts +0 -504
  172. package/src/clients/index.ts +0 -80
  173. package/src/clients/k8s-client.ts +0 -497
  174. package/src/clients/llm-client.ts +0 -161
  175. package/src/clients/rest-client.ts +0 -130
  176. package/src/clients/service-discovery.ts +0 -38
  177. package/src/clients/terraform-client.ts +0 -482
  178. package/src/clients/tools-client.ts +0 -1843
  179. package/src/clients/ws-client.ts +0 -115
  180. package/src/commands/alias.ts +0 -100
  181. package/src/commands/analyze/index.ts +0 -352
  182. package/src/commands/apply/helm.ts +0 -473
  183. package/src/commands/apply/index.ts +0 -213
  184. package/src/commands/apply/k8s.ts +0 -454
  185. package/src/commands/apply/terraform.ts +0 -582
  186. package/src/commands/ask.ts +0 -167
  187. package/src/commands/audit/index.ts +0 -357
  188. package/src/commands/auth-cloud.ts +0 -407
  189. package/src/commands/auth-list.ts +0 -134
  190. package/src/commands/auth-profile.ts +0 -121
  191. package/src/commands/auth-refresh.ts +0 -187
  192. package/src/commands/auth-status.ts +0 -141
  193. package/src/commands/aws/ec2.ts +0 -501
  194. package/src/commands/aws/iam.ts +0 -397
  195. package/src/commands/aws/index.ts +0 -133
  196. package/src/commands/aws/lambda.ts +0 -396
  197. package/src/commands/aws/rds.ts +0 -439
  198. package/src/commands/aws/s3.ts +0 -439
  199. package/src/commands/aws/vpc.ts +0 -393
  200. package/src/commands/aws-discover.ts +0 -542
  201. package/src/commands/aws-terraform.ts +0 -755
  202. package/src/commands/azure/aks.ts +0 -376
  203. package/src/commands/azure/functions.ts +0 -253
  204. package/src/commands/azure/index.ts +0 -116
  205. package/src/commands/azure/storage.ts +0 -478
  206. package/src/commands/azure/vm.ts +0 -355
  207. package/src/commands/billing/index.ts +0 -256
  208. package/src/commands/chat.ts +0 -320
  209. package/src/commands/completions.ts +0 -268
  210. package/src/commands/config.ts +0 -372
  211. package/src/commands/cost/cloud-cost-estimator.ts +0 -266
  212. package/src/commands/cost/estimator.ts +0 -79
  213. package/src/commands/cost/index.ts +0 -810
  214. package/src/commands/cost/parsers/terraform.ts +0 -273
  215. package/src/commands/cost/parsers/types.ts +0 -25
  216. package/src/commands/cost/pricing/aws.ts +0 -544
  217. package/src/commands/cost/pricing/azure.ts +0 -499
  218. package/src/commands/cost/pricing/gcp.ts +0 -396
  219. package/src/commands/cost/pricing/index.ts +0 -40
  220. package/src/commands/demo.ts +0 -250
  221. package/src/commands/deploy.ts +0 -260
  222. package/src/commands/doctor.ts +0 -1386
  223. package/src/commands/drift/index.ts +0 -787
  224. package/src/commands/explain.ts +0 -277
  225. package/src/commands/export.ts +0 -146
  226. package/src/commands/feedback.ts +0 -389
  227. package/src/commands/fix.ts +0 -324
  228. package/src/commands/fs/index.ts +0 -402
  229. package/src/commands/gcp/compute.ts +0 -325
  230. package/src/commands/gcp/functions.ts +0 -271
  231. package/src/commands/gcp/gke.ts +0 -438
  232. package/src/commands/gcp/iam.ts +0 -344
  233. package/src/commands/gcp/index.ts +0 -129
  234. package/src/commands/gcp/storage.ts +0 -284
  235. package/src/commands/generate-helm.ts +0 -1249
  236. package/src/commands/generate-k8s.ts +0 -1508
  237. package/src/commands/generate-terraform.ts +0 -1202
  238. package/src/commands/gh/index.ts +0 -863
  239. package/src/commands/git/index.ts +0 -1343
  240. package/src/commands/helm/index.ts +0 -1126
  241. package/src/commands/help.ts +0 -715
  242. package/src/commands/history.ts +0 -149
  243. package/src/commands/import.ts +0 -868
  244. package/src/commands/incident.ts +0 -166
  245. package/src/commands/index.ts +0 -367
  246. package/src/commands/init.ts +0 -1051
  247. package/src/commands/k8s/index.ts +0 -1137
  248. package/src/commands/login.ts +0 -716
  249. package/src/commands/logout.ts +0 -83
  250. package/src/commands/logs.ts +0 -167
  251. package/src/commands/onboarding.ts +0 -405
  252. package/src/commands/pipeline.ts +0 -186
  253. package/src/commands/plan/display.ts +0 -279
  254. package/src/commands/plan/index.ts +0 -599
  255. package/src/commands/plugin.ts +0 -398
  256. package/src/commands/preview.ts +0 -452
  257. package/src/commands/profile.ts +0 -342
  258. package/src/commands/questionnaire.ts +0 -1172
  259. package/src/commands/resume.ts +0 -47
  260. package/src/commands/rollback.ts +0 -315
  261. package/src/commands/rollout.ts +0 -88
  262. package/src/commands/runbook.ts +0 -346
  263. package/src/commands/schedule.ts +0 -236
  264. package/src/commands/status.ts +0 -252
  265. package/src/commands/team/index.ts +0 -346
  266. package/src/commands/team-context.ts +0 -220
  267. package/src/commands/template.ts +0 -233
  268. package/src/commands/tf/index.ts +0 -1093
  269. package/src/commands/upgrade.ts +0 -607
  270. package/src/commands/usage/index.ts +0 -134
  271. package/src/commands/version.ts +0 -174
  272. package/src/commands/watch.ts +0 -153
  273. package/src/compat/index.ts +0 -2
  274. package/src/compat/runtime.ts +0 -12
  275. package/src/compat/sqlite.ts +0 -177
  276. package/src/config/index.ts +0 -17
  277. package/src/config/manager.ts +0 -530
  278. package/src/config/mode-store.ts +0 -62
  279. package/src/config/profiles.ts +0 -84
  280. package/src/config/safety-policy.ts +0 -358
  281. package/src/config/schema.ts +0 -125
  282. package/src/config/types.ts +0 -609
  283. package/src/config/workspace-state.ts +0 -53
  284. package/src/context/context-db.ts +0 -199
  285. package/src/demo/index.ts +0 -349
  286. package/src/demo/scenarios/full-journey.ts +0 -229
  287. package/src/demo/scenarios/getting-started.ts +0 -127
  288. package/src/demo/scenarios/helm-release.ts +0 -341
  289. package/src/demo/scenarios/k8s-deployment.ts +0 -194
  290. package/src/demo/scenarios/terraform-vpc.ts +0 -170
  291. package/src/demo/types.ts +0 -92
  292. package/src/engine/cost-estimator.ts +0 -480
  293. package/src/engine/diagram-generator.ts +0 -256
  294. package/src/engine/drift-detector.ts +0 -902
  295. package/src/engine/executor.ts +0 -1066
  296. package/src/engine/index.ts +0 -76
  297. package/src/engine/orchestrator.ts +0 -636
  298. package/src/engine/planner.ts +0 -787
  299. package/src/engine/safety.ts +0 -743
  300. package/src/engine/verifier.ts +0 -770
  301. package/src/enterprise/audit.ts +0 -348
  302. package/src/enterprise/auth.ts +0 -270
  303. package/src/enterprise/billing.ts +0 -822
  304. package/src/enterprise/index.ts +0 -17
  305. package/src/enterprise/teams.ts +0 -443
  306. package/src/generator/best-practices.ts +0 -1608
  307. package/src/generator/helm.ts +0 -630
  308. package/src/generator/index.ts +0 -37
  309. package/src/generator/intent-parser.ts +0 -514
  310. package/src/generator/kubernetes.ts +0 -976
  311. package/src/generator/terraform.ts +0 -1875
  312. package/src/history/index.ts +0 -8
  313. package/src/history/manager.ts +0 -250
  314. package/src/history/types.ts +0 -34
  315. package/src/hooks/config.ts +0 -432
  316. package/src/hooks/engine.ts +0 -392
  317. package/src/hooks/index.ts +0 -4
  318. package/src/llm/auth-bridge.ts +0 -198
  319. package/src/llm/circuit-breaker.ts +0 -140
  320. package/src/llm/config-loader.ts +0 -201
  321. package/src/llm/cost-calculator.ts +0 -171
  322. package/src/llm/index.ts +0 -8
  323. package/src/llm/model-aliases.ts +0 -115
  324. package/src/llm/provider-registry.ts +0 -63
  325. package/src/llm/providers/anthropic.ts +0 -462
  326. package/src/llm/providers/bedrock.ts +0 -477
  327. package/src/llm/providers/google.ts +0 -405
  328. package/src/llm/providers/ollama.ts +0 -767
  329. package/src/llm/providers/openai-compatible.ts +0 -340
  330. package/src/llm/providers/openai.ts +0 -328
  331. package/src/llm/providers/openrouter.ts +0 -338
  332. package/src/llm/router.ts +0 -1104
  333. package/src/llm/types.ts +0 -232
  334. package/src/lsp/client.ts +0 -298
  335. package/src/lsp/languages.ts +0 -119
  336. package/src/lsp/manager.ts +0 -294
  337. package/src/mcp/client.ts +0 -402
  338. package/src/mcp/index.ts +0 -5
  339. package/src/mcp/manager.ts +0 -133
  340. package/src/nimbus.ts +0 -233
  341. package/src/plugins/index.ts +0 -27
  342. package/src/plugins/loader.ts +0 -334
  343. package/src/plugins/manager.ts +0 -376
  344. package/src/plugins/types.ts +0 -284
  345. package/src/scanners/cicd-scanner.ts +0 -258
  346. package/src/scanners/cloud-scanner.ts +0 -466
  347. package/src/scanners/framework-scanner.ts +0 -469
  348. package/src/scanners/iac-scanner.ts +0 -388
  349. package/src/scanners/index.ts +0 -539
  350. package/src/scanners/language-scanner.ts +0 -276
  351. package/src/scanners/package-manager-scanner.ts +0 -277
  352. package/src/scanners/types.ts +0 -172
  353. package/src/sessions/manager.ts +0 -472
  354. package/src/sessions/types.ts +0 -44
  355. package/src/sharing/sync.ts +0 -300
  356. package/src/sharing/viewer.ts +0 -163
  357. package/src/snapshots/index.ts +0 -2
  358. package/src/snapshots/manager.ts +0 -530
  359. package/src/state/artifacts.ts +0 -147
  360. package/src/state/audit.ts +0 -137
  361. package/src/state/billing.ts +0 -240
  362. package/src/state/checkpoints.ts +0 -117
  363. package/src/state/config.ts +0 -67
  364. package/src/state/conversations.ts +0 -14
  365. package/src/state/credentials.ts +0 -154
  366. package/src/state/db.ts +0 -58
  367. package/src/state/index.ts +0 -26
  368. package/src/state/messages.ts +0 -115
  369. package/src/state/projects.ts +0 -123
  370. package/src/state/schema.ts +0 -236
  371. package/src/state/sessions.ts +0 -147
  372. package/src/state/teams.ts +0 -200
  373. package/src/telemetry.ts +0 -108
  374. package/src/tools/aws-ops.ts +0 -952
  375. package/src/tools/azure-ops.ts +0 -579
  376. package/src/tools/file-ops.ts +0 -615
  377. package/src/tools/gcp-ops.ts +0 -625
  378. package/src/tools/git-ops.ts +0 -773
  379. package/src/tools/github-ops.ts +0 -799
  380. package/src/tools/helm-ops.ts +0 -943
  381. package/src/tools/index.ts +0 -17
  382. package/src/tools/k8s-ops.ts +0 -819
  383. package/src/tools/schemas/converter.ts +0 -184
  384. package/src/tools/schemas/devops.ts +0 -3502
  385. package/src/tools/schemas/index.ts +0 -73
  386. package/src/tools/schemas/standard.ts +0 -1148
  387. package/src/tools/schemas/types.ts +0 -735
  388. package/src/tools/spawn-exec.ts +0 -148
  389. package/src/tools/terraform-ops.ts +0 -862
  390. package/src/types/ambient.d.ts +0 -193
  391. package/src/types/config.ts +0 -83
  392. package/src/types/drift.ts +0 -116
  393. package/src/types/enterprise.ts +0 -335
  394. package/src/types/index.ts +0 -20
  395. package/src/types/plan.ts +0 -44
  396. package/src/types/request.ts +0 -65
  397. package/src/types/response.ts +0 -54
  398. package/src/types/service.ts +0 -51
  399. package/src/ui/App.tsx +0 -2114
  400. package/src/ui/DeployPreview.tsx +0 -174
  401. package/src/ui/FileDiffModal.tsx +0 -162
  402. package/src/ui/Header.tsx +0 -131
  403. package/src/ui/HelpModal.tsx +0 -57
  404. package/src/ui/InputBox.tsx +0 -503
  405. package/src/ui/MessageList.tsx +0 -1032
  406. package/src/ui/PermissionPrompt.tsx +0 -163
  407. package/src/ui/StatusBar.tsx +0 -277
  408. package/src/ui/TerminalPane.tsx +0 -84
  409. package/src/ui/ToolCallDisplay.tsx +0 -643
  410. package/src/ui/TreePane.tsx +0 -132
  411. package/src/ui/chat-ui.ts +0 -850
  412. package/src/ui/index.ts +0 -33
  413. package/src/ui/ink/index.ts +0 -1444
  414. package/src/ui/streaming.ts +0 -176
  415. package/src/ui/theme.ts +0 -104
  416. package/src/ui/types.ts +0 -75
  417. package/src/utils/analytics.ts +0 -72
  418. package/src/utils/cost-warning.ts +0 -27
  419. package/src/utils/env.ts +0 -46
  420. package/src/utils/errors.ts +0 -69
  421. package/src/utils/event-bus.ts +0 -38
  422. package/src/utils/index.ts +0 -24
  423. package/src/utils/logger.ts +0 -171
  424. package/src/utils/rate-limiter.ts +0 -121
  425. package/src/utils/service-auth.ts +0 -49
  426. package/src/utils/validation.ts +0 -53
  427. package/src/version.ts +0 -4
  428. package/src/watcher/index.ts +0 -214
  429. package/src/wizard/approval.ts +0 -383
  430. package/src/wizard/index.ts +0 -25
  431. package/src/wizard/prompts.ts +0 -338
  432. package/src/wizard/types.ts +0 -172
  433. package/src/wizard/ui.ts +0 -556
  434. package/src/wizard/wizard.ts +0 -304
  435. package/tsconfig.json +0 -24
@@ -1,735 +0,0 @@
1
- /**
2
- * Nimbus Agentic Tool-Use Type System
3
- *
4
- * Core type definitions for the agentic tool-use system. Every tool that
5
- * Nimbus can invoke -- whether a built-in operation, a DevOps command, or
6
- * an MCP server tool -- is described by a {@link ToolDefinition} and
7
- * registered in the {@link ToolRegistry}.
8
- *
9
- * The permission model follows a four-tier escalation ladder
10
- * ({@link PermissionTier}) that controls whether a tool invocation requires
11
- * user confirmation, and the three-category taxonomy ({@link ToolCategory})
12
- * allows consumers to filter tools by surface area.
13
- *
14
- * Provider-specific serialization helpers ({@link AnthropicTool},
15
- * {@link OpenAITool}, {@link GoogleTool}) let the engine convert a single
16
- * {@link ToolDefinition} into whatever shape each LLM API expects.
17
- *
18
- * @module tools/schemas/types
19
- */
20
-
21
- import type { z } from 'zod';
22
- import type { JSONSchema } from '../../llm/types';
23
-
24
- // ---------------------------------------------------------------------------
25
- // Permission Tiers
26
- // ---------------------------------------------------------------------------
27
-
28
- /**
29
- * Four-tier permission model that governs how tool invocations are
30
- * authorized at runtime.
31
- *
32
- * | Tier | Prompt behavior | Example tools |
33
- * | -------------- | -------------------------------------------- | --------------------------------- |
34
- * | `auto_allow` | Execute immediately, no user prompt | `read_file`, `terraform validate` |
35
- * | `ask_once` | Ask user once per session, then auto-allow | `write_file`, non-destructive bash |
36
- * | `always_ask` | Always prompt the user before execution | `terraform apply`, `kubectl delete` |
37
- * | `blocked` | Never allow, even if the user tries to force | `rm -rf /`, `DROP DATABASE` |
38
- */
39
- export type PermissionTier = 'auto_allow' | 'ask_once' | 'always_ask' | 'blocked';
40
-
41
- /**
42
- * Ordered list of all permission tiers from least restrictive to most
43
- * restrictive. Useful for comparison and escalation logic.
44
- */
45
- export const PERMISSION_TIER_ORDER: readonly PermissionTier[] = [
46
- 'auto_allow',
47
- 'ask_once',
48
- 'always_ask',
49
- 'blocked',
50
- ] as const;
51
-
52
- /**
53
- * Return the numeric severity index of a {@link PermissionTier}.
54
- * Lower values are less restrictive.
55
- *
56
- * @param tier - The permission tier to evaluate.
57
- * @returns An integer from 0 (`auto_allow`) to 3 (`blocked`).
58
- */
59
- export function permissionTierIndex(tier: PermissionTier): number {
60
- return PERMISSION_TIER_ORDER.indexOf(tier);
61
- }
62
-
63
- // ---------------------------------------------------------------------------
64
- // Backward-compatible alias
65
- // ---------------------------------------------------------------------------
66
-
67
- /**
68
- * Alias kept for backward compatibility with code that references the
69
- * previous type name. Prefer {@link PermissionTier} in new code.
70
- *
71
- * @deprecated Use {@link PermissionTier} instead.
72
- */
73
- export type PermissionLevel = PermissionTier;
74
-
75
- // ---------------------------------------------------------------------------
76
- // Tool Categories
77
- // ---------------------------------------------------------------------------
78
-
79
- /**
80
- * High-level taxonomy that groups tools by their operational surface area.
81
- *
82
- * - `standard` -- built-in operations such as file I/O, search, and git.
83
- * - `devops` -- infrastructure tools: Terraform, Kubernetes, Helm, cloud CLIs.
84
- * - `mcp` -- tools sourced from external MCP (Model Context Protocol) servers.
85
- */
86
- export type ToolCategory = 'standard' | 'devops' | 'mcp';
87
-
88
- // ---------------------------------------------------------------------------
89
- // Tool Result
90
- // ---------------------------------------------------------------------------
91
-
92
- /**
93
- * The value returned by every tool execution. Consumers should check
94
- * {@link isError} before reading {@link output}.
95
- */
96
- export interface ToolResult {
97
- /** The textual output produced by the tool. */
98
- output: string;
99
-
100
- /**
101
- * Human-readable error message. Present only when {@link isError} is
102
- * `true`.
103
- */
104
- error?: string;
105
-
106
- /** Whether the execution failed. */
107
- isError: boolean;
108
- }
109
-
110
- // ---------------------------------------------------------------------------
111
- // Tool Execute Context
112
- // ---------------------------------------------------------------------------
113
-
114
- /** Context passed to tool execute() for streaming and cancellation. */
115
- export interface ToolExecuteContext {
116
- /** Callback invoked with each chunk of streaming output. */
117
- onProgress?: (chunk: string) => void;
118
- /** AbortSignal for cancellation. */
119
- signal?: AbortSignal;
120
- /**
121
- * GAP-20: Per-tool timeout override in milliseconds.
122
- * When set, the tool should use this value instead of its built-in default timeout.
123
- */
124
- timeout?: number;
125
- /**
126
- * C2: Session infrastructure context — active terraform workspace, kubectl context, etc.
127
- * Tools use this as a fallback when the user doesn't explicitly specify a workspace/context.
128
- */
129
- infraContext?: {
130
- terraformWorkspace?: string;
131
- kubectlContext?: string;
132
- awsProfile?: string;
133
- awsRegion?: string;
134
- gcpProject?: string;
135
- azureSubscription?: string;
136
- };
137
- }
138
-
139
- // ---------------------------------------------------------------------------
140
- // Tool Definition
141
- // ---------------------------------------------------------------------------
142
-
143
- /**
144
- * Complete description of an executable tool.
145
- *
146
- * Each tool carries its own Zod input schema so that the engine can
147
- * validate arguments before execution, and its own permission tier so
148
- * that the permission engine can decide whether to prompt the user.
149
- *
150
- * @example
151
- * ```ts
152
- * const readFileTool: ToolDefinition = {
153
- * name: 'read_file',
154
- * description: 'Read the contents of a file at the given path.',
155
- * inputSchema: z.object({
156
- * path: z.string().describe('Absolute or workspace-relative file path'),
157
- * encoding: z.enum(['utf-8', 'base64']).default('utf-8'),
158
- * }),
159
- * execute: async (input) => {
160
- * const content = await fs.readFile(input.path, input.encoding);
161
- * return { output: content, isError: false };
162
- * },
163
- * permissionTier: 'auto_allow',
164
- * category: 'standard',
165
- * isDestructive: false,
166
- * };
167
- * ```
168
- */
169
- export interface ToolDefinition {
170
- /**
171
- * Unique snake_case identifier for this tool (e.g. `'read_file'`,
172
- * `'terraform_apply'`).
173
- */
174
- name: string;
175
-
176
- /**
177
- * Natural-language description surfaced to the LLM so it understands
178
- * when and how to invoke this tool.
179
- */
180
- description: string;
181
-
182
- /**
183
- * Zod schema that validates and parses the raw input object before it
184
- * reaches {@link execute}. The schema is also converted to JSON Schema
185
- * for provider APIs via {@link zodToJsonSchema}.
186
- */
187
- inputSchema: z.ZodType<unknown>;
188
-
189
- /**
190
- * Execute the tool with validated input and return a {@link ToolResult}.
191
- *
192
- * Implementations should catch their own errors and return them inside
193
- * the result rather than throwing, so that the agentic loop can report
194
- * the failure back to the LLM gracefully.
195
- *
196
- * @param input - The validated (parsed) input object.
197
- * @param ctx - Optional context for streaming output and cancellation.
198
- * @returns A promise resolving to the tool's output.
199
- */
200
- execute: (input: unknown, ctx?: ToolExecuteContext) => Promise<ToolResult>;
201
-
202
- /**
203
- * Which permission tier this tool belongs to. Determines whether the
204
- * user is prompted before execution.
205
- */
206
- permissionTier: PermissionTier;
207
-
208
- /**
209
- * High-level category for filtering and display purposes.
210
- */
211
- category: ToolCategory;
212
-
213
- /**
214
- * Whether this tool modifies external state (files, infrastructure,
215
- * databases, etc.). Defaults to `false` when omitted.
216
- *
217
- * Tools marked destructive are surfaced with extra warnings in the CLI
218
- * and are never auto-approved in CI mode.
219
- */
220
- isDestructive?: boolean;
221
- }
222
-
223
- // ---------------------------------------------------------------------------
224
- // Helper / Utility Types
225
- // ---------------------------------------------------------------------------
226
-
227
- /**
228
- * Infer the validated input type from a {@link ToolDefinition}'s
229
- * `inputSchema`.
230
- *
231
- * @example
232
- * ```ts
233
- * type ReadFileInput = ToolInput<typeof readFileTool>;
234
- * // { path: string; encoding?: 'utf-8' | 'base64' }
235
- * ```
236
- */
237
- export type ToolInput<T extends ToolDefinition> =
238
- T['inputSchema'] extends z.ZodType<infer U> ? U : never;
239
-
240
- // ---------------------------------------------------------------------------
241
- // Provider-Specific Tool Formats
242
- // ---------------------------------------------------------------------------
243
-
244
- /**
245
- * Tool definition formatted for the Anthropic Messages API.
246
- *
247
- * Anthropic expects each tool to be an object with `name`, `description`,
248
- * and an `input_schema` that must have `type: 'object'` at the top level.
249
- *
250
- * @see https://docs.anthropic.com/en/docs/build-with-claude/tool-use
251
- */
252
- export interface AnthropicTool {
253
- /** Tool name -- must match `[a-zA-Z0-9_-]+` and be <= 64 chars. */
254
- name: string;
255
-
256
- /** Description surfaced to the model. */
257
- description: string;
258
-
259
- /**
260
- * JSON Schema describing the expected input. Anthropic requires this
261
- * to have `type: 'object'` at the top level.
262
- */
263
- input_schema: JSONSchema & { type: 'object' };
264
- }
265
-
266
- /**
267
- * Tool definition formatted for the OpenAI Chat Completions API
268
- * (function calling).
269
- *
270
- * OpenAI wraps each function in a `{ type: 'function', function: { ... } }`
271
- * envelope.
272
- *
273
- * @see https://platform.openai.com/docs/guides/function-calling
274
- */
275
- export interface OpenAITool {
276
- /** Always `'function'` for the function-calling interface. */
277
- type: 'function';
278
-
279
- /** The function metadata. */
280
- function: {
281
- /** Function name. */
282
- name: string;
283
-
284
- /** Description surfaced to the model. */
285
- description: string;
286
-
287
- /** JSON Schema for the function parameters. */
288
- parameters: JSONSchema;
289
- };
290
- }
291
-
292
- /**
293
- * Tool definition formatted for the Google Generative AI
294
- * (`@google/generative-ai`) function declarations.
295
- *
296
- * Google wraps all function declarations inside a single tool object with
297
- * a `functionDeclarations` array.
298
- *
299
- * @see https://ai.google.dev/gemini-api/docs/function-calling
300
- */
301
- export interface GoogleTool {
302
- /** Array of function declarations passed inside a single tool object. */
303
- functionDeclarations: Array<{
304
- /** Function name. */
305
- name: string;
306
-
307
- /** Description surfaced to the model. */
308
- description: string;
309
-
310
- /**
311
- * Parameters described as a JSON Schema object. Google expects the
312
- * top-level `type` to be the string `'OBJECT'`.
313
- */
314
- parameters: JSONSchema & { type: 'OBJECT' };
315
- }>;
316
- }
317
-
318
- // ---------------------------------------------------------------------------
319
- // JSON Schema Conversion Utility
320
- // ---------------------------------------------------------------------------
321
-
322
- /**
323
- * Convert a Zod schema into a plain JSON Schema object suitable for
324
- * provider APIs.
325
- *
326
- * This is a lightweight converter that handles the most common Zod types
327
- * used in tool definitions (objects, strings, numbers, booleans, arrays,
328
- * enums, optionals, and defaults). For deeply nested or exotic schemas
329
- * consider using a full-featured library like `zod-to-json-schema`.
330
- *
331
- * @param schema - Any Zod schema.
332
- * @returns A JSON Schema object.
333
- */
334
- export function zodToJsonSchema(schema: z.ZodType<unknown>): JSONSchema {
335
- return convertZodNode(schema);
336
- }
337
-
338
- /**
339
- * Internal recursive walker that translates individual Zod nodes into
340
- * their JSON Schema equivalents.
341
- *
342
- * Because this function must work with Zod v3 _and_ v4 (whose generic
343
- * constraints differ significantly), the runtime casts use `any` to
344
- * bypass version-specific type parameter requirements. This is safe
345
- * because every branch is guarded by a runtime type-tag check first.
346
- */
347
- function convertZodNode(schema: z.ZodType<unknown>): JSONSchema {
348
- // Cast once to `any` for internal introspection. Every access below is
349
- // guarded by a runtime type-tag check, so this is safe.
350
- const s: any = schema;
351
-
352
- // Unwrap ZodOptional / ZodNullable / ZodDefault to reach the inner type.
353
- if (isZodOptional(schema)) {
354
- return convertZodNode(s.unwrap());
355
- }
356
- if (isZodDefault(schema)) {
357
- const inner = convertZodNode(s.removeDefault());
358
- // Zod v3: _def.defaultValue is a function. Zod v4: it is a plain value.
359
- const raw = s._def?.defaultValue ?? s._zod?.def?.defaultValue;
360
- const defaultValue = typeof raw === 'function' ? raw() : raw;
361
- return { ...inner, default: defaultValue };
362
- }
363
- if (isZodNullable(schema)) {
364
- const inner = convertZodNode(s.unwrap());
365
- return { ...inner, nullable: true };
366
- }
367
-
368
- // ZodObject
369
- if (isZodObject(schema)) {
370
- const shape: Record<string, z.ZodType<unknown>> = s.shape;
371
- const properties: Record<string, JSONSchema> = {};
372
- const required: string[] = [];
373
-
374
- for (const [key, value] of Object.entries(shape)) {
375
- const fieldSchema = value as z.ZodType<unknown>;
376
- properties[key] = convertZodNode(fieldSchema);
377
-
378
- // Attach description from .describe() if present.
379
- // Zod v3: _def.description. Zod v4: _zod.def.description.
380
- const fieldAny = fieldSchema as any;
381
- const desc: string | undefined =
382
- fieldAny._def?.description ?? fieldAny._zod?.def?.description;
383
- if (desc) {
384
- properties[key].description = desc;
385
- }
386
-
387
- // A field is required unless it is optional/default-wrapped.
388
- if (!isZodOptional(fieldSchema) && !isZodDefault(fieldSchema)) {
389
- required.push(key);
390
- }
391
- }
392
-
393
- const result: JSONSchema = { type: 'object', properties };
394
- if (required.length > 0) {
395
- result.required = required;
396
- }
397
-
398
- const objDesc: string | undefined = s._def?.description ?? s._zod?.def?.description;
399
- if (objDesc) {
400
- result.description = objDesc;
401
- }
402
-
403
- return result;
404
- }
405
-
406
- // ZodString
407
- if (isZodString(schema)) {
408
- return { type: 'string' };
409
- }
410
-
411
- // ZodNumber
412
- if (isZodNumber(schema)) {
413
- return { type: 'number' };
414
- }
415
-
416
- // ZodBoolean
417
- if (isZodBoolean(schema)) {
418
- return { type: 'boolean' };
419
- }
420
-
421
- // ZodEnum
422
- if (isZodEnum(schema)) {
423
- // `.options` is available in both Zod v3 and v4.
424
- const values: unknown[] = s.options;
425
- return { type: 'string', enum: values };
426
- }
427
-
428
- // ZodArray
429
- if (isZodArray(schema)) {
430
- const itemSchema: z.ZodType<unknown> = s.element;
431
- return { type: 'array', items: convertZodNode(itemSchema) };
432
- }
433
-
434
- // ZodLiteral
435
- if (isZodLiteral(schema)) {
436
- const value: unknown = s.value;
437
- return { type: typeof value as string, const: value };
438
- }
439
-
440
- // ZodUnion (simple enum-like unions of literals)
441
- if (isZodUnion(schema)) {
442
- const options: z.ZodType<unknown>[] = s.options;
443
- return { type: 'object', anyOf: options.map(o => convertZodNode(o)) };
444
- }
445
-
446
- // ZodRecord
447
- if (isZodRecord(schema)) {
448
- // Zod v3: `.valueSchema`. Zod v4: `._zod.def.valueType`.
449
- const valueSchema: z.ZodType<unknown> = s.valueSchema ?? s._zod?.def?.valueType;
450
- if (valueSchema) {
451
- return { type: 'object', additionalProperties: convertZodNode(valueSchema) };
452
- }
453
- return { type: 'object' };
454
- }
455
-
456
- // Fallback -- treat as opaque object
457
- return { type: 'object' };
458
- }
459
-
460
- // ---------------------------------------------------------------------------
461
- // Zod type-tag guards (work across Zod v3 and v4)
462
- // ---------------------------------------------------------------------------
463
-
464
- /**
465
- * Extract the internal type discriminator from a Zod schema.
466
- *
467
- * - Zod v3 stores it at `_def.typeName` (e.g. `'ZodString'`).
468
- * - Zod v4 stores it at `_zod.def.type` (e.g. `'string'`).
469
- *
470
- * We normalize both to the v3-style `'ZodXxx'` name so the guards below
471
- * can use a single comparison.
472
- */
473
- function zodTypeName(schema: z.ZodType<unknown>): string {
474
- const s = schema as any;
475
-
476
- // Zod v3 path
477
- const v3Name: string | undefined = s._def?.typeName;
478
- if (v3Name) {
479
- return v3Name;
480
- }
481
-
482
- // Zod v4 path: `_zod.def.type` is a lowercase short name like 'string'.
483
- const v4Type: string | undefined = s._zod?.def?.type;
484
- if (v4Type) {
485
- // Capitalize to match Zod v3 convention: 'string' -> 'ZodString'.
486
- return `Zod${v4Type.charAt(0).toUpperCase()}${v4Type.slice(1)}`;
487
- }
488
-
489
- return '';
490
- }
491
-
492
- function isZodObject(s: z.ZodType<unknown>): boolean {
493
- return zodTypeName(s) === 'ZodObject';
494
- }
495
- function isZodString(s: z.ZodType<unknown>): boolean {
496
- return zodTypeName(s) === 'ZodString';
497
- }
498
- function isZodNumber(s: z.ZodType<unknown>): boolean {
499
- return zodTypeName(s) === 'ZodNumber';
500
- }
501
- function isZodBoolean(s: z.ZodType<unknown>): boolean {
502
- return zodTypeName(s) === 'ZodBoolean';
503
- }
504
- function isZodEnum(s: z.ZodType<unknown>): boolean {
505
- return zodTypeName(s) === 'ZodEnum';
506
- }
507
- function isZodArray(s: z.ZodType<unknown>): boolean {
508
- return zodTypeName(s) === 'ZodArray';
509
- }
510
- function isZodOptional(s: z.ZodType<unknown>): boolean {
511
- return zodTypeName(s) === 'ZodOptional';
512
- }
513
- function isZodDefault(s: z.ZodType<unknown>): boolean {
514
- return zodTypeName(s) === 'ZodDefault';
515
- }
516
- function isZodNullable(s: z.ZodType<unknown>): boolean {
517
- return zodTypeName(s) === 'ZodNullable';
518
- }
519
- function isZodLiteral(s: z.ZodType<unknown>): boolean {
520
- return zodTypeName(s) === 'ZodLiteral';
521
- }
522
- function isZodUnion(s: z.ZodType<unknown>): boolean {
523
- return zodTypeName(s) === 'ZodUnion';
524
- }
525
- function isZodRecord(s: z.ZodType<unknown>): boolean {
526
- return zodTypeName(s) === 'ZodRecord';
527
- }
528
-
529
- // ---------------------------------------------------------------------------
530
- // Provider Format Converters
531
- // ---------------------------------------------------------------------------
532
-
533
- /**
534
- * Convert a {@link ToolDefinition} into an {@link AnthropicTool}.
535
- *
536
- * @param tool - The tool definition to convert.
537
- * @returns The tool in Anthropic Messages API format.
538
- */
539
- export function toAnthropicTool(tool: ToolDefinition): AnthropicTool {
540
- const jsonSchema = zodToJsonSchema(tool.inputSchema);
541
- return {
542
- name: tool.name,
543
- description: tool.description,
544
- input_schema: {
545
- ...jsonSchema,
546
- type: 'object',
547
- },
548
- };
549
- }
550
-
551
- /**
552
- * Convert a {@link ToolDefinition} into an {@link OpenAITool}.
553
- *
554
- * @param tool - The tool definition to convert.
555
- * @returns The tool in OpenAI function-calling format.
556
- */
557
- export function toOpenAITool(tool: ToolDefinition): OpenAITool {
558
- return {
559
- type: 'function',
560
- function: {
561
- name: tool.name,
562
- description: tool.description,
563
- parameters: zodToJsonSchema(tool.inputSchema),
564
- },
565
- };
566
- }
567
-
568
- /**
569
- * Convert one or more {@link ToolDefinition}s into a single
570
- * {@link GoogleTool} object (Google expects all declarations inside a
571
- * single array).
572
- *
573
- * @param tools - The tool definitions to convert.
574
- * @returns The tool in Google Generative AI format.
575
- */
576
- export function toGoogleTool(tools: readonly ToolDefinition[]): GoogleTool {
577
- return {
578
- functionDeclarations: tools.map(tool => {
579
- const jsonSchema = zodToJsonSchema(tool.inputSchema);
580
- return {
581
- name: tool.name,
582
- description: tool.description,
583
- parameters: {
584
- ...jsonSchema,
585
- type: 'OBJECT' as const,
586
- },
587
- };
588
- }),
589
- };
590
- }
591
-
592
- // ---------------------------------------------------------------------------
593
- // Tool Registry
594
- // ---------------------------------------------------------------------------
595
-
596
- /**
597
- * Central, mutable registry that stores all available tool definitions.
598
- *
599
- * The registry is intentionally a plain class (not a singleton) so that
600
- * tests can instantiate isolated instances. Production code should use
601
- * the shared {@link defaultToolRegistry} export.
602
- *
603
- * @example
604
- * ```ts
605
- * const registry = new ToolRegistry();
606
- * registry.register(readFileTool);
607
- * registry.register(terraformApplyTool);
608
- *
609
- * const devopsTools = registry.getByCategory('devops');
610
- * const anthropicPayload = registry.getAll().map(toAnthropicTool);
611
- * ```
612
- */
613
- export class ToolRegistry {
614
- /** Internal map keyed by tool name. */
615
- private readonly tools: Map<string, ToolDefinition> = new Map();
616
-
617
- /**
618
- * Register a tool definition. Throws if a tool with the same name is
619
- * already registered -- call {@link get} first if you need upsert
620
- * semantics.
621
- *
622
- * @param tool - The tool definition to register.
623
- * @throws {Error} If a tool with the same {@link ToolDefinition.name}
624
- * already exists.
625
- */
626
- register(tool: ToolDefinition): void {
627
- if (this.tools.has(tool.name)) {
628
- throw new Error(
629
- `ToolRegistry: tool '${tool.name}' is already registered. ` +
630
- `Unregister it first or use a different name.`
631
- );
632
- }
633
- this.tools.set(tool.name, tool);
634
- }
635
-
636
- /**
637
- * Retrieve a tool definition by name.
638
- *
639
- * @param name - The unique tool name.
640
- * @returns The tool definition, or `undefined` if not found.
641
- */
642
- get(name: string): ToolDefinition | undefined {
643
- return this.tools.get(name);
644
- }
645
-
646
- /**
647
- * Return every registered tool definition, in insertion order.
648
- */
649
- getAll(): ToolDefinition[] {
650
- return Array.from(this.tools.values());
651
- }
652
-
653
- /**
654
- * Return all tools that belong to the given {@link ToolCategory}.
655
- *
656
- * @param category - The category to filter by.
657
- * @returns An array of matching tool definitions (may be empty).
658
- */
659
- getByCategory(category: ToolCategory): ToolDefinition[] {
660
- return this.getAll().filter(t => t.category === category);
661
- }
662
-
663
- /**
664
- * Return all tools that belong to the given {@link PermissionTier}.
665
- *
666
- * @param tier - The permission tier to filter by.
667
- * @returns An array of matching tool definitions (may be empty).
668
- */
669
- getByPermissionTier(tier: PermissionTier): ToolDefinition[] {
670
- return this.getAll().filter(t => t.permissionTier === tier);
671
- }
672
-
673
- /**
674
- * Return the names of all registered tools, in insertion order.
675
- */
676
- getNames(): string[] {
677
- return Array.from(this.tools.keys());
678
- }
679
-
680
- /**
681
- * Remove a previously registered tool by name.
682
- *
683
- * @param name - The tool name to unregister.
684
- * @returns `true` if the tool was found and removed, `false` otherwise.
685
- */
686
- unregister(name: string): boolean {
687
- return this.tools.delete(name);
688
- }
689
-
690
- /**
691
- * Remove all registered tools. Primarily useful in tests.
692
- */
693
- clear(): void {
694
- this.tools.clear();
695
- }
696
-
697
- /**
698
- * The number of currently registered tools.
699
- */
700
- get size(): number {
701
- return this.tools.size;
702
- }
703
-
704
- /**
705
- * Convert all registered tools to the Anthropic Messages API format.
706
- */
707
- toAnthropicTools(): AnthropicTool[] {
708
- return this.getAll().map(toAnthropicTool);
709
- }
710
-
711
- /**
712
- * Convert all registered tools to the OpenAI function-calling format.
713
- */
714
- toOpenAITools(): OpenAITool[] {
715
- return this.getAll().map(toOpenAITool);
716
- }
717
-
718
- /**
719
- * Convert all registered tools to a single Google Generative AI tool
720
- * object.
721
- */
722
- toGoogleTool(): GoogleTool {
723
- return toGoogleTool(this.getAll());
724
- }
725
- }
726
-
727
- // ---------------------------------------------------------------------------
728
- // Shared Default Instance
729
- // ---------------------------------------------------------------------------
730
-
731
- /**
732
- * Application-wide tool registry instance. Import this wherever you need
733
- * to register or look up tools at runtime.
734
- */
735
- export const defaultToolRegistry = new ToolRegistry();