byterover-cli 2.2.0 → 2.3.1

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 (99) hide show
  1. package/dist/agent/infra/llm/providers/openai.d.ts +12 -0
  2. package/dist/agent/infra/llm/providers/openai.js +52 -1
  3. package/dist/oclif/commands/curate/index.js +2 -2
  4. package/dist/oclif/commands/model/switch.js +14 -3
  5. package/dist/oclif/commands/providers/connect.d.ts +9 -0
  6. package/dist/oclif/commands/providers/connect.js +110 -14
  7. package/dist/oclif/commands/providers/list.js +3 -5
  8. package/dist/oclif/commands/query.js +2 -2
  9. package/dist/oclif/commands/restart.d.ts +34 -50
  10. package/dist/oclif/commands/restart.js +122 -209
  11. package/dist/oclif/hooks/init/block-command-update-npm.d.ts +11 -0
  12. package/dist/oclif/hooks/init/block-command-update-npm.js +15 -0
  13. package/dist/oclif/hooks/init/update-notifier.d.ts +3 -0
  14. package/dist/oclif/hooks/init/update-notifier.js +17 -4
  15. package/dist/oclif/hooks/postrun/restart-after-update.d.ts +22 -0
  16. package/dist/oclif/hooks/postrun/restart-after-update.js +40 -0
  17. package/dist/oclif/lib/daemon-client.d.ts +4 -0
  18. package/dist/oclif/lib/daemon-client.js +13 -3
  19. package/dist/server/core/domain/entities/provider-config.d.ts +6 -0
  20. package/dist/server/core/domain/entities/provider-config.js +4 -3
  21. package/dist/server/core/domain/entities/provider-registry.d.ts +41 -1
  22. package/dist/server/core/domain/entities/provider-registry.js +24 -1
  23. package/dist/server/core/domain/errors/task-error.d.ts +2 -0
  24. package/dist/server/core/domain/errors/task-error.js +6 -1
  25. package/dist/server/core/domain/transport/schemas.d.ts +2 -0
  26. package/dist/server/core/interfaces/i-provider-config-store.d.ts +2 -0
  27. package/dist/server/core/interfaces/i-provider-model-fetcher.d.ts +12 -3
  28. package/dist/server/core/interfaces/i-provider-oauth-token-store.d.ts +24 -0
  29. package/dist/server/core/interfaces/i-provider-oauth-token-store.js +1 -0
  30. package/dist/server/core/interfaces/i-token-refresh-manager.d.ts +7 -0
  31. package/dist/server/core/interfaces/i-token-refresh-manager.js +1 -0
  32. package/dist/server/infra/daemon/agent-process.js +22 -4
  33. package/dist/server/infra/daemon/brv-server.js +13 -2
  34. package/dist/server/infra/http/models-dev-client.d.ts +29 -0
  35. package/dist/server/infra/http/models-dev-client.js +133 -0
  36. package/dist/server/infra/http/openrouter-api-client.js +1 -1
  37. package/dist/server/infra/http/provider-model-fetcher-registry.d.ts +2 -1
  38. package/dist/server/infra/http/provider-model-fetcher-registry.js +6 -1
  39. package/dist/server/infra/http/provider-model-fetchers.d.ts +33 -8
  40. package/dist/server/infra/http/provider-model-fetchers.js +88 -10
  41. package/dist/server/infra/process/feature-handlers.d.ts +3 -1
  42. package/dist/server/infra/process/feature-handlers.js +3 -1
  43. package/dist/server/infra/provider/provider-config-resolver.d.ts +4 -2
  44. package/dist/server/infra/provider/provider-config-resolver.js +59 -4
  45. package/dist/server/infra/provider-oauth/callback-server.d.ts +24 -0
  46. package/dist/server/infra/provider-oauth/callback-server.js +203 -0
  47. package/dist/server/infra/provider-oauth/errors.d.ts +39 -0
  48. package/dist/server/infra/provider-oauth/errors.js +76 -0
  49. package/dist/server/infra/provider-oauth/index.d.ts +9 -0
  50. package/dist/server/infra/provider-oauth/index.js +9 -0
  51. package/dist/server/infra/provider-oauth/jwt-utils.d.ts +17 -0
  52. package/dist/server/infra/provider-oauth/jwt-utils.js +51 -0
  53. package/dist/server/infra/provider-oauth/pkce-service.d.ts +22 -0
  54. package/dist/server/infra/provider-oauth/pkce-service.js +33 -0
  55. package/dist/server/infra/provider-oauth/provider-oauth-token-store.d.ts +48 -0
  56. package/dist/server/infra/provider-oauth/provider-oauth-token-store.js +155 -0
  57. package/dist/server/infra/provider-oauth/refresh-token-exchange.d.ts +8 -0
  58. package/dist/server/infra/provider-oauth/refresh-token-exchange.js +39 -0
  59. package/dist/server/infra/provider-oauth/token-exchange.d.ts +8 -0
  60. package/dist/server/infra/provider-oauth/token-exchange.js +44 -0
  61. package/dist/server/infra/provider-oauth/token-refresh-manager.d.ts +32 -0
  62. package/dist/server/infra/provider-oauth/token-refresh-manager.js +96 -0
  63. package/dist/server/infra/provider-oauth/types.d.ts +55 -0
  64. package/dist/server/infra/provider-oauth/types.js +22 -0
  65. package/dist/server/infra/storage/file-provider-config-store.d.ts +2 -0
  66. package/dist/server/infra/storage/file-provider-config-store.js +1 -3
  67. package/dist/server/infra/transport/handlers/model-handler.d.ts +3 -0
  68. package/dist/server/infra/transport/handlers/model-handler.js +53 -11
  69. package/dist/server/infra/transport/handlers/provider-handler.d.ts +26 -0
  70. package/dist/server/infra/transport/handlers/provider-handler.js +215 -13
  71. package/dist/shared/constants/oauth.d.ts +14 -0
  72. package/dist/shared/constants/oauth.js +14 -0
  73. package/dist/shared/transport/events/index.d.ts +5 -0
  74. package/dist/shared/transport/events/model-events.d.ts +2 -0
  75. package/dist/shared/transport/events/provider-events.d.ts +36 -0
  76. package/dist/shared/transport/events/provider-events.js +5 -0
  77. package/dist/shared/transport/types/dto.d.ts +4 -0
  78. package/dist/tui/features/model/api/set-active-model.d.ts +1 -1
  79. package/dist/tui/features/model/api/set-active-model.js +12 -4
  80. package/dist/tui/features/provider/api/await-oauth-callback.d.ts +11 -0
  81. package/dist/tui/features/provider/api/await-oauth-callback.js +25 -0
  82. package/dist/tui/features/provider/api/cancel-oauth.d.ts +5 -0
  83. package/dist/tui/features/provider/api/cancel-oauth.js +10 -0
  84. package/dist/tui/features/provider/api/start-oauth.d.ts +11 -0
  85. package/dist/tui/features/provider/api/start-oauth.js +15 -0
  86. package/dist/tui/features/provider/components/auth-method-dialog.d.ts +9 -0
  87. package/dist/tui/features/provider/components/auth-method-dialog.js +20 -0
  88. package/dist/tui/features/provider/components/oauth-dialog.d.ts +9 -0
  89. package/dist/tui/features/provider/components/oauth-dialog.js +96 -0
  90. package/dist/tui/features/provider/components/provider-dialog.js +1 -1
  91. package/dist/tui/features/provider/components/provider-flow.js +54 -4
  92. package/dist/tui/features/provider/components/provider-subscription-initializer.d.ts +1 -0
  93. package/dist/tui/features/provider/components/provider-subscription-initializer.js +5 -0
  94. package/dist/tui/features/provider/hooks/use-provider-subscriptions.d.ts +6 -0
  95. package/dist/tui/features/provider/hooks/use-provider-subscriptions.js +24 -0
  96. package/dist/tui/providers/app-providers.js +2 -1
  97. package/dist/tui/utils/error-messages.js +6 -1
  98. package/oclif.manifest.json +191 -168
  99. package/package.json +7 -5
