wealthbox-cli 1.5.0__tar.gz → 2.0.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.0 → wealthbox_cli-2.0.0}/.github/workflows/ci.yml +13 -1
- wealthbox_cli-2.0.0/.github/workflows/release-binaries.yml +220 -0
- wealthbox_cli-1.5.0/docs/changelog.md → wealthbox_cli-2.0.0/CHANGELOG.md +66 -45
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/PKG-INFO +7 -14
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/README.md +6 -13
- wealthbox_cli-2.0.0/docs/agents/domain.md +51 -0
- wealthbox_cli-2.0.0/docs/agents/issue-tracker.md +22 -0
- wealthbox_cli-2.0.0/docs/agents/triage-labels.md +15 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/mkdocs.yml +0 -1
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/pyproject.toml +1 -1
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/__init__.py +9 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/_config.py +24 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/_skill_bootstrap.py +23 -6
- wealthbox_cli-2.0.0/src/wealthbox_tools/cli/_skill_platforms.py +109 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/_util.py +17 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/doctor.py +89 -21
- wealthbox_cli-2.0.0/src/wealthbox_tools/cli/firm.py +158 -0
- wealthbox_cli-2.0.0/src/wealthbox_tools/cli/internals.py +37 -0
- wealthbox_cli-2.0.0/src/wealthbox_tools/cli/main.py +138 -0
- wealthbox_cli-2.0.0/src/wealthbox_tools/cli/prefs.py +44 -0
- wealthbox_cli-2.0.0/src/wealthbox_tools/cli/self_cmd.py +61 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/skills.py +10 -13
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/workflows.py +53 -3
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/base.py +12 -1
- wealthbox_cli-2.0.0/src/wealthbox_tools/firm/__init__.py +31 -0
- wealthbox_cli-2.0.0/src/wealthbox_tools/firm/archive.py +499 -0
- wealthbox_cli-2.0.0/src/wealthbox_tools/firm/diff.py +233 -0
- wealthbox_cli-2.0.0/src/wealthbox_tools/internals/__init__.py +6 -0
- wealthbox_cli-2.0.0/src/wealthbox_tools/internals/skill_ref_gen.py +433 -0
- wealthbox_cli-2.0.0/src/wealthbox_tools/self_upgrade.py +680 -0
- {wealthbox_cli-1.5.0/plugins/wealthbox-crm → wealthbox_cli-2.0.0/src/wealthbox_tools}/skills/wealthbox-crm/SKILL.md +42 -1
- {wealthbox_cli-1.5.0/plugins/wealthbox-crm → wealthbox_cli-2.0.0/src/wealthbox_tools}/skills/wealthbox-crm/bootstrap.md +7 -0
- wealthbox_cli-2.0.0/src/wealthbox_tools/skills/wealthbox-crm/references/contacts.md +519 -0
- wealthbox_cli-2.0.0/src/wealthbox_tools/skills/wealthbox-crm/references/events.md +241 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/skills/wealthbox-crm/references/households.md +51 -0
- wealthbox_cli-2.0.0/src/wealthbox_tools/skills/wealthbox-crm/references/notes.md +157 -0
- wealthbox_cli-2.0.0/src/wealthbox_tools/skills/wealthbox-crm/references/opportunities.md +212 -0
- wealthbox_cli-2.0.0/src/wealthbox_tools/skills/wealthbox-crm/references/projects.md +143 -0
- wealthbox_cli-2.0.0/src/wealthbox_tools/skills/wealthbox-crm/references/tasks.md +251 -0
- wealthbox_cli-2.0.0/src/wealthbox_tools/skills/wealthbox-crm/references/workflows.md +310 -0
- wealthbox_cli-1.5.0/.claude-plugin/marketplace.json +0 -25
- wealthbox_cli-1.5.0/.codex-plugin/plugin.json +0 -16
- wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/SKILL.md +0 -156
- wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/bootstrap.md +0 -127
- wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/references/contacts.md +0 -155
- wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/references/events.md +0 -88
- wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/references/households.md +0 -40
- wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/references/notes.md +0 -67
- wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/references/opportunities.md +0 -87
- wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/references/projects.md +0 -60
- wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/references/tasks.md +0 -106
- wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/references/workflows.md +0 -90
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/.claude-plugin/plugin.json +0 -17
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/contacts.md +0 -21
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/events.md +0 -9
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/notes.md +0 -5
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/opportunities.md +0 -12
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/projects.md +0 -5
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/tasks.md +0 -14
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/workflows.md +0 -31
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/contacts.md +0 -155
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/events.md +0 -88
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/households.md +0 -40
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/lookups.md +0 -78
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/notes.md +0 -67
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/opportunities.md +0 -87
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/projects.md +0 -60
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/tasks.md +0 -106
- wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/workflows.md +0 -90
- wealthbox_cli-1.5.0/src/wealthbox_tools/cli/_skill_platforms.py +0 -235
- wealthbox_cli-1.5.0/src/wealthbox_tools/cli/main.py +0 -62
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/SKILL.md +0 -156
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/bootstrap.md +0 -127
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/contacts.md +0 -21
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/events.md +0 -9
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/notes.md +0 -5
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/opportunities.md +0 -12
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/projects.md +0 -5
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/tasks.md +0 -14
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/workflows.md +0 -31
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/references/contacts.md +0 -155
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/references/events.md +0 -88
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/references/lookups.md +0 -78
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/references/notes.md +0 -67
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/references/opportunities.md +0 -87
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/references/projects.md +0 -60
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/references/tasks.md +0 -106
- wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/references/workflows.md +0 -90
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/.env.example +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/.github/workflows/docs.yml +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/.gitignore +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/CONTRIBUTING.md +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/LICENSE +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/SECURITY.md +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/docs/cli-reference.md +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/docs/getting-started.md +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/docs/index.md +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/docs/overrides/main.html +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/docs/promotion.md +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/__init__.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/_skill_paths.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/activity.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/categories.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/config.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/contacts.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/events.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/households.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/me.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/notes.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/opportunities.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/projects.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/tasks.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/users.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/__init__.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/activity.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/categories.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/comments.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/contacts.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/events.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/households.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/me.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/notes.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/opportunities.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/projects.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/tasks.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/users.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/workflows.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/__init__.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/activity.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/comments.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/common.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/contacts.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/custom_fields.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/enums.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/events.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/households.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/notes.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/opportunities.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/projects.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/tasks.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/workflows.py +0 -0
- {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/py.typed +0 -0
- {wealthbox_cli-1.5.0/codex-skill → wealthbox_cli-2.0.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/contacts.md +0 -0
- {wealthbox_cli-1.5.0/codex-skill → wealthbox_cli-2.0.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/events.md +0 -0
- {wealthbox_cli-1.5.0/codex-skill → wealthbox_cli-2.0.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/notes.md +0 -0
- {wealthbox_cli-1.5.0/codex-skill → wealthbox_cli-2.0.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/opportunities.md +0 -0
- {wealthbox_cli-1.5.0/codex-skill → wealthbox_cli-2.0.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/projects.md +0 -0
- {wealthbox_cli-1.5.0/codex-skill → wealthbox_cli-2.0.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/tasks.md +0 -0
- {wealthbox_cli-1.5.0/codex-skill → wealthbox_cli-2.0.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/workflows.md +0 -0
- {wealthbox_cli-1.5.0/codex-skill → wealthbox_cli-2.0.0/src/wealthbox_tools/skills}/wealthbox-crm/references/lookups.md +0 -0
|
@@ -31,8 +31,20 @@ jobs:
|
|
|
31
31
|
- run: pip install -e ".[dev]"
|
|
32
32
|
- 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: actions/setup-python@v5
|
|
40
|
+
with:
|
|
41
|
+
python-version: "3.12"
|
|
42
|
+
- run: pip install -e ".[dev]"
|
|
43
|
+
- 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:
|
|
@@ -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,67 @@
|
|
|
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).
|
|
6
|
+
|
|
7
|
+
## [2.0.0] - 2026-05-09
|
|
8
|
+
|
|
9
|
+
v2 retires the Claude marketplace plugin distribution and ships `wbox` as a
|
|
10
|
+
standalone binary plus a PyPI package. Existing v1 users must reinstall via the
|
|
11
|
+
new bootstrap script or `pip install wealthbox-cli` — see Breaking below.
|
|
12
|
+
|
|
13
|
+
### Breaking
|
|
14
|
+
- **Retired the Claude marketplace plugin distribution.** `wbox` no longer
|
|
15
|
+
ships through the Claude marketplace. Install via `pip install wealthbox-cli`
|
|
16
|
+
or the bootstrap script (`curl -fsSL https://github.com/massive-value/wealthbox-cli/releases/latest/download/install.sh | sh`).
|
|
17
|
+
v1's `claude plugin install` flow is gone.
|
|
18
|
+
- **Rewrote `install.sh` and `install.ps1`** to fetch a prebuilt binary from
|
|
19
|
+
GitHub Releases instead of detecting and preferring the Claude marketplace
|
|
20
|
+
plugin (#42, #43). The installers now verify a checksum manifest before
|
|
21
|
+
swapping the binary into place.
|
|
22
|
+
- **Removed v1 distribution artifacts** — the in-repo plugin manifest and
|
|
23
|
+
marketplace metadata are deleted (#27).
|
|
24
|
+
- **Dropped plugin-cache scanning** from the skill platform helpers; `wbox
|
|
25
|
+
doctor` and `wbox skills list` no longer probe Claude's plugin cache (#28).
|
|
4
26
|
|
|
5
|
-
|
|
27
|
+
### Added
|
|
28
|
+
- `wbox firm export` — end-to-end export of the configured firm's CRM data to
|
|
29
|
+
a portable JSON snapshot (#31).
|
|
30
|
+
- `wbox firm import` with `--mode overwrite|merge|abort-on-conflict` and
|
|
31
|
+
`--from-url` for fetching a snapshot directly from a URL (#36, #46, #45).
|
|
32
|
+
- `wbox firm diff` — diff a local snapshot against the live firm to preview
|
|
33
|
+
what an import would change (#47).
|
|
34
|
+
- Post-import provenance metadata and a 90-day freshness warning surfaced by
|
|
35
|
+
`wbox doctor` (#48).
|
|
36
|
+
- `wbox doctor` promoted to a top-level command, with a warning when the local
|
|
37
|
+
install is more than 30 days behind the latest GitHub release (#41).
|
|
38
|
+
- `wbox self upgrade` — happy-path binary self-update (#32), Windows
|
|
39
|
+
deferred-swap support (#67), and a subprocess hand-off so a fresh `wbox`
|
|
40
|
+
upgrades bundled skills after the binary swap (#40).
|
|
41
|
+
- `wbox prefs` — user-preferences slot for per-user defaults (#29).
|
|
42
|
+
- Per-platform PyInstaller build + release workflow that publishes Linux,
|
|
43
|
+
macOS, and Windows binaries plus a checksum manifest to GitHub Releases (#33).
|
|
44
|
+
- Skill-reference auto-generation markers across the bundled skill (#30, #85)
|
|
45
|
+
and a CI drift-detection job that fails when generated skill blocks fall out
|
|
46
|
+
of sync (#86).
|
|
47
|
+
- Bootstrap Q&A skips the onboarding prompts when an imported firm snapshot
|
|
48
|
+
already carries an `onboarded_at` timestamp (#49).
|
|
49
|
+
- `wbox firm apply` and `wbox doctor` now sweep stale `.old.<ts>` backup files
|
|
50
|
+
left behind by interrupted upgrades (#39).
|
|
51
|
+
|
|
52
|
+
### Changed
|
|
53
|
+
- Rewrote the README around the v2 install flow — bootstrap script first, PyPI
|
|
54
|
+
second, no marketplace path (#83).
|
|
55
|
+
- Documented the three-layer config resolution (flag > env > config file) and
|
|
56
|
+
the new `prefs` commands inside the bundled skill (#34).
|
|
6
57
|
|
|
7
|
-
|
|
58
|
+
### Fixed
|
|
59
|
+
- `wbox self upgrade` now reads the checksum manifest under its release-asset
|
|
60
|
+
filename, fixing the post-#33 break (#82).
|
|
61
|
+
- Pytest no longer clobbers the developer's real `~/.wbox_rate_limit.json`;
|
|
62
|
+
the rate-limit state file is isolated per test session (#56).
|
|
8
63
|
|
|
9
|
-
## [1.3.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.3.0)
|
|
64
|
+
## [1.3.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.3.0) - 2026-05-03
|
|
10
65
|
|
|
11
66
|
### Added
|
|
12
67
|
|
|
@@ -20,9 +75,7 @@ This project uses [Semantic Versioning](https://semver.org/).
|
|
|
20
75
|
- 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
76
|
- 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
77
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
## [1.2.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.2.0) — 2026-05-02
|
|
78
|
+
## [1.2.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.2.0) - 2026-05-02
|
|
26
79
|
|
|
27
80
|
### Changed
|
|
28
81
|
|
|
@@ -45,9 +98,7 @@ This project uses [Semantic Versioning](https://semver.org/).
|
|
|
45
98
|
|
|
46
99
|
- `--platform` flag on `bootstrap`, `refresh`, and `mark-onboarded` is accepted but ignored, with a warning. Firm operations are no longer scoped per platform.
|
|
47
100
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
## [1.1.6](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.6) — 2026-05-01
|
|
101
|
+
## [1.1.6](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.6) - 2026-05-01
|
|
51
102
|
|
|
52
103
|
### Fixed
|
|
53
104
|
- `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 +109,7 @@ This project uses [Semantic Versioning](https://semver.org/).
|
|
|
58
109
|
- `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
110
|
- `wbox skills list` and `wbox skills doctor` now report onboarded status (`bootstrapped (qualitative pending)` vs `onboarded`).
|
|
60
111
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
## [1.1.5](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.5) — 2026-05-01
|
|
112
|
+
## [1.1.5](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.5) - 2026-05-01
|
|
64
113
|
|
|
65
114
|
### Fixed
|
|
66
115
|
- `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 +118,7 @@ This project uses [Semantic Versioning](https://semver.org/).
|
|
|
69
118
|
### Added
|
|
70
119
|
- `wbox skills install` accepts `--token` (matching `bootstrap`, `refresh`, and `doctor`), so a token can be supplied inline for the post-install bootstrap step.
|
|
71
120
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
## [1.1.4](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.4) — 2026-05-01
|
|
121
|
+
## [1.1.4](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.4) - 2026-05-01
|
|
75
122
|
|
|
76
123
|
### Added
|
|
77
124
|
- 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 +126,19 @@ This project uses [Semantic Versioning](https://semver.org/).
|
|
|
79
126
|
### Docs
|
|
80
127
|
- Skill references (`lookups.md`, `contacts.md`) and `docs/cli-reference.md` updated to surface the workspace-level form as the primary listing.
|
|
81
128
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
## [1.0.2](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.2) — 2026-03-30
|
|
129
|
+
## [1.0.2](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.2) - 2026-03-30
|
|
85
130
|
|
|
86
131
|
### Changed
|
|
87
132
|
- Redesigned comment handling — comments are now embedded in `get` commands
|
|
88
133
|
- Added ID shorthand for resource lookups
|
|
89
134
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
## [1.0.1](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.1) — 2026-03-30
|
|
135
|
+
## [1.0.1](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.1) - 2026-03-30
|
|
93
136
|
|
|
94
137
|
### Changed
|
|
95
138
|
- Updated README with API token instructions and config commands
|
|
96
139
|
- Added deploy workflow documentation
|
|
97
140
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
## [1.0.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.0) — 2026-03-29
|
|
141
|
+
## [1.0.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.0) - 2026-03-29
|
|
101
142
|
|
|
102
143
|
### Added
|
|
103
144
|
- Full CRUD for contacts (person, household, organization, trust), tasks, events, and notes
|
|
@@ -115,76 +156,56 @@ This project uses [Semantic Versioning](https://semver.org/).
|
|
|
115
156
|
- GitHub Actions CI (lint + test across Python 3.11, 3.12, 3.13)
|
|
116
157
|
- PyPI publishing via trusted publishers (OIDC)
|
|
117
158
|
|
|
118
|
-
---
|
|
119
|
-
|
|
120
159
|
## [0.8.5](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.8.5)
|
|
121
160
|
|
|
122
161
|
### Changed
|
|
123
162
|
- Standardized CLI help text across all commands
|
|
124
163
|
|
|
125
|
-
---
|
|
126
|
-
|
|
127
164
|
## [0.8.4](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.8.4)
|
|
128
165
|
|
|
129
166
|
### Added
|
|
130
167
|
- PyPI badges and install instructions
|
|
131
168
|
|
|
132
|
-
---
|
|
133
|
-
|
|
134
169
|
## [0.8.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.8.0)
|
|
135
170
|
|
|
136
171
|
### Added
|
|
137
172
|
- Events CRUD support
|
|
138
173
|
- Notes CRUD support (create, read, update — delete not supported by API)
|
|
139
174
|
|
|
140
|
-
---
|
|
141
|
-
|
|
142
175
|
## [0.7.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.7.0)
|
|
143
176
|
|
|
144
177
|
### Added
|
|
145
178
|
- Tasks CRUD support
|
|
146
179
|
- Task categories
|
|
147
180
|
|
|
148
|
-
---
|
|
149
|
-
|
|
150
181
|
## [0.6.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.6.0)
|
|
151
182
|
|
|
152
183
|
### Added
|
|
153
184
|
- Household member management commands
|
|
154
185
|
|
|
155
|
-
---
|
|
156
|
-
|
|
157
186
|
## [0.5.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.5.0)
|
|
158
187
|
|
|
159
188
|
### Added
|
|
160
189
|
- Contact CRUD operations
|
|
161
190
|
- Contact categories and metadata lookups
|
|
162
191
|
|
|
163
|
-
---
|
|
164
|
-
|
|
165
192
|
## [0.4.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.4.0)
|
|
166
193
|
|
|
167
194
|
### Added
|
|
168
195
|
- Output format support (`--format json|table|csv|tsv`)
|
|
169
196
|
|
|
170
|
-
---
|
|
171
|
-
|
|
172
197
|
## [0.3.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.3.0)
|
|
173
198
|
|
|
174
199
|
### Added
|
|
175
200
|
- User listing and `me` command
|
|
176
201
|
- Activity feed with cursor-based pagination
|
|
177
202
|
|
|
178
|
-
---
|
|
179
|
-
|
|
180
203
|
## [0.2.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.2.0)
|
|
181
204
|
|
|
182
205
|
### Added
|
|
183
206
|
- Rate limiting (sliding-window, 300 req / 5-min)
|
|
184
207
|
- Token configuration (`--token`, env var, `.env`)
|
|
185
208
|
|
|
186
|
-
---
|
|
187
|
-
|
|
188
209
|
## [0.1.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.1.0)
|
|
189
210
|
|
|
190
211
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wealthbox-cli
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.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/
|
|
@@ -57,9 +57,9 @@ Description-Content-Type: text/markdown
|
|
|
57
57
|
| **Windows** (PowerShell) | `irm https://raw.githubusercontent.com/massive-value/wealthbox-cli/main/scripts/install.ps1 \| iex` |
|
|
58
58
|
|
|
59
59
|
The installer:
|
|
60
|
-
1.
|
|
61
|
-
2.
|
|
62
|
-
3.
|
|
60
|
+
1. Downloads the prebuilt `wbox` binary from the latest GitHub Release and verifies its SHA-256 checksum (no Python required).
|
|
61
|
+
2. Installs the AI agent skill into [Claude Code](https://claude.ai/download) (and Codex, if you have it).
|
|
62
|
+
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
63
|
|
|
64
64
|
That's it. Open Claude Code and try one of the prompts below.
|
|
65
65
|
|
|
@@ -104,16 +104,9 @@ You stay in control: the agent shows you what it's about to do before it does it
|
|
|
104
104
|
|
|
105
105
|
------------------------------------------------------------------------
|
|
106
106
|
|
|
107
|
-
##
|
|
107
|
+
## What gets installed, where
|
|
108
108
|
|
|
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.
|
|
109
|
+
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
110
|
|
|
118
111
|
------------------------------------------------------------------------
|
|
119
112
|
|
|
@@ -155,7 +148,7 @@ wbox skills uninstall # remove the skill template (firm data is preserved)
|
|
|
155
148
|
wbox doctor # comprehensive health check
|
|
156
149
|
```
|
|
157
150
|
|
|
158
|
-
The
|
|
151
|
+
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
152
|
</details>
|
|
160
153
|
|
|
161
154
|
<details>
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
| **Windows** (PowerShell) | `irm https://raw.githubusercontent.com/massive-value/wealthbox-cli/main/scripts/install.ps1 \| iex` |
|
|
17
17
|
|
|
18
18
|
The installer:
|
|
19
|
-
1.
|
|
20
|
-
2.
|
|
21
|
-
3.
|
|
19
|
+
1. Downloads the prebuilt `wbox` binary from the latest GitHub Release and verifies its SHA-256 checksum (no Python required).
|
|
20
|
+
2. Installs the AI agent skill into [Claude Code](https://claude.ai/download) (and Codex, if you have it).
|
|
21
|
+
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.
|
|
22
22
|
|
|
23
23
|
That's it. Open Claude Code and try one of the prompts below.
|
|
24
24
|
|
|
@@ -63,16 +63,9 @@ You stay in control: the agent shows you what it's about to do before it does it
|
|
|
63
63
|
|
|
64
64
|
------------------------------------------------------------------------
|
|
65
65
|
|
|
66
|
-
##
|
|
66
|
+
## What gets installed, where
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
```
|
|
71
|
-
/plugin marketplace add massive-value/wealthbox-cli
|
|
72
|
-
/plugin install wealthbox-crm@massive-value
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
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.
|
|
68
|
+
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.
|
|
76
69
|
|
|
77
70
|
------------------------------------------------------------------------
|
|
78
71
|
|
|
@@ -114,7 +107,7 @@ wbox skills uninstall # remove the skill template (firm data is preserved)
|
|
|
114
107
|
wbox doctor # comprehensive health check
|
|
115
108
|
```
|
|
116
109
|
|
|
117
|
-
The
|
|
110
|
+
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.
|
|
118
111
|
</details>
|
|
119
112
|
|
|
120
113
|
<details>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Domain Docs
|
|
2
|
+
|
|
3
|
+
How the engineering skills should consume this repo's domain documentation when exploring the codebase.
|
|
4
|
+
|
|
5
|
+
## Before exploring, read these
|
|
6
|
+
|
|
7
|
+
- **`CONTEXT.md`** at the repo root, or
|
|
8
|
+
- **`CONTEXT-MAP.md`** at the repo root if it exists — it points at one `CONTEXT.md` per context. Read each one relevant to the topic.
|
|
9
|
+
- **`docs/adr/`** — read ADRs that touch the area you're about to work in. In multi-context repos, also check `src/<context>/docs/adr/` for context-scoped decisions.
|
|
10
|
+
|
|
11
|
+
If any of these files don't exist, **proceed silently**. Don't flag their absence; don't suggest creating them upfront. The producer skill (`/grill-with-docs`) creates them lazily when terms or decisions actually get resolved.
|
|
12
|
+
|
|
13
|
+
## File structure
|
|
14
|
+
|
|
15
|
+
This repo is **single-context** — one `CONTEXT.md` + `docs/adr/` at the repo root.
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
/
|
|
19
|
+
├── CONTEXT.md
|
|
20
|
+
├── docs/adr/
|
|
21
|
+
│ ├── 0001-event-sourced-orders.md
|
|
22
|
+
│ └── 0002-postgres-for-write-model.md
|
|
23
|
+
└── src/
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
For reference, a multi-context layout (presence of `CONTEXT-MAP.md` at the root) looks like:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
/
|
|
30
|
+
├── CONTEXT-MAP.md
|
|
31
|
+
├── docs/adr/ ← system-wide decisions
|
|
32
|
+
└── src/
|
|
33
|
+
├── ordering/
|
|
34
|
+
│ ├── CONTEXT.md
|
|
35
|
+
│ └── docs/adr/ ← context-specific decisions
|
|
36
|
+
└── billing/
|
|
37
|
+
├── CONTEXT.md
|
|
38
|
+
└── docs/adr/
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Use the glossary's vocabulary
|
|
42
|
+
|
|
43
|
+
When your output names a domain concept (in an issue title, a refactor proposal, a hypothesis, a test name), use the term as defined in `CONTEXT.md`. Don't drift to synonyms the glossary explicitly avoids.
|
|
44
|
+
|
|
45
|
+
If the concept you need isn't in the glossary yet, that's a signal — either you're inventing language the project doesn't use (reconsider) or there's a real gap (note it for `/grill-with-docs`).
|
|
46
|
+
|
|
47
|
+
## Flag ADR conflicts
|
|
48
|
+
|
|
49
|
+
If your output contradicts an existing ADR, surface it explicitly rather than silently overriding:
|
|
50
|
+
|
|
51
|
+
> _Contradicts ADR-0007 (event-sourced orders) — but worth reopening because…_
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Issue tracker: GitHub
|
|
2
|
+
|
|
3
|
+
Issues and PRDs for this repo live as GitHub issues. Use the `gh` CLI for all operations.
|
|
4
|
+
|
|
5
|
+
## Conventions
|
|
6
|
+
|
|
7
|
+
- **Create an issue**: `gh issue create --title "..." --body "..."`. Use a heredoc for multi-line bodies.
|
|
8
|
+
- **Read an issue**: `gh issue view <number> --comments`, filtering comments by `jq` and also fetching labels.
|
|
9
|
+
- **List issues**: `gh issue list --state open --json number,title,body,labels,comments --jq '[.[] | {number, title, body, labels: [.labels[].name], comments: [.comments[].body]}]'` with appropriate `--label` and `--state` filters.
|
|
10
|
+
- **Comment on an issue**: `gh issue comment <number> --body "..."`
|
|
11
|
+
- **Apply / remove labels**: `gh issue edit <number> --add-label "..."` / `--remove-label "..."`
|
|
12
|
+
- **Close**: `gh issue close <number> --comment "..."`
|
|
13
|
+
|
|
14
|
+
Infer the repo from `git remote -v` — `gh` does this automatically when run inside a clone.
|
|
15
|
+
|
|
16
|
+
## When a skill says "publish to the issue tracker"
|
|
17
|
+
|
|
18
|
+
Create a GitHub issue.
|
|
19
|
+
|
|
20
|
+
## When a skill says "fetch the relevant ticket"
|
|
21
|
+
|
|
22
|
+
Run `gh issue view <number> --comments`.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Triage Labels
|
|
2
|
+
|
|
3
|
+
The skills speak in terms of five canonical triage roles. This file maps those roles to the actual label strings used in this repo's issue tracker.
|
|
4
|
+
|
|
5
|
+
| Label in mattpocock/skills | Label in our tracker | Meaning |
|
|
6
|
+
| -------------------------- | -------------------- | ---------------------------------------- |
|
|
7
|
+
| `needs-triage` | `needs-triage` | Maintainer needs to evaluate this issue |
|
|
8
|
+
| `needs-info` | `needs-info` | Waiting on reporter for more information |
|
|
9
|
+
| `ready-for-agent` | `ready-for-agent` | Fully specified, ready for an AFK agent |
|
|
10
|
+
| `ready-for-human` | `ready-for-human` | Requires human implementation |
|
|
11
|
+
| `wontfix` | `wontfix` | Will not be actioned |
|
|
12
|
+
|
|
13
|
+
When a skill mentions a role (e.g. "apply the AFK-ready triage label"), use the corresponding label string from this table.
|
|
14
|
+
|
|
15
|
+
Edit the right-hand column to match whatever vocabulary you actually use.
|