@revfleet/hscli 0.8.7 → 0.8.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/CHANGELOG.md +247 -0
  2. package/CONTRIBUTING.md +120 -0
  3. package/README.md +42 -8
  4. package/brand/readme-hero.svg +25 -0
  5. package/dist/cli.js +35 -0
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/account/index.js +5 -6
  8. package/dist/commands/account/index.js.map +1 -1
  9. package/dist/commands/api/index.js +43 -3
  10. package/dist/commands/api/index.js.map +1 -1
  11. package/dist/commands/auth/index.js +74 -13
  12. package/dist/commands/auth/index.js.map +1 -1
  13. package/dist/commands/cms/hubdb.js +31 -0
  14. package/dist/commands/cms/hubdb.js.map +1 -1
  15. package/dist/commands/cms/index.js +27 -0
  16. package/dist/commands/cms/index.js.map +1 -1
  17. package/dist/commands/cms/source-code.js +21 -0
  18. package/dist/commands/cms/source-code.js.map +1 -1
  19. package/dist/commands/communication-preferences/index.js +11 -12
  20. package/dist/commands/communication-preferences/index.js.map +1 -1
  21. package/dist/commands/crm/activities.d.ts +3 -0
  22. package/dist/commands/crm/activities.js +186 -0
  23. package/dist/commands/crm/activities.js.map +1 -0
  24. package/dist/commands/crm/index.js +4 -0
  25. package/dist/commands/crm/index.js.map +1 -1
  26. package/dist/commands/crm/migration.d.ts +3 -0
  27. package/dist/commands/crm/migration.js +155 -0
  28. package/dist/commands/crm/migration.js.map +1 -0
  29. package/dist/commands/crm/properties.js +105 -18
  30. package/dist/commands/crm/properties.js.map +1 -1
  31. package/dist/commands/crm/property-batch.d.ts +34 -0
  32. package/dist/commands/crm/property-batch.js +205 -0
  33. package/dist/commands/crm/property-batch.js.map +1 -0
  34. package/dist/commands/crm/shared.d.ts +1 -0
  35. package/dist/commands/crm/shared.js +3 -4
  36. package/dist/commands/crm/shared.js.map +1 -1
  37. package/dist/commands/doctor/index.js +119 -1
  38. package/dist/commands/doctor/index.js.map +1 -1
  39. package/dist/commands/events/index.js +7 -8
  40. package/dist/commands/events/index.js.map +1 -1
  41. package/dist/commands/forms/index.js +47 -6
  42. package/dist/commands/forms/index.js.map +1 -1
  43. package/dist/commands/forms/legacy-v2.d.ts +6 -0
  44. package/dist/commands/forms/legacy-v2.js +350 -0
  45. package/dist/commands/forms/legacy-v2.js.map +1 -0
  46. package/dist/commands/forms/property-preflight.d.ts +20 -0
  47. package/dist/commands/forms/property-preflight.js +99 -0
  48. package/dist/commands/forms/property-preflight.js.map +1 -0
  49. package/dist/commands/guide/index.d.ts +3 -0
  50. package/dist/commands/guide/index.js +231 -0
  51. package/dist/commands/guide/index.js.map +1 -0
  52. package/dist/commands/marketing/index.js +3 -4
  53. package/dist/commands/marketing/index.js.map +1 -1
  54. package/dist/commands/settings/index.js +249 -14
  55. package/dist/commands/settings/index.js.map +1 -1
  56. package/dist/core/auth.d.ts +7 -1
  57. package/dist/core/auth.js +45 -7
  58. package/dist/core/auth.js.map +1 -1
  59. package/dist/core/http.d.ts +43 -0
  60. package/dist/core/http.js +227 -57
  61. package/dist/core/http.js.map +1 -1
  62. package/dist/core/output.d.ts +2 -0
  63. package/dist/core/output.js +1 -1
  64. package/dist/core/output.js.map +1 -1
  65. package/dist/core/plugins.d.ts +5 -2
  66. package/dist/core/plugins.js +18 -1
  67. package/dist/core/plugins.js.map +1 -1
  68. package/dist/core/scopes.d.ts +29 -0
  69. package/dist/core/scopes.js +415 -0
  70. package/dist/core/scopes.js.map +1 -0
  71. package/dist/core/telemetry-context.d.ts +13 -0
  72. package/dist/core/telemetry-context.js +30 -0
  73. package/dist/core/telemetry-context.js.map +1 -0
  74. package/dist/mcp/ext-tools.d.ts +1 -1
  75. package/dist/mcp/ext-tools.js +52 -1
  76. package/dist/mcp/ext-tools.js.map +1 -1
  77. package/dist/mcp/hubspot-modules.d.ts +30 -0
  78. package/dist/mcp/hubspot-modules.js +305 -0
  79. package/dist/mcp/hubspot-modules.js.map +1 -0
  80. package/dist/mcp/server.d.ts +2 -0
  81. package/dist/mcp/server.js +120 -48
  82. package/dist/mcp/server.js.map +1 -1
  83. package/docs/ARCHITECTURE.md +39 -0
  84. package/docs/CAPABILITY_LIBRARY.md +639 -0
  85. package/docs/CMS_SETUP.md +349 -0
  86. package/docs/COMMAND_COMPATIBILITY.md +24 -0
  87. package/docs/COMMAND_TREE.md +199 -0
  88. package/docs/COMMERCE_SETUP.md +400 -0
  89. package/docs/COMPARISON.md +146 -0
  90. package/docs/COOKBOOK.md +896 -0
  91. package/docs/INTEGRATIONS_NOTIFICATIONS_SETUP.md +352 -0
  92. package/docs/MARKETING_SETUP.md +509 -0
  93. package/docs/MCP.md +172 -0
  94. package/docs/OPERATIONAL_PLAYBOOKS.md +322 -0
  95. package/docs/OPERATIONS_SETUP.md +362 -0
  96. package/docs/PLUGIN_GUIDE.md +158 -0
  97. package/docs/POLICY_EXAMPLE.json +57 -0
  98. package/docs/PORTAL_SETUP.md +684 -0
  99. package/docs/PUBLISHING.md +154 -0
  100. package/docs/RELEASE_GOVERNANCE.md +34 -0
  101. package/docs/REPORTING_SETUP.md +310 -0
  102. package/docs/ROADMAP-DATE-BASED-API.md +103 -0
  103. package/docs/ROADMAP_PHASE1_TO_3.md +96 -0
  104. package/docs/SAFETY_MODEL.md +40 -0
  105. package/docs/SALES_SETUP.md +369 -0
  106. package/docs/SERVICE_SETUP.md +403 -0
  107. package/docs/TESTING_PLAN.md +89 -0
  108. package/docs/TIERS.md +320 -0
  109. package/docs/TUTORIALS/audit-portal-writes.md +150 -0
  110. package/docs/TUTORIALS/secure-agent-writes.md +177 -0
  111. package/docs/TUTORIALS/trace-replay-repro.md +147 -0
  112. package/docs/WHY_HOW_WHAT.md +81 -0
  113. package/package.json +7 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,252 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.8.11 - 2026-04-24
