@build-astron-co/nimbus 0.4.2 → 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 (430) hide show
  1. package/dist/src/agent/compaction-agent.js +24 -12
  2. package/dist/src/agent/context-manager.js +2 -1
  3. package/dist/src/agent/expand-files.js +2 -1
  4. package/dist/src/agent/loop.js +71 -33
  5. package/dist/src/agent/permissions.js +4 -2
  6. package/dist/src/agent/system-prompt.js +34 -17
  7. package/dist/src/app.js +1 -1
  8. package/dist/src/auth/keychain.js +8 -4
  9. package/dist/src/auth/store.js +70 -107
  10. package/dist/src/cli/init.js +35 -19
  11. package/dist/src/cli/run.js +18 -10
  12. package/dist/src/cli/serve.js +4 -2
  13. package/dist/src/cli.js +52 -11
  14. package/dist/src/commands/alias.js +5 -3
  15. package/dist/src/commands/audit/index.js +2 -1
  16. package/dist/src/commands/aws-terraform.js +36 -18
  17. package/dist/src/commands/completions.js +1 -1
  18. package/dist/src/commands/config.js +3 -2
  19. package/dist/src/commands/connect-github.js +92 -0
  20. package/dist/src/commands/cost/index.js +3 -2
  21. package/dist/src/commands/deploy.js +15 -10
  22. package/dist/src/commands/doctor.js +6 -3
  23. package/dist/src/commands/drift/index.js +2 -1
  24. package/dist/src/commands/export.js +5 -3
  25. package/dist/src/commands/generate-terraform.js +110 -2
  26. package/dist/src/commands/import.js +3 -3
  27. package/dist/src/commands/incident.js +10 -5
  28. package/dist/src/commands/login.js +8 -93
  29. package/dist/src/commands/logs.js +16 -8
  30. package/dist/src/commands/onboarding.js +6 -4
  31. package/dist/src/commands/pipeline.js +6 -3
  32. package/dist/src/commands/plugin.js +3 -2
  33. package/dist/src/commands/profile.js +27 -14
  34. package/dist/src/commands/questionnaire.js +1 -1
  35. package/dist/src/commands/rollback.js +3 -2
  36. package/dist/src/commands/rollout.js +5 -3
  37. package/dist/src/commands/runbook.js +17 -10
  38. package/dist/src/commands/schedule.js +10 -5
  39. package/dist/src/commands/status.js +2 -1
  40. package/dist/src/commands/team-context.js +12 -7
  41. package/dist/src/commands/template.js +1 -1
  42. package/dist/src/commands/tf/index.js +6 -3
  43. package/dist/src/commands/version.js +6 -3
  44. package/dist/src/commands/watch.js +6 -3
  45. package/dist/src/compat/sqlite.js +5 -3
  46. package/dist/src/config/mode-store.js +2 -1
  47. package/dist/src/config/profiles.js +4 -2
  48. package/dist/src/config/types.js +2 -1
  49. package/dist/src/engine/executor.js +8 -4
  50. package/dist/src/engine/planner.js +9 -5
  51. package/dist/src/llm/providers/anthropic.js +6 -3
  52. package/dist/src/llm/providers/ollama.js +1 -1
  53. package/dist/src/llm/router.js +22 -7
  54. package/dist/src/sessions/manager.js +6 -3
  55. package/dist/src/sharing/viewer.js +2 -1
  56. package/dist/src/tools/file-ops.js +1 -2
  57. package/dist/src/tools/schemas/devops.js +197 -108
  58. package/dist/src/tools/schemas/standard.js +1 -1
  59. package/dist/src/ui/App.js +25 -13
  60. package/dist/src/ui/FileDiffModal.js +22 -11
  61. package/dist/src/ui/HelpModal.js +2 -1
  62. package/dist/src/ui/InputBox.js +6 -3
  63. package/dist/src/ui/MessageList.js +40 -20
  64. package/dist/src/ui/TerminalPane.js +2 -1
  65. package/dist/src/ui/ToolCallDisplay.js +12 -6
  66. package/dist/src/ui/TreePane.js +2 -1
  67. package/dist/src/ui/ink/index.js +37 -21
  68. package/dist/src/watcher/index.js +8 -4
  69. package/package.json +3 -5
  70. package/src/__tests__/alias.test.ts +0 -133
  71. package/src/__tests__/app.test.ts +0 -76
  72. package/src/__tests__/audit.test.ts +0 -877
  73. package/src/__tests__/circuit-breaker.test.ts +0 -116
  74. package/src/__tests__/cli-run.test.ts +0 -351
  75. package/src/__tests__/compat-sqlite.test.ts +0 -68
  76. package/src/__tests__/context-manager.test.ts +0 -632
  77. package/src/__tests__/context.test.ts +0 -242
  78. package/src/__tests__/devops-terminal-gaps.test.ts +0 -718
  79. package/src/__tests__/doctor.test.ts +0 -48
  80. package/src/__tests__/enterprise.test.ts +0 -401
  81. package/src/__tests__/export.test.ts +0 -236
  82. package/src/__tests__/gap-11-18-20.test.ts +0 -958
  83. package/src/__tests__/generator.test.ts +0 -433
  84. package/src/__tests__/helm-streaming.test.ts +0 -127
  85. package/src/__tests__/hooks.test.ts +0 -582
  86. package/src/__tests__/incident.test.ts +0 -179
  87. package/src/__tests__/init.test.ts +0 -487
  88. package/src/__tests__/intent-parser.test.ts +0 -229
  89. package/src/__tests__/llm-router.test.ts +0 -209
  90. package/src/__tests__/logs.test.ts +0 -107
  91. package/src/__tests__/loop-errors.test.ts +0 -244
  92. package/src/__tests__/lsp.test.ts +0 -293
  93. package/src/__tests__/modes.test.ts +0 -336
  94. package/src/__tests__/perf-optimizations.test.ts +0 -847
  95. package/src/__tests__/permissions.test.ts +0 -338
  96. package/src/__tests__/pipeline.test.ts +0 -50
  97. package/src/__tests__/polish-phase3.test.ts +0 -340
  98. package/src/__tests__/profile.test.ts +0 -237
  99. package/src/__tests__/rollback.test.ts +0 -83
  100. package/src/__tests__/runbook.test.ts +0 -219
  101. package/src/__tests__/schedule.test.ts +0 -206
  102. package/src/__tests__/serve.test.ts +0 -275
  103. package/src/__tests__/sessions.test.ts +0 -322
  104. package/src/__tests__/sharing.test.ts +0 -340
  105. package/src/__tests__/snapshots.test.ts +0 -581
  106. package/src/__tests__/standalone-migration.test.ts +0 -199
  107. package/src/__tests__/state-db.test.ts +0 -334
  108. package/src/__tests__/status.test.ts +0 -158
  109. package/src/__tests__/stream-with-tools.test.ts +0 -778
  110. package/src/__tests__/subagents.test.ts +0 -176
  111. package/src/__tests__/system-prompt.test.ts +0 -248
  112. package/src/__tests__/terminal-gap-v2.test.ts +0 -395
  113. package/src/__tests__/terminal-parity.test.ts +0 -393
  114. package/src/__tests__/tf-apply.test.ts +0 -187
  115. package/src/__tests__/tool-converter.test.ts +0 -256
  116. package/src/__tests__/tool-schemas.test.ts +0 -602
  117. package/src/__tests__/tools.test.ts +0 -144
  118. package/src/__tests__/version-json.test.ts +0 -184
  119. package/src/__tests__/version.test.ts +0 -49
  120. package/src/__tests__/watch.test.ts +0 -129
  121. package/src/agent/compaction-agent.ts +0 -266
  122. package/src/agent/context-manager.ts +0 -499
  123. package/src/agent/context.ts +0 -427
  124. package/src/agent/deploy-preview.ts +0 -487
  125. package/src/agent/expand-files.ts +0 -108
  126. package/src/agent/index.ts +0 -68
  127. package/src/agent/loop.ts +0 -1998
  128. package/src/agent/modes.ts +0 -429
  129. package/src/agent/permissions.ts +0 -513
  130. package/src/agent/subagents/base.ts +0 -116
  131. package/src/agent/subagents/cost.ts +0 -51
  132. package/src/agent/subagents/explore.ts +0 -42
  133. package/src/agent/subagents/general.ts +0 -54
  134. package/src/agent/subagents/index.ts +0 -102
  135. package/src/agent/subagents/infra.ts +0 -59
  136. package/src/agent/subagents/security.ts +0 -69
  137. package/src/agent/system-prompt.ts +0 -990
  138. package/src/app.ts +0 -180
  139. package/src/audit/activity-log.ts +0 -290
  140. package/src/audit/compliance-checker.ts +0 -540
  141. package/src/audit/cost-tracker.ts +0 -318
  142. package/src/audit/index.ts +0 -23
  143. package/src/audit/security-scanner.ts +0 -641
  144. package/src/auth/guard.ts +0 -75
  145. package/src/auth/index.ts +0 -56
  146. package/src/auth/keychain.ts +0 -82
  147. package/src/auth/oauth.ts +0 -465
  148. package/src/auth/providers.ts +0 -470
  149. package/src/auth/sso.ts +0 -113
  150. package/src/auth/store.ts +0 -505
  151. package/src/auth/types.ts +0 -187
  152. package/src/build.ts +0 -141
  153. package/src/cli/index.ts +0 -16
  154. package/src/cli/init.ts +0 -1227
  155. package/src/cli/openapi-spec.ts +0 -356
  156. package/src/cli/run.ts +0 -628
  157. package/src/cli/serve-auth.ts +0 -80
  158. package/src/cli/serve.ts +0 -539
  159. package/src/cli/web.ts +0 -71
  160. package/src/cli.ts +0 -1728
  161. package/src/clients/core-engine-client.ts +0 -227
  162. package/src/clients/enterprise-client.ts +0 -334
  163. package/src/clients/generator-client.ts +0 -351
  164. package/src/clients/git-client.ts +0 -627
  165. package/src/clients/github-client.ts +0 -410
  166. package/src/clients/helm-client.ts +0 -504
  167. package/src/clients/index.ts +0 -80
  168. package/src/clients/k8s-client.ts +0 -497
  169. package/src/clients/llm-client.ts +0 -161
  170. package/src/clients/rest-client.ts +0 -130
  171. package/src/clients/service-discovery.ts +0 -38
  172. package/src/clients/terraform-client.ts +0 -482
  173. package/src/clients/tools-client.ts +0 -1843
  174. package/src/clients/ws-client.ts +0 -115
  175. package/src/commands/alias.ts +0 -100
  176. package/src/commands/analyze/index.ts +0 -352
  177. package/src/commands/apply/helm.ts +0 -473
  178. package/src/commands/apply/index.ts +0 -213
  179. package/src/commands/apply/k8s.ts +0 -454
  180. package/src/commands/apply/terraform.ts +0 -582
  181. package/src/commands/ask.ts +0 -167
  182. package/src/commands/audit/index.ts +0 -357
  183. package/src/commands/auth-cloud.ts +0 -407
  184. package/src/commands/auth-list.ts +0 -134
  185. package/src/commands/auth-profile.ts +0 -121
  186. package/src/commands/auth-refresh.ts +0 -187
  187. package/src/commands/auth-status.ts +0 -141
  188. package/src/commands/aws/ec2.ts +0 -501
  189. package/src/commands/aws/iam.ts +0 -397
  190. package/src/commands/aws/index.ts +0 -133
  191. package/src/commands/aws/lambda.ts +0 -396
  192. package/src/commands/aws/rds.ts +0 -439
  193. package/src/commands/aws/s3.ts +0 -439
  194. package/src/commands/aws/vpc.ts +0 -393
  195. package/src/commands/aws-discover.ts +0 -542
  196. package/src/commands/aws-terraform.ts +0 -755
  197. package/src/commands/azure/aks.ts +0 -376
  198. package/src/commands/azure/functions.ts +0 -253
  199. package/src/commands/azure/index.ts +0 -116
  200. package/src/commands/azure/storage.ts +0 -478
  201. package/src/commands/azure/vm.ts +0 -355
  202. package/src/commands/billing/index.ts +0 -256
  203. package/src/commands/chat.ts +0 -320
  204. package/src/commands/completions.ts +0 -268
  205. package/src/commands/config.ts +0 -372
  206. package/src/commands/cost/cloud-cost-estimator.ts +0 -266
  207. package/src/commands/cost/estimator.ts +0 -79
  208. package/src/commands/cost/index.ts +0 -810
  209. package/src/commands/cost/parsers/terraform.ts +0 -273
  210. package/src/commands/cost/parsers/types.ts +0 -25
  211. package/src/commands/cost/pricing/aws.ts +0 -544
  212. package/src/commands/cost/pricing/azure.ts +0 -499
  213. package/src/commands/cost/pricing/gcp.ts +0 -396
  214. package/src/commands/cost/pricing/index.ts +0 -40
  215. package/src/commands/demo.ts +0 -250
  216. package/src/commands/deploy.ts +0 -260
  217. package/src/commands/doctor.ts +0 -1386
  218. package/src/commands/drift/index.ts +0 -787
  219. package/src/commands/explain.ts +0 -277
  220. package/src/commands/export.ts +0 -146
  221. package/src/commands/feedback.ts +0 -389
  222. package/src/commands/fix.ts +0 -324
  223. package/src/commands/fs/index.ts +0 -402
  224. package/src/commands/gcp/compute.ts +0 -325
  225. package/src/commands/gcp/functions.ts +0 -271
  226. package/src/commands/gcp/gke.ts +0 -438
  227. package/src/commands/gcp/iam.ts +0 -344
  228. package/src/commands/gcp/index.ts +0 -129
  229. package/src/commands/gcp/storage.ts +0 -284
  230. package/src/commands/generate-helm.ts +0 -1249
  231. package/src/commands/generate-k8s.ts +0 -1508
  232. package/src/commands/generate-terraform.ts +0 -1202
  233. package/src/commands/gh/index.ts +0 -863
  234. package/src/commands/git/index.ts +0 -1343
  235. package/src/commands/helm/index.ts +0 -1126
  236. package/src/commands/help.ts +0 -715
  237. package/src/commands/history.ts +0 -149
  238. package/src/commands/import.ts +0 -868
  239. package/src/commands/incident.ts +0 -166
  240. package/src/commands/index.ts +0 -367
  241. package/src/commands/init.ts +0 -1051
  242. package/src/commands/k8s/index.ts +0 -1137
  243. package/src/commands/login.ts +0 -716
  244. package/src/commands/logout.ts +0 -83
  245. package/src/commands/logs.ts +0 -167
  246. package/src/commands/onboarding.ts +0 -405
  247. package/src/commands/pipeline.ts +0 -186
  248. package/src/commands/plan/display.ts +0 -279
  249. package/src/commands/plan/index.ts +0 -599
  250. package/src/commands/plugin.ts +0 -398
  251. package/src/commands/preview.ts +0 -452
  252. package/src/commands/profile.ts +0 -342
  253. package/src/commands/questionnaire.ts +0 -1172
  254. package/src/commands/resume.ts +0 -47
  255. package/src/commands/rollback.ts +0 -315
  256. package/src/commands/rollout.ts +0 -88
  257. package/src/commands/runbook.ts +0 -346
  258. package/src/commands/schedule.ts +0 -236
  259. package/src/commands/status.ts +0 -252
  260. package/src/commands/team/index.ts +0 -346
  261. package/src/commands/team-context.ts +0 -220
  262. package/src/commands/template.ts +0 -233
  263. package/src/commands/tf/index.ts +0 -1093
  264. package/src/commands/upgrade.ts +0 -609
  265. package/src/commands/usage/index.ts +0 -134
  266. package/src/commands/version.ts +0 -174
  267. package/src/commands/watch.ts +0 -153
  268. package/src/compat/index.ts +0 -2
  269. package/src/compat/runtime.ts +0 -12
  270. package/src/compat/sqlite.ts +0 -177
  271. package/src/config/index.ts +0 -17
  272. package/src/config/manager.ts +0 -530
  273. package/src/config/mode-store.ts +0 -62
  274. package/src/config/profiles.ts +0 -84
  275. package/src/config/safety-policy.ts +0 -358
  276. package/src/config/schema.ts +0 -125
  277. package/src/config/types.ts +0 -609
  278. package/src/config/workspace-state.ts +0 -53
  279. package/src/context/context-db.ts +0 -199
  280. package/src/demo/index.ts +0 -349
  281. package/src/demo/scenarios/full-journey.ts +0 -229
  282. package/src/demo/scenarios/getting-started.ts +0 -127
  283. package/src/demo/scenarios/helm-release.ts +0 -341
  284. package/src/demo/scenarios/k8s-deployment.ts +0 -194
  285. package/src/demo/scenarios/terraform-vpc.ts +0 -170
  286. package/src/demo/types.ts +0 -92
  287. package/src/engine/cost-estimator.ts +0 -480
  288. package/src/engine/diagram-generator.ts +0 -256
  289. package/src/engine/drift-detector.ts +0 -902
  290. package/src/engine/executor.ts +0 -1066
  291. package/src/engine/index.ts +0 -76
  292. package/src/engine/orchestrator.ts +0 -636
  293. package/src/engine/planner.ts +0 -787
  294. package/src/engine/safety.ts +0 -743
  295. package/src/engine/verifier.ts +0 -770
  296. package/src/enterprise/audit.ts +0 -348
  297. package/src/enterprise/auth.ts +0 -270
  298. package/src/enterprise/billing.ts +0 -822
  299. package/src/enterprise/index.ts +0 -17
  300. package/src/enterprise/teams.ts +0 -443
  301. package/src/generator/best-practices.ts +0 -1608
  302. package/src/generator/helm.ts +0 -630
  303. package/src/generator/index.ts +0 -37
  304. package/src/generator/intent-parser.ts +0 -514
  305. package/src/generator/kubernetes.ts +0 -976
  306. package/src/generator/terraform.ts +0 -1875
  307. package/src/history/index.ts +0 -8
  308. package/src/history/manager.ts +0 -250
  309. package/src/history/types.ts +0 -34
  310. package/src/hooks/config.ts +0 -432
  311. package/src/hooks/engine.ts +0 -392
  312. package/src/hooks/index.ts +0 -4
  313. package/src/llm/auth-bridge.ts +0 -198
  314. package/src/llm/circuit-breaker.ts +0 -140
  315. package/src/llm/config-loader.ts +0 -201
  316. package/src/llm/cost-calculator.ts +0 -171
  317. package/src/llm/index.ts +0 -8
  318. package/src/llm/model-aliases.ts +0 -115
  319. package/src/llm/provider-registry.ts +0 -63
  320. package/src/llm/providers/anthropic.ts +0 -462
  321. package/src/llm/providers/bedrock.ts +0 -477
  322. package/src/llm/providers/google.ts +0 -405
  323. package/src/llm/providers/ollama.ts +0 -767
  324. package/src/llm/providers/openai-compatible.ts +0 -340
  325. package/src/llm/providers/openai.ts +0 -328
  326. package/src/llm/providers/openrouter.ts +0 -338
  327. package/src/llm/router.ts +0 -1104
  328. package/src/llm/types.ts +0 -232
  329. package/src/lsp/client.ts +0 -298
  330. package/src/lsp/languages.ts +0 -119
  331. package/src/lsp/manager.ts +0 -294
  332. package/src/mcp/client.ts +0 -402
  333. package/src/mcp/index.ts +0 -5
  334. package/src/mcp/manager.ts +0 -133
  335. package/src/nimbus.ts +0 -234
  336. package/src/plugins/index.ts +0 -27
  337. package/src/plugins/loader.ts +0 -334
  338. package/src/plugins/manager.ts +0 -376
  339. package/src/plugins/types.ts +0 -284
  340. package/src/scanners/cicd-scanner.ts +0 -258
  341. package/src/scanners/cloud-scanner.ts +0 -466
  342. package/src/scanners/framework-scanner.ts +0 -469
  343. package/src/scanners/iac-scanner.ts +0 -388
  344. package/src/scanners/index.ts +0 -539
  345. package/src/scanners/language-scanner.ts +0 -276
  346. package/src/scanners/package-manager-scanner.ts +0 -277
  347. package/src/scanners/types.ts +0 -172
  348. package/src/sessions/manager.ts +0 -472
  349. package/src/sessions/types.ts +0 -44
  350. package/src/sharing/sync.ts +0 -300
  351. package/src/sharing/viewer.ts +0 -163
  352. package/src/snapshots/index.ts +0 -2
  353. package/src/snapshots/manager.ts +0 -530
  354. package/src/state/artifacts.ts +0 -147
  355. package/src/state/audit.ts +0 -137
  356. package/src/state/billing.ts +0 -240
  357. package/src/state/checkpoints.ts +0 -117
  358. package/src/state/config.ts +0 -67
  359. package/src/state/conversations.ts +0 -14
  360. package/src/state/credentials.ts +0 -154
  361. package/src/state/db.ts +0 -58
  362. package/src/state/index.ts +0 -26
  363. package/src/state/messages.ts +0 -115
  364. package/src/state/projects.ts +0 -123
  365. package/src/state/schema.ts +0 -236
  366. package/src/state/sessions.ts +0 -147
  367. package/src/state/teams.ts +0 -200
  368. package/src/telemetry.ts +0 -108
  369. package/src/tools/aws-ops.ts +0 -952
  370. package/src/tools/azure-ops.ts +0 -579
  371. package/src/tools/file-ops.ts +0 -615
  372. package/src/tools/gcp-ops.ts +0 -625
  373. package/src/tools/git-ops.ts +0 -773
  374. package/src/tools/github-ops.ts +0 -799
  375. package/src/tools/helm-ops.ts +0 -943
  376. package/src/tools/index.ts +0 -17
  377. package/src/tools/k8s-ops.ts +0 -819
  378. package/src/tools/schemas/converter.ts +0 -184
  379. package/src/tools/schemas/devops.ts +0 -3502
  380. package/src/tools/schemas/index.ts +0 -73
  381. package/src/tools/schemas/standard.ts +0 -1148
  382. package/src/tools/schemas/types.ts +0 -735
  383. package/src/tools/spawn-exec.ts +0 -148
  384. package/src/tools/terraform-ops.ts +0 -862
  385. package/src/types/ambient.d.ts +0 -193
  386. package/src/types/config.ts +0 -83
  387. package/src/types/drift.ts +0 -116
  388. package/src/types/enterprise.ts +0 -335
  389. package/src/types/index.ts +0 -20
  390. package/src/types/plan.ts +0 -44
  391. package/src/types/request.ts +0 -65
  392. package/src/types/response.ts +0 -54
  393. package/src/types/service.ts +0 -51
  394. package/src/ui/App.tsx +0 -2114
  395. package/src/ui/DeployPreview.tsx +0 -174
  396. package/src/ui/FileDiffModal.tsx +0 -162
  397. package/src/ui/Header.tsx +0 -131
  398. package/src/ui/HelpModal.tsx +0 -57
  399. package/src/ui/InputBox.tsx +0 -503
  400. package/src/ui/MessageList.tsx +0 -1032
  401. package/src/ui/PermissionPrompt.tsx +0 -163
  402. package/src/ui/StatusBar.tsx +0 -277
  403. package/src/ui/TerminalPane.tsx +0 -84
  404. package/src/ui/ToolCallDisplay.tsx +0 -643
  405. package/src/ui/TreePane.tsx +0 -132
  406. package/src/ui/chat-ui.ts +0 -850
  407. package/src/ui/index.ts +0 -33
  408. package/src/ui/ink/index.ts +0 -1444
  409. package/src/ui/streaming.ts +0 -176
  410. package/src/ui/theme.ts +0 -104
  411. package/src/ui/types.ts +0 -75
  412. package/src/utils/analytics.ts +0 -72
  413. package/src/utils/cost-warning.ts +0 -27
  414. package/src/utils/env.ts +0 -46
  415. package/src/utils/errors.ts +0 -69
  416. package/src/utils/event-bus.ts +0 -38
  417. package/src/utils/index.ts +0 -24
  418. package/src/utils/logger.ts +0 -171
  419. package/src/utils/rate-limiter.ts +0 -121
  420. package/src/utils/service-auth.ts +0 -49
  421. package/src/utils/validation.ts +0 -53
  422. package/src/version.ts +0 -4
  423. package/src/watcher/index.ts +0 -214
  424. package/src/wizard/approval.ts +0 -383
  425. package/src/wizard/index.ts +0 -25
  426. package/src/wizard/prompts.ts +0 -338
  427. package/src/wizard/types.ts +0 -172
  428. package/src/wizard/ui.ts +0 -556
  429. package/src/wizard/wizard.ts +0 -304
  430. 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();