wealthbox-cli 2.1.0__tar.gz → 2.2.0__tar.gz
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.
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/.github/workflows/ci.yml +8 -8
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/.github/workflows/docs.yml +5 -4
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/CHANGELOG.md +31 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/PKG-INFO +1 -1
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/mkdocs.yml +1 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/pyproject.toml +1 -1
- wealthbox_cli-2.2.0/src/wealthbox_tools/cli/me.py +68 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/references/contacts.md +1 -1
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/references/lookups.md +29 -1
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/references/tasks.md +1 -1
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/uv.lock +1 -1
- wealthbox_cli-2.1.0/src/wealthbox_tools/cli/me.py +0 -25
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/.github/workflows/release-binaries.yml +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/.gitignore +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/CONTRIBUTING.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/LICENSE +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/README.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/SECURITY.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/docs/agents/domain.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/docs/agents/issue-tracker.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/docs/agents/triage-labels.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/docs/cli-reference.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/docs/getting-started.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/docs/index.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/docs/overrides/main.html +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/docs/promotion.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/__init__.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/__init__.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/_config.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/_skill_bootstrap.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/_skill_paths.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/_skill_platforms.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/_util.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/activity.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/categories.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/config.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/contacts.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/doctor.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/events.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/firm.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/households.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/internals.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/main.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/notes.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/opportunities.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/prefs.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/projects.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/self_cmd.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/skills.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/tasks.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/users.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/cli/workflows.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/client/__init__.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/client/activity.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/client/base.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/client/categories.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/client/comments.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/client/contacts.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/client/events.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/client/households.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/client/me.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/client/notes.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/client/opportunities.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/client/projects.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/client/tasks.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/client/users.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/client/workflows.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/firm/__init__.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/firm/archive.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/firm/diff.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/internals/__init__.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/internals/skill_ref_gen.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/models/__init__.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/models/activity.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/models/comments.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/models/common.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/models/contacts.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/models/custom_fields.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/models/enums.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/models/events.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/models/households.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/models/notes.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/models/opportunities.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/models/projects.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/models/tasks.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/models/workflows.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/py.typed +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/self_upgrade.py +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/SKILL.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/bootstrap.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/contacts.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/events.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/notes.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/opportunities.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/projects.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/tasks.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/workflows.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/references/events.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/references/households.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/references/notes.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/references/opportunities.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/references/projects.md +0 -0
- {wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/references/workflows.md +0 -0
|
@@ -11,8 +11,8 @@ jobs:
|
|
|
11
11
|
lint:
|
|
12
12
|
runs-on: ubuntu-latest
|
|
13
13
|
steps:
|
|
14
|
-
- uses: actions/checkout@
|
|
15
|
-
- uses: astral-sh/setup-uv@
|
|
14
|
+
- uses: actions/checkout@v6
|
|
15
|
+
- uses: astral-sh/setup-uv@v8.1.0
|
|
16
16
|
with:
|
|
17
17
|
python-version: "3.12"
|
|
18
18
|
- run: uv sync --extra dev
|
|
@@ -24,8 +24,8 @@ jobs:
|
|
|
24
24
|
matrix:
|
|
25
25
|
python-version: ["3.11", "3.12", "3.13"]
|
|
26
26
|
steps:
|
|
27
|
-
- uses: actions/checkout@
|
|
28
|
-
- uses: astral-sh/setup-uv@
|
|
27
|
+
- uses: actions/checkout@v6
|
|
28
|
+
- uses: astral-sh/setup-uv@v8.1.0
|
|
29
29
|
with:
|
|
30
30
|
python-version: ${{ matrix.python-version }}
|
|
31
31
|
- run: uv sync --extra dev
|
|
@@ -35,8 +35,8 @@ jobs:
|
|
|
35
35
|
needs: [lint, test]
|
|
36
36
|
runs-on: ubuntu-latest
|
|
37
37
|
steps:
|
|
38
|
-
- uses: actions/checkout@
|
|
39
|
-
- uses: astral-sh/setup-uv@
|
|
38
|
+
- uses: actions/checkout@v6
|
|
39
|
+
- uses: astral-sh/setup-uv@v8.1.0
|
|
40
40
|
with:
|
|
41
41
|
python-version: "3.12"
|
|
42
42
|
- run: uv sync --extra dev
|
|
@@ -51,8 +51,8 @@ jobs:
|
|
|
51
51
|
id-token: write
|
|
52
52
|
environment: pypi
|
|
53
53
|
steps:
|
|
54
|
-
- uses: actions/checkout@
|
|
55
|
-
- uses: astral-sh/setup-uv@
|
|
54
|
+
- uses: actions/checkout@v6
|
|
55
|
+
- uses: astral-sh/setup-uv@v8.1.0
|
|
56
56
|
with:
|
|
57
57
|
python-version: "3.12"
|
|
58
58
|
- run: uv build
|
|
@@ -18,14 +18,15 @@ jobs:
|
|
|
18
18
|
build:
|
|
19
19
|
runs-on: ubuntu-latest
|
|
20
20
|
steps:
|
|
21
|
-
- uses: actions/checkout@
|
|
22
|
-
- uses: actions/setup-python@
|
|
21
|
+
- uses: actions/checkout@v6
|
|
22
|
+
- uses: actions/setup-python@v6
|
|
23
23
|
with:
|
|
24
24
|
python-version: "3.12"
|
|
25
25
|
- run: pip install mkdocs-material
|
|
26
26
|
- run: cp CONTRIBUTING.md docs/contributing.md
|
|
27
|
+
- run: cp CHANGELOG.md docs/changelog.md
|
|
27
28
|
- run: mkdocs build --strict
|
|
28
|
-
- uses: actions/upload-pages-artifact@
|
|
29
|
+
- uses: actions/upload-pages-artifact@v5
|
|
29
30
|
with:
|
|
30
31
|
path: site/
|
|
31
32
|
|
|
@@ -37,4 +38,4 @@ jobs:
|
|
|
37
38
|
url: ${{ steps.deployment.outputs.page_url }}
|
|
38
39
|
steps:
|
|
39
40
|
- id: deployment
|
|
40
|
-
uses: actions/deploy-pages@
|
|
41
|
+
uses: actions/deploy-pages@v5
|
|
@@ -4,6 +4,37 @@ All notable changes to `wealthbox-cli` are documented here. The format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
|
|
5
5
|
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [2.2.0] - 2026-05-13
|
|
8
|
+
|
|
9
|
+
Small feature + correctness release. Disambiguates the two IDs returned by
|
|
10
|
+
`wbox me`, fixes a silent truncation in `wbox users list` on large firms, and
|
|
11
|
+
clears Node 20 deprecation warnings from CI ahead of GitHub's June 2026 cutoff.
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
- `wbox me user-id` — prints `current_user.id` (the workspace user ID accepted
|
|
15
|
+
by `--assigned-to`) as a bare integer, for composing with command
|
|
16
|
+
substitution: `wbox tasks list --assigned-to "$(wbox me user-id)"` (#90, #91).
|
|
17
|
+
- `wbox me --format table` now labels the two IDs as `login_id` and
|
|
18
|
+
`user_id (--assigned-to)` so they aren't confusable at a glance. The JSON
|
|
19
|
+
shape is unchanged — no breaking change for existing scripts (#91).
|
|
20
|
+
- Skill docs (`lookups.md`, `tasks.md`, `contacts.md`) flag the two-ID trap
|
|
21
|
+
inline near `--assigned-to`.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
- `wbox users list` now paginates across all pages. Previously, firms with
|
|
25
|
+
more than 25 users silently saw a truncated list — the CLI exposes no
|
|
26
|
+
`--page` flag, so there was no manual workaround.
|
|
27
|
+
- mkdocs docs deploy was failing on every main push because `docs/index.md`
|
|
28
|
+
linked to a missing `changelog.md`. `CHANGELOG.md` is now staged into
|
|
29
|
+
`docs/` at build time and listed in nav (#92).
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
- CI actions bumped to Node 24 runtimes ahead of GitHub's June 2 2026 cutoff:
|
|
33
|
+
`actions/checkout` v4→v6, `astral-sh/setup-uv` v6→v8.1.0 (pinned exact —
|
|
34
|
+
setup-uv v8+ no longer publishes rolling major tags as a supply-chain
|
|
35
|
+
mitigation), `actions/setup-python` v5→v6, `actions/deploy-pages` v4→v5,
|
|
36
|
+
`actions/upload-pages-artifact` v3→v5 (#92, #93).
|
|
37
|
+
|
|
7
38
|
## [2.1.0] - 2026-05-09
|
|
8
39
|
|
|
9
40
|
Repository simplification release. Drops a runtime dep, retires `.env` support,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wealthbox-cli
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.2.0
|
|
4
4
|
Summary: CLI and client library for the Wealthbox CRM API
|
|
5
5
|
Project-URL: Homepage, https://github.com/massive-value/wealthbox-cli
|
|
6
6
|
Project-URL: Documentation, https://massive-value.github.io/wealthbox-cli/
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
|
|
7
|
+
from ._util import (
|
|
8
|
+
OutputFormat,
|
|
9
|
+
_flatten_record,
|
|
10
|
+
_render_kv_table,
|
|
11
|
+
handle_errors,
|
|
12
|
+
output_result,
|
|
13
|
+
run_client,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
app = typer.Typer(
|
|
17
|
+
context_settings={"help_option_names": ["-h", "--help"]},
|
|
18
|
+
help="Show info about the current authenticated user.",
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _relabel_for_table(data: dict[str, Any]) -> dict[str, Any]:
|
|
23
|
+
"""Rename top-level `id` to `login_id` and add `user_id (--assigned-to)`
|
|
24
|
+
so the two IDs aren't confusable in tabular output.
|
|
25
|
+
|
|
26
|
+
The top-level `id` is a login profile (not usable for `--assigned-to`);
|
|
27
|
+
`current_user.id` is the workspace user ID that filters accept.
|
|
28
|
+
"""
|
|
29
|
+
relabeled: dict[str, Any] = {}
|
|
30
|
+
for key, value in data.items():
|
|
31
|
+
relabeled["login_id" if key == "id" else key] = value
|
|
32
|
+
current_user = data.get("current_user")
|
|
33
|
+
if isinstance(current_user, dict) and "id" in current_user:
|
|
34
|
+
relabeled["user_id (--assigned-to)"] = current_user["id"]
|
|
35
|
+
return relabeled
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@app.callback(
|
|
39
|
+
invoke_without_command=True,
|
|
40
|
+
help="Show info about the current authenticated user. Use subcommands for more specific info.",
|
|
41
|
+
)
|
|
42
|
+
@handle_errors
|
|
43
|
+
def get_me(
|
|
44
|
+
ctx: typer.Context,
|
|
45
|
+
token: str | None = typer.Option(None, envvar="WEALTHBOX_TOKEN", hidden=True),
|
|
46
|
+
fmt: OutputFormat = typer.Option(OutputFormat.JSON, "--format"),
|
|
47
|
+
) -> None:
|
|
48
|
+
if ctx.invoked_subcommand is not None:
|
|
49
|
+
return
|
|
50
|
+
data = run_client(token, lambda c: c.get_me())
|
|
51
|
+
if fmt == OutputFormat.TABLE and isinstance(data, dict):
|
|
52
|
+
# Bypass output_result's collection-detection heuristic: once we drop
|
|
53
|
+
# the top-level `id` key, it would mistake `users[]` for a collection.
|
|
54
|
+
typer.echo(_render_kv_table(_flatten_record(_relabel_for_table(data))))
|
|
55
|
+
return
|
|
56
|
+
output_result(data, fmt)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@app.command("user-id", help="Print the workspace user ID (for --assigned-to) as a bare integer.")
|
|
60
|
+
@handle_errors
|
|
61
|
+
def user_id(
|
|
62
|
+
token: str | None = typer.Option(None, envvar="WEALTHBOX_TOKEN", hidden=True),
|
|
63
|
+
) -> None:
|
|
64
|
+
data = run_client(token, lambda c: c.get_me())
|
|
65
|
+
current_user = data.get("current_user") if isinstance(data, dict) else None
|
|
66
|
+
if not isinstance(current_user, dict) or "id" not in current_user:
|
|
67
|
+
raise ValueError("`current_user.id` missing from /me response; cannot determine user ID.")
|
|
68
|
+
typer.echo(current_user["id"])
|
|
@@ -20,7 +20,7 @@ wbox contacts list [OPTIONS]
|
|
|
20
20
|
| `--household-title` | STR | Filter by household title |
|
|
21
21
|
| `--tags` | STR | Comma-separated tag names |
|
|
22
22
|
| `--order` | asc\|desc | Sort order |
|
|
23
|
-
| `--assigned-to` | INT | User ID (fetches all pages, client-side filter) |
|
|
23
|
+
| `--assigned-to` | INT | User ID (fetches all pages, client-side filter). Get yours via `wbox me user-id`, **not** `wbox me \| jq .id` (that's the login profile, which silently returns zero results). |
|
|
24
24
|
| `--updated-since` | ISO datetime | Modified after this datetime |
|
|
25
25
|
| `--updated-before` | ISO datetime | Modified before this datetime |
|
|
26
26
|
| `--deleted-since` | ISO datetime | Deleted after this datetime |
|
|
@@ -6,10 +6,35 @@ Read-only resources: categories, users, activity feed, and current user info.
|
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
wbox me [--format json|table|csv|tsv]
|
|
9
|
+
wbox me user-id
|
|
9
10
|
```
|
|
10
11
|
|
|
11
12
|
Returns info about the authenticated user. Good for verifying token setup and getting your user ID.
|
|
12
13
|
|
|
14
|
+
### Two IDs — don't confuse them
|
|
15
|
+
|
|
16
|
+
`wbox me` returns two distinct ID fields, and they are NOT interchangeable:
|
|
17
|
+
|
|
18
|
+
| JSON field | What it is | Use for `--assigned-to`? |
|
|
19
|
+
|------------|------------|--------------------------|
|
|
20
|
+
| top-level `id` | Login profile ID (one per Wealthbox account, across workspaces) | **No** |
|
|
21
|
+
| `current_user.id` (also `users[].id` for the active workspace) | Workspace user ID | **Yes** |
|
|
22
|
+
|
|
23
|
+
Filters like `--assigned-to`, `--assigned-to-team`, and `--created-by` expect the workspace user ID. Passing the top-level `id` returns zero results silently — the API just ignores the filter.
|
|
24
|
+
|
|
25
|
+
The safe ways to get your workspace user ID:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
wbox me user-id # prints just the integer, ready for shell substitution
|
|
29
|
+
wbox me --format table # labels the rows `login_id` vs `user_id (--assigned-to)`
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Composing it:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
wbox tasks list --assigned-to "$(wbox me user-id)"
|
|
36
|
+
```
|
|
37
|
+
|
|
13
38
|
## Users
|
|
14
39
|
|
|
15
40
|
```bash
|
|
@@ -64,7 +89,10 @@ The contact-related types are also reachable as aliases under `wbox contacts cat
|
|
|
64
89
|
## Examples
|
|
65
90
|
|
|
66
91
|
```bash
|
|
67
|
-
# Get your user ID
|
|
92
|
+
# Get your workspace user ID (for --assigned-to)
|
|
93
|
+
wbox me user-id
|
|
94
|
+
|
|
95
|
+
# Or see both IDs side by side
|
|
68
96
|
wbox me --format table
|
|
69
97
|
|
|
70
98
|
# Find a user ID for assignment
|
|
@@ -13,7 +13,7 @@ wbox tasks list [OPTIONS]
|
|
|
13
13
|
| `--contact` | INT | Filter by linked contact ID |
|
|
14
14
|
| `--project` | INT | Filter by linked project ID |
|
|
15
15
|
| `--opportunity` | INT | Filter by linked opportunity ID |
|
|
16
|
-
| `--assigned-to` | INT | Filter by assigned user ID |
|
|
16
|
+
| `--assigned-to` | INT | Filter by assigned user ID — get yours via `wbox me user-id`, **not** `wbox me \| jq .id` (that's the login profile, which silently returns zero results). |
|
|
17
17
|
| `--assigned-to-team` | INT | Filter by assigned team ID |
|
|
18
18
|
| `--created-by` | INT | Filter by creator user ID |
|
|
19
19
|
| `--include-completed` | flag | Include completed tasks (default: outstanding only) |
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
import typer
|
|
4
|
-
|
|
5
|
-
from ._util import OutputFormat, handle_errors, output_result, run_client
|
|
6
|
-
|
|
7
|
-
app = typer.Typer(
|
|
8
|
-
context_settings={"help_option_names": ["-h", "--help"]},
|
|
9
|
-
help="Show info about the current authenticated user.",
|
|
10
|
-
)
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
@app.callback(
|
|
14
|
-
invoke_without_command=True,
|
|
15
|
-
help="Show info about the current authenticated user. Use subcommands for more specific info.",
|
|
16
|
-
)
|
|
17
|
-
@handle_errors
|
|
18
|
-
def get_me(
|
|
19
|
-
ctx: typer.Context,
|
|
20
|
-
token: str | None = typer.Option(None, envvar="WEALTHBOX_TOKEN", hidden=True),
|
|
21
|
-
fmt: OutputFormat = typer.Option(OutputFormat.JSON, "--format"),
|
|
22
|
-
) -> None:
|
|
23
|
-
if ctx.invoked_subcommand is not None:
|
|
24
|
-
return
|
|
25
|
-
output_result(run_client(token, lambda c: c.get_me()), fmt)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/SKILL.md
RENAMED
|
File without changes
|
{wealthbox_cli-2.1.0 → wealthbox_cli-2.2.0}/src/wealthbox_tools/skills/wealthbox-crm/bootstrap.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|