wealthbox-cli 1.5.1__tar.gz → 2.1.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-1.5.1 → wealthbox_cli-2.1.0}/.github/workflows/ci.yml +21 -10
- wealthbox_cli-2.1.0/.github/workflows/release-binaries.yml +220 -0
- wealthbox_cli-1.5.1/docs/changelog.md → wealthbox_cli-2.1.0/CHANGELOG.md +93 -45
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/CONTRIBUTING.md +22 -14
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/PKG-INFO +7 -15
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/README.md +6 -13
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/SECURITY.md +1 -1
- wealthbox_cli-2.1.0/docs/agents/domain.md +51 -0
- wealthbox_cli-2.1.0/docs/agents/issue-tracker.md +22 -0
- wealthbox_cli-2.1.0/docs/agents/triage-labels.md +15 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/docs/getting-started.md +1 -7
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/mkdocs.yml +0 -1
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/pyproject.toml +1 -3
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/__init__.py +9 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/_config.py +24 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/_skill_bootstrap.py +18 -4
- wealthbox_cli-2.1.0/src/wealthbox_tools/cli/_skill_platforms.py +109 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/_util.py +2 -10
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/doctor.py +84 -24
- wealthbox_cli-2.1.0/src/wealthbox_tools/cli/firm.py +158 -0
- wealthbox_cli-2.1.0/src/wealthbox_tools/cli/internals.py +37 -0
- wealthbox_cli-2.1.0/src/wealthbox_tools/cli/main.py +138 -0
- wealthbox_cli-2.1.0/src/wealthbox_tools/cli/prefs.py +44 -0
- wealthbox_cli-2.1.0/src/wealthbox_tools/cli/self_cmd.py +61 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/skills.py +11 -14
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/users.py +1 -1
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/client/base.py +12 -1
- wealthbox_cli-2.1.0/src/wealthbox_tools/firm/__init__.py +31 -0
- wealthbox_cli-2.1.0/src/wealthbox_tools/firm/archive.py +499 -0
- wealthbox_cli-2.1.0/src/wealthbox_tools/firm/diff.py +233 -0
- wealthbox_cli-2.1.0/src/wealthbox_tools/internals/__init__.py +6 -0
- wealthbox_cli-2.1.0/src/wealthbox_tools/internals/skill_ref_gen.py +433 -0
- wealthbox_cli-2.1.0/src/wealthbox_tools/self_upgrade.py +680 -0
- {wealthbox_cli-1.5.1/plugins/wealthbox-crm → wealthbox_cli-2.1.0/src/wealthbox_tools}/skills/wealthbox-crm/SKILL.md +38 -1
- {wealthbox_cli-1.5.1/plugins/wealthbox-crm → wealthbox_cli-2.1.0/src/wealthbox_tools}/skills/wealthbox-crm/bootstrap.md +7 -0
- wealthbox_cli-2.1.0/src/wealthbox_tools/skills/wealthbox-crm/references/contacts.md +519 -0
- wealthbox_cli-2.1.0/src/wealthbox_tools/skills/wealthbox-crm/references/events.md +241 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/skills/wealthbox-crm/references/households.md +51 -0
- wealthbox_cli-2.1.0/src/wealthbox_tools/skills/wealthbox-crm/references/notes.md +157 -0
- wealthbox_cli-2.1.0/src/wealthbox_tools/skills/wealthbox-crm/references/opportunities.md +212 -0
- wealthbox_cli-2.1.0/src/wealthbox_tools/skills/wealthbox-crm/references/projects.md +143 -0
- wealthbox_cli-2.1.0/src/wealthbox_tools/skills/wealthbox-crm/references/tasks.md +251 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/skills/wealthbox-crm/references/workflows.md +165 -0
- wealthbox_cli-2.1.0/uv.lock +635 -0
- wealthbox_cli-1.5.1/.claude-plugin/marketplace.json +0 -25
- wealthbox_cli-1.5.1/.codex-plugin/plugin.json +0 -16
- wealthbox_cli-1.5.1/.env.example +0 -2
- wealthbox_cli-1.5.1/codex-skill/wealthbox-crm/SKILL.md +0 -160
- wealthbox_cli-1.5.1/codex-skill/wealthbox-crm/bootstrap.md +0 -127
- wealthbox_cli-1.5.1/codex-skill/wealthbox-crm/references/contacts.md +0 -155
- wealthbox_cli-1.5.1/codex-skill/wealthbox-crm/references/events.md +0 -88
- wealthbox_cli-1.5.1/codex-skill/wealthbox-crm/references/households.md +0 -40
- wealthbox_cli-1.5.1/codex-skill/wealthbox-crm/references/notes.md +0 -67
- wealthbox_cli-1.5.1/codex-skill/wealthbox-crm/references/opportunities.md +0 -87
- wealthbox_cli-1.5.1/codex-skill/wealthbox-crm/references/projects.md +0 -60
- wealthbox_cli-1.5.1/codex-skill/wealthbox-crm/references/tasks.md +0 -106
- wealthbox_cli-1.5.1/codex-skill/wealthbox-crm/references/workflows.md +0 -145
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/.claude-plugin/plugin.json +0 -17
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/contacts.md +0 -21
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/events.md +0 -9
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/notes.md +0 -5
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/opportunities.md +0 -12
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/projects.md +0 -5
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/tasks.md +0 -14
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/workflows.md +0 -31
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/skills/wealthbox-crm/references/contacts.md +0 -155
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/skills/wealthbox-crm/references/events.md +0 -88
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/skills/wealthbox-crm/references/households.md +0 -40
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/skills/wealthbox-crm/references/lookups.md +0 -78
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/skills/wealthbox-crm/references/notes.md +0 -67
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/skills/wealthbox-crm/references/opportunities.md +0 -87
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/skills/wealthbox-crm/references/projects.md +0 -60
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/skills/wealthbox-crm/references/tasks.md +0 -106
- wealthbox_cli-1.5.1/plugins/wealthbox-crm/skills/wealthbox-crm/references/workflows.md +0 -145
- wealthbox_cli-1.5.1/src/wealthbox_tools/cli/_skill_platforms.py +0 -235
- wealthbox_cli-1.5.1/src/wealthbox_tools/cli/main.py +0 -71
- wealthbox_cli-1.5.1/src/wealthbox_tools/skills/wealthbox-crm/SKILL.md +0 -160
- wealthbox_cli-1.5.1/src/wealthbox_tools/skills/wealthbox-crm/bootstrap.md +0 -127
- wealthbox_cli-1.5.1/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/contacts.md +0 -21
- wealthbox_cli-1.5.1/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/events.md +0 -9
- wealthbox_cli-1.5.1/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/notes.md +0 -5
- wealthbox_cli-1.5.1/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/opportunities.md +0 -12
- wealthbox_cli-1.5.1/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/projects.md +0 -5
- wealthbox_cli-1.5.1/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/tasks.md +0 -14
- wealthbox_cli-1.5.1/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/workflows.md +0 -31
- wealthbox_cli-1.5.1/src/wealthbox_tools/skills/wealthbox-crm/references/contacts.md +0 -155
- wealthbox_cli-1.5.1/src/wealthbox_tools/skills/wealthbox-crm/references/events.md +0 -88
- wealthbox_cli-1.5.1/src/wealthbox_tools/skills/wealthbox-crm/references/lookups.md +0 -78
- wealthbox_cli-1.5.1/src/wealthbox_tools/skills/wealthbox-crm/references/notes.md +0 -67
- wealthbox_cli-1.5.1/src/wealthbox_tools/skills/wealthbox-crm/references/opportunities.md +0 -87
- wealthbox_cli-1.5.1/src/wealthbox_tools/skills/wealthbox-crm/references/projects.md +0 -60
- wealthbox_cli-1.5.1/src/wealthbox_tools/skills/wealthbox-crm/references/tasks.md +0 -106
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/.github/workflows/docs.yml +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/.gitignore +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/LICENSE +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/docs/cli-reference.md +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/docs/index.md +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/docs/overrides/main.html +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/docs/promotion.md +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/__init__.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/_skill_paths.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/activity.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/categories.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/config.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/contacts.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/events.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/households.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/me.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/notes.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/opportunities.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/projects.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/tasks.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/cli/workflows.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/client/__init__.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/client/activity.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/client/categories.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/client/comments.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/client/contacts.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/client/events.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/client/households.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/client/me.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/client/notes.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/client/opportunities.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/client/projects.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/client/tasks.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/client/users.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/client/workflows.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/models/__init__.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/models/activity.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/models/comments.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/models/common.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/models/contacts.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/models/custom_fields.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/models/enums.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/models/events.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/models/households.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/models/notes.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/models/opportunities.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/models/projects.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/models/tasks.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/models/workflows.py +0 -0
- {wealthbox_cli-1.5.1 → wealthbox_cli-2.1.0}/src/wealthbox_tools/py.typed +0 -0
- {wealthbox_cli-1.5.1/codex-skill → wealthbox_cli-2.1.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/contacts.md +0 -0
- {wealthbox_cli-1.5.1/codex-skill → wealthbox_cli-2.1.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/events.md +0 -0
- {wealthbox_cli-1.5.1/codex-skill → wealthbox_cli-2.1.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/notes.md +0 -0
- {wealthbox_cli-1.5.1/codex-skill → wealthbox_cli-2.1.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/opportunities.md +0 -0
- {wealthbox_cli-1.5.1/codex-skill → wealthbox_cli-2.1.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/projects.md +0 -0
- {wealthbox_cli-1.5.1/codex-skill → wealthbox_cli-2.1.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/tasks.md +0 -0
- {wealthbox_cli-1.5.1/codex-skill → wealthbox_cli-2.1.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/workflows.md +0 -0
- {wealthbox_cli-1.5.1/codex-skill → wealthbox_cli-2.1.0/src/wealthbox_tools/skills}/wealthbox-crm/references/lookups.md +0 -0
|
@@ -12,11 +12,11 @@ jobs:
|
|
|
12
12
|
runs-on: ubuntu-latest
|
|
13
13
|
steps:
|
|
14
14
|
- uses: actions/checkout@v4
|
|
15
|
-
- uses:
|
|
15
|
+
- uses: astral-sh/setup-uv@v6
|
|
16
16
|
with:
|
|
17
17
|
python-version: "3.12"
|
|
18
|
-
- run:
|
|
19
|
-
- run: ruff check src/ tests/
|
|
18
|
+
- run: uv sync --extra dev
|
|
19
|
+
- run: uv run ruff check src/ tests/
|
|
20
20
|
|
|
21
21
|
test:
|
|
22
22
|
runs-on: ubuntu-latest
|
|
@@ -25,14 +25,26 @@ jobs:
|
|
|
25
25
|
python-version: ["3.11", "3.12", "3.13"]
|
|
26
26
|
steps:
|
|
27
27
|
- uses: actions/checkout@v4
|
|
28
|
-
- uses:
|
|
28
|
+
- uses: astral-sh/setup-uv@v6
|
|
29
29
|
with:
|
|
30
30
|
python-version: ${{ matrix.python-version }}
|
|
31
|
-
- run:
|
|
32
|
-
- run: pytest
|
|
31
|
+
- run: uv sync --extra dev
|
|
32
|
+
- run: uv run pytest
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
skill-ref-drift:
|
|
35
35
|
needs: [lint, test]
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
steps:
|
|
38
|
+
- uses: actions/checkout@v4
|
|
39
|
+
- uses: astral-sh/setup-uv@v6
|
|
40
|
+
with:
|
|
41
|
+
python-version: "3.12"
|
|
42
|
+
- run: uv sync --extra dev
|
|
43
|
+
- run: uv run wbox internals regen-skill-refs
|
|
44
|
+
- run: git diff --exit-code -- src/wealthbox_tools/skills/wealthbox-crm/references/
|
|
45
|
+
|
|
46
|
+
publish:
|
|
47
|
+
needs: [lint, test, skill-ref-drift]
|
|
36
48
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
37
49
|
runs-on: ubuntu-latest
|
|
38
50
|
permissions:
|
|
@@ -40,9 +52,8 @@ jobs:
|
|
|
40
52
|
environment: pypi
|
|
41
53
|
steps:
|
|
42
54
|
- uses: actions/checkout@v4
|
|
43
|
-
- uses:
|
|
55
|
+
- uses: astral-sh/setup-uv@v6
|
|
44
56
|
with:
|
|
45
57
|
python-version: "3.12"
|
|
46
|
-
- run:
|
|
47
|
-
- run: python -m build
|
|
58
|
+
- run: uv build
|
|
48
59
|
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# Per-platform PyInstaller build + GitHub Release upload.
|
|
2
|
+
#
|
|
3
|
+
# Triggered on v* tags (and manually via workflow_dispatch for fork
|
|
4
|
+
# validation). Builds a single-file ``wbox`` binary for each of the four
|
|
5
|
+
# supported targets, computes its SHA-256, and uploads the binaries plus
|
|
6
|
+
# a combined manifest as assets on the GitHub Release for the tag.
|
|
7
|
+
#
|
|
8
|
+
# The PyPI publish job lives in ci.yml and is intentionally not touched
|
|
9
|
+
# here — both workflows fire on ``v*`` tags but operate independently.
|
|
10
|
+
#
|
|
11
|
+
# ----------------------------------------------------------------------
|
|
12
|
+
# Manifest contract (LOCKED — downstream consumers: issue #42 install.sh
|
|
13
|
+
# rewrite, issue #43 install.ps1 parity)
|
|
14
|
+
# ----------------------------------------------------------------------
|
|
15
|
+
# Manifest filename: SHA256SUMS.txt
|
|
16
|
+
# Format: standard sha256sum-compatible. One record per line:
|
|
17
|
+
# <hex-sha256><two-spaces><filename>
|
|
18
|
+
# Sort order: ASCII-sorted by filename (stable across runs)
|
|
19
|
+
# Binary filenames:
|
|
20
|
+
# wbox-linux-x64
|
|
21
|
+
# wbox-macos-arm64
|
|
22
|
+
# wbox-macos-x64
|
|
23
|
+
# wbox-windows-x64.exe
|
|
24
|
+
# Manifest assets are attached to the same GitHub Release as the four
|
|
25
|
+
# binaries. Install scripts can fetch SHA256SUMS.txt and a single binary
|
|
26
|
+
# from the same release URL prefix and verify the binary against the
|
|
27
|
+
# matching line.
|
|
28
|
+
# ----------------------------------------------------------------------
|
|
29
|
+
|
|
30
|
+
name: Release Binaries
|
|
31
|
+
|
|
32
|
+
on:
|
|
33
|
+
push:
|
|
34
|
+
tags: ["v*"]
|
|
35
|
+
workflow_dispatch: {}
|
|
36
|
+
|
|
37
|
+
permissions:
|
|
38
|
+
contents: read
|
|
39
|
+
|
|
40
|
+
jobs:
|
|
41
|
+
build:
|
|
42
|
+
name: Build ${{ matrix.target }}
|
|
43
|
+
runs-on: ${{ matrix.os }}
|
|
44
|
+
strategy:
|
|
45
|
+
fail-fast: false
|
|
46
|
+
matrix:
|
|
47
|
+
include:
|
|
48
|
+
- os: ubuntu-latest
|
|
49
|
+
target: linux-x64
|
|
50
|
+
binary: wbox-linux-x64
|
|
51
|
+
- os: macos-15-intel # Intel runner (x86_64) — macos-13 was retired Dec 2025
|
|
52
|
+
target: macos-x64
|
|
53
|
+
binary: wbox-macos-x64
|
|
54
|
+
- os: macos-14 # Apple Silicon runner (arm64)
|
|
55
|
+
target: macos-arm64
|
|
56
|
+
binary: wbox-macos-arm64
|
|
57
|
+
- os: windows-latest
|
|
58
|
+
target: windows-x64
|
|
59
|
+
binary: wbox-windows-x64.exe
|
|
60
|
+
steps:
|
|
61
|
+
- name: Checkout
|
|
62
|
+
uses: actions/checkout@v4
|
|
63
|
+
|
|
64
|
+
- name: Set up Python
|
|
65
|
+
uses: actions/setup-python@v5
|
|
66
|
+
with:
|
|
67
|
+
python-version: "3.12"
|
|
68
|
+
|
|
69
|
+
- name: Install runtime + build deps
|
|
70
|
+
run: |
|
|
71
|
+
python -m pip install --upgrade pip
|
|
72
|
+
pip install .
|
|
73
|
+
pip install pyinstaller
|
|
74
|
+
|
|
75
|
+
- name: Build single-file binary (Unix)
|
|
76
|
+
if: runner.os != 'Windows'
|
|
77
|
+
shell: bash
|
|
78
|
+
run: |
|
|
79
|
+
pyinstaller \
|
|
80
|
+
--onefile \
|
|
81
|
+
--name "${{ matrix.binary }}" \
|
|
82
|
+
--noconfirm \
|
|
83
|
+
--collect-data wealthbox_tools \
|
|
84
|
+
--copy-metadata wealthbox-cli \
|
|
85
|
+
scripts/wbox_entry.py
|
|
86
|
+
test -f "dist/${{ matrix.binary }}"
|
|
87
|
+
chmod +x "dist/${{ matrix.binary }}"
|
|
88
|
+
|
|
89
|
+
- name: Build single-file binary (Windows)
|
|
90
|
+
if: runner.os == 'Windows'
|
|
91
|
+
shell: pwsh
|
|
92
|
+
run: |
|
|
93
|
+
pyinstaller `
|
|
94
|
+
--onefile `
|
|
95
|
+
--name "${{ matrix.binary }}" `
|
|
96
|
+
--noconfirm `
|
|
97
|
+
--collect-data wealthbox_tools `
|
|
98
|
+
--copy-metadata wealthbox-cli `
|
|
99
|
+
scripts/wbox_entry.py
|
|
100
|
+
if (-not (Test-Path "dist/${{ matrix.binary }}")) {
|
|
101
|
+
throw "expected dist/${{ matrix.binary }} to exist"
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
- name: Smoke-test binary
|
|
105
|
+
# `--version` only proves the entry point runs. `skills install`
|
|
106
|
+
# exercises bundled package data — it reads
|
|
107
|
+
# wealthbox_tools/skills/wealthbox-crm via importlib.resources — so
|
|
108
|
+
# this fails loudly if --collect-data wealthbox_tools didn't bundle
|
|
109
|
+
# the skill template. Runs against the fresh runner HOME with
|
|
110
|
+
# --no-bootstrap to skip the post-install confirm prompt.
|
|
111
|
+
run: |
|
|
112
|
+
./dist/${{ matrix.binary }} --version
|
|
113
|
+
./dist/${{ matrix.binary }} skills install --platform claude-code-user --no-bootstrap
|
|
114
|
+
|
|
115
|
+
- name: Compute SHA-256 (Unix)
|
|
116
|
+
if: runner.os != 'Windows'
|
|
117
|
+
shell: bash
|
|
118
|
+
working-directory: dist
|
|
119
|
+
run: |
|
|
120
|
+
if command -v sha256sum >/dev/null 2>&1; then
|
|
121
|
+
sha256sum "${{ matrix.binary }}" > "${{ matrix.binary }}.sha256"
|
|
122
|
+
else
|
|
123
|
+
# macOS: shasum -a 256 emits sha256sum-compatible "<hash> <name>"
|
|
124
|
+
shasum -a 256 "${{ matrix.binary }}" > "${{ matrix.binary }}.sha256"
|
|
125
|
+
fi
|
|
126
|
+
cat "${{ matrix.binary }}.sha256"
|
|
127
|
+
|
|
128
|
+
- name: Compute SHA-256 (Windows)
|
|
129
|
+
if: runner.os == 'Windows'
|
|
130
|
+
shell: pwsh
|
|
131
|
+
working-directory: dist
|
|
132
|
+
run: |
|
|
133
|
+
$hash = (Get-FileHash -Algorithm SHA256 "${{ matrix.binary }}").Hash.ToLower()
|
|
134
|
+
# sha256sum format: "<hex> <filename>" (two spaces, LF line ending)
|
|
135
|
+
$line = "$hash ${{ matrix.binary }}`n"
|
|
136
|
+
[System.IO.File]::WriteAllText(
|
|
137
|
+
(Join-Path $PWD "${{ matrix.binary }}.sha256"),
|
|
138
|
+
$line
|
|
139
|
+
)
|
|
140
|
+
Get-Content "${{ matrix.binary }}.sha256"
|
|
141
|
+
|
|
142
|
+
- name: Upload build artifact
|
|
143
|
+
uses: actions/upload-artifact@v4
|
|
144
|
+
with:
|
|
145
|
+
name: wbox-${{ matrix.target }}
|
|
146
|
+
path: |
|
|
147
|
+
dist/${{ matrix.binary }}
|
|
148
|
+
dist/${{ matrix.binary }}.sha256
|
|
149
|
+
if-no-files-found: error
|
|
150
|
+
retention-days: 7
|
|
151
|
+
|
|
152
|
+
manifest-and-release:
|
|
153
|
+
name: Combine manifest and upload to release
|
|
154
|
+
needs: [build]
|
|
155
|
+
runs-on: ubuntu-latest
|
|
156
|
+
permissions:
|
|
157
|
+
contents: write
|
|
158
|
+
steps:
|
|
159
|
+
- name: Download all build artifacts
|
|
160
|
+
uses: actions/download-artifact@v4
|
|
161
|
+
with:
|
|
162
|
+
path: artifacts
|
|
163
|
+
|
|
164
|
+
- name: Stage release files
|
|
165
|
+
shell: bash
|
|
166
|
+
run: |
|
|
167
|
+
mkdir -p release
|
|
168
|
+
# Each artifact directory contains one binary + one .sha256 file.
|
|
169
|
+
find artifacts -type f \( -name 'wbox-*' -a ! -name '*.sha256' \) -exec cp -v {} release/ \;
|
|
170
|
+
find artifacts -type f -name '*.sha256' -exec cp -v {} release/ \;
|
|
171
|
+
ls -la release
|
|
172
|
+
|
|
173
|
+
- name: Build combined SHA256SUMS.txt
|
|
174
|
+
shell: bash
|
|
175
|
+
working-directory: release
|
|
176
|
+
run: |
|
|
177
|
+
# Concatenate per-binary sums into a single sha256sum-compatible
|
|
178
|
+
# manifest, ASCII-sorted by filename for stability.
|
|
179
|
+
# Each .sha256 file is already in "<hex> <filename>" form.
|
|
180
|
+
cat *.sha256 | LC_ALL=C sort -k 2 > SHA256SUMS.txt
|
|
181
|
+
echo "----- SHA256SUMS.txt -----"
|
|
182
|
+
cat SHA256SUMS.txt
|
|
183
|
+
echo "--------------------------"
|
|
184
|
+
# Verify the manifest against the staged binaries as a sanity check.
|
|
185
|
+
sha256sum -c SHA256SUMS.txt
|
|
186
|
+
|
|
187
|
+
- name: Upload combined manifest artifact
|
|
188
|
+
uses: actions/upload-artifact@v4
|
|
189
|
+
with:
|
|
190
|
+
name: SHA256SUMS
|
|
191
|
+
path: release/SHA256SUMS.txt
|
|
192
|
+
if-no-files-found: error
|
|
193
|
+
|
|
194
|
+
- name: Upload assets to GitHub Release
|
|
195
|
+
if: startsWith(github.ref, 'refs/tags/')
|
|
196
|
+
env:
|
|
197
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
198
|
+
TAG: ${{ github.ref_name }}
|
|
199
|
+
GH_REPO: ${{ github.repository }}
|
|
200
|
+
shell: bash
|
|
201
|
+
working-directory: release
|
|
202
|
+
run: |
|
|
203
|
+
# Ensure a release exists for the tag. If the PyPI publish job in
|
|
204
|
+
# ci.yml or a manual release-create created it first, --clobber on
|
|
205
|
+
# upload handles re-runs cleanly.
|
|
206
|
+
if ! gh release view "$TAG" >/dev/null 2>&1; then
|
|
207
|
+
gh release create "$TAG" \
|
|
208
|
+
--title "$TAG" \
|
|
209
|
+
--notes "Automated release for $TAG. Binaries built by release-binaries.yml; PyPI wheel published by ci.yml."
|
|
210
|
+
fi
|
|
211
|
+
# Upload all four binaries + the combined manifest. Per-platform
|
|
212
|
+
# .sha256 sidecars are intentionally not uploaded — SHA256SUMS.txt
|
|
213
|
+
# is the single source of truth for installers.
|
|
214
|
+
gh release upload "$TAG" \
|
|
215
|
+
wbox-linux-x64 \
|
|
216
|
+
wbox-macos-arm64 \
|
|
217
|
+
wbox-macos-x64 \
|
|
218
|
+
wbox-windows-x64.exe \
|
|
219
|
+
SHA256SUMS.txt \
|
|
220
|
+
--clobber
|
|
@@ -1,12 +1,94 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
All notable changes to
|
|
3
|
+
All notable changes to `wealthbox-cli` are documented here. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
|
|
5
|
+
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
## [2.1.0] - 2026-05-09
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
Repository simplification release. Drops a runtime dep, retires `.env` support,
|
|
10
|
+
and switches dev tooling to [uv](https://docs.astral.sh/uv/).
|
|
8
11
|
|
|
9
|
-
|
|
12
|
+
### Breaking
|
|
13
|
+
- **Removed `.env` file support.** Token resolution is now a 3-tier chain:
|
|
14
|
+
`--token` flag → `WEALTHBOX_TOKEN` env var → config file. Users relying on a
|
|
15
|
+
working-directory `.env` should migrate to `wbox config set-token` (preferred)
|
|
16
|
+
or export `WEALTHBOX_TOKEN` in their shell. The `python-dotenv` runtime
|
|
17
|
+
dependency was dropped.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
- Development tooling moved to [uv](https://docs.astral.sh/uv/). `uv sync
|
|
21
|
+
--extra dev` replaces the manual `python -m venv` + activate + `pip install
|
|
22
|
+
-e` dance, and `uv run wbox …` replaces direct `.venv/bin/wbox` invocation.
|
|
23
|
+
CI now uses `astral-sh/setup-uv@v6` and `uv build` for the publish job. Plain
|
|
24
|
+
`pip install -e ".[dev]"` continues to work — `pyproject.toml` is the source
|
|
25
|
+
of truth for both tools.
|
|
26
|
+
- `scripts/run-wbox.sh` and `scripts/smoke_test.sh` invoke via `uv run` and no
|
|
27
|
+
longer source a `.env` file.
|
|
28
|
+
|
|
29
|
+
### Removed
|
|
30
|
+
- `.env` and `.env.example` files at the repo root.
|
|
31
|
+
- `.python-version` file. `requires-python = ">=3.11"` in `pyproject.toml` is
|
|
32
|
+
the authoritative interpreter constraint; uv reads it directly.
|
|
33
|
+
|
|
34
|
+
## [2.0.0] - 2026-05-09
|
|
35
|
+
|
|
36
|
+
v2 retires the Claude marketplace plugin distribution and ships `wbox` as a
|
|
37
|
+
standalone binary plus a PyPI package. Existing v1 users must reinstall via the
|
|
38
|
+
new bootstrap script or `pip install wealthbox-cli` — see Breaking below.
|
|
39
|
+
|
|
40
|
+
### Breaking
|
|
41
|
+
- **Retired the Claude marketplace plugin distribution.** `wbox` no longer
|
|
42
|
+
ships through the Claude marketplace. Install via `pip install wealthbox-cli`
|
|
43
|
+
or the bootstrap script (`curl -fsSL https://github.com/massive-value/wealthbox-cli/releases/latest/download/install.sh | sh`).
|
|
44
|
+
v1's `claude plugin install` flow is gone.
|
|
45
|
+
- **Rewrote `install.sh` and `install.ps1`** to fetch a prebuilt binary from
|
|
46
|
+
GitHub Releases instead of detecting and preferring the Claude marketplace
|
|
47
|
+
plugin (#42, #43). The installers now verify a checksum manifest before
|
|
48
|
+
swapping the binary into place.
|
|
49
|
+
- **Removed v1 distribution artifacts** — the in-repo plugin manifest and
|
|
50
|
+
marketplace metadata are deleted (#27).
|
|
51
|
+
- **Dropped plugin-cache scanning** from the skill platform helpers; `wbox
|
|
52
|
+
doctor` and `wbox skills list` no longer probe Claude's plugin cache (#28).
|
|
53
|
+
|
|
54
|
+
### Added
|
|
55
|
+
- `wbox firm export` — end-to-end export of the configured firm's CRM data to
|
|
56
|
+
a portable JSON snapshot (#31).
|
|
57
|
+
- `wbox firm import` with `--mode overwrite|merge|abort-on-conflict` and
|
|
58
|
+
`--from-url` for fetching a snapshot directly from a URL (#36, #46, #45).
|
|
59
|
+
- `wbox firm diff` — diff a local snapshot against the live firm to preview
|
|
60
|
+
what an import would change (#47).
|
|
61
|
+
- Post-import provenance metadata and a 90-day freshness warning surfaced by
|
|
62
|
+
`wbox doctor` (#48).
|
|
63
|
+
- `wbox doctor` promoted to a top-level command, with a warning when the local
|
|
64
|
+
install is more than 30 days behind the latest GitHub release (#41).
|
|
65
|
+
- `wbox self upgrade` — happy-path binary self-update (#32), Windows
|
|
66
|
+
deferred-swap support (#67), and a subprocess hand-off so a fresh `wbox`
|
|
67
|
+
upgrades bundled skills after the binary swap (#40).
|
|
68
|
+
- `wbox prefs` — user-preferences slot for per-user defaults (#29).
|
|
69
|
+
- Per-platform PyInstaller build + release workflow that publishes Linux,
|
|
70
|
+
macOS, and Windows binaries plus a checksum manifest to GitHub Releases (#33).
|
|
71
|
+
- Skill-reference auto-generation markers across the bundled skill (#30, #85)
|
|
72
|
+
and a CI drift-detection job that fails when generated skill blocks fall out
|
|
73
|
+
of sync (#86).
|
|
74
|
+
- Bootstrap Q&A skips the onboarding prompts when an imported firm snapshot
|
|
75
|
+
already carries an `onboarded_at` timestamp (#49).
|
|
76
|
+
- `wbox firm apply` and `wbox doctor` now sweep stale `.old.<ts>` backup files
|
|
77
|
+
left behind by interrupted upgrades (#39).
|
|
78
|
+
|
|
79
|
+
### Changed
|
|
80
|
+
- Rewrote the README around the v2 install flow — bootstrap script first, PyPI
|
|
81
|
+
second, no marketplace path (#83).
|
|
82
|
+
- Documented the three-layer config resolution (flag > env > config file) and
|
|
83
|
+
the new `prefs` commands inside the bundled skill (#34).
|
|
84
|
+
|
|
85
|
+
### Fixed
|
|
86
|
+
- `wbox self upgrade` now reads the checksum manifest under its release-asset
|
|
87
|
+
filename, fixing the post-#33 break (#82).
|
|
88
|
+
- Pytest no longer clobbers the developer's real `~/.wbox_rate_limit.json`;
|
|
89
|
+
the rate-limit state file is isolated per test session (#56).
|
|
90
|
+
|
|
91
|
+
## [1.3.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.3.0) - 2026-05-03
|
|
10
92
|
|
|
11
93
|
### Added
|
|
12
94
|
|
|
@@ -20,9 +102,7 @@ This project uses [Semantic Versioning](https://semver.org/).
|
|
|
20
102
|
- Bootstrap `install.sh` no longer hangs at startup. The previous version did `exec </dev/tty` at the top, which cut off bash's source of piped script content (`curl … | bash`) and waited forever for the rest of the script to arrive on the user's keyboard. The whole body is now wrapped in a `main()` function so bash reads it fully before executing.
|
|
21
103
|
- Bootstrap `install.ps1` no longer auto-closes its window on error. Wrapped in try/catch/finally with explicit step headers and a "Press Enter to close" pause so a transient PowerShell host stays open long enough to show the actual error.
|
|
22
104
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
## [1.2.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.2.0) — 2026-05-02
|
|
105
|
+
## [1.2.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.2.0) - 2026-05-02
|
|
26
106
|
|
|
27
107
|
### Changed
|
|
28
108
|
|
|
@@ -45,9 +125,7 @@ This project uses [Semantic Versioning](https://semver.org/).
|
|
|
45
125
|
|
|
46
126
|
- `--platform` flag on `bootstrap`, `refresh`, and `mark-onboarded` is accepted but ignored, with a warning. Firm operations are no longer scoped per platform.
|
|
47
127
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
## [1.1.6](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.6) — 2026-05-01
|
|
128
|
+
## [1.1.6](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.6) - 2026-05-01
|
|
51
129
|
|
|
52
130
|
### Fixed
|
|
53
131
|
- `wbox skills bootstrap` and `wbox skills refresh` now paginate every API call. Previously they fetched a single page (default `per_page=25`) for each category type, custom-field document type, and the user list, silently truncating any workspace with more than 25 entries per group. Generated `firm/categories.md`, `firm/custom-fields.md`, and `firm/users.md` are now complete.
|
|
@@ -58,9 +136,7 @@ This project uses [Semantic Versioning](https://semver.org/).
|
|
|
58
136
|
- `wbox skills mark-onboarded` — stamps `firm.onboarded_at` in the skill's `_meta.json`. The agent invokes this as the last step of `bootstrap.md`; users typically don't need to run it manually.
|
|
59
137
|
- `wbox skills list` and `wbox skills doctor` now report onboarded status (`bootstrapped (qualitative pending)` vs `onboarded`).
|
|
60
138
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
## [1.1.5](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.5) — 2026-05-01
|
|
139
|
+
## [1.1.5](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.5) - 2026-05-01
|
|
64
140
|
|
|
65
141
|
### Fixed
|
|
66
142
|
- `wbox skills install`, `wbox skills bootstrap`, and `wbox skills refresh` now honor every token source the rest of the CLI does. Previously these commands only looked at the `--token` flag and `WEALTHBOX_TOKEN` env var, ignoring tokens stored via `wbox config set-token` and `.env` files. Users running `wbox skills install` after `wbox config set-token` saw "Wealthbox token required" errors despite having a token set.
|
|
@@ -69,9 +145,7 @@ This project uses [Semantic Versioning](https://semver.org/).
|
|
|
69
145
|
### Added
|
|
70
146
|
- `wbox skills install` accepts `--token` (matching `bootstrap`, `refresh`, and `doctor`), so a token can be supplied inline for the post-install bootstrap step.
|
|
71
147
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
## [1.1.4](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.4) — 2026-05-01
|
|
148
|
+
## [1.1.4](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.4) - 2026-05-01
|
|
75
149
|
|
|
76
150
|
### Added
|
|
77
151
|
- Workspace-level aliases for every resource-scoped category lookup. `wbox categories contact-types`, `wbox categories contact-roles`, `wbox categories event-categories`, `wbox categories task-categories`, and the rest now work alongside their existing `wbox <resource> categories` forms. Both routes call the same API endpoint.
|
|
@@ -79,25 +153,19 @@ This project uses [Semantic Versioning](https://semver.org/).
|
|
|
79
153
|
### Docs
|
|
80
154
|
- Skill references (`lookups.md`, `contacts.md`) and `docs/cli-reference.md` updated to surface the workspace-level form as the primary listing.
|
|
81
155
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
## [1.0.2](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.2) — 2026-03-30
|
|
156
|
+
## [1.0.2](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.2) - 2026-03-30
|
|
85
157
|
|
|
86
158
|
### Changed
|
|
87
159
|
- Redesigned comment handling — comments are now embedded in `get` commands
|
|
88
160
|
- Added ID shorthand for resource lookups
|
|
89
161
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
## [1.0.1](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.1) — 2026-03-30
|
|
162
|
+
## [1.0.1](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.1) - 2026-03-30
|
|
93
163
|
|
|
94
164
|
### Changed
|
|
95
165
|
- Updated README with API token instructions and config commands
|
|
96
166
|
- Added deploy workflow documentation
|
|
97
167
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
## [1.0.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.0) — 2026-03-29
|
|
168
|
+
## [1.0.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.0) - 2026-03-29
|
|
101
169
|
|
|
102
170
|
### Added
|
|
103
171
|
- Full CRUD for contacts (person, household, organization, trust), tasks, events, and notes
|
|
@@ -115,76 +183,56 @@ This project uses [Semantic Versioning](https://semver.org/).
|
|
|
115
183
|
- GitHub Actions CI (lint + test across Python 3.11, 3.12, 3.13)
|
|
116
184
|
- PyPI publishing via trusted publishers (OIDC)
|
|
117
185
|
|
|
118
|
-
---
|
|
119
|
-
|
|
120
186
|
## [0.8.5](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.8.5)
|
|
121
187
|
|
|
122
188
|
### Changed
|
|
123
189
|
- Standardized CLI help text across all commands
|
|
124
190
|
|
|
125
|
-
---
|
|
126
|
-
|
|
127
191
|
## [0.8.4](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.8.4)
|
|
128
192
|
|
|
129
193
|
### Added
|
|
130
194
|
- PyPI badges and install instructions
|
|
131
195
|
|
|
132
|
-
---
|
|
133
|
-
|
|
134
196
|
## [0.8.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.8.0)
|
|
135
197
|
|
|
136
198
|
### Added
|
|
137
199
|
- Events CRUD support
|
|
138
200
|
- Notes CRUD support (create, read, update — delete not supported by API)
|
|
139
201
|
|
|
140
|
-
---
|
|
141
|
-
|
|
142
202
|
## [0.7.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.7.0)
|
|
143
203
|
|
|
144
204
|
### Added
|
|
145
205
|
- Tasks CRUD support
|
|
146
206
|
- Task categories
|
|
147
207
|
|
|
148
|
-
---
|
|
149
|
-
|
|
150
208
|
## [0.6.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.6.0)
|
|
151
209
|
|
|
152
210
|
### Added
|
|
153
211
|
- Household member management commands
|
|
154
212
|
|
|
155
|
-
---
|
|
156
|
-
|
|
157
213
|
## [0.5.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.5.0)
|
|
158
214
|
|
|
159
215
|
### Added
|
|
160
216
|
- Contact CRUD operations
|
|
161
217
|
- Contact categories and metadata lookups
|
|
162
218
|
|
|
163
|
-
---
|
|
164
|
-
|
|
165
219
|
## [0.4.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.4.0)
|
|
166
220
|
|
|
167
221
|
### Added
|
|
168
222
|
- Output format support (`--format json|table|csv|tsv`)
|
|
169
223
|
|
|
170
|
-
---
|
|
171
|
-
|
|
172
224
|
## [0.3.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.3.0)
|
|
173
225
|
|
|
174
226
|
### Added
|
|
175
227
|
- User listing and `me` command
|
|
176
228
|
- Activity feed with cursor-based pagination
|
|
177
229
|
|
|
178
|
-
---
|
|
179
|
-
|
|
180
230
|
## [0.2.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.2.0)
|
|
181
231
|
|
|
182
232
|
### Added
|
|
183
233
|
- Rate limiting (sliding-window, 300 req / 5-min)
|
|
184
234
|
- Token configuration (`--token`, env var, `.env`)
|
|
185
235
|
|
|
186
|
-
---
|
|
187
|
-
|
|
188
236
|
## [0.1.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.1.0)
|
|
189
237
|
|
|
190
238
|
### Added
|
|
@@ -6,38 +6,46 @@ Thank you for your interest in contributing to **wealthbox-cli**!
|
|
|
6
6
|
|
|
7
7
|
## Development Setup
|
|
8
8
|
|
|
9
|
+
This project uses [uv](https://docs.astral.sh/uv/) for dependency management. Install it first if you don't have it:
|
|
10
|
+
|
|
9
11
|
```bash
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
# macOS / Linux
|
|
13
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
14
|
+
|
|
15
|
+
# Windows (PowerShell)
|
|
16
|
+
irm https://astral.sh/uv/install.ps1 | iex
|
|
13
17
|
```
|
|
14
18
|
|
|
15
|
-
|
|
19
|
+
Then clone and sync:
|
|
16
20
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
```bash
|
|
22
|
+
git clone https://github.com/massive-value/wealthbox-cli
|
|
23
|
+
cd wealthbox-cli
|
|
24
|
+
uv sync --extra dev
|
|
25
|
+
```
|
|
22
26
|
|
|
23
|
-
|
|
27
|
+
`uv sync` creates a project-local `.venv/` and installs the package in editable mode with dev dependencies. There is nothing to "activate" — prefix commands with `uv run`:
|
|
24
28
|
|
|
25
29
|
```bash
|
|
26
|
-
|
|
30
|
+
uv run wbox --version
|
|
31
|
+
uv run pytest
|
|
32
|
+
uv run ruff check src/ tests/
|
|
27
33
|
```
|
|
28
34
|
|
|
29
35
|
Configure your Wealthbox API token (optional — tests don't require a real token):
|
|
30
36
|
|
|
31
37
|
```bash
|
|
32
|
-
wbox config set-token
|
|
38
|
+
uv run wbox config set-token
|
|
33
39
|
```
|
|
34
40
|
|
|
41
|
+
> Prefer plain `pip`? `pip install -e ".[dev]"` still works — `pyproject.toml` is the source of truth for both tools.
|
|
42
|
+
|
|
35
43
|
---
|
|
36
44
|
|
|
37
45
|
## Running Tests
|
|
38
46
|
|
|
39
47
|
```bash
|
|
40
|
-
pytest
|
|
48
|
+
uv run pytest
|
|
41
49
|
```
|
|
42
50
|
|
|
43
51
|
Tests use [respx](https://lundberg.github.io/respx/) to mock HTTP at the transport layer — no real API calls are made.
|
|
@@ -45,7 +53,7 @@ Tests use [respx](https://lundberg.github.io/respx/) to mock HTTP at the transpo
|
|
|
45
53
|
## Code Style
|
|
46
54
|
|
|
47
55
|
```bash
|
|
48
|
-
ruff check src/ tests/
|
|
56
|
+
uv run ruff check src/ tests/
|
|
49
57
|
```
|
|
50
58
|
|
|
51
59
|
- **ruff** for linting (E, F, I rules; 120-char line length)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wealthbox-cli
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 2.1.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/
|
|
@@ -28,7 +28,6 @@ Classifier: Typing :: Typed
|
|
|
28
28
|
Requires-Python: >=3.11
|
|
29
29
|
Requires-Dist: httpx<1.0,>=0.27
|
|
30
30
|
Requires-Dist: pydantic<3.0,>=2.0
|
|
31
|
-
Requires-Dist: python-dotenv<2.0,>=1.0
|
|
32
31
|
Requires-Dist: tabulate<1.0,>=0.9
|
|
33
32
|
Requires-Dist: typer<1.0,>=0.12
|
|
34
33
|
Provides-Extra: dev
|
|
@@ -57,9 +56,9 @@ Description-Content-Type: text/markdown
|
|
|
57
56
|
| **Windows** (PowerShell) | `irm https://raw.githubusercontent.com/massive-value/wealthbox-cli/main/scripts/install.ps1 \| iex` |
|
|
58
57
|
|
|
59
58
|
The installer:
|
|
60
|
-
1.
|
|
61
|
-
2.
|
|
62
|
-
3.
|
|
59
|
+
1. Downloads the prebuilt `wbox` binary from the latest GitHub Release and verifies its SHA-256 checksum (no Python required).
|
|
60
|
+
2. Installs the AI agent skill into [Claude Code](https://claude.ai/download) (and Codex, if you have it).
|
|
61
|
+
3. Asks for your **Wealthbox API token**. *Where to find it:* in Wealthbox, click your initials in the top right → **Settings** → **API Access** → **Create Access Token**. Paste the token when prompted.
|
|
63
62
|
|
|
64
63
|
That's it. Open Claude Code and try one of the prompts below.
|
|
65
64
|
|
|
@@ -104,16 +103,9 @@ You stay in control: the agent shows you what it's about to do before it does it
|
|
|
104
103
|
|
|
105
104
|
------------------------------------------------------------------------
|
|
106
105
|
|
|
107
|
-
##
|
|
106
|
+
## What gets installed, where
|
|
108
107
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
```
|
|
112
|
-
/plugin marketplace add massive-value/wealthbox-cli
|
|
113
|
-
/plugin install wealthbox-crm@massive-value
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
The plugin auto-updates daily. Firm data lives at `~/.config/wbox/firm/` (Mac/Linux) or `%APPDATA%\wbox\firm\` (Windows) and survives plugin updates. Run `wbox doctor` to see your install status anytime.
|
|
108
|
+
The installer drops a single prebuilt `wbox` binary onto your PATH (`~/.local/bin/wbox` on Mac/Linux, `%LOCALAPPDATA%\Programs\wbox\wbox.exe` on Windows), then registers the AI agent skill with Claude Code (and Codex, if it's installed). Firm data lives at `~/.config/wbox/firm/` (Mac/Linux) or `%APPDATA%\wbox\firm\` (Windows) and survives reinstalls and upgrades. Run `wbox doctor` to see your install status anytime, and `wbox skills upgrade` to pull the latest skill template.
|
|
117
109
|
|
|
118
110
|
------------------------------------------------------------------------
|
|
119
111
|
|
|
@@ -155,7 +147,7 @@ wbox skills uninstall # remove the skill template (firm data is preserved)
|
|
|
155
147
|
wbox doctor # comprehensive health check
|
|
156
148
|
```
|
|
157
149
|
|
|
158
|
-
The
|
|
150
|
+
The one-line installer (top of this README) wires up Claude Code automatically. These commands are for the cases the installer doesn't cover: re-running on a different host, swapping platforms, project-scoped installs, or air-gapped setups where you've placed the `wbox` binary by hand.
|
|
159
151
|
</details>
|
|
160
152
|
|
|
161
153
|
<details>
|