@@ -403,7 +403,7 @@
403
403
  "restart": {
404
404
  "aliases": [],
405
405
  "args": {},
406
- "description": "Restart ByteRover — stop everything and start fresh.\n\nRun this when ByteRover is unresponsive, stuck, or after installing an update.\nAll open sessions and background processes are stopped before the fresh start.",
406
+ "description": "Restart ByteRover — stop everything and start fresh.\n\nRun this when ByteRover is unresponsive, stuck, or after installing an update.\nAll open sessions and background processes are stopped.\nThe daemon will restart automatically on the next brv command.",
407
407
  "examples": [
408
408
  "<%= config.bin %> <%= command.id %>"
409
409
  ],
@@ -416,6 +416,13 @@
416
416
  "pluginType": "core",
417
417
  "strict": true,
418
418
  "enableJsonFlag": false,
419
+ "PROTECTED_COMMANDS": [
420
+ "update"
421
+ ],
422
+ "SERVER_AGENT_PATTERNS": [
423
+ "brv-server.js",
424
+ "agent-process.js"
425
+ ],
419
426
  "isESM": true,
420
427
  "relativePath": [
421
428
  "dist",
@@ -936,40 +943,15 @@
936
943
  "list.js"
937
944
  ]
938
945
  },
939
- "providers:connect": {
946
+ "model": {
940
947
  "aliases": [],
941
- "args": {
942
- "provider": {
943
- "description": "Provider ID to connect (e.g., anthropic, openai, openrouter)",
944
- "name": "provider",
945
- "required": true
946
- }
947
- },
948
- "description": "Connect or switch to an LLM provider",
948
+ "args": {},
949
+ "description": "Show the active model",
949
950
  "examples": [
950
- "<%= config.bin %> providers connect anthropic --api-key sk-xxx",
951
- "<%= config.bin %> providers connect openai --api-key sk-xxx --model gpt-4.1",
952
- "<%= config.bin %> providers connect byterover",
953
- "<%= config.bin %> providers connect openai-compatible --base-url http://localhost:11434/v1",
954
- "<%= config.bin %> providers connect openai-compatible --base-url http://localhost:11434/v1 --api-key sk-xxx --model llama3"
951
+ "<%= config.bin %> model",
952
+ "<%= config.bin %> model --format json"
955
953
  ],
956
954
  "flags": {
957
- "api-key": {
958
- "char": "k",
959
- "description": "API key for the provider",
960
- "name": "api-key",
961
- "hasDynamicHelp": false,
962
- "multiple": false,
963
- "type": "option"
964
- },
965
- "base-url": {
966
- "char": "b",
967
- "description": "Base URL for OpenAI-compatible providers (e.g., http://localhost:11434/v1)",
968
- "name": "base-url",
969
- "hasDynamicHelp": false,
970
- "multiple": false,
971
- "type": "option"
972
- },
973
955
  "format": {
974
956
  "description": "Output format (text or json)",
975
957
  "name": "format",
@@ -981,19 +963,11 @@
981
963
  "json"
982
964
  ],
983
965
  "type": "option"
984
- },
985
- "model": {
986
- "char": "m",
987
- "description": "Model to set as active after connecting",
988
- "name": "model",
989
- "hasDynamicHelp": false,
990
- "multiple": false,
991
- "type": "option"
992
966
  }
993
967
  },
994
968
  "hasDynamicHelp": false,
995
969
  "hiddenAliases": [],
996
- "id": "providers:connect",
970
+ "id": "model",
997
971
  "pluginAlias": "byterover-cli",
998
972
  "pluginName": "byterover-cli",
999
973
  "pluginType": "core",
@@ -1004,23 +978,17 @@
1004
978
  "dist",
1005
979
  "oclif",
1006
980
  "commands",
1007
- "providers",
1008
- "connect.js"
981
+ "model",
982
+ "index.js"
1009
983
  ]
