@go-labs-sg/bb 2.4.0 → 2.6.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.
- package/README.md +1 -1
- package/command-manifest.json +46 -0
- package/command-reference.md +8 -0
- package/dist/commands.js +4 -0
- package/dist/index.js +15 -2
- package/dist/registry/index.js +2 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -184,7 +184,7 @@ Project and budget query payloads keep the Asana identities explicit: `asanaTask
|
|
|
184
184
|
| **Approvals** | `list-approvals` / `get-pending-approvals` (`--type budget\|supplier\|bill\|quotation\|customer_invoice\|all`), `approve-bill` / `reject-bill` (send reply email), `approve-budget` / `reject-budget` (send reply email), `approve-supplier` / `reject-supplier` (send reply email), `approve-quotation` / `reject-quotation`, `approve-customer-invoice` / `reject-customer-invoice` |
|
|
185
185
|
| **Companies & projects** | `list-companies`, `get-company`, `create-company`, `update-company` (`--payload`), `delete-company`, `list-projects`, `get-project` (its budget overview returns `totalRevenue`, calculated only from Estimate Accepted and Estimate Closed budgets), `create-project` (required: `--name`, `--companyId`, `--contactPersonId`, `--insideSalesId`, `--businessDevelopmentId`, `--venue`, `--startDate` as ISO datetime for project/window start; when `--asanaTaskId` is omitted, the CLI searches open Asana lead tasks in the Deals project, prompts for one of the top five matches, and resolves Slack channel fields from the selected deal card; optional `--asanaSearch`, `--pax`, `--endDate`, `--description`, `--projectManagerId`; always requests QBO project import like the web app), `update-project` (`--payload` with `dateRange.from` / `dateRange.to` for the project window; optional `projectManagerId` and `requestQboAccountantNotification` in JSON), `delete-project`, `check-project-reconciliation <id>` (runs the web app's live checks without changing status), `reconcile-project <id>` (reruns checks transactionally and marks an eligible project `RECONCILED`), `complete-project <id>` (reruns validation, marks a reconciled project `COMPLETED`, and queues QuickBooks placeholder cleanup), `import-qbo-project`, `update-project-status` (`<id>` `<status>`: `PITCH` \| `WON` \| `COMPLETED` \| `RECONCILED` \| `LOST`; close-out follows `WON` → `RECONCILED` → `COMPLETED`, and reconciliation requires every accepted/closed budget line to have an Approved/Paid bill or claim or be explicitly Not Utilized; marking `COMPLETED` queues deletion of every remaining project placeholder bill from QuickBooks; for `PITCH` → `WON` also pass a Budget Builder user `--projectManagerId` or `--projectManagerEmail`; when marking `WON` without an accepted/closed budget or proof, pass `--wonOverrideReason`) |
|
|
186
186
|
| **Contacts** | `list-contacts`, `create-contact-person` (`--payload`), `update-contact-person` (`--payload`) |
|
|
187
|
-
| **Suppliers & items** | `list-suppliers` (defaults to active suppliers, `--perPage 10`, sorted by `createdAt` desc; supports `--name`, `--sortBy` for scalar supplier fields, `--sortDir`, `--createdBy`, `--gstRegistered`, `--status`, `--supplierTags`, `--active false` for archived suppliers), `create-supplier` (`--payload`; when supplier status is `PENDING_APPROVAL`, also runs `supplier.createSupplierApproval` and `email.sendSupplierApprovalRequestEmail`), `update-supplier` (`--payload`; when supplier status is `PENDING_APPROVAL`, also runs `supplier.createSupplierApproval` and `email.sendSupplierApprovalRequestEmail`), `delete-suppliers` (`--ids` CSV; admin; archives/deactivates related items), `reactivate-suppliers` (`--ids` CSV; admin; reactivates related items), `create-certification` / `create-payment-method` / `create-supplier-role` / `create-supplier-tag` (`--name`), `get-supplier-details` (includes `supplierApprovalSummary` for pending approvers, superseded approvers, and the actual responder/respondedAt metadata), `get-supplier-analytics` (admin), `list-items`, `create-item` (`--payload`), `update-item` (`--payload`), `delete-item
|
|
187
|
+
| **Suppliers & items** | `list-suppliers` (defaults to active suppliers, `--perPage 10`, sorted by `createdAt` desc; supports `--name`, `--sortBy` for scalar supplier fields, `--sortDir`, `--createdBy`, `--gstRegistered`, `--status`, `--supplierTags`, `--active false` for archived suppliers), `create-supplier` (`--payload`; when supplier status is `PENDING_APPROVAL`, also runs `supplier.createSupplierApproval` and `email.sendSupplierApprovalRequestEmail`), `update-supplier` (`--payload`; when supplier status is `PENDING_APPROVAL`, also runs `supplier.createSupplierApproval` and `email.sendSupplierApprovalRequestEmail`), `delete-suppliers` (`--ids` CSV; admin; archives/deactivates related items), `reactivate-suppliers` (`--ids` CSV; admin; reactivates related items), `create-certification` / `create-payment-method` / `create-supplier-role` / `create-supplier-tag` (`--name`), `get-supplier-details` (includes `supplierApprovalSummary` for pending approvers, superseded approvers, and the actual responder/respondedAt metadata), `get-supplier-analytics` (admin), `list-items`, `create-item` (`--payload`), `update-item` (`--payload`), `archive-items` (`--ids` CSV, max 100; Budget Builder only; users can archive their own items, leads/admins any item; blocked by Draft/Pending Approval/Approved budgets), `delete-item` (admin; archives in Budget Builder and makes the item inactive in QuickBooks), `get-item`, `list-item-categories`, `create-item-category` / `update-item-category` / `delete-item-categories` (admin; `--ids` CSV for delete) |
|
|
188
188
|
| **Dashboard & users** | `whoami` (current API-key owner identity and role), `list-users`, `create-user` (admin; provisions an API-only service identity with no Google sign-in; `--email`, optional `--name`, optional `--role` defaulting to `USER`), `create-api-key` (`--name`; defaults to the caller; admin-only `--userId` for another user; raw key shown once), `list-api-keys` (defaults to the caller; admin-only `--userId` for another user), `revoke-api-key` (key ID; admin-only `--userId` for another user), `get-user-performance`, `get-dashboard`, `get-monthly-metrics`, `get-system-overview`, `get-estimate-performance`, `get-financial-overview` (performance/dashboard commands are admin-only) |
|
|
189
189
|
| **Errors (admin)** | `get-recent-errors`, `get-error-metrics` |
|
|
190
190
|
| **Automation (admin)** | `list-integration-operations`, `retry-integration-operation` |
|
package/command-manifest.json
CHANGED
|
@@ -5487,6 +5487,52 @@
|
|
|
5487
5487
|
"effects": ["state-change", "external-write"],
|
|
5488
5488
|
"legacyTarget": "update-item"
|
|
5489
5489
|
},
|
|
5490
|
+
{
|
|
5491
|
+
"path": ["item", "archive"],
|
|
5492
|
+
"legacyAliases": ["archive-items", "archive_items"],
|
|
5493
|
+
"summary": "Archive Items.",
|
|
5494
|
+
"globalOptions": [
|
|
5495
|
+
{
|
|
5496
|
+
"name": "--help",
|
|
5497
|
+
"description": "Show help for this command."
|
|
5498
|
+
},
|
|
5499
|
+
{
|
|
5500
|
+
"name": "--quiet",
|
|
5501
|
+
"description": "Suppress non-error diagnostics."
|
|
5502
|
+
},
|
|
5503
|
+
{
|
|
5504
|
+
"name": "--debug",
|
|
5505
|
+
"description": "Emit sanitized diagnostic traces."
|
|
5506
|
+
},
|
|
5507
|
+
{
|
|
5508
|
+
"name": "--api-url",
|
|
5509
|
+
"description": "Override the Budget Builder API base URL."
|
|
5510
|
+
},
|
|
5511
|
+
{
|
|
5512
|
+
"name": "--allow-state-change",
|
|
5513
|
+
"description": "Allow a Budget Builder state change in non-interactive use."
|
|
5514
|
+
},
|
|
5515
|
+
{
|
|
5516
|
+
"name": "--allow-email",
|
|
5517
|
+
"description": "Allow sending email in non-interactive use."
|
|
5518
|
+
},
|
|
5519
|
+
{
|
|
5520
|
+
"name": "--allow-external-write",
|
|
5521
|
+
"description": "Allow writes to external systems in non-interactive use."
|
|
5522
|
+
},
|
|
5523
|
+
{
|
|
5524
|
+
"name": "--allow-delete",
|
|
5525
|
+
"description": "Allow deleting data in non-interactive use."
|
|
5526
|
+
},
|
|
5527
|
+
{
|
|
5528
|
+
"name": "--allow-financial-write",
|
|
5529
|
+
"description": "Allow financial-record changes in non-interactive use."
|
|
5530
|
+
}
|
|
5531
|
+
],
|
|
5532
|
+
"argumentMode": "legacy-passthrough",
|
|
5533
|
+
"effects": ["state-change"],
|
|
5534
|
+
"legacyTarget": "archive-items"
|
|
5535
|
+
},
|
|
5490
5536
|
{
|
|
5491
5537
|
"path": ["item", "delete"],
|
|
5492
5538
|
"legacyAliases": ["delete-item", "delete_item"],
|
package/command-reference.md
CHANGED
|
@@ -960,6 +960,14 @@ Legacy aliases: `update-item`, `update_item`.
|
|
|
960
960
|
|
|
961
961
|
Effects: state-change, external-write.
|
|
962
962
|
|
|
963
|
+
## `bb item archive`
|
|
964
|
+
|
|
965
|
+
Archive Items.
|
|
966
|
+
|
|
967
|
+
Legacy aliases: `archive-items`, `archive_items`.
|
|
968
|
+
|
|
969
|
+
Effects: state-change.
|
|
970
|
+
|
|
963
971
|
## `bb item delete`
|
|
964
972
|
|
|
965
973
|
Delete Item.
|
package/dist/commands.js
CHANGED
|
@@ -1241,6 +1241,10 @@ export async function deleteItemById(itemId) {
|
|
|
1241
1241
|
const result = await api.item.deleteItem.mutate({ id: itemId });
|
|
1242
1242
|
out(result);
|
|
1243
1243
|
}
|
|
1244
|
+
export async function archiveItemsByIds(ids) {
|
|
1245
|
+
const result = await api.item.archiveItems.mutate({ ids });
|
|
1246
|
+
out(result);
|
|
1247
|
+
}
|
|
1244
1248
|
export async function deleteSuppliersByIds(ids) {
|
|
1245
1249
|
const result = await api.supplier.deleteSuppliers.mutate({ ids });
|
|
1246
1250
|
out(result);
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { resolve } from "node:path";
|
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
import { BUDGET_BUILDER_API_BASE_URL, configureBudgetBuilderApiBaseUrl, DEFAULT_BUDGET_BUILDER_API_BASE_URL, requireApiKey, } from "./api-client.js";
|
|
7
7
|
import { consumeCliQuietFlags, logCliAction, sanitizeFlagsForTrace, setCliQuiet, shouldLogCliActions, } from "./cli-trace.js";
|
|
8
|
-
import { addBudgetItems, approveBill, approveBudget, approveCustomerInvoice, approveQuotation, approveSupplier, checkCustomerInvoiceReadiness, checkProjectReconciliation, cleanupStagedBillAttachments, cleanupStagedQuotationAttachments, completeProject, createApiKeyForUser, createBillApproval, createBillFromPayload, createBudgetApproval, createBudgetCategory, createBudgetFromPayload, createCompany, createContactPersonFromPayload, createCustomerInvoice, createEstimate, createItemCategory, createItemFromPayload, createPlaceholderBillForBudgetItem, createProject, createQuotationFromPayload, createSupplierCertification, createSupplierFromPayload, createSupplierPaymentMethod, createSupplierRoleOption, createSupplierTagOption, createUser, deleteBillById, deleteBudgetById, deleteBudgetCategory, deleteBudgetCommission, deleteBudgetDiscount, deleteCompanyById, deleteCustomerInvoice, deleteItemById, deleteItemCategoriesByIds, deleteProjectById, deleteQuotationById, deleteSuppliersByIds, discardCreatingCustomerInvoice, downloadCustomerInvoicePaymentProof, downloadCustomerInvoicePdf, downloadQuotationPdf, getApprovedBudgets, getBillAttachments, getBillDetails, getBudget, getBudgetCategories, getBudgetCategoryBenchmarks, getBudgetDetails, getBudgetItemsOnly, getBudgetVersions, getCompany, getCustomerInvoice, getCustomerInvoiceEmailContext, getDashboard, getErrorMetrics, getEstimatePerformance, getFinancialOverview, getItem, getItemPricingHistory, getMonthlyMetrics, getProject, getQuotationDetails, getRecentErrors, getSupplierAnalytics, getSupplierDetails, getSupplierPricingHistory, getSystemOverview, getUserPerformance, importQuickBooksProjectId, listApiKeysForUser, listApprovals, listBills, listBudgets, listCompanies, listContacts, listCustomerInvoices, listEligibleCustomerInvoiceBudgets, listIntegrationOperations, listItemCategories, listItems, listProjects, listQuotations, listSuppliers, listUsers, markBudgetWonWithProof, markCustomerInvoicePaidFromPath, patchBillInvoiceNumber, patchBillPayment, reactivateSuppliersByIds, reconcileProject, rejectBill, rejectBudget, rejectCustomerInvoice, rejectQuotation, rejectSupplier, removeBudgetItem, renameBudgetVersion, reorderBudgetItemsCli, restoreBudgetVersion, retryIntegrationOperation, revokeApiKeyForUser, sendCustomerInvoiceToContactPersonFromPayload, sendEstimateToContactPersonFromPayload, setBudgetItemsNotUtilized, stageBillAttachmentsFromPaths, submitQuotation, syncCustomerInvoice, updateBillFromPayload, updateBillPaymentEvidenceFromPayload, updateBillStatus, updateBudgetCategory, updateBudgetCommissionFromPayload, updateBudgetDiscountFromPayload, updateBudgetFromPayload, updateBudgetItem, updateBudgetItemSupplierCli, updateBudgetStatus, updateCompanyFromPayload, updateContactPersonFromPayload, updateItemCategory, updateItemFromPayload, updateProjectFromPayload, updateProjectStatus, updateQuotationFromPayload, updateSupplierFromPayload, uploadBillAttachmentFromPath, uploadBillAttachmentsFromPaths, uploadBillDocumentsFromPaths, uploadBudgetAttachmentFromPath, uploadQuotationAttachmentFromPath, validateBillSelectionFromPayload, voidCustomerInvoice, whoAmI, } from "./commands.js";
|
|
8
|
+
import { addBudgetItems, approveBill, approveBudget, approveCustomerInvoice, approveQuotation, approveSupplier, archiveItemsByIds, checkCustomerInvoiceReadiness, checkProjectReconciliation, cleanupStagedBillAttachments, cleanupStagedQuotationAttachments, completeProject, createApiKeyForUser, createBillApproval, createBillFromPayload, createBudgetApproval, createBudgetCategory, createBudgetFromPayload, createCompany, createContactPersonFromPayload, createCustomerInvoice, createEstimate, createItemCategory, createItemFromPayload, createPlaceholderBillForBudgetItem, createProject, createQuotationFromPayload, createSupplierCertification, createSupplierFromPayload, createSupplierPaymentMethod, createSupplierRoleOption, createSupplierTagOption, createUser, deleteBillById, deleteBudgetById, deleteBudgetCategory, deleteBudgetCommission, deleteBudgetDiscount, deleteCompanyById, deleteCustomerInvoice, deleteItemById, deleteItemCategoriesByIds, deleteProjectById, deleteQuotationById, deleteSuppliersByIds, discardCreatingCustomerInvoice, downloadCustomerInvoicePaymentProof, downloadCustomerInvoicePdf, downloadQuotationPdf, getApprovedBudgets, getBillAttachments, getBillDetails, getBudget, getBudgetCategories, getBudgetCategoryBenchmarks, getBudgetDetails, getBudgetItemsOnly, getBudgetVersions, getCompany, getCustomerInvoice, getCustomerInvoiceEmailContext, getDashboard, getErrorMetrics, getEstimatePerformance, getFinancialOverview, getItem, getItemPricingHistory, getMonthlyMetrics, getProject, getQuotationDetails, getRecentErrors, getSupplierAnalytics, getSupplierDetails, getSupplierPricingHistory, getSystemOverview, getUserPerformance, importQuickBooksProjectId, listApiKeysForUser, listApprovals, listBills, listBudgets, listCompanies, listContacts, listCustomerInvoices, listEligibleCustomerInvoiceBudgets, listIntegrationOperations, listItemCategories, listItems, listProjects, listQuotations, listSuppliers, listUsers, markBudgetWonWithProof, markCustomerInvoicePaidFromPath, patchBillInvoiceNumber, patchBillPayment, reactivateSuppliersByIds, reconcileProject, rejectBill, rejectBudget, rejectCustomerInvoice, rejectQuotation, rejectSupplier, removeBudgetItem, renameBudgetVersion, reorderBudgetItemsCli, restoreBudgetVersion, retryIntegrationOperation, revokeApiKeyForUser, sendCustomerInvoiceToContactPersonFromPayload, sendEstimateToContactPersonFromPayload, setBudgetItemsNotUtilized, stageBillAttachmentsFromPaths, submitQuotation, syncCustomerInvoice, updateBillFromPayload, updateBillPaymentEvidenceFromPayload, updateBillStatus, updateBudgetCategory, updateBudgetCommissionFromPayload, updateBudgetDiscountFromPayload, updateBudgetFromPayload, updateBudgetItem, updateBudgetItemSupplierCli, updateBudgetStatus, updateCompanyFromPayload, updateContactPersonFromPayload, updateItemCategory, updateItemFromPayload, updateProjectFromPayload, updateProjectStatus, updateQuotationFromPayload, updateSupplierFromPayload, uploadBillAttachmentFromPath, uploadBillAttachmentsFromPaths, uploadBillDocumentsFromPaths, uploadBudgetAttachmentFromPath, uploadQuotationAttachmentFromPath, validateBillSelectionFromPayload, voidCustomerInvoice, whoAmI, } from "./commands.js";
|
|
9
9
|
import { getFlag, parseArgs } from "./parse-args.js";
|
|
10
10
|
import { billStatusesForUpdateHelp, budgetStatusesForHelp, isBudgetStatusUpdate, parseApprovalTypeFlag, parseBillStatusForUpdate, parseCommaSeparatedBillStatuses, parseCommaSeparatedBudgetStatuses, parseCommaSeparatedCustomerInvoiceStatuses, parseCommaSeparatedIds, parseCommaSeparatedQuotationStatuses, parseCommaSeparatedSupplierStatuses, parseOptionalBillListSortBy, parseOptionalBillListSortDir, parseOptionalDashboardRole, parseOptionalDeals, parseOptionalErrorSeverity, parseOptionalErrorStatus, parseOptionalExtendedProjectStatus, parseOptionalFinancialRole, parseOptionalSupplierAnalyticsTimeFrame, parseOptionalTimeFrame, parseProjectStatusForUpdate, parseUserRole, projectStatusesForHelp, userRolesForHelp, } from "./parse-cli-enums.js";
|
|
11
11
|
import { parseJsonFlag, parseOptionalNumber as parseOptNum, } from "./parse-json-flag.js";
|
|
@@ -317,7 +317,8 @@ Suppliers & items
|
|
|
317
317
|
create-supplier-tag --name (supplier.createSupplierTag)
|
|
318
318
|
create-item --payload '<json>' (item.createItem)
|
|
319
319
|
update-item --payload '<json>' (item.updateItem; must include id)
|
|
320
|
-
|
|
320
|
+
archive-items --ids <csv> (item.archiveItems; Budget Builder only; max 100; users can archive their own items, leads/admins any item; blocked by Draft/Pending Approval/Approved budgets)
|
|
321
|
+
delete-item <id> (item.deleteItem; admin; archives in Budget Builder and makes the item inactive in QuickBooks)
|
|
321
322
|
get-supplier-details <supplierId>
|
|
322
323
|
get-supplier-analytics [--name] [--page] [--perPage] [--timeFrame ALL|LAST_YEAR|…] (admin)
|
|
323
324
|
list-items [--name] [--page] [--perPage]
|
|
@@ -1877,6 +1878,18 @@ export async function runCli(argv = process.argv, runtime = createProcessRuntime
|
|
|
1877
1878
|
await deleteItemById(id);
|
|
1878
1879
|
break;
|
|
1879
1880
|
}
|
|
1881
|
+
case "archive-items": {
|
|
1882
|
+
const idsRaw = getFlag(flags, "ids");
|
|
1883
|
+
if (!idsRaw) {
|
|
1884
|
+
throw new Error("archive-items requires --ids <csv>");
|
|
1885
|
+
}
|
|
1886
|
+
const ids = parseCommaSeparatedIds(String(idsRaw));
|
|
1887
|
+
if (!ids?.length) {
|
|
1888
|
+
throw new Error("archive-items requires non-empty --ids");
|
|
1889
|
+
}
|
|
1890
|
+
await archiveItemsByIds(ids);
|
|
1891
|
+
break;
|
|
1892
|
+
}
|
|
1880
1893
|
case "list-item-categories": {
|
|
1881
1894
|
await listItemCategories({
|
|
1882
1895
|
page: parsePositiveIntFlag(getFlag(flags, "page"), "--page"),
|
package/dist/registry/index.js
CHANGED
|
@@ -37,6 +37,7 @@ export const globalCommandOptions = [
|
|
|
37
37
|
const mutationPrefixes = [
|
|
38
38
|
"add-",
|
|
39
39
|
"approve-",
|
|
40
|
+
"archive-",
|
|
40
41
|
"attach-",
|
|
41
42
|
"cleanup-",
|
|
42
43
|
"complete-",
|
|
@@ -409,6 +410,7 @@ const registry = [
|
|
|
409
410
|
legacyCommand("get-item", ["item", "get"]),
|
|
410
411
|
legacyCommand("create-item", ["item", "create"]),
|
|
411
412
|
legacyCommand("update-item", ["item", "update"]),
|
|
413
|
+
legacyCommand("archive-items", ["item", "archive"]),
|
|
412
414
|
legacyCommand("delete-item", ["item", "delete"]),
|
|
413
415
|
legacyCommand("list-item-categories", ["item", "category", "list"]),
|
|
414
416
|
legacyCommand("create-item-category", ["item", "category", "create"]),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@go-labs-sg/bb",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "Budget Builder CLI for AI agents — manage budgets, bills, claims, quotations, and customer invoices with explicit workflow previews for sensitive changes.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|