@outcomeeng/spx 0.1.4 → 0.1.6
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/README.md +33 -17
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,13 +11,14 @@ Developer CLI for code validation and session management.
|
|
|
11
11
|
- **Unified validation**: Run ESLint, TypeScript, and circular dependency checks through a single command
|
|
12
12
|
- **Session management**: Queue, claim, and hand off work between agents
|
|
13
13
|
- **Multiple formats**: Text, JSON output for CI and automation
|
|
14
|
+
- **Secure publishing**: OIDC Trusted Publishing with Sigstore provenance via GitHub Actions
|
|
14
15
|
|
|
15
16
|
All commands are domain-scoped (e.g., `spx validation`, `spx session`) and support `--quiet` and `--json` flags for CI and automation.
|
|
16
17
|
|
|
17
18
|
## Installation
|
|
18
19
|
|
|
19
20
|
```bash
|
|
20
|
-
|
|
21
|
+
npm install -g @outcomeeng/spx
|
|
21
22
|
```
|
|
22
23
|
|
|
23
24
|
### From Source
|
|
@@ -62,20 +63,12 @@ priority: high
|
|
|
62
63
|
---
|
|
63
64
|
# Implement feature X
|
|
64
65
|
EOF
|
|
65
|
-
# Output:
|
|
66
|
-
# Created handoff session <HANDOFF_ID>2026-01-15_08-30-00</HANDOFF_ID>
|
|
67
|
-
# <SESSION_FILE>/path/to/.spx/sessions/todo/2026-01-15_08-30-00.md</SESSION_FILE>
|
|
68
|
-
|
|
69
|
-
# Or create empty session and edit the file directly
|
|
70
|
-
spx session handoff
|
|
71
|
-
# Then edit the <SESSION_FILE> path returned
|
|
72
66
|
|
|
73
67
|
# List all sessions
|
|
74
68
|
spx session list
|
|
75
69
|
|
|
76
70
|
# Claim the highest priority session
|
|
77
71
|
spx session pickup --auto
|
|
78
|
-
# Output: Claimed session <PICKUP_ID>2026-01-15_08-30-00</PICKUP_ID>
|
|
79
72
|
|
|
80
73
|
# Release session back to queue
|
|
81
74
|
spx session release
|
|
@@ -87,10 +80,14 @@ spx session show <session-id>
|
|
|
87
80
|
spx session delete <session-id>
|
|
88
81
|
```
|
|
89
82
|
|
|
90
|
-
Sessions are stored in `.spx/sessions/` with priority-based ordering (high
|
|
83
|
+
Sessions are stored in `.spx/sessions/` with priority-based ordering (high > medium > low) and FIFO within the same priority. Commands output parseable `<PICKUP_ID>`, `<HANDOFF_ID>`, and `<SESSION_FILE>` tags for automation.
|
|
91
84
|
|
|
92
85
|
See [Session Recipes](docs/how-to/session/common-tasks.md) for detailed usage patterns.
|
|
93
86
|
|
|
87
|
+
### Spec Management (deprecated)
|
|
88
|
+
|
|
89
|
+
The `spx spec` and `spx spx` CLI domains are **deprecated**. Spec tree management has moved to the **spec-tree** Claude Code plugin, available at [`outcomeeng/claude/plugins/spec-tree`](https://github.com/simonheimlicher/spx-claude). The plugin provides skills for understanding, authoring, decomposing, contextualizing, testing, refactoring, and aligning specification trees.
|
|
90
|
+
|
|
94
91
|
## Development
|
|
95
92
|
|
|
96
93
|
### Setup
|
|
@@ -128,21 +125,39 @@ pnpm run knip # Unused code detection
|
|
|
128
125
|
|
|
129
126
|
The `pnpm run` scripts use `node bin/spx.js` internally, so they work without a global link. Once linked, you can also use `spx validation all` etc. directly.
|
|
130
127
|
|
|
128
|
+
## CI/CD
|
|
129
|
+
|
|
130
|
+
The project uses GitHub Actions for continuous integration and publishing:
|
|
131
|
+
|
|
132
|
+
- **CI** (`ci.yml`) — Runs validate, test, and build on Node 22 and 24 for every push to `main` and every pull request. Includes dependency review to block PRs introducing vulnerable dependencies.
|
|
133
|
+
- **Publish** (`publish.yml`) — Triggered by `v*` tags. Uses OIDC Trusted Publishing (no stored npm tokens) with Sigstore provenance attestation. Requires manual approval via the `npm-publish` GitHub Environment.
|
|
134
|
+
- **Scorecard** (`scorecard.yml`) — Weekly OpenSSF Scorecard assessment, results published to the GitHub Security tab.
|
|
135
|
+
|
|
136
|
+
### Publishing a Release
|
|
137
|
+
|
|
138
|
+
1. Bump the version in `package.json`
|
|
139
|
+
2. Commit and tag: `git tag vX.Y.Z`
|
|
140
|
+
3. Push: `git push origin main && git push origin vX.Y.Z`
|
|
141
|
+
4. Approve the deployment in the GitHub Actions `npm-publish` environment
|
|
142
|
+
5. The package is published with provenance — verify with `npm audit signatures`
|
|
143
|
+
|
|
131
144
|
## Technical Stack
|
|
132
145
|
|
|
133
|
-
- **TypeScript**
|
|
134
|
-
- **Commander.js**
|
|
135
|
-
- **Vitest**
|
|
136
|
-
- **tsup**
|
|
137
|
-
- **ESLint 9**
|
|
146
|
+
- **TypeScript** — Type-safe implementation (ESM)
|
|
147
|
+
- **Commander.js** — CLI framework
|
|
148
|
+
- **Vitest** — Testing framework
|
|
149
|
+
- **tsup** — Build tool (esbuild-based)
|
|
150
|
+
- **ESLint 9** — Linting with flat config
|
|
151
|
+
- **GitHub Actions** — CI/CD with OIDC Trusted Publishing
|
|
138
152
|
|
|
139
153
|
## Architecture
|
|
140
154
|
|
|
141
155
|
```
|
|
142
156
|
src/
|
|
143
157
|
├── commands/ # CLI command implementations
|
|
144
|
-
│ ├──
|
|
145
|
-
│ └──
|
|
158
|
+
│ ├── session/ # spx session subcommands
|
|
159
|
+
│ └── validation/ # spx validation subcommands
|
|
160
|
+
├── domains/ # Domain routers
|
|
146
161
|
├── validation/ # Lint, typecheck, circular dep logic
|
|
147
162
|
├── session/ # Session lifecycle and storage
|
|
148
163
|
├── config/ # Configuration loading
|
|
@@ -151,6 +166,7 @@ src/
|
|
|
151
166
|
├── status/ # Status state machine
|
|
152
167
|
├── reporter/ # Output formatting
|
|
153
168
|
├── tree/ # Hierarchical tree building
|
|
169
|
+
├── precommit/ # Pre-commit hook orchestration
|
|
154
170
|
└── lib/ # Shared utilities
|
|
155
171
|
```
|
|
156
172
|
|