1010
984
  },
1011
- "providers:disconnect": {
985
+ "model:list": {
1012
986
  "aliases": [],
1013
- "args": {
1014
- "provider": {
1015
- "description": "Provider ID to disconnect",
1016
- "name": "provider",
1017
- "required": true
1018
- }
1019
- },
1020
- "description": "Disconnect an LLM provider",
987
+ "args": {},
988
+ "description": "List available models from all connected providers",
1021
989
  "examples": [
1022
- "<%= config.bin %> providers disconnect anthropic",
1023
- "<%= config.bin %> providers disconnect openai --format json"
990
+ "<%= config.bin %> model list",
991
+ "<%= config.bin %> model list --format json"
1024
992
  ],
1025
993
  "flags": {
1026
994
  "format": {
@@ -1034,11 +1002,19 @@
1034
1002
  "json"
1035
1003
  ],
1036
1004
  "type": "option"
1005
+ },
1006
+ "provider": {
1007
+ "char": "p",
1008
+ "description": "Only list models for a specific provider",
1009
+ "name": "provider",
1010
+ "hasDynamicHelp": false,
1011
+ "multiple": false,
1012
+ "type": "option"
1037
1013
  }
1038
1014
  },
1039
1015
  "hasDynamicHelp": false,
1040
1016
  "hiddenAliases": [],
1041
- "id": "providers:disconnect",
1017
+ "id": "model:list",
1042
1018
  "pluginAlias": "byterover-cli",
1043
1019
  "pluginName": "byterover-cli",
1044
1020
  "pluginType": "core",
@@ -1049,17 +1025,24 @@
1049
1025
  "dist",
1050
1026
  "oclif",
1051
1027
  "commands",
1052
- "providers",
1053
- "disconnect.js"
1028
+ "model",
1029
+ "list.js"
1054
1030
  ]