4
+
5
+ **Migration operator surface + shared rate-limit enforcement.** Ships
6
+ the Claude-style `/setup` → `/migration` → `/read` → `/write` →
7
+ `/guardrails` operator flow, fleshes out migration-replay coverage
8
+ (batch properties, custom-object property routing, legacy v2 forms
9
+ translator, session-auth permission sets), and tightens the HTTP
10
+ layer so multiple clients in one process no longer overrun a shared
11
+ HubSpot rate budget.
12
+
13
+ 38 new tests land alongside the features (307 total passing).
14
+
15
+ ### Added — migration/operator workflows
16
+
17
+ - Claude-style operator entrypoints: `hscli /setup`, `/migration`,
18
+ `/read`, `/write`, and `/guardrails`, with non-slash aliases for
19
+ shell environments that prefer plain command names.
20
+ - `auth set-hublet <profile> <hublet>` plus global `--hublet` /
21
+ `--api-base-url` routing overrides for explicit EU/AP/NA hublet
22
+ control.
23
+ - `doctor scopes list|presets|explain|diff`, backed by a local
24
+ HubSpot scope catalog and `real-mirror-read` / `real-mirror-write`
25
+ presets.
26
+
27
+ ### Added — migration replay coverage
28
+
29
+ - Batch property create support and custom-object property/group
30
+ endpoint routing for object type IDs.
31
+ - Legacy v2 forms translator/replay hardening: required v3 metadata,
32
+ property preflight, and group-size splitting.
33
+ - Session-auth permission-set commands for internal HubSpot permission
34
+ set migration paths.
35
+
36
+ ### Fixed — HubSpot rate-limit enforcement
37
+
38
+ - Rate-limit state is now shared by `profile + API base URL + auth kind`
39
+ within the process, so multiple clients do not overrun the same
40
+ observed budget.
41
+ - The HTTP layer enforces HubSpot `Secondly`, rolling window, daily
42
+ remaining, and `Retry-After` headers before subsequent calls.
43
+ - Daily hard-limit responses now stop immediately with
44
+ `RATE_LIMIT_DAILY_EXHAUSTED` instead of retrying and wasting calls.
45
+
46
+ ## 0.8.10 - 2026-04-24
47
+
48
+ **Polish follow-up to 0.8.9.** Five small fixes from the PR #43 review —
49
+ no behavior change on the safety rails landed in 0.8.9, just closing
50
+ gaps around product claim honesty, packaging, regression coverage,
51
+ first-call hublet UX, and doc freshness.
52
+
53
+ ### Changed — README claim wording aligned with package.json
54
+
55
+ The README's "What '1,180 endpoints' means" block previously said
56
+ "Every one of HubSpot's documented public API endpoints has a
57
+ corresponding CLI subcommand." Rewritten to "covers **~all** of
58
+ HubSpot's documented public API endpoints" with an explicit list of
59
+ reachability gates (tier, scope, auth model, deprecation, UI-only)
60
+ and a pointer to the ❌/⚠️/✅ matrix in `docs/CAPABILITY_LIBRARY.md`.
61
+ The "Full surface coverage" details summary also softened to
62
+ "Surface coverage".
63
+
64
+ ### Fixed — more packaged-docs link breakage on npm
65
+
66
+ 0.8.9 caught `docs/TUTORIALS/*.md` and `docs/POLICY_EXAMPLE.json`.
67
+ Review flagged a second batch: `brand/readme-hero.svg`,
68
+ `CONTRIBUTING.md`, `scripts/demo.sh`, `scripts/demo.tape`, and
69
+ `scripts/README.md` were still relative and not in the tarball.
70
+
71
+ - `brand/readme-hero.svg` + `CONTRIBUTING.md` added to `files`
72
+ (small, make sense in-package).
73
+ - `scripts/*` links rewritten to absolute
74
+ `github.com/revfleet/hscli/blob/main/...` URLs since the
75
+ `scripts/` directory also contains ~200KB of Python helpers, a
76
+ `__pycache__/`, and release tooling that don't belong in npm.
77
+
78
+ ### Added — security regression tests (`tests/bugfixes-v0.8.9.test.ts`)
79
+
80
+ Locking in 0.8.9's hardening so future refactors don't silently
81
+ re-open the leaks:
82
+
83
+ - **`auth token-info` never writes the raw token to telemetry**
84
+ (verifies the `/oauth/v1/access-tokens/{token}` path is redacted
85
+ to `/oauth/v1/access-tokens/[REDACTED]`).
86
+ - **`--include-bodies` redacts secrets in request + response**
87
+ (posts a `pat-na1-…` in the request body and receives it in the
88
+ response body, asserts the raw value never appears in the JSONL
89
+ and `[REDACTED]` does).
90
+ - **CLI path surfaces `changeTicket` in telemetry**
91
+ (covers the env-bridge fallback — the MCP-only ALS test from
92
+ 0.8.9 didn't exercise the non-MCP code path).
93
+
94
+ ### Changed — `auth login` uses hublet-aware verification URL
95
+
96
+ `fetchPortalDetails()` previously always hit `api.hubapi.com` for
97
+ the initial `/account-info/v3/details` probe. For EU/AP portals
98
+ this first call fails and the code falls through to another probe
99
+ before the hublet gets saved. Now the token prefix (`pat-eu1-…`,
100
+ `pat-ap1-…`) is passed through the existing `detectHublet()`
101
+ helper before the first fetch, so EU/AP users get a 2xx on the
102
+ first try instead of a silent fallback.
103
+
104
+ ### Changed — stale doc references to `~/.hscli`
105
+
106
+ Some operational docs still pointed to the pre-rebrand config dir:
107
+
108
+ - `docs/MCP.md` — example `HSCLI_HOME` value corrected to
109
+ `/absolute/path/to/.revfleet`.
110
+ - `docs/OPERATIONAL_PLAYBOOKS.md` — 7 shell snippets rewritten from
111
+ `~/.hscli/` → `~/.revfleet/`. The single reference to
112
+ HubSpot's official `@hubspot/cli` (which *does* use
113
+ `~/.hscli.config.yml`) is now explicitly flagged as such.
114
+ - `docs/ROADMAP_PHASE1_TO_3.md` — plugin discovery entry updated to
115
+ reflect 0.8.9's opt-in `HSCLI_PLUGIN_AUTO_DISCOVER` model.
116
+
117
+ ## 0.8.9 - 2026-04-23
118
+
119
+ **Security hardening + hublet routing completeness.** Addresses five
120
+ audit findings against 0.8.8 (Codex review on `revfleet/hscli@2e169f0`).
121
+
122
+ ### Fixed — P1: trace/audit logs could leak tokens
123
+
124
+ - `src/core/http.ts` now redacts the telemetry event before writing to
125
+ the JSONL. Request bodies, response bodies, and error strings pass
126
+ through `redactSensitive()` from `core/output.ts`. The request path
127
+ is also run through a new `redactTokenPath()` helper that replaces
128
+ the token segment on `/oauth/v1/access-tokens/{token}` and
129
+ `/oauth/v1/refresh-tokens/{token}`, so `hscli auth token-info`
130
+ traces no longer capture the raw secret.
131
+ - The trace-help text (`hscli trace start --include-bodies` —
132
+ "redacted for secrets") now matches actual behavior.
133
+
134
+ ### Fixed — P1: several commands bypassed hublet routing
135
+
136
+ Commands instantiating `new HubSpotClient(getToken(profile))` directly
137
+ fell back to `api.hubapi.com` regardless of the profile's `hublet`
138
+ setting, so EU1/AP portal writes silently hit the wrong base URL.
139
+
140
+ Swapped to `createClient(profile)` (which resolves `getApiBaseUrl`)
141
+ across: `commands/account`, `commands/auth` (`token-info`),
142
+ `commands/communication-preferences`, `commands/events`,
143
+ `commands/marketing` (helper path), `commands/settings`,
144
+ `mcp/server` (`executeTool`), `mcp/hubspot-modules`.
145
+
146
+ ### Fixed — P2: MCP cannot provide change tickets (and audit it)
147
+
148
+ `baseArgsSchema` and `McpBaseArgs` now include an optional
149
+ `changeTicket` field. `mcpContext()` threads it into the `CliContext`
150
+ so policies with `requireChangeTicket: true` accept MCP writes.
151
+
152
+ The ticket is **also written into the trace/audit JSONL** — the first
153
+ iteration of this PR only threaded it into the policy check but
154
+ left telemetry blind to it (review feedback). `TelemetryContext`
155
+ now carries `changeTicket`, `executeTool()` extends the ALS scope
156
+ with it via a new `withTelemetryContext()` helper, and
157
+ `emitTelemetry()` emits it on every event. For CLI (non-MCP), the
158
+ preAction hook sets `HSCLI_CHANGE_TICKET` so the HTTP layer picks
159
+ it up as an env fallback (CLI is single-invocation per process, so
160
+ env is race-safe). `HSCLI_POLICY_FILE` + `HSCLI_CHANGE_TICKET` are
161
+ also honored on MCP so agents can inject without a code change.
162
+
163
+ Regression test: `changeTicket from MCP args is written into the
164
+ telemetry event` in `tests/bugfixes-v0.7.1.test.ts`.
165
+
166
+ ### Fixed — P2: MCP tool-name attribution was process-global
167
+
168
+ `registerMcpTool()` previously mutated `process.env.HSCLI_MCP_TOOL_NAME`
169
+ around the async handler, so two concurrent MCP calls would clobber
170
+ each other's tool name. Replaced with `AsyncLocalStorage` in a new
171
+ `core/telemetry-context.ts` module. `emitTelemetry()` in `http.ts`
172
+ reads `toolName` from the ALS store, which is scoped to each
173
+ invocation's async chain.
174
+
175
+ ### Fixed — P2: plugin auto-discovery is now opt-in
176
+
177
+ `core/plugins.ts` no longer imports every `node_modules` package with
178
+ keyword `hscli-plugin` by default. Auto-discovery runs only when
179
+ `HSCLI_PLUGIN_AUTO_DISCOVER=1`, and when it does, hscli prints the
180
+ resolved package list to stderr before loading. Explicit `HSCLI_PLUGINS`
181
+ allowlist is always honored. Documented in `docs/PLUGIN_GUIDE.md`.
182
+
183
+ ### Added — `auth login` portal verification warning
184
+
185
+ `hscli auth login` now warns loudly on stderr when the token was saved
186
+ but `/account-info/v3/details` and `/integrations/v1/me` both failed —
187
+ previously the command succeeded silently with an unverifiable token.
188
+ `--no-verify` skips the check for offline/restricted-network setups.
189
+
190
+ ### Changed — packaging
191
+
192
+ `files` in `package.json` now includes `docs/*.md`,
193
+ `docs/TUTORIALS/*.md`, and `docs/POLICY_EXAMPLE.json` so the
194
+ README's doc links resolve after `npm install`. Previously only
195
+ `docs/policy-templates/` was shipped. The top-level `docs/*.md`
196
+ glob is non-recursive, so `TUTORIALS/` needed its own explicit
197
+ entry (review feedback). The README's `demo-*.gif` references were
198
+ switched to absolute GitHub raw URLs since the 14 MB of demo
199
+ assets don't belong in the tarball.
200
+
201
+ ### Changed — product positioning
202
+
203
+ `package.json.description` rewritten: "~all documented public
204
+ endpoints" instead of "100% public API coverage". Reachability is
205
+ tier/scope/auth-model/deprecation-gated; see `docs/CAPABILITY_LIBRARY.md`
206
+ for the ❌/⚠️/✅ matrix.
207
+
208
+ ## 0.8.8 - 2026-04-23
209
+
210
+ **Multipart HTTP support + MCP drag-and-drop module tools.** Two
211
+ complementary unlocks that close the last major capability gaps from
212
+ the re-audit series.
213
+
214
+ ### Added — multipart HTTP (Node 20+ native FormData)
215
+
216
+ `src/core/http.ts` now accepts `RequestOptions.multipart` — a field-name
217
+ → (string | `{path, contentType?, filename?}`) record. Internally it
218
+ builds a native `FormData` and lets the runtime emit the correct
219
+ `multipart/form-data; boundary=…` Content-Type. Manually setting the
220
+ header without a boundary was the root cause of every 415 we hit
221
+ (confirmed via reading HubSpot's own [nodejs SDK source](https://github.com/HubSpot/hubspot-api-nodejs)).
222
+
223
+ Three new CLI commands:
224
+
225
+ - `hscli cms source-code upload <env> <destPath> --file <localPath> [--content-type <mime>]` — PUT a local file to a CMS source-code path. Verified live.
226
+ - `hscli cms hubdb import <tableId> --file <csv> --config '<json>'` — import rows into a HubDB draft table (multipart: `config` + `file` parts). Transport verified; CSV imports themselves require a Content-Hub plan tier that supports them.
227
+ - `hscli cms upload <destPath> --file <localPath> [--content-type <mime>]` — mirrors the legacy `content/filemapper/v1/upload/{dest}` endpoint that HubSpot's own `hs upload` command uses under the hood (not in public dev-docs). Verified live.
228
+
229
+ New flags on raw passthrough:
230
+
231
+ - `hscli api request --file <field>=<path>[:<contentType>]` — repeatable file part attachment.
232
+ - `hscli api request --part <field>=<value>` — repeatable text part attachment.
233
+
234
+ Combined: any multipart endpoint is reachable without a dedicated wrapper command.
235
+
236
+ ### Added — MCP drag-and-drop module tools
237
+
238
+ Three new MCP tools wire HubSpot's full `@hubspot/*` module library into the agent surface:
239
+
240
+ - **`hubspot_module_list`** — enumerate built-in modules on the caller's portal, with `--schemas` for inline field definitions.
241
+ - **`hubspot_module_describe`** — fetch one module's `fields.json` (types, required, defaults, choices, nested groups). The same schema a UI user sees when they click a module.
242
+ - **`hubspot_module_compose`** — given a module path + field values, returns a validated widget body ready to embed in `content.widgets[widgetId]`. Rejects unknown fields + type mismatches before the widget is posted to HubSpot.
243
+
244
+ Design: one dynamic compose tool instead of auto-generating 55 per-module tools, matching how a drag-drop user actually works (browse → describe → fill).
245
+
246
+ ### Fixes
247
+
248
+ - [docs/CAPABILITY_LIBRARY.md](docs/CAPABILITY_LIBRARY.md) §6 CMS source-code + §6 HubDB import + §13 multipart table — all ⚠️ rows for multipart endpoints flip to ✅. Appendix B gains a subsection describing the 3 new MCP tools and the agent "browse → describe → fill" flow.
249
+
3
250
  ## 0.8.7 - 2026-04-23
4
251
 
5
252
  **Third docs pass + HubSpot open-source scan.** Reviewed
@@ -0,0 +1,120 @@
1
+ # Contributing to hscli
2
+
3
+ Thanks for considering a contribution. hscli is built to a high bar — security, safety, and rigor first. Please read this doc before opening issues or PRs.
4
+
5
+ ## Ground rules
6
+
7
+ 1. **Security-first.** hscli handles HubSpot private app tokens. Any change must preserve:
8
+ - Secret redaction in output and error paths
9
+ - File permissions on the auth store (0700 dir, 0600 file)
10
+ - Path scope allowlisting
11
+ - No plaintext tokens in logs, telemetry, or error traces
12
+ 2. **Type-safety.** TypeScript strict mode is mandatory. `any` is allowed only with an inline comment justifying it.
13
+ 3. **Tests required.** New commands need at least a CLI smoke test. New transport paths need an http.test.ts case. MCP tools need an mcp.test.ts case.
14
+ 4. **Backwards compatibility.** Don't rename or remove existing commands / flags in a minor release. If you must, open a discussion first.
15
+ 5. **100% surface coverage is the contract.** hscli claims to cover every public HubSpot endpoint. If HubSpot publishes a new endpoint, there's a gap to fill. PRs adding a new endpoint are welcome and merged fast. See [docs/TIERS.md](docs/TIERS.md) for the current mapping of endpoints → required HubSpot plan tier.
16
+
17
+ ## When an endpoint doesn't work for you
18
+
19
+ First, check [docs/TIERS.md](docs/TIERS.md) — most "it doesn't work" cases are because the endpoint requires a paid HubSpot tier or specific app context:
20
+
21
+ | Symptom | Likely cause | Fix |
22
+ |---|---|---|
23
+ | 401 / *"requires hapikey="* | [Zombie endpoint](docs/TIERS.md#zombie-endpoints) — HubSpot's legacy Developer API Key | Not fixable in hscli; HubSpot must migrate. Track with label `hubspot-platform` |
24
+ | 403 / *"not available on your account"* | Tier-locked | Upgrade the HubSpot plan or test on a portal that has it |
25
+ | 404 on a `{revisionId}` path | No revision history | Edit a page first to create a revision |
26
+ | 404 on a `{appId}` path | Need OAuth Developer App | See [OAuth setup](docs/TIERS.md#developer-platform-hubspot-developer-account-free) |
27
+ | 400 / validation error | Body payload incomplete | Check HubSpot docs for required fields; pass via `--data` |
28
+
29
+ If the endpoint **should** work on your tier but doesn't, open an [endpoint issue](https://github.com/revfleet/hscli/issues/new?template=endpoint_not_working.md) with:
30
+ - The `hscli` command you ran
31
+ - Your portal's tier per hub
32
+ - The HubSpot correlation ID from the response
33
+ - Whether the same operation works in the HubSpot UI
34
+
35
+ These issues are triaged quickly. If the cause is a bug in hscli's payload construction or path handling, we fix it in a patch release.
36
+
37
+ ## Running the portal probes
38
+
39
+ hscli ships two probe scripts that test the portal's reachable surface:
40
+
41
+ ```bash
42
+ # Read probe (GET + safe POST /search endpoints)
43
+ HSCLI_PROFILE=default HSCLI_DEV_APP_ID=<optional> \
44
+ node scripts/test-portal-coverage.mjs > coverage.md
45
+
46
+ # Write probe (POST / PUT / PATCH / DELETE endpoints)
47
+ HSCLI_PROFILE=default HSCLI_DEV_APP_ID=<optional> \
48
+ node scripts/test-portal-writes.mjs > writes.md
49
+ ```
50
+
51
+ Both scripts:
52
+ - Discover real IDs from the portal dynamically
53
+ - Classify responses as PASS / VALIDATION / AUTH / ZOMBIE / TIER / 404
54
+ - Auto-retry 405 Method Not Allowed with the Allow-header's suggested verb
55
+ - Skip scrape artifacts (paths like `/{0}`)
56
+
57
+ If your probe run surfaces endpoints that are reachable on a different tier or region than what hscli's capability cache claims, open an issue — it's valuable telemetry.
58
+
59
+ ## Development workflow
60
+
61
+ ```bash
62
+ git clone https://github.com/revfleet/hscli.git
63
+ cd hscli
64
+ npm install
65
+ npm run typecheck
66
+ npm test
67
+ npm run build
68
+ ```
69
+
70
+ Watch mode:
71
+
72
+ ```bash
73
+ npm run dev -- crm contacts list --limit 3
74
+ ```
75
+
76
+ Run a command against a real sandbox (you need a HubSpot sandbox token):
77
+
78
+ ```bash
79
+ export HSCLI_HOME="$(mktemp -d)"
80
+ printf '%s' "$SANDBOX_TOKEN" | node dist/cli.js auth login --token-stdin
81
+ node dist/cli.js crm contacts list --limit 3
82
+ ```
83
+
84
+ Run the contract tests against a sandbox:
85
+
86
+ ```bash
87
+ export HSCLI_ENABLE_SANDBOX_CONTRACT=1
88
+ export HSCLI_SANDBOX_TOKEN="pat-..."
89
+ npm run test:contract
90
+ ```
91
+
92
+ ## Adding a new command
93
+
94
+ 1. Put the command under `src/commands/<domain>/` (e.g. `src/commands/crm/`)
95
+ 2. Follow the existing pattern — use `registerResource()` for CRUD or hand-roll with `commander` for special endpoints
96
+ 3. Use `encodePathSegment()` on every dynamic path part
97
+ 4. Route writes through `maybeWrite()` so the safety gate is enforced
98
+ 5. Validate JSON payloads with `parseJsonPayload()` and numeric flags with `parseNumberFlag()`
99
+ 6. Add a CLI test in `tests/cli.test.ts`
100
+ 7. If the command should also be callable from MCP, register it in `src/mcp/server.ts`
101
+ 8. Update `docs/COMMAND_TREE.md`
102
+
103
+ ## Reporting security issues
104
+
105
+ Do **not** open a public issue for security vulnerabilities. Email the maintainer directly (see SECURITY.md) or use GitHub Security Advisories on this repository.
106
+
107
+ ## Style
108
+
109
+ - Biome handles lint + format: `npm run lint:fix`
110
+ - Prefer `import type` for type-only imports
111
+ - Don't use default exports except where required
112
+ - Keep functions small, side-effects explicit
113
+
114
+ ## Release process
115
+
116
+ See [docs/RELEASE_GOVERNANCE.md](docs/RELEASE_GOVERNANCE.md).
117
+
118
+ ## Licensing
119
+
120
+ All contributions are licensed MIT, the same as the project. By opening a PR you agree your contribution is MIT-licensed and you have the right to submit it.
package/README.md CHANGED
@@ -13,7 +13,7 @@
13
13
  </p>
14
14
 
15
15
  <p align="center">
16
- <img src="docs/demo-hubspot.gif" alt="hscli writing into a HubSpot portal in real time — records appear in the UI as hscli creates them" width="100%">
16
+ <img src="https://raw.githubusercontent.com/revfleet/hscli/main/docs/demo-hubspot.gif" alt="hscli writing into a HubSpot portal in real time — records appear in the UI as hscli creates them" width="100%">
17
17
  </p>
18
18
 
19
19
  <p align="center">
@@ -38,6 +38,32 @@ hscli crm contacts list --limit 5
38
38
 
39
39
  Create a Private App token at **Settings → Integrations → Private Apps → Create private app** in your HubSpot portal.
40
40
 
41
+ For EU/AP/NA hublet routing, hscli auto-detects from token/account metadata. You can also pin it explicitly:
42
+
43
+ ```bash
44
+ printf '%s' "$HUBSPOT_TOKEN" | hscli auth login --profile live --token-stdin --hublet eu1
45
+ hscli auth set-hublet live eu1
46
+ ```
47
+
48
+ ## Operator workflows
49
+
50
+ Start from intent instead of memorizing the whole command tree:
51
+
52
+ ```bash
53
+ hscli /setup # auth, hublet routing, scopes, capabilities
54
+ hscli /migration # portal/schema migration sequence
55
+ hscli /read # source-portal read workflow
56
+ hscli /write # target-portal write workflow
57
+ hscli /guardrails # read-only, policy, trace, scope checks
58
+ ```
59
+
60
+ Scope checks are built in:
61
+
62
+ ```bash
63
+ hscli doctor scopes diff --required real-mirror-read
64
+ hscli doctor scopes explain sales-email-read
65
+ ```
66
+
41
67
  ## Write safely
42
68
 
43
69
  ```bash
@@ -107,7 +133,7 @@ Every request hscli makes is append-only JSONL. Pair `trace` with `audit` for fu
107
133
  ## What's in the box
108
134
 
109
135
  <details>
110
- <summary><strong>Full surface coverage</strong> — click to expand</summary>
136
+ <summary><strong>Surface coverage</strong> — click to expand</summary>
111
137
 
112
138
  - **CRM** — contacts, companies, deals, tickets, leads, quotes, products, line items, orders, carts, discounts, fees, taxes, invoices, subscriptions, payments, goals, communications, users, custom objects, properties, pipelines, associations v4, owners, imports, exports, engagements, sync, describe/validate, timeline, CRM Cards
113
139
  - **Marketing** — emails (v3 + legacy v1), campaigns, ads, social, SEO, landing pages, transactional, subscriptions, events, behavioral events, forms
@@ -121,15 +147,23 @@ Every request hscli makes is append-only JSONL. Pair `trace` with `audit` for fu
121
147
  - **Legacy v1/v2** — every pre-v3 surface preserved for portals that still need them
122
148
  - **Raw API** command with path-scope controls + full OAuth flow support
123
149
 
124
- Enterprise defaults: `--dry-run`, `--force`, policy files, change tickets, capability probing, rate-limit intelligence, token redaction, path scope allowlisting, idempotency keys on every write.
150
+ Enterprise defaults: `--dry-run`, `--force`, policy files, change tickets, capability probing, shared rate-limit enforcement, token redaction, path scope allowlisting, idempotency keys on every write.
125
151
 
126
152
  </details>
127
153
 
128
154
  ### What "1,180 endpoints" means
129
155
 
130
- Every one of HubSpot's documented public API endpoints has a corresponding CLI subcommand verified against an automated scrape of HubSpot's developer documentation.
156
+ hscli covers **~all** of HubSpot's documented public API endpoints a CLI subcommand or MCP tool per endpoint, verified against an automated scrape of HubSpot's developer documentation. A small residue stays out of reach because it's UI-only, deprecated, or requires a developer-app auth model rather than a private-app bearer token; see [docs/CAPABILITY_LIBRARY.md](docs/CAPABILITY_LIBRARY.md) for the ❌/⚠️/✅ matrix.
157
+
158
+ Even within the reachable set, actual 2xx responses on your portal depend on:
159
+
160
+ - **Tier/plan gates** — hundreds of endpoints are locked to Marketing/Sales/Service/CMS/Ops/Commerce Pro/Enterprise or add-ons.
161
+ - **Scope gates** — the private-app token must carry the right scopes; some scopes have no public endpoint surface.
162
+ - **Auth-model gates** — a subset (developer-platform, app-install) require a Developer Account + `appId` + developer API key, not a bearer token.
163
+ - **Deprecated surfaces** — HubDB v2, CMS performance, legacy ecommerce bridge, accounting extension, marketing calendar etc. are shipped for continuity but HubSpot may 4xx them.
164
+ - **UI-only surfaces** — chatflow decision trees, SLA policies, quote e-signature, social-inbox reactions, scoring formulas and similar authoring flows have no public endpoint (covered in the library as ❌ hard-locks).
131
165
 
132
- It does **not** mean every endpoint returns 2xx on your portal. HubSpot tier-locks hundreds of endpoints behind paid plans:
166
+ HubSpot's own tier map, projected onto hscli's surface:
133
167
 
134
168
  | Portal profile | Reachable endpoints |
135
169
  |---|---:|
@@ -145,7 +179,7 @@ Exact endpoint → tier mapping in [docs/TIERS.md](docs/TIERS.md).
145
179
  1. **CLI-first, MCP as a peer.** Every MCP tool has a matching `hscli` command — same write gates, same redaction, same capability probing in both.
146
180
  2. **Self-hosted, token-sovereign.** Your HubSpot private app token stays on your machine. No telemetry, no phone-home.
147
181
  3. **Safe by default.** Mutations are blocked unless `--force` is explicit. `--dry-run` previews every write. Idempotency-Key on every mutation.
148
- 4. **HubSpot-native.** Reads `X-HubSpot-RateLimit-*` headers, throttles proactively, caches capabilities by `portalId + scopes`, validates payloads offline.
182
+ 4. **HubSpot-native.** Reads `X-HubSpot-RateLimit-*` headers, throttles proactively across clients, stops on daily hard-limit exhaustion, caches capabilities by `portalId + scopes`, validates payloads offline.
149
183
 
150
184
  ## Output modes
151
185
 
@@ -161,10 +195,10 @@ hscli --format table crm contacts list --limit 5 # table (default)
161
195
  The HubSpot-UI recording at the top shows the *outcome*. Here's the *cause* — the same fixture built and torn down entirely from the shell:
162
196
 
163
197
  <p align="center">
164
- <img src="docs/demo-terminal.gif" alt="hscli terminal walkthrough — blank → create → associate → read → update → archive → blank" width="100%">
198
+ <img src="https://raw.githubusercontent.com/revfleet/hscli/main/docs/demo-terminal.gif" alt="hscli terminal walkthrough — blank → create → associate → read → update → archive → blank" width="100%">
165
199
  </p>
166
200
 
167
- [Source script](scripts/demo.sh) · [recording config](scripts/demo.tape) · [how the recordings are made](scripts/README.md)
201
+ [Source script](https://github.com/revfleet/hscli/blob/main/scripts/demo.sh) · [recording config](https://github.com/revfleet/hscli/blob/main/scripts/demo.tape) · [how the recordings are made](https://github.com/revfleet/hscli/blob/main/scripts/README.md)
168
202
 
169
203
  ## Caches
170
204
 
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 220" width="1280" height="220">
3
+ <title>hscli readme hero</title>
4
+ <rect width="1280" height="220" fill="#0F172A"></rect>
5
+
6
+ <!-- Dotted texture for depth -->
7
+ <defs>
8
+ <pattern id="dots" x="16" y="16" width="32" height="32" patternUnits="userSpaceOnUse">
9
+ <circle cx="0" cy="0" r="1.2" fill="#22D3EE" fill-opacity="0.07"></circle>
10
+ </pattern>
11
+ </defs>
12
+ <rect width="1280" height="220" fill="url(#dots)"></rect>
13
+
14
+ <!-- Monogram -->
15
+ <g transform="translate(56,62)">
16
+ <rect width="96" height="96" rx="17.3" fill="#0F172A" stroke="#22D3EE" stroke-width="1.5" stroke-opacity="0.4"></rect>
17
+ <text x="48" y="48" font-family="'JetBrains Mono', 'Berkeley Mono', ui-monospace, monospace" font-weight="700" font-size="41" letter-spacing="-1" fill="#22D3EE" text-anchor="middle" dominant-baseline="central">[hs]</text>
18
+ </g>
19
+
20
+ <!-- Wordmark -->
21
+ <text x="176" y="96" font-family="'JetBrains Mono', 'Berkeley Mono', ui-monospace, monospace" font-weight="700" font-size="72" letter-spacing="-2" fill="#F8FAFC" dominant-baseline="central">hscli</text>
22
+
23
+ <!-- Tagline -->
24
+ <text x="176" y="148" font-family="'JetBrains Mono', 'Berkeley Mono', ui-monospace, monospace" font-weight="400" font-size="20" letter-spacing="0.3" fill="#22D3EE" dominant-baseline="central">agentic HubSpot CLI + MCP server</text>
25
+ </svg>
package/dist/cli.js CHANGED
@@ -32,6 +32,7 @@ import { registerEvents } from "./commands/events/index.js";
32
32
  import { registerEmailEvents } from "./commands/email-events/index.js";
33
33
  import { registerMediaBridge } from "./commands/media-bridge/index.js";
34
34
  import { registerFeatureFlags } from "./commands/feature-flags/index.js";
35
+ import { registerGuide } from "./commands/guide/index.js";
35
36
  import { registerMarketingEmailsV1 } from "./commands/marketing-emails-v1/index.js";
36
37
  import { registerIntegrators } from "./commands/integrators/index.js";
37
38
  import { registerIntegrations } from "./commands/integrations/index.js";
@@ -40,6 +41,7 @@ import { registerBroadcast, registerVisitorIdentification, registerSubmissions,
40
41
  import { registerContactsV1, registerCompaniesV2, registerDealsV1, registerOwnersV2, registerEngagementsV1, registerPropertiesLegacy, registerReportsV2, registerPaymentsSubscriptions, registerContentV2, registerSalesExtensions, registerComments, registerCallingV1, registerChannels, } from "./commands/legacy-v1/index.js";
41
42
  import { CliError, printError } from "./core/output.js";
42
43
  import { loadPlugins } from "./core/plugins.js";
44
+ import { normalizeApiBaseUrl, normalizeStoredHublet, resolveApiDomain } from "./core/auth.js";
43
45
  import pkg from "../package.json" with { type: "json" };
44
46
  export function createProgram() {
45
47
  const program = new Command();
@@ -64,9 +66,13 @@ export function createProgram() {
64
66
  .option("--policy-file <path>", "Policy file controlling write/delete permissions")
65
67
  .option("--change-ticket <id>", "Change ticket reference for guarded writes")
66
68
  .option("--telemetry-file <path>", "Append request telemetry JSON lines to a local file")
69
+ .option("--hublet <id>", "Override HubSpot hublet routing for this invocation (eu1, na1, na2, ap1)")
70
+ .option("--api-base-url <url>", "Advanced: override HubSpot API base URL (must be api*.hubapi.com)")
67
71
  .hook("preAction", (cmd) => {
68
72
  const opts = cmd.optsWithGlobals();
69
73
  const telemetryFile = opts.telemetryFile ? String(opts.telemetryFile).trim() : undefined;
74
+ const hublet = opts.hublet ? normalizeStoredHublet(String(opts.hublet)) : undefined;
75
+ const apiBaseUrl = resolveApiBaseUrlOverride(hublet, opts.apiBaseUrl ? String(opts.apiBaseUrl) : undefined);
70
76
  ctx = {
71
77
  profile: opts.profile ?? "default",
72
78
  json: Boolean(opts.json),
@@ -78,12 +84,28 @@ export function createProgram() {
78
84
  changeTicket: opts.changeTicket ? String(opts.changeTicket).trim() : undefined,
79
85
  runId,
80
86
  telemetryFile,
87
+ hublet,
88
+ apiBaseUrl,
81
89
  };
82
90
  process.env.HSCLI_PROFILE = ctx.profile;
83
91
  process.env.HSCLI_STRICT_CAPABILITIES = ctx.strictCapabilities ? "1" : "0";
84
92
  process.env.HSCLI_REQUEST_ID = runId;
85
93
  if (telemetryFile)
86
94
  process.env.HSCLI_TELEMETRY_FILE = telemetryFile;
95
+ if (apiBaseUrl)
96
+ process.env.HSCLI_API_BASE_URL = apiBaseUrl;
97
+ else
98
+ delete process.env.HSCLI_API_BASE_URL;
99
+ // CLI is single-invocation per process, so env is safe here (no
100
+ // concurrency). emitTelemetry() reads this as a fallback when the
101
+ // AsyncLocalStorage changeTicket isn't set — which is the CLI case,
102
+ // since only MCP runs inside runWithTelemetryContext.
103
+ if (ctx.changeTicket) {
104
+ process.env.HSCLI_CHANGE_TICKET = ctx.changeTicket;
105
+ }
106
+ else {
107
+ delete process.env.HSCLI_CHANGE_TICKET;
108
+ }
87
109
  });
88
110
  registerAuth(program, () => ctx);
89
111
  registerDoctor(program, () => ctx);
@@ -115,6 +137,7 @@ export function createProgram() {
115
137
  registerEmailEvents(program, () => ctx);
116
138
  registerMediaBridge(program, () => ctx);
117
139
  registerFeatureFlags(program, () => ctx);
140
+ registerGuide(program, () => ctx);
118
141
  registerMarketingEmailsV1(program, () => ctx);
119
142
  registerIntegrators(program, () => ctx);
120
143
  registerIntegrations(program, () => ctx);
@@ -179,6 +202,8 @@ export async function run(argv = process.argv) {
179
202
  changeTicket: opts.changeTicket ? String(opts.changeTicket).trim() : undefined,
180
203
  runId: process.env.HSCLI_REQUEST_ID,
181
204
  telemetryFile: opts.telemetryFile ? String(opts.telemetryFile).trim() : undefined,
205
+ hublet: opts.hublet ? String(opts.hublet).trim() : undefined,
206
+ apiBaseUrl: opts.apiBaseUrl ? String(opts.apiBaseUrl).trim() : undefined,
182
207
  };
183
208
  printError(ctx, err);
184
209
  process.exitCode = 1;
@@ -203,6 +228,16 @@ try {
203
228
  catch {
204
229
  // If realpath fails (e.g. imported as ESM for testing), silently skip.
205
230
  }
231
+ function resolveApiBaseUrlOverride(hublet, rawApiBaseUrl) {
232
+ if (hublet && rawApiBaseUrl?.trim()) {
233
+ throw new CliError("API_ROUTING_CONFLICT", "Use either --hublet or --api-base-url, not both.");
234
+ }
235
+ if (rawApiBaseUrl?.trim())
236
+ return normalizeApiBaseUrl(rawApiBaseUrl);
237
+ if (hublet)
238
+ return `https://${resolveApiDomain(hublet)}`;
239
+ return undefined;
240
+ }
206
241
  function resolveOutputFormat(raw, jsonFlag) {
207
242
  const fallback = "table";
208
243
  const value = (raw === undefined || raw === null) ? fallback : String(raw).trim().toLowerCase();
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}