byterover-cli 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/.env.production +0 -4
  2. package/dist/agent/infra/tools/implementations/search-knowledge-service.js +12 -2
  3. package/dist/oclif/commands/curate/index.d.ts +1 -0
  4. package/dist/oclif/commands/curate/index.js +15 -1
  5. package/dist/oclif/commands/query.d.ts +1 -0
  6. package/dist/oclif/commands/query.js +17 -3
  7. package/dist/oclif/commands/search.d.ts +20 -0
  8. package/dist/oclif/commands/search.js +186 -0
  9. package/dist/oclif/commands/status.js +4 -0
  10. package/dist/oclif/lib/daemon-client.js +0 -1
  11. package/dist/oclif/lib/search-format.d.ts +10 -0
  12. package/dist/oclif/lib/search-format.js +25 -0
  13. package/dist/oclif/lib/task-client.d.ts +6 -0
  14. package/dist/oclif/lib/task-client.js +10 -3
  15. package/dist/server/constants.d.ts +1 -1
  16. package/dist/server/constants.js +2 -0
  17. package/dist/server/core/domain/errors/task-error.d.ts +2 -2
  18. package/dist/server/core/domain/errors/task-error.js +5 -4
  19. package/dist/server/core/domain/transport/schemas.d.ts +10 -10
  20. package/dist/server/core/domain/transport/schemas.js +3 -3
  21. package/dist/server/core/interfaces/executor/i-search-executor.d.ts +34 -0
  22. package/dist/server/core/interfaces/executor/i-search-executor.js +1 -0
  23. package/dist/server/core/interfaces/executor/index.d.ts +1 -0
  24. package/dist/server/core/interfaces/executor/index.js +1 -0
  25. package/dist/server/infra/daemon/agent-process.js +20 -7
  26. package/dist/server/infra/executor/search-executor.d.ts +17 -0
  27. package/dist/server/infra/executor/search-executor.js +30 -0
  28. package/dist/server/infra/transport/handlers/pull-handler.js +3 -3
  29. package/dist/server/infra/transport/handlers/push-handler.js +3 -3
  30. package/dist/server/infra/transport/handlers/status-handler.js +25 -18
  31. package/dist/server/templates/skill/SKILL.md +25 -5
  32. package/dist/shared/transport/search-content.d.ts +28 -0
  33. package/dist/shared/transport/search-content.js +38 -0
  34. package/dist/shared/transport/types/dto.d.ts +1 -1
  35. package/dist/tui/features/status/utils/format-status.js +5 -0
  36. package/dist/tui/utils/error-messages.js +2 -2
  37. package/oclif.manifest.json +425 -341
  38. package/package.json +1 -1
@@ -416,6 +416,14 @@
416
416
  "json"
417
417
  ],
418
418
  "type": "option"
419
+ },
420
+ "timeout": {
421
+ "description": "Maximum seconds to wait for task completion",
422
+ "name": "timeout",
423
+ "default": 300,
424
+ "hasDynamicHelp": false,
425
+ "multiple": false,
426
+ "type": "option"
419
427
  }
420
428
  },
421
429
  "hasDynamicHelp": false,
@@ -465,6 +473,71 @@
465
473
  "restart.js"
466
474
  ]
467
475
  },
476
+ "search": {
477
+ "aliases": [],
478
+ "args": {
479
+ "query": {
480
+ "description": "Search query to find relevant knowledge in the context tree",
481
+ "name": "query",
482
+ "required": true
483
+ }
484
+ },
485
+ "description": "Search the context tree for relevant knowledge\n\nReturns ranked results with paths, scores, and excerpts.\nPure BM25 retrieval — no LLM, no token cost.\n\nUse this for structured results with file paths.\nUse \"brv query\" when you need a synthesized answer.",
486
+ "examples": [
487
+ "# Search for knowledge about authentication",
488
+ "<%= config.bin %> <%= command.id %> \"authentication\"",
489
+ "",
490
+ "# Limit results and scope to a domain",
491
+ "<%= config.bin %> <%= command.id %> \"JWT tokens\" --limit 5 --scope auth/",
492
+ "",
493
+ "# JSON output (for automation)",
494
+ "<%= config.bin %> <%= command.id %> \"auth\" --format json"
495
+ ],
496
+ "flags": {
497
+ "format": {
498
+ "description": "Output format (text or json)",
499
+ "name": "format",
500
+ "default": "text",
501
+ "hasDynamicHelp": false,
502
+ "multiple": false,
503
+ "options": [
504
+ "text",
505
+ "json"
506
+ ],
507
+ "type": "option"
508
+ },
509
+ "limit": {
510
+ "description": "Maximum number of results (1-50)",
511
+ "name": "limit",
512
+ "default": 10,
513
+ "hasDynamicHelp": false,
514
+ "multiple": false,
515
+ "type": "option"
516
+ },
517
+ "scope": {
518
+ "description": "Path prefix to scope results (e.g. \"auth/\" for auth domain only)",
519
+ "name": "scope",
520
+ "hasDynamicHelp": false,
521
+ "multiple": false,
522
+ "type": "option"
523
+ }
524
+ },
525
+ "hasDynamicHelp": false,
526
+ "hiddenAliases": [],
527
+ "id": "search",
528
+ "pluginAlias": "byterover-cli",
529
+ "pluginName": "byterover-cli",
530
+ "pluginType": "core",
531
+ "strict": false,
532
+ "enableJsonFlag": false,
533
+ "isESM": true,
534
+ "relativePath": [
535
+ "dist",
536
+ "oclif",
537
+ "commands",
538
+ "search.js"
539
+ ]
540
+ },
468
541
  "status": {
469
542
  "aliases": [],
470
543
  "args": {},
@@ -683,6 +756,9 @@
683
756
  "# Folder pack with context",
684
757
  "<%= config.bin %> <%= command.id %> \"Analyze authentication module\" -d src/auth/",
685
758
  "",
759
+ "# Increase timeout for slow models (in seconds)",
760
+ "<%= config.bin %> <%= command.id %> \"context here\" --timeout 600",
761
+ "",
686
762
  "# View curate history",
687
763
  "<%= config.bin %> curate view",
688
764
  "<%= config.bin %> curate view --status completed --since 1h"
@@ -721,6 +797,14 @@
721
797
  "json"
722
798
  ],