1055
1031
  },
1056
- "providers": {
1032
+ "model:switch": {
1057
1033
  "aliases": [],
1058
- "args": {},
1059
- "description": "Show active provider and model",
1034
+ "args": {
1035
+ "model": {
1036
+ "description": "Model ID to switch to (e.g., claude-sonnet-4-5, gpt-4.1)",
1037
+ "name": "model",
1038
+ "required": true
1039
+ }
1040
+ },
1041
+ "description": "Switch the active model",
1060
1042
  "examples": [
1061
- "<%= config.bin %> providers",
1062
- "<%= config.bin %> providers --format json"
1043
+ "<%= config.bin %> model switch claude-sonnet-4-5",
1044
+ "<%= config.bin %> model switch gpt-4.1 --provider openai",
1045
+ "<%= config.bin %> model switch claude-sonnet-4-5 --format json"
1063
1046
  ],
1064
1047
  "flags": {
1065
1048
  "format": {
@@ -1073,11 +1056,19 @@
1073
1056
  "json"
1074
1057
  ],
1075
1058
  "type": "option"
1059
+ },
1060
+ "provider": {
1061
+ "char": "p",
1062
+ "description": "Provider ID (defaults to active provider)",
1063
+ "name": "provider",
1064
+ "hasDynamicHelp": false,
1065
+ "multiple": false,
1066
+ "type": "option"
1076
1067
  }
1077
1068
  },
1078
1069
  "hasDynamicHelp": false,
1079
1070
  "hiddenAliases": [],
1080
- "id": "providers",
1071
+ "id": "model:switch",
1081
1072
  "pluginAlias": "byterover-cli",
1082
1073
  "pluginName": "byterover-cli",
1083
1074
  "pluginType": "core",
@@ -1088,21 +1079,22 @@
1088
1079
  "dist",
1089
1080
  "oclif",
1090
1081
  "commands",
1091
- "providers",
1092
- "index.js"
1082
+ "model",
1083
+ "switch.js"
1093
1084
  ]
1094
1085
  },
