@wavyx/pdcli 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,38 @@ All notable changes to `pdcli` are documented here. Format follows
4
4
  [Keep a Changelog](https://keepachangelog.com/); versions follow
5
5
  [SemVer](https://semver.org/).
6
6
 
7
+ ## [0.6.0] - 2026-06-04
8
+
9
+ ### Added
10
+
11
+ - Documentation site (Astro + Starlight) at wavyx.github.io/pdcli:
12
+ quickstarts (including a dedicated AI-agent quickstart), guides for every
13
+ feature area, automation recipes, concepts, and a command reference
14
+ generated from the CLI manifest.
15
+ - Machine-readable docs for AI agents: `llms.txt`, `llms-full.txt`, and
16
+ `llms-small.txt`.
17
+ - Native tarballs (linux x64/arm64, macOS x64/arm64, Windows x64) attached
18
+ to every GitHub Release for non-npm installs.
19
+ - Shell completion docs (`pdcli autocomplete bash|zsh|fish`).
20
+ - `bin/dev.js` development runner (no manifest cache).
21
+
22
+ ## [0.5.0] - 2026-06-04
23
+
24
+ ### Added
25
+
26
+ - `metrics velocity` — the Sales Velocity Equation ((open × win rate ×
27
+ avg won value) / cycle days) with all four levers, over a trailing
28
+ `--period` and optional `--pipeline`/`--owner` scope.
29
+ - `funnel` — stage-to-stage conversion approximated from closed deals'
30
+ final stages, plus the current open distribution per stage.
31
+ - `pipeline health` — per-stage snapshot: open count/value,
32
+ probability-weighted value, stale deals (>14d), deals without a next
33
+ step, deals past their close date.
34
+ - `audit` — 11 data-hygiene checks (stale/ancient deals, missing fields,
35
+ duplicate persons by email, duplicate orgs by name, uncontactable
36
+ contacts, overdue pileups, …) with `--checks`, `--verbose`, and
37
+ `--strict` (exit 1 on must-severity findings — CI-able).
38
+
7
39
  ## [0.4.0] - 2026-06-04
8
40
 
9
41
  ### Added
package/README.md CHANGED
@@ -69,6 +69,16 @@ pdcli person import people.csv --dry-run # CSV headers map to fiel
69
69
  pdcli person import people.csv # custom fields by name
70
70
  ```
71
71
 
72
+ ## Analytics & housekeeping
73
+
74
+ ```bash
75
+ pdcli metrics velocity --period 90d # the Sales Velocity Equation, in your terminal
76
+ pdcli funnel --pipeline 1 # stage-to-stage conversion
77
+ pdcli pipeline health # per-stage value, weighted value, stale, no-next-step
78
+ pdcli audit # 11 data-hygiene checks (duplicates, stale, gaps)
79
+ pdcli audit --strict # exit 1 on must-severity findings — wire into CI
80
+ ```
81
+
72
82
  ## Files, webhooks, backup
73
83
 
74
84
  ```bash
@@ -88,6 +98,7 @@ pdcli doctor # diagnose auth/keychain/connectivity
88
98
 
89
99
  - `--output table|json|yaml|csv` everywhere; table in a TTY, JSON when piped.
90
100
  - Deterministic [sysexits](https://man.freebsd.org/cgi/man.cgi?query=sysexits) exit codes for scripting.
101
+ - **Docs: [wavyx.github.io/pdcli](https://wavyx.github.io/pdcli)** — guides, cookbook, AI-agent quickstart, [`llms.txt`](https://wavyx.github.io/pdcli/llms.txt).
91
102
  - Full reference: [docs/commands.md](docs/commands.md) (generated from the CLI manifest).
92
103
 
93
104
  ## License
package/bin/dev.js ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ import { existsSync, readFileSync } from 'node:fs'
3
+ import { resolve } from 'node:path'
4
+ import { execute } from '@oclif/core'
5
+
6
+ const envFile = resolve(process.cwd(), '.env')
7
+ if (existsSync(envFile)) {
8
+ for (const line of readFileSync(envFile, 'utf8').split('\n')) {
9
+ const trimmed = line.trim()
10
+ if (!trimmed || trimmed.startsWith('#')) continue
11
+ const eq = trimmed.indexOf('=')
12
+ if (eq === -1) continue
13
+ const key = trimmed.slice(0, eq).trim()
14
+ const value = trimmed.slice(eq + 1).trim()
15
+ if (!process.env[key]) process.env[key] = value
16
+ }
17
+ }
18
+
19
+ await execute({ dir: import.meta.url })