723
799
  "type": "option"
800
+ },
801
+ "timeout": {
802
+ "description": "Maximum seconds to wait for task completion",
803
+ "name": "timeout",
804
+ "default": 300,
805
+ "hasDynamicHelp": false,
806
+ "multiple": false,
807
+ "type": "option"
724
808
  }
725
809
  },
726
810
  "hasDynamicHelp": false,
@@ -1132,47 +1216,33 @@
1132
1216
  "switch.js"
1133
1217
  ]
1134
1218
  },
1135
- "providers:connect": {
1219
+ "review:approve": {
1136
1220
  "aliases": [],
1137
1221
  "args": {
1138
- "provider": {
1139
- "description": "Provider ID to connect (e.g., anthropic, openai, openrouter). Omit for interactive selection.",
1140
- "name": "provider",
1141
- "required": false
1222
+ "taskId": {
1223
+ "description": "Task ID shown in the curate output (e.g. \"brv review approve abc-123\")",
1224
+ "name": "taskId",
1225
+ "required": true
1142
1226
  }
1143
1227
  },
1144
- "description": "Connect or switch to an LLM provider",
1228
+ "description": "Approve pending review operations for a curate task",
1145
1229
  "examples": [
1146
- "<%= config.bin %> providers connect",
1147
- "<%= config.bin %> providers connect anthropic --api-key sk-xxx",
1148
- "<%= config.bin %> providers connect openai --oauth",
1149
- "<%= config.bin %> providers connect byterover",
1150
- "<%= config.bin %> providers connect openai-compatible --base-url http://localhost:11434/v1 --api-key sk-xxx"
1230
+ "# Approve all pending changes from a curate task",
1231
+ "<%= config.bin %> review approve abc-123",
1232
+ "",
1233
+ "# Approve specific files",
1234
+ "<%= config.bin %> review approve abc-123 --file architecture/security/audit.md",
1235
+ "<%= config.bin %> review approve abc-123 --file auth/jwt.md --file auth/oauth.md",
1236
+ "",
1237
+ "# Approve and get structured output (useful for coding agents)",
1238
+ "<%= config.bin %> review approve abc-123 --format json"
1151
1239
  ],
1152
1240
  "flags": {
1153
- "api-key": {
1154
- "char": "k",
1155
- "description": "API key for the provider",
1156
- "name": "api-key",
1157
- "hasDynamicHelp": false,
1158
- "multiple": false,
1159
- "type": "option"
1160
- },
1161
- "base-url": {
1162
- "char": "b",
1163
- "description": "Base URL for OpenAI-compatible providers (e.g., http://localhost:11434/v1)",
1164
- "name": "base-url",
1165
- "hasDynamicHelp": false,
1166
- "multiple": false,
1167
- "type": "option"
1168
- },
1169
- "code": {
1170
- "char": "c",
1171
- "description": "Authorization code for code-paste OAuth providers (e.g., Anthropic). Not applicable to browser-callback providers like OpenAI — use --oauth without --code instead.",
1172
- "hidden": true,
1173
- "name": "code",
1241
+ "file": {
1242
+ "description": "Approve only the specified file path(s) (relative to context tree)",
1243
+ "name": "file",
1174
1244
  "hasDynamicHelp": false,
1175
- "multiple": false,
1245
+ "multiple": true,
1176
1246
  "type": "option"
1177
1247
  },
1178
1248
  "format": {
@@ -1186,25 +1256,11 @@
1186
1256
  "json"
1187
1257
  ],
1188
1258
  "type": "option"
1189
- },
1190
- "model": {
1191
- "char": "m",
1192
- "description": "Model to set as active after connecting",
1193
- "name": "model",
1194
- "hasDynamicHelp": false,
1195
- "multiple": false,
1196
- "type": "option"
1197
- },
1198
- "oauth": {
1199
- "description": "Connect via OAuth (browser-based)",
1200
- "name": "oauth",
1201
- "allowNo": false,
1202
- "type": "boolean"
1203
1259
  }
1204
1260
  },
1205
1261
  "hasDynamicHelp": false,
1206
1262
  "hiddenAliases": [],
1207
- "id": "providers:connect",
1263
+ "id": "review:approve",
1208
1264
  "pluginAlias": "byterover-cli",
1209
1265
  "pluginName": "byterover-cli",
1210
1266
  "pluginType": "core",
@@ -1215,25 +1271,25 @@
1215
1271
  "dist",
1216
1272
  "oclif",
1217
1273
  "commands",
1218
- "providers",
1219
- "connect.js"
1274
+ "review",
1275
+ "approve.js"
1220
1276
  ]
1221
1277
  },
1222
- "providers:disconnect": {
1278
+ "review:base-review-decision": {
1223
1279
  "aliases": [],
1224
1280
  "args": {
1225
- "provider": {
1226
- "description": "Provider ID to disconnect",
1227
- "name": "provider",
1281
+ "taskId": {
1282
+ "name": "taskId",
1228
1283
  "required": true
1229
1284
  }
1230
1285
  },
1231
- "description": "Disconnect an LLM provider",
1232
- "examples": [
1233
- "<%= config.bin %> providers disconnect anthropic",
1234
- "<%= config.bin %> providers disconnect openai --format json"
1235
- ],
1236
1286
  "flags": {
1287
+ "file": {
1288
+ "name": "file",
1289
+ "hasDynamicHelp": false,
1290
+ "multiple": true,
1291
+ "type": "option"
1292
+ },
1237
1293
  "format": {
1238
1294
  "description": "Output format (text or json)",
1239
1295
  "name": "format",
@@ -1249,7 +1305,7 @@
1249
1305
  },
1250
1306
  "hasDynamicHelp": false,
1251
1307
  "hiddenAliases": [],
1252
- "id": "providers:disconnect",
1308
+ "id": "review:base-review-decision",
1253
1309
  "pluginAlias": "byterover-cli",
1254
1310
  "pluginName": "byterover-cli",
1255
1311
  "pluginType": "core",
@@ -1260,17 +1316,20 @@
1260
1316
  "dist",
1261
1317
  "oclif",
1262
1318
  "commands",
1263
- "providers",
1264
- "disconnect.js"
1319
+ "review",
1320
+ "base-review-decision.js"
1265
1321
  ]
1266
1322
  },
1267
- "providers": {
1323
+ "review:pending": {
1268
1324
  "aliases": [],
1269
1325
  "args": {},
1270
- "description": "Show active provider and model",
1326
+ "description": "List all pending review operations for the current project",
1271
1327
  "examples": [
1272
- "<%= config.bin %> providers",
1273
- "<%= config.bin %> providers --format json"
1328
+ "# Show all pending reviews",
1329
+ "<%= config.bin %> review pending",
1330
+ "",
1331
+ "# Get structured output for agent-driven workflows",
1332
+ "<%= config.bin %> review pending --format json"
1274
1333
  ],
1275
1334
  "flags": {
1276
1335
  "format": {
@@ -1288,7 +1347,7 @@
1288
1347
  },
1289
1348
  "hasDynamicHelp": false,
1290
1349
  "hiddenAliases": [],
1291
- "id": "providers",
1350
+ "id": "review:pending",
1292
1351
  "pluginAlias": "byterover-cli",
1293
1352
  "pluginName": "byterover-cli",
1294
1353
  "pluginType": "core",
@@ -1299,19 +1358,39 @@
1299
1358
  "dist",
1300
1359
  "oclif",
1301
1360
  "commands",
1302
- "providers",
1303
- "index.js"
1361
+ "review",
1362
+ "pending.js"
1304
1363
  ]
1305
1364
  },
1306
- "providers:list": {
1365
+ "review:reject": {
1307
1366
  "aliases": [],
1308
- "args": {},
1309
- "description": "List all available providers and their connection status",
1367
+ "args": {
1368
+ "taskId": {
1369
+ "description": "Task ID shown in the curate output (e.g. \"brv review reject abc-123\")",
1370
+ "name": "taskId",
1371
+ "required": true
1372
+ }
1373
+ },
1374
+ "description": "Reject pending review operations for a curate task (restores files from backup)",
1310
1375
  "examples": [
1311
- "<%= config.bin %> providers list",
1312
- "<%= config.bin %> providers list --format json"
1376
+ "# Reject all pending changes from a curate task",
1377
+ "<%= config.bin %> review reject abc-123",
1378
+ "",
1379
+ "# Reject specific files",
1380
+ "<%= config.bin %> review reject abc-123 --file architecture/security/audit.md",
1381
+ "<%= config.bin %> review reject abc-123 --file auth/jwt.md --file auth/oauth.md",
1382
+ "",
1383
+ "# Reject and get structured output (useful for coding agents)",
1384
+ "<%= config.bin %> review reject abc-123 --format json"
1313
1385
  ],
1314
1386
  "flags": {
1387
+ "file": {
1388
+ "description": "Reject only the specified file path(s) (relative to context tree)",
1389
+ "name": "file",
1390
+ "hasDynamicHelp": false,
1391
+ "multiple": true,
1392
+ "type": "option"
1393
+ },
1315
1394
  "format": {
1316
1395
  "description": "Output format (text or json)",
1317
1396
  "name": "format",
@@ -1327,7 +1406,7 @@
1327
1406
  },
1328
1407
  "hasDynamicHelp": false,
1329
1408
  "hiddenAliases": [],
1330
- "id": "providers:list",
1409
+ "id": "review:reject",
1331
1410
  "pluginAlias": "byterover-cli",
1332
1411
  "pluginName": "byterover-cli",
1333
1412
  "pluginType": "core",
@@ -1338,27 +1417,21 @@
1338
1417
  "dist",
1339
1418
  "oclif",
1340
1419
  "commands",
1341
- "providers",
1342
- "list.js"
1420
+ "review",
1421
+ "reject.js"
1343
1422
  ]
1344
1423
  },
1345
- "providers:switch": {
1424
+ "space:list": {
1346
1425
  "aliases": [],
1347
- "args": {
1348
- "provider": {
1349
- "description": "Provider ID to switch to (e.g., anthropic, openai)",
1350
- "name": "provider",
1351
- "required": true
1352
- }
1353
- },
1354
- "description": "Switch the active provider",
1426
+ "args": {},
1427
+ "description": "List all teams and spaces (deprecated)",
1355
1428
  "examples": [
1356
- "<%= config.bin %> providers switch anthropic",
1357
- "<%= config.bin %> providers switch openai --format json"
1429
+ "<%= config.bin %> space list"
1358
1430
  ],
1359
1431
  "flags": {
1360
1432
  "format": {
1361
- "description": "Output format (text or json)",
1433
+ "char": "f",
1434
+ "description": "Output format",
1362
1435
  "name": "format",
1363
1436
  "default": "text",
1364
1437
  "hasDynamicHelp": false,
@@ -1372,7 +1445,7 @@
1372
1445
  },
1373
1446
  "hasDynamicHelp": false,
1374
1447
  "hiddenAliases": [],
1375
- "id": "providers:switch",
1448
+ "id": "space:list",
1376
1449
  "pluginAlias": "byterover-cli",
1377
1450
  "pluginName": "byterover-cli",
1378
1451
  "pluginType": "core",
@@ -1383,164 +1456,21 @@
1383
1456
  "dist",
1384
1457
  "oclif",
1385
1458
  "commands",
1386
- "providers",
1387
- "switch.js"
1459
+ "space",
1460
+ "list.js"
1388
1461
  ]
1389
1462
  },
1390
- "source:add": {
1463
+ "space:switch": {
1391
1464
  "aliases": [],
1392
- "args": {
1393
- "path": {
1394
- "description": "Path to the target project containing .brv/",
1395
- "name": "path",
1396
- "required": true
1397
- }
1398
- },
1399
- "description": "Add a read-only knowledge source from another project's context tree",
1465
+ "args": {},
1466
+ "description": "Switch to a different space (deprecated)",
1400
1467
  "examples": [
1401
- "<%= config.bin %> <%= command.id %> /path/to/shared-lib",
1402
- "<%= config.bin %> <%= command.id %> /path/to/shared-lib --alias shared"
1468
+ "<%= config.bin %> space switch"
1403
1469
  ],
1404
1470
  "flags": {
1405
- "alias": {
1406
- "description": "Custom alias for the source (defaults to directory name)",
1407
- "name": "alias",
1408
- "required": false,
1409
- "hasDynamicHelp": false,
1410
- "multiple": false,
1411
- "type": "option"
1412
- }
1413
- },
1414
- "hasDynamicHelp": false,
1415
- "hiddenAliases": [],
1416
- "id": "source:add",
1417
- "pluginAlias": "byterover-cli",
1418
- "pluginName": "byterover-cli",
1419
- "pluginType": "core",
1420
- "strict": true,
1421
- "enableJsonFlag": false,
1422
- "isESM": true,
1423
- "relativePath": [
1424
- "dist",
1425
- "oclif",
1426
- "commands",
1427
- "source",
1428
- "add.js"
1429
- ]
1430
- },
1431
- "source": {
1432
- "aliases": [],
1433
- "args": {},
1434
- "description": "Manage knowledge sources (read-only references to other projects)",
1435
- "examples": [
1436
- "<%= config.bin %> <%= command.id %> --help"
1437
- ],
1438
- "flags": {},
1439
- "hasDynamicHelp": false,
1440
- "hiddenAliases": [],
1441
- "id": "source",
1442
- "pluginAlias": "byterover-cli",
1443
- "pluginName": "byterover-cli",
1444
- "pluginType": "core",
1445
- "strict": true,
1446
- "enableJsonFlag": false,
1447
- "isESM": true,
1448
- "relativePath": [
1449
- "dist",
1450
- "oclif",
1451
- "commands",
1452
- "source",
1453
- "index.js"
1454
- ]
1455
- },
1456
- "source:list": {
1457
- "aliases": [],
1458
- "args": {},
1459
- "description": "List all knowledge sources and their status",
1460
- "examples": [
1461
- "<%= config.bin %> <%= command.id %>"
1462
- ],
1463
- "flags": {},
1464
- "hasDynamicHelp": false,
1465
- "hiddenAliases": [],
1466
- "id": "source:list",
1467
- "pluginAlias": "byterover-cli",
1468
- "pluginName": "byterover-cli",
1469
- "pluginType": "core",
1470
- "strict": true,
1471
- "enableJsonFlag": false,
1472
- "isESM": true,
1473
- "relativePath": [
1474
- "dist",
1475
- "oclif",
1476
- "commands",
1477
- "source",
1478
- "list.js"
1479
- ]
1480
- },
1481
- "source:remove": {
1482
- "aliases": [],
1483
- "args": {
1484
- "aliasOrPath": {
1485
- "description": "Alias or path of the knowledge source to remove",
1486
- "name": "aliasOrPath",
1487
- "required": true
1488
- }
1489
- },
1490
- "description": "Remove a knowledge source",
1491
- "examples": [
1492
- "<%= config.bin %> <%= command.id %> shared-lib",
1493
- "<%= config.bin %> <%= command.id %> /path/to/shared-lib"
1494
- ],
1495
- "flags": {},
1496
- "hasDynamicHelp": false,
1497
- "hiddenAliases": [],
1498
- "id": "source:remove",
1499
- "pluginAlias": "byterover-cli",
1500
- "pluginName": "byterover-cli",
1501
- "pluginType": "core",
1502
- "strict": true,
1503
- "enableJsonFlag": false,
1504
- "isESM": true,
1505
- "relativePath": [
1506
- "dist",
1507
- "oclif",
1508
- "commands",
1509
- "source",
1510
- "remove.js"
1511
- ]
1512
- },
1513
- "review:approve": {
1514
- "aliases": [],
1515
- "args": {
1516
- "taskId": {
1517
- "description": "Task ID shown in the curate output (e.g. \"brv review approve abc-123\")",
1518
- "name": "taskId",
1519
- "required": true
1520
- }
1521
- },
1522
- "description": "Approve pending review operations for a curate task",
1523
- "examples": [
1524
- "# Approve all pending changes from a curate task",
1525
- "<%= config.bin %> review approve abc-123",
1526
- "",
1527
- "# Approve specific files",
1528
- "<%= config.bin %> review approve abc-123 --file architecture/security/audit.md",
1529
- "<%= config.bin %> review approve abc-123 --file auth/jwt.md --file auth/oauth.md",
1530
- "",
1531
- "# Approve and get structured output (useful for coding agents)",
1532
- "<%= config.bin %> review approve abc-123 --format json"
1533
- ],
1534
- "flags": {
1535
- "file": {
1536
- "description": "Approve only the specified file path(s) (relative to context tree)",
1537
- "name": "file",
1538
- "hasDynamicHelp": false,
1539
- "multiple": true,
1540
- "type": "option"
1541
- },
1542
1471
  "format": {
1543
- "description": "Output format (text or json)",
1472
+ "char": "f",
1473
+ "description": "Output format",
1544
1474
  "name": "format",
1545
1475
  "default": "text",
1546
1476
  "hasDynamicHelp": false,
@@ -1554,7 +1484,7 @@
1554
1484
  },
1555
1485
  "hasDynamicHelp": false,
1556
1486
  "hiddenAliases": [],
1557
- "id": "review:approve",
1487
+ "id": "space:switch",
1558
1488
  "pluginAlias": "byterover-cli",
1559
1489
  "pluginName": "byterover-cli",
1560
1490
  "pluginType": "core",
@@ -1565,23 +1495,51 @@
1565
1495
  "dist",
1566
1496
  "oclif",
1567
1497
  "commands",
1568
- "review",
1569
- "approve.js"
1498
+ "space",
1499
+ "switch.js"
1570
1500
  ]
1571
1501
  },
1572
- "review:base-review-decision": {
1502
+ "providers:connect": {
1573
1503
  "aliases": [],
1574
1504
  "args": {
1575
- "taskId": {
1576
- "name": "taskId",
1577
- "required": true
1505
+ "provider": {
1506
+ "description": "Provider ID to connect (e.g., anthropic, openai, openrouter). Omit for interactive selection.",
1507
+ "name": "provider",
1508
+ "required": false
1578
1509
  }
1579
1510
  },
1511
+ "description": "Connect or switch to an LLM provider",
1512
+ "examples": [
1513
+ "<%= config.bin %> providers connect",
1514
+ "<%= config.bin %> providers connect anthropic --api-key sk-xxx",
1515
+ "<%= config.bin %> providers connect openai --oauth",
1516
+ "<%= config.bin %> providers connect byterover",
1517
+ "<%= config.bin %> providers connect openai-compatible --base-url http://localhost:11434/v1 --api-key sk-xxx"
1518
+ ],
1580
1519
  "flags": {
1581
- "file": {
1582
- "name": "file",
1520
+ "api-key": {
1521
+ "char": "k",
1522
+ "description": "API key for the provider",
1523
+ "name": "api-key",
1583
1524
  "hasDynamicHelp": false,
1584
- "multiple": true,
1525
+ "multiple": false,
1526
+ "type": "option"
1527
+ },
1528
+ "base-url": {
1529
+ "char": "b",
1530
+ "description": "Base URL for OpenAI-compatible providers (e.g., http://localhost:11434/v1)",
1531
+ "name": "base-url",
1532
+ "hasDynamicHelp": false,
1533
+ "multiple": false,
1534
+ "type": "option"
1535
+ },
1536
+ "code": {
1537
+ "char": "c",
1538
+ "description": "Authorization code for code-paste OAuth providers (e.g., Anthropic). Not applicable to browser-callback providers like OpenAI — use --oauth without --code instead.",
1539
+ "hidden": true,
1540
+ "name": "code",
1541
+ "hasDynamicHelp": false,
1542
+ "multiple": false,
1585
1543
  "type": "option"
1586
1544
  },
1587
1545
  "format": {
@@ -1595,11 +1553,25 @@
1595
1553
  "json"
1596
1554
  ],
1597
1555
  "type": "option"
1556
+ },
1557
+ "model": {
1558
+ "char": "m",
1559
+ "description": "Model to set as active after connecting",
1560
+ "name": "model",
1561
+ "hasDynamicHelp": false,
1562
+ "multiple": false,
1563
+ "type": "option"
1564
+ },
1565
+ "oauth": {
1566
+ "description": "Connect via OAuth (browser-based)",
1567
+ "name": "oauth",
1568
+ "allowNo": false,
1569
+ "type": "boolean"
1598
1570
  }
1599
1571
  },
1600
1572
  "hasDynamicHelp": false,
1601
1573
  "hiddenAliases": [],
1602
- "id": "review:base-review-decision",
1574
+ "id": "providers:connect",
1603
1575
  "pluginAlias": "byterover-cli",
1604
1576
  "pluginName": "byterover-cli",
1605
1577
  "pluginType": "core",
@@ -1610,20 +1582,23 @@
1610
1582
  "dist",
1611
1583
  "oclif",
1612
1584
  "commands",
1613
- "review",
1614
- "base-review-decision.js"
1585
+ "providers",
1586
+ "connect.js"
1615
1587
  ]
1616
1588
  },
1617
- "review:pending": {
1589
+ "providers:disconnect": {
1618
1590
  "aliases": [],
1619
- "args": {},
1620
- "description": "List all pending review operations for the current project",
1591
+ "args": {
1592
+ "provider": {
1593
+ "description": "Provider ID to disconnect",
1594
+ "name": "provider",
1595
+ "required": true
1596
+ }
1597
+ },
1598
+ "description": "Disconnect an LLM provider",
1621
1599
  "examples": [
1622
- "# Show all pending reviews",
1623
- "<%= config.bin %> review pending",
1624
- "",
1625
- "# Get structured output for agent-driven workflows",
1626
- "<%= config.bin %> review pending --format json"
1600
+ "<%= config.bin %> providers disconnect anthropic",
1601
+ "<%= config.bin %> providers disconnect openai --format json"
1627
1602
  ],
1628
1603
  "flags": {
1629
1604
  "format": {
@@ -1641,7 +1616,7 @@
1641
1616
  },
1642
1617
  "hasDynamicHelp": false,
1643
1618
  "hiddenAliases": [],
1644
- "id": "review:pending",
1619
+ "id": "providers:disconnect",
1645
1620
  "pluginAlias": "byterover-cli",
1646
1621
  "pluginName": "byterover-cli",
1647
1622
  "pluginType": "core",
@@ -1652,39 +1627,19 @@
1652
1627
  "dist",
1653
1628
  "oclif",
1654
1629
  "commands",
1655
- "review",
1656
- "pending.js"
1630
+ "providers",
1631
+ "disconnect.js"
1657
1632
  ]
1658
1633
  },
1659
- "review:reject": {
1634
+ "providers": {
1660
1635
  "aliases": [],
1661
- "args": {
1662
- "taskId": {
1663
- "description": "Task ID shown in the curate output (e.g. \"brv review reject abc-123\")",
1664
- "name": "taskId",
1665
- "required": true
1666
- }
1667
- },
1668
- "description": "Reject pending review operations for a curate task (restores files from backup)",
1636
+ "args": {},
1637
+ "description": "Show active provider and model",
1669
1638
  "examples": [
1670
- "# Reject all pending changes from a curate task",
1671
- "<%= config.bin %> review reject abc-123",
1672
- "",
1673
- "# Reject specific files",
1674
- "<%= config.bin %> review reject abc-123 --file architecture/security/audit.md",
1675
- "<%= config.bin %> review reject abc-123 --file auth/jwt.md --file auth/oauth.md",
1676
- "",
1677
- "# Reject and get structured output (useful for coding agents)",
1678
- "<%= config.bin %> review reject abc-123 --format json"
1639
+ "<%= config.bin %> providers",
1640
+ "<%= config.bin %> providers --format json"
1679
1641
  ],
1680
1642
  "flags": {
1681
- "file": {
1682
- "description": "Reject only the specified file path(s) (relative to context tree)",
1683
- "name": "file",
1684
- "hasDynamicHelp": false,
1685
- "multiple": true,
1686
- "type": "option"
1687
- },
1688
1643
  "format": {
1689
1644
  "description": "Output format (text or json)",
1690
1645
  "name": "format",
@@ -1700,7 +1655,7 @@
1700
1655
  },
1701
1656
  "hasDynamicHelp": false,
1702
1657
  "hiddenAliases": [],
1703
- "id": "review:reject",
1658
+ "id": "providers",
1704
1659
  "pluginAlias": "byterover-cli",
1705
1660
  "pluginName": "byterover-cli",
1706
1661
  "pluginType": "core",
@@ -1711,21 +1666,21 @@
1711
1666
  "dist",
1712
1667
  "oclif",
1713
1668
  "commands",
1714
- "review",
1715
- "reject.js"
1669
+ "providers",
1670
+ "index.js"
1716
1671
  ]
1717
1672
  },
1718
- "space:list": {
1673
+ "providers:list": {
1719
1674
  "aliases": [],
1720
1675
  "args": {},
1721
- "description": "List all teams and spaces (deprecated)",
1676
+ "description": "List all available providers and their connection status",
1722
1677
  "examples": [
1723
- "<%= config.bin %> space list"
1678
+ "<%= config.bin %> providers list",
1679
+ "<%= config.bin %> providers list --format json"
1724
1680
  ],
1725
1681
  "flags": {
1726
1682
  "format": {
1727
- "char": "f",
1728
- "description": "Output format",
1683
+ "description": "Output format (text or json)",
1729
1684
  "name": "format",
1730
1685
  "default": "text",
1731
1686
  "hasDynamicHelp": false,
@@ -1739,7 +1694,7 @@
1739
1694
  },
1740
1695
  "hasDynamicHelp": false,
1741
1696
  "hiddenAliases": [],
1742
- "id": "space:list",
1697
+ "id": "providers:list",
1743
1698
  "pluginAlias": "byterover-cli",
1744
1699
  "pluginName": "byterover-cli",
1745
1700
  "pluginType": "core",
@@ -1750,21 +1705,27 @@
1750
1705
  "dist",
1751
1706
  "oclif",
1752
1707
  "commands",
1753
- "space",
1708
+ "providers",
1754
1709
  "list.js"
1755
1710
  ]
1756
1711
  },
1757
- "space:switch": {
1712
+ "providers:switch": {
1758
1713
  "aliases": [],
1759
- "args": {},
1760
- "description": "Switch to a different space (deprecated)",
1714
+ "args": {
1715
+ "provider": {
1716
+ "description": "Provider ID to switch to (e.g., anthropic, openai)",
1717
+ "name": "provider",
1718
+ "required": true
1719
+ }
1720
+ },
1721
+ "description": "Switch the active provider",
1761
1722
  "examples": [
1762
- "<%= config.bin %> space switch"
1723
+ "<%= config.bin %> providers switch anthropic",
1724
+ "<%= config.bin %> providers switch openai --format json"
1763
1725
  ],
1764
1726
  "flags": {
1765
1727
  "format": {
1766
- "char": "f",
1767
- "description": "Output format",
1728
+ "description": "Output format (text or json)",
1768
1729
  "name": "format",
1769
1730
  "default": "text",
1770
1731
  "hasDynamicHelp": false,
@@ -1778,7 +1739,7 @@
1778
1739
  },
1779
1740
  "hasDynamicHelp": false,
1780
1741
  "hiddenAliases": [],
1781
- "id": "space:switch",
1742
+ "id": "providers:switch",
1782
1743
  "pluginAlias": "byterover-cli",
1783
1744
  "pluginName": "byterover-cli",
1784
1745
  "pluginType": "core",
@@ -1789,36 +1750,37 @@
1789
1750
  "dist",
1790
1751
  "oclif",
1791
1752
  "commands",
1792
- "space",
1753
+ "providers",
1793
1754
  "switch.js"
1794
1755
  ]
1795
1756
  },
1796
- "worktree:add": {
1757
+ "source:add": {
1797
1758
  "aliases": [],
1798
1759
  "args": {
1799
1760
  "path": {
1800
- "description": "Path to the directory to register as a worktree (relative or absolute)",
1761
+ "description": "Path to the target project containing .brv/",
1801
1762
  "name": "path",
1802
- "required": false
1763
+ "required": true
1803
1764
  }
1804
1765
  },
1805
- "description": "Register a directory as a worktree of this project",
1766
+ "description": "Add a read-only knowledge source from another project's context tree",
1806
1767
  "examples": [
1807
- "<%= config.bin %> <%= command.id %> packages/api",
1808
- "<%= config.bin %> <%= command.id %> ../other-checkout",
1809
- "<%= config.bin %> <%= command.id %> (auto-detect parent from subdirectory)"
1768
+ "<%= config.bin %> <%= command.id %> /path/to/shared-lib",
1769
+ "<%= config.bin %> <%= command.id %> /path/to/shared-lib --alias shared"
1810
1770
  ],
1811
1771
  "flags": {
1812
- "force": {
1813
- "description": "Replace existing .brv/ directory in target with a worktree pointer",
1814
- "name": "force",
1815
- "allowNo": false,
1816
- "type": "boolean"
1772
+ "alias": {
1773
+ "description": "Custom alias for the source (defaults to directory name)",
1774
+ "name": "alias",
1775
+ "required": false,
1776
+ "hasDynamicHelp": false,
1777
+ "multiple": false,
1778
+ "type": "option"
1817
1779
  }
1818
1780
  },
1819
1781
  "hasDynamicHelp": false,
1820
1782
  "hiddenAliases": [],
1821
- "id": "worktree:add",
1783
+ "id": "source:add",
1822
1784
  "pluginAlias": "byterover-cli",
1823
1785
  "pluginName": "byterover-cli",
1824
1786
  "pluginType": "core",
@@ -1829,21 +1791,21 @@
1829
1791
  "dist",
1830
1792
  "oclif",
1831
1793
  "commands",
1832
- "worktree",
1794
+ "source",
1833
1795
  "add.js"
1834
1796
  ]
1835
1797
  },
1836
- "worktree": {
1798
+ "source": {
1837
1799
  "aliases": [],
1838
1800
  "args": {},
1839
- "description": "Manage worktree links for subdirectories and sibling checkouts",
1801
+ "description": "Manage knowledge sources (read-only references to other projects)",
1840
1802
  "examples": [
1841
1803
  "<%= config.bin %> <%= command.id %> --help"
1842
1804
  ],
1843
1805
  "flags": {},
1844
1806
  "hasDynamicHelp": false,
1845
1807
  "hiddenAliases": [],
1846
- "id": "worktree",
1808
+ "id": "source",
1847
1809
  "pluginAlias": "byterover-cli",
1848
1810
  "pluginName": "byterover-cli",
1849
1811
  "pluginType": "core",
@@ -1854,21 +1816,21 @@
1854
1816
  "dist",
1855
1817
  "oclif",
1856
1818
  "commands",
1857
- "worktree",
1819
+ "source",
1858
1820
  "index.js"
1859
1821
  ]
1860
1822
  },
1861
- "worktree:list": {
1823
+ "source:list": {
1862
1824
  "aliases": [],
1863
1825
  "args": {},
1864
- "description": "Show the current worktree link and list all registered worktrees",
1826
+ "description": "List all knowledge sources and their status",
1865
1827
  "examples": [
1866
1828
  "<%= config.bin %> <%= command.id %>"
1867
1829
  ],
1868
1830
  "flags": {},
1869
1831
  "hasDynamicHelp": false,
1870
1832
  "hiddenAliases": [],
1871
- "id": "worktree:list",
1833
+ "id": "source:list",
1872
1834
  "pluginAlias": "byterover-cli",
1873
1835
  "pluginName": "byterover-cli",
1874
1836
  "pluginType": "core",
@@ -1879,28 +1841,28 @@
1879
1841
  "dist",
1880
1842
  "oclif",
1881
1843
  "commands",
1882
- "worktree",
1844
+ "source",
1883
1845
  "list.js"
1884
1846
  ]
1885
1847
  },
1886
- "worktree:remove": {
1848
+ "source:remove": {
1887
1849
  "aliases": [],
1888
1850
  "args": {
1889
- "path": {
1890
- "description": "Path to the worktree to remove (defaults to cwd)",
1891
- "name": "path",
1892
- "required": false
1851
+ "aliasOrPath": {
1852
+ "description": "Alias or path of the knowledge source to remove",
1853
+ "name": "aliasOrPath",
1854
+ "required": true
1893
1855
  }
1894
1856
  },
1895
- "description": "Remove a worktree registration and its .brv pointer",
1857
+ "description": "Remove a knowledge source",
1896
1858
  "examples": [
1897
- "<%= config.bin %> <%= command.id %> (remove cwd as worktree)",
1898
- "<%= config.bin %> <%= command.id %> packages/api (remove from parent)"
1859
+ "<%= config.bin %> <%= command.id %> shared-lib",
1860
+ "<%= config.bin %> <%= command.id %> /path/to/shared-lib"
1899
1861
  ],
1900
1862
  "flags": {},
1901
1863
  "hasDynamicHelp": false,
1902
1864
  "hiddenAliases": [],
1903
- "id": "worktree:remove",
1865
+ "id": "source:remove",
1904
1866
  "pluginAlias": "byterover-cli",
1905
1867
  "pluginName": "byterover-cli",
1906
1868
  "pluginType": "core",
@@ -1911,7 +1873,7 @@
1911
1873
  "dist",
1912
1874
  "oclif",
1913
1875
  "commands",
1914
- "worktree",
1876
+ "source",
1915
1877
  "remove.js"
1916
1878
  ]
1917
1879
  },
@@ -2517,6 +2479,128 @@
2517
2479
  "status.js"
2518
2480
  ]
2519
2481
  },
2482
+ "worktree:add": {
2483
+ "aliases": [],
2484
+ "args": {
2485
+ "path": {
2486
+ "description": "Path to the directory to register as a worktree (relative or absolute)",
2487
+ "name": "path",
2488
+ "required": false
2489
+ }
2490
+ },
2491
+ "description": "Register a directory as a worktree of this project",
2492
+ "examples": [
2493
+ "<%= config.bin %> <%= command.id %> packages/api",
2494
+ "<%= config.bin %> <%= command.id %> ../other-checkout",
2495
+ "<%= config.bin %> <%= command.id %> (auto-detect parent from subdirectory)"
2496
+ ],
2497
+ "flags": {
2498
+ "force": {
2499
+ "description": "Replace existing .brv/ directory in target with a worktree pointer",
2500
+ "name": "force",
2501
+ "allowNo": false,
2502
+ "type": "boolean"
2503
+ }
2504
+ },
2505
+ "hasDynamicHelp": false,
2506
+ "hiddenAliases": [],
2507
+ "id": "worktree:add",
2508
+ "pluginAlias": "byterover-cli",
2509
+ "pluginName": "byterover-cli",
2510
+ "pluginType": "core",
2511
+ "strict": true,
2512
+ "enableJsonFlag": false,
2513
+ "isESM": true,
2514
+ "relativePath": [
2515
+ "dist",
2516
+ "oclif",
2517
+ "commands",
2518
+ "worktree",
2519
+ "add.js"
2520
+ ]
2521
+ },
2522
+ "worktree": {
2523
+ "aliases": [],
2524
+ "args": {},
2525
+ "description": "Manage worktree links for subdirectories and sibling checkouts",
2526
+ "examples": [
2527
+ "<%= config.bin %> <%= command.id %> --help"
2528
+ ],
2529
+ "flags": {},
2530
+ "hasDynamicHelp": false,
2531
+ "hiddenAliases": [],
2532
+ "id": "worktree",
2533
+ "pluginAlias": "byterover-cli",
2534
+ "pluginName": "byterover-cli",
2535
+ "pluginType": "core",
2536
+ "strict": true,
2537
+ "enableJsonFlag": false,
2538
+ "isESM": true,
2539
+ "relativePath": [
2540
+ "dist",
2541
+ "oclif",
2542
+ "commands",
2543
+ "worktree",
2544
+ "index.js"
2545
+ ]
2546
+ },
2547
+ "worktree:list": {
2548
+ "aliases": [],
2549
+ "args": {},
2550
+ "description": "Show the current worktree link and list all registered worktrees",
2551
+ "examples": [
2552
+ "<%= config.bin %> <%= command.id %>"
2553
+ ],
2554
+ "flags": {},
2555
+ "hasDynamicHelp": false,
2556
+ "hiddenAliases": [],
2557
+ "id": "worktree:list",
2558
+ "pluginAlias": "byterover-cli",
2559
+ "pluginName": "byterover-cli",
2560
+ "pluginType": "core",
2561
+ "strict": true,
2562
+ "enableJsonFlag": false,
2563
+ "isESM": true,
2564
+ "relativePath": [
2565
+ "dist",
2566
+ "oclif",
2567
+ "commands",
2568
+ "worktree",
2569
+ "list.js"
2570
+ ]
2571
+ },
2572
+ "worktree:remove": {
2573
+ "aliases": [],
2574
+ "args": {
2575
+ "path": {
2576
+ "description": "Path to the worktree to remove (defaults to cwd)",
2577
+ "name": "path",
2578
+ "required": false
2579
+ }
2580
+ },
2581
+ "description": "Remove a worktree registration and its .brv pointer",
2582
+ "examples": [
2583
+ "<%= config.bin %> <%= command.id %> (remove cwd as worktree)",
2584
+ "<%= config.bin %> <%= command.id %> packages/api (remove from parent)"
2585
+ ],
2586
+ "flags": {},
2587
+ "hasDynamicHelp": false,
2588
+ "hiddenAliases": [],
2589
+ "id": "worktree:remove",
2590
+ "pluginAlias": "byterover-cli",
2591
+ "pluginName": "byterover-cli",
2592
+ "pluginType": "core",
2593
+ "strict": true,
2594
+ "enableJsonFlag": false,
2595
+ "isESM": true,
2596
+ "relativePath": [
2597
+ "dist",
2598
+ "oclif",
2599
+ "commands",
2600
+ "worktree",
2601
+ "remove.js"
2602
+ ]
2603
+ },
2520
2604
  "hub:registry:add": {
2521
2605
  "aliases": [],
2522
2606
  "args": {
@@ -2816,5 +2900,5 @@
2816
2900
  ]
2817
2901
  }
2818
2902
  },
2819
- "version": "3.2.0"
2903
+ "version": "3.3.0"
2820
2904
  }