1095
- "providers:list": {
1086
+ "space:list": {
1096
1087
  "aliases": [],
1097
1088
  "args": {},
1098
- "description": "List all available providers and their connection status",
1089
+ "description": "List all teams and spaces",
1099
1090
  "examples": [
1100
- "<%= config.bin %> providers list",
1101
- "<%= config.bin %> providers list --format json"
1091
+ "<%= config.bin %> space list",
1092
+ "<%= config.bin %> space list --format json"
1102
1093
  ],
1103
1094
  "flags": {
1104
1095
  "format": {
1105
- "description": "Output format (text or json)",
1096
+ "char": "f",
1097
+ "description": "Output format",
1106
1098
  "name": "format",
1107
1099
  "default": "text",
1108
1100
  "hasDynamicHelp": false,
@@ -1116,7 +1108,7 @@
1116
1108
  },
1117
1109
  "hasDynamicHelp": false,
1118
1110
  "hiddenAliases": [],
1119
- "id": "providers:list",
1111
+ "id": "space:list",
1120
1112
  "pluginAlias": "byterover-cli",
1121
1113
  "pluginName": "byterover-cli",
1122
1114
  "pluginType": "core",
@@ -1127,27 +1119,22 @@
1127
1119
  "dist",
1128
1120
  "oclif",
1129
1121
  "commands",
1130
- "providers",
1122
+ "space",
1131
1123
  "list.js"
1132
1124
  ]
1133
1125
  },
1134
- "providers:switch": {
1126
+ "space:switch": {
1135
1127
  "aliases": [],
1136
- "args": {
1137
- "provider": {
1138
- "description": "Provider ID to switch to (e.g., anthropic, openai)",
1139
- "name": "provider",
1140
- "required": true
1141
- }
1142
- },
1143
- "description": "Switch the active provider",
1128
+ "args": {},
1129
+ "description": "Switch to a different space",
1144
1130
  "examples": [
1145
- "<%= config.bin %> providers switch anthropic",
1146
- "<%= config.bin %> providers switch openai --format json"
1131
+ "<%= config.bin %> space switch --team acme --name my-space",
1132
+ "<%= config.bin %> space switch --team acme --name my-space --format json"
1147
1133
  ],
1148
1134
  "flags": {
1149
1135
  "format": {
1150
- "description": "Output format (text or json)",
1136
+ "char": "f",
1137
+ "description": "Output format",
1151
1138
  "name": "format",
1152
1139
  "default": "text",
1153
1140
  "hasDynamicHelp": false,
@@ -1157,11 +1144,29 @@
1157
1144
  "json"
1158
1145
  ],
1159
1146
  "type": "option"
1147
+ },
1148
+ "name": {
1149
+ "char": "n",
1150
+ "description": "Name of the space to switch to",
1151
+ "name": "name",
1152
+ "required": true,
1153
+ "hasDynamicHelp": false,
1154
+ "multiple": false,
1155
+ "type": "option"
1156
+ },
1157
+ "team": {
1158
+ "char": "t",
1159
+ "description": "Team name",
1160
+ "name": "team",
1161
+ "required": true,
1162
+ "hasDynamicHelp": false,
1163
+ "multiple": false,
1164
+ "type": "option"
1160
1165
  }
1161
1166
  },
1162
1167
  "hasDynamicHelp": false,
1163
1168
  "hiddenAliases": [],
1164
- "id": "providers:switch",
1169
+ "id": "space:switch",
1165
1170
  "pluginAlias": "byterover-cli",
1166
1171
  "pluginName": "byterover-cli",
1167
1172
  "pluginType": "core",
@@ -1172,19 +1177,54 @@
1172
1177
  "dist",
1173
1178
  "oclif",
1174
1179
  "commands",
1175
- "providers",
1180
+ "space",
1176
1181
  "switch.js"
1177
1182
  ]
1178
1183
  },
1179
- "model": {
1184
+ "providers:connect": {
1180
1185
  "aliases": [],
1181
- "args": {},
1182
- "description": "Show the active model",
1186
+ "args": {
1187
+ "provider": {
1188
+ "description": "Provider ID to connect (e.g., anthropic, openai, openrouter)",
1189
+ "name": "provider",
1190
+ "required": true
1191
+ }
1192
+ },
1193
+ "description": "Connect or switch to an LLM provider",
1183
1194
  "examples": [
1184
- "<%= config.bin %> model",
1185
- "<%= config.bin %> model --format json"
1195
+ "<%= config.bin %> providers connect anthropic --api-key sk-xxx",
1196
+ "<%= config.bin %> providers connect openai --api-key sk-xxx --model gpt-4.1",
1197
+ "<%= config.bin %> providers connect openai --oauth",
1198
+ "<%= config.bin %> providers connect byterover",
1199
+ "<%= config.bin %> providers connect openai-compatible --base-url http://localhost:11434/v1",
1200
+ "<%= config.bin %> providers connect openai-compatible --base-url http://localhost:11434/v1 --api-key sk-xxx --model llama3"
1186
1201
  ],
1187
1202
  "flags": {
1203
+ "api-key": {
1204
+ "char": "k",
1205
+ "description": "API key for the provider",
1206
+ "name": "api-key",
1207
+ "hasDynamicHelp": false,
1208
+ "multiple": false,
1209
+ "type": "option"
1210
+ },
1211
+ "base-url": {
1212
+ "char": "b",
1213
+ "description": "Base URL for OpenAI-compatible providers (e.g., http://localhost:11434/v1)",
1214
+ "name": "base-url",
1215
+ "hasDynamicHelp": false,
1216
+ "multiple": false,
1217
+ "type": "option"
1218
+ },
1219
+ "code": {
1220
+ "char": "c",
1221
+ "description": "Authorization code for code-paste OAuth providers (e.g., Anthropic). Not applicable to browser-callback providers like OpenAI — use --oauth without --code instead.",
1222
+ "hidden": true,
1223
+ "name": "code",
1224
+ "hasDynamicHelp": false,
1225
+ "multiple": false,
1226
+ "type": "option"
1227
+ },
1188
1228
  "format": {
1189
1229
  "description": "Output format (text or json)",
1190
1230
  "name": "format",
@@ -1196,11 +1236,25 @@
1196
1236
  "json"
1197
1237
  ],
1198
1238
  "type": "option"
1239
+ },
1240
+ "model": {
1241
+ "char": "m",
1242
+ "description": "Model to set as active after connecting",
1243
+ "name": "model",
1244
+ "hasDynamicHelp": false,
1245
+ "multiple": false,
1246
+ "type": "option"
1247
+ },
1248
+ "oauth": {
1249
+ "description": "Connect via OAuth (browser-based)",
1250
+ "name": "oauth",
1251
+ "allowNo": false,
1252
+ "type": "boolean"
1199
1253
  }
1200
1254
  },
1201
1255
  "hasDynamicHelp": false,
1202
1256
  "hiddenAliases": [],
1203
- "id": "model",
1257
+ "id": "providers:connect",
1204
1258
  "pluginAlias": "byterover-cli",
1205
1259
  "pluginName": "byterover-cli",
1206
1260
  "pluginType": "core",
@@ -1211,17 +1265,23 @@
1211
1265
  "dist",
1212
1266
  "oclif",
1213
1267
  "commands",
1214
- "model",
1215
- "index.js"
1268
+ "providers",
1269
+ "connect.js"
1216
1270
  ]
1217
1271
  },
1218
- "model:list": {
1272
+ "providers:disconnect": {
1219
1273
  "aliases": [],
1220
- "args": {},
1221
- "description": "List available models from all connected providers",
1274
+ "args": {
1275
+ "provider": {
1276
+ "description": "Provider ID to disconnect",
1277
+ "name": "provider",
1278
+ "required": true
1279
+ }
1280
+ },
1281
+ "description": "Disconnect an LLM provider",
1222
1282
  "examples": [
1223
- "<%= config.bin %> model list",
1224
- "<%= config.bin %> model list --format json"
1283
+ "<%= config.bin %> providers disconnect anthropic",
1284
+ "<%= config.bin %> providers disconnect openai --format json"
1225
1285
  ],
1226
1286
  "flags": {
1227
1287
  "format": {
@@ -1235,19 +1295,11 @@
1235
1295
  "json"
1236
1296
  ],
1237
1297
  "type": "option"
1238
- },
1239
- "provider": {
1240
- "char": "p",
1241
- "description": "Only list models for a specific provider",
1242
- "name": "provider",
1243
- "hasDynamicHelp": false,
1244
- "multiple": false,
1245
- "type": "option"
1246
1298
  }
1247
1299
  },
1248
1300
  "hasDynamicHelp": false,
1249
1301
  "hiddenAliases": [],
1250
- "id": "model:list",
1302
+ "id": "providers:disconnect",
1251
1303
  "pluginAlias": "byterover-cli",
1252
1304
  "pluginName": "byterover-cli",
1253
1305
  "pluginType": "core",
@@ -1258,24 +1310,17 @@
1258
1310
  "dist",
1259
1311
  "oclif",
1260
1312
  "commands",
1261
- "model",
1262
- "list.js"
1313
+ "providers",
1314
+ "disconnect.js"
1263
1315
  ]
1264
1316
  },
1265
- "model:switch": {
1317
+ "providers": {
1266
1318
  "aliases": [],
1267
- "args": {
1268
- "model": {
1269
- "description": "Model ID to switch to (e.g., claude-sonnet-4-5, gpt-4.1)",
1270
- "name": "model",
1271
- "required": true
1272
- }
1273
- },
1274
- "description": "Switch the active model",
1319
+ "args": {},
1320
+ "description": "Show active provider and model",
1275
1321
  "examples": [
1276
- "<%= config.bin %> model switch claude-sonnet-4-5",
1277
- "<%= config.bin %> model switch gpt-4.1 --provider openai",
1278
- "<%= config.bin %> model switch claude-sonnet-4-5 --format json"
1322
+ "<%= config.bin %> providers",
1323
+ "<%= config.bin %> providers --format json"
1279
1324
  ],
1280
1325
  "flags": {
1281
1326
  "format": {
@@ -1289,19 +1334,11 @@
1289
1334
  "json"
1290
1335
  ],
1291
1336
  "type": "option"
1292
- },
1293
- "provider": {
1294
- "char": "p",
1295
- "description": "Provider ID (defaults to active provider)",
1296
- "name": "provider",
1297
- "hasDynamicHelp": false,
1298
- "multiple": false,
1299
- "type": "option"
1300
1337
  }
1301
1338
  },
1302
1339
  "hasDynamicHelp": false,
1303
1340
  "hiddenAliases": [],
1304
- "id": "model:switch",
1341
+ "id": "providers",
1305
1342
  "pluginAlias": "byterover-cli",
1306
1343
  "pluginName": "byterover-cli",
1307
1344
  "pluginType": "core",
@@ -1312,22 +1349,21 @@
1312
1349
  "dist",
1313
1350
  "oclif",
1314
1351
  "commands",
1315
- "model",
1316
- "switch.js"
1352
+ "providers",
1353
+ "index.js"
1317
1354
  ]
1318
1355
  },
1319
- "space:list": {
1356
+ "providers:list": {
1320
1357
  "aliases": [],
1321
1358
  "args": {},
1322
- "description": "List all teams and spaces",
1359
+ "description": "List all available providers and their connection status",
1323
1360
  "examples": [
1324
- "<%= config.bin %> space list",
1325
- "<%= config.bin %> space list --format json"
1361
+ "<%= config.bin %> providers list",
1362
+ "<%= config.bin %> providers list --format json"
1326
1363
  ],
1327
1364
  "flags": {
1328
1365
  "format": {
1329
- "char": "f",
1330
- "description": "Output format",
1366
+ "description": "Output format (text or json)",
1331
1367
  "name": "format",
1332
1368
  "default": "text",
1333
1369
  "hasDynamicHelp": false,
@@ -1341,7 +1377,7 @@
1341
1377
  },
1342
1378
  "hasDynamicHelp": false,
1343
1379
  "hiddenAliases": [],
1344
- "id": "space:list",
1380
+ "id": "providers:list",
1345
1381
  "pluginAlias": "byterover-cli",
1346
1382
  "pluginName": "byterover-cli",
1347
1383
  "pluginType": "core",
@@ -1352,22 +1388,27 @@
1352
1388
  "dist",
1353
1389
  "oclif",
1354
1390
  "commands",
1355
- "space",
1391
+ "providers",
1356
1392
  "list.js"
1357
1393
  ]
1358
1394
  },
1359
- "space:switch": {
1395
+ "providers:switch": {
1360
1396
  "aliases": [],
1361
- "args": {},
1362
- "description": "Switch to a different space",
1397
+ "args": {
1398
+ "provider": {
1399
+ "description": "Provider ID to switch to (e.g., anthropic, openai)",
1400
+ "name": "provider",
1401
+ "required": true
1402
+ }
1403
+ },
1404
+ "description": "Switch the active provider",
1363
1405
  "examples": [
1364
- "<%= config.bin %> space switch --team acme --name my-space",
1365
- "<%= config.bin %> space switch --team acme --name my-space --format json"
1406
+ "<%= config.bin %> providers switch anthropic",
1407
+ "<%= config.bin %> providers switch openai --format json"
1366
1408
  ],
1367
1409
  "flags": {
1368
1410
  "format": {
1369
- "char": "f",
1370
- "description": "Output format",
1411
+ "description": "Output format (text or json)",
1371
1412
  "name": "format",
1372
1413
  "default": "text",
1373
1414
  "hasDynamicHelp": false,
@@ -1377,29 +1418,11 @@
1377
1418
  "json"
1378
1419
  ],
1379
1420
  "type": "option"
1380
- },
1381
- "name": {
1382
- "char": "n",
1383
- "description": "Name of the space to switch to",
1384
- "name": "name",
1385
- "required": true,
1386
- "hasDynamicHelp": false,
1387
- "multiple": false,
1388
- "type": "option"
1389
- },
1390
- "team": {
1391
- "char": "t",
1392
- "description": "Team name",
1393
- "name": "team",
1394
- "required": true,
1395
- "hasDynamicHelp": false,
1396
- "multiple": false,
1397
- "type": "option"
1398
1421
  }
1399
1422
  },
1400
1423
  "hasDynamicHelp": false,
1401
1424
  "hiddenAliases": [],
1402
- "id": "space:switch",
1425
+ "id": "providers:switch",
1403
1426
  "pluginAlias": "byterover-cli",
1404
1427
  "pluginName": "byterover-cli",
1405
1428
  "pluginType": "core",
@@ -1410,7 +1433,7 @@
1410
1433
  "dist",
1411
1434
  "oclif",
1412
1435
  "commands",
1413
- "space",
1436
+ "providers",
1414
1437
  "switch.js"
1415
1438
  ]
1416
1439
  },
@@ -1613,5 +1636,5 @@
1613
1636
  ]
1614
1637
  }
1615
1638
  },
1616
- "version": "2.2.0"
1639
+ "version": "2.3.1"
1617
1640
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "byterover-cli",
3
3
  "description": "ByteRover's CLI",
4
- "version": "2.2.0",
4
+ "version": "2.3.1",
5
5
  "author": "ByteRover",
6
6
  "bin": {
7
7
  "brv": "./bin/run.js"
@@ -22,7 +22,7 @@
22
22
  "@ai-sdk/vercel": "^1.0.33",
23
23
  "@ai-sdk/xai": "^2.0.57",
24
24
  "@anthropic-ai/sdk": "^0.70.1",
25
- "@campfirein/brv-transport-client": "github:campfirein/brv-transport-client#release/0.8.2",
25
+ "@campfirein/brv-transport-client": "github:campfirein/brv-transport-client#release/0.8.4",
26
26
  "@google/genai": "^1.29.0",
27
27
  "@inkjs/ui": "^2.0.0",
28
28
  "@inquirer/prompts": "^7.9.0",
@@ -59,8 +59,8 @@
59
59
  "react": "^19.2.1",
60
60
  "react-router-dom": "^7.13.0",
61
61
  "remark-parse": "^11.0.0",
62
- "socket.io": "^4.8.1",
63
- "socket.io-client": "^4.8.1",
62
+ "socket.io": "^4.8.3",
63
+ "socket.io-client": "^4.8.3",
64
64
  "stopword": "^3.1.5",
65
65
  "unified": "^11.0.5",
66
66
  "unpdf": "^1.4.0",
@@ -125,12 +125,14 @@
125
125
  "commands": "./dist/oclif/commands",
126
126
  "hooks": {
127
127
  "init": [
128
+ "./dist/oclif/hooks/init/block-command-update-npm",
128
129
  "./dist/oclif/hooks/init/welcome",
129
130
  "./dist/oclif/hooks/init/update-notifier"
130
131
  ],
131
132
  "command_not_found": "./dist/oclif/hooks/command_not_found/handle-invalid-commands",
132
133
  "error": "./dist/oclif/hooks/error/clean-errors",
133
- "prerun": "./dist/oclif/hooks/prerun/validate-brv-config-version"
134
+ "prerun": "./dist/oclif/hooks/prerun/validate-brv-config-version",
135
+ "postrun": "./dist/oclif/hooks/postrun/restart-after-update"
134
136
  },
135
137
  "plugins": [
136
138
  "@oclif/plugin-help",