Skip to content

Commit 8995cfd

Browse files
appboypovTabishBgithub-actions[bot]smileeunsong
authored
chore: sync upstream parent/main (#7)
* feat(cli): add openspec config command for global configuration management (Fission-AI#382) * feat(cli): add openspec config command for global configuration management Implements the `openspec config` command with subcommands: - `path`: Show config file location - `list [--json]`: Show all current settings - `get <key>`: Get a specific value (raw output for scripting) - `set <key> <value> [--string]`: Set a value with auto type coercion - `unset <key>`: Remove a key (revert to default) - `reset --all [-y]`: Reset configuration to defaults - `edit`: Open config in $EDITOR/$VISUAL Key features: - Dot notation for nested key access (e.g., featureFlags.someFlag) - Auto type coercion (true/false → boolean, numbers → number) - --string flag to force string storage - Zod schema validation with unknown field passthrough - Reserved --scope flag for future project-local config - Windows-compatible editor spawning with proper path quoting - Shell completion registry integration * test(config): add additional unit tests for validation and coercion - Add tests for unknown fields with various types - Add test to verify error message path for featureFlags - Add test for number values rejection in featureFlags - Add config set simulation tests to verify full coerce → set → validate flow * fix(config): avoid shell parsing in config edit to handle paths with spaces Use spawn with shell: false and pass configPath as an argument instead of building a shell command string. This correctly handles spaces in both the EDITOR path and config file path on all platforms. * chore(openspec): archive add-config-command and create cli-config spec Move completed change to archive and apply spec deltas to create the cli-config specification documenting the config command interface. * Validate config keys on set * Add changeset for config command and shell completions (Fission-AI#388) * chore(release): version packages (Fission-AI#389) * Version Packages * chore: trigger CI --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Tabish Bidiwale <[email protected]> * feat(ci): migrate to npm OIDC trusted publishing (Fission-AI#390) Replace classic npm token authentication with OIDC trusted publishing: - Add `id-token: write` permission for OIDC token generation - Upgrade to Node 24 (includes npm 11.5.1+ required for OIDC) - Remove NPM_TOKEN/NODE_AUTH_TOKEN env vars (OIDC replaces them) This eliminates the need for rotating npm access tokens and provides cryptographically verified publisher identity with automatic provenance attestation. Requires configuring trusted publisher on npmjs.com: - Organization: Fission-AI - Repository: OpenSpec - Workflow: release-prepare.yml * fix(cli): use dynamic import for @inquirer/prompts in config command (Fission-AI#392) * fix(cli): use dynamic import for @inquirer/prompts in config command The config command (added in Fission-AI#382) reintroduced the pre-commit hook hang issue that was fixed in Fission-AI#380. The static import of @inquirer/prompts at module load time causes stdin event listeners to be registered even when running non-interactive commands, preventing clean process exit when stdin is piped (as pre-commit does). Convert the static import to a dynamic import that only loads inquirer when the `config reset` command is actually used interactively. Fixes Fission-AI#367 * chore: add ESLint with no-restricted-imports rule for @InQuirer Add ESLint configuration that prevents static imports of @inquirer/* modules. This prevents future regressions of the pre-commit hook hang issue fixed in this PR. The rule shows a helpful error message pointing to issue Fission-AI#367 for context. init.ts is exempted since it's already dynamically imported from the CLI. * ci: add ESLint step to lint job Run `pnpm lint` in CI to enforce the no-restricted-imports rule that prevents static @InQuirer imports. * Add changeset for config command dynamic import fix (Fission-AI#393) * chore(release): version packages (Fission-AI#394) * Version Packages * chore: trigger CI --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Tabish Bidiwale <[email protected]> * fix(cli): respect --no-interactive flag in validate command (Fission-AI#395) * fix(cli): respect --no-interactive flag in validate command The validate command's spinner was starting regardless of the --no-interactive flag, causing hangs in pre-commit hooks. Changes: - Pass noInteractive option to runBulkValidation - Handle Commander.js --no-* flag syntax (sets interactive=false) - Only start ora spinner when in interactive mode - Add CI environment variable check to isInteractive() for industry standard compliance * test: add unit tests for interactive utilities and CLI flag - Export resolveNoInteractive() helper for reuse - Add InteractiveOptions type export for testing - Refactor validate.ts to use resolveNoInteractive() - Add 17 unit tests for isInteractive() and resolveNoInteractive() - Add CLI integration test for --no-interactive flag This prevents future regressions where Commander.js --no-* flag parsing is not properly handled. * Add changeset for --no-interactive flag fix (Fission-AI#396) * chore(release): version packages (Fission-AI#397) * Version Packages * chore: trigger CI --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Tabish Bidiwale <[email protected]> * docs: add artifact POC analysis document (Fission-AI#398) Add internal documentation for the artifact-based approach to OpenSpec core. This document outlines design decisions, terminology, and the philosophy behind treating dependencies as enablers rather than gates. * fix(archive): allow REMOVED requirements when creating new spec files (Fission-AI#403) (Fission-AI#404) When creating a new spec file, REMOVED requirements are now ignored with a warning instead of causing archive to fail. This enables refactoring scenarios where old fields are removed while documenting a capability for the first time. Fixes Fission-AI#403 --------- Co-authored-by: Tabish Bidiwale <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Tabish Bidiwale <[email protected]> Co-authored-by: Eunsong-Park <[email protected]>
1 parent ab581f3 commit 8995cfd

File tree

26 files changed

+3348
-63
lines changed

26 files changed

+3348
-63
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,9 @@ jobs:
142142
- name: Type check
143143
run: pnpm exec tsc --noEmit
144144

145+
- name: Lint
146+
run: pnpm lint
147+
145148
- name: Check for build artifacts
146149
run: |
147150
if [ ! -d "dist" ]; then

.github/workflows/release-prepare.yml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ on:
77
permissions:
88
contents: write
99
pull-requests: write
10+
id-token: write # Required for npm OIDC trusted publishing
1011

1112
concurrency:
1213
group: release-${{ github.ref }}
1314
cancel-in-progress: false
1415

1516
jobs:
1617
prepare:
17-
if: github.repository == 'Fission-AI/OpenSpec'
18+
if: github.repository == 'appboypov/OpenSplx'
1819
runs-on: ubuntu-latest
1920
steps:
2021
- uses: actions/checkout@v4
@@ -27,11 +28,9 @@ jobs:
2728

2829
- uses: actions/setup-node@v4
2930
with:
30-
node-version: '20'
31+
node-version: '24' # Node 24 includes npm 11.5.1+ required for OIDC
3132
cache: 'pnpm'
3233
registry-url: 'https://registry.npmjs.org'
33-
scope: '@fission-ai'
34-
always-auth: true
3534

3635
- run: pnpm install --frozen-lockfile
3736

@@ -46,5 +45,4 @@ jobs:
4645
publish: pnpm run release:ci
4746
env:
4847
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
49-
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
50-
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
48+
# npm authentication handled via OIDC trusted publishing (no token needed)

.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,6 @@ dist/
140140
vite.config.js.timestamp-*
141141
vite.config.ts.timestamp-*
142142

143-
# Internal Docs
144-
docs/
145143

146144
# Claude
147145
.claude/

CHANGELOG.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,44 @@ Initial release of OpenSplx fork.
2020

2121
## Upstream History (OpenSpec)
2222

23+
## 0.17.2
24+
25+
### Patch Changes
26+
27+
- 455c65f: Fix `--no-interactive` flag in validate command to properly disable spinner, preventing hangs in pre-commit hooks and CI environments
28+
29+
## 0.17.1
30+
31+
### Patch Changes
32+
33+
- a2757e7: Fix pre-commit hook hang issue in config command by using dynamic import for @inquirer/prompts
34+
35+
The config command was causing pre-commit hooks to hang indefinitely due to stdin event listeners being registered at module load time. This fix converts the static import to a dynamic import that only loads inquirer when the `config reset` command is actually used interactively.
36+
37+
Also adds ESLint with a rule to prevent static @inquirer imports, avoiding future regressions.
38+
39+
## 0.17.0
40+
41+
### Minor Changes
42+
43+
- 2e71835: ### New Features
44+
45+
- Add `openspec config` command for managing global configuration settings
46+
- Implement global config directory with XDG Base Directory specification support
47+
- Add Oh-my-zsh shell completions support for enhanced CLI experience
48+
49+
### Bug Fixes
50+
51+
- Fix hang in pre-commit hooks by using dynamic imports
52+
- Respect XDG_CONFIG_HOME environment variable on all platforms
53+
- Resolve Windows compatibility issues in zsh-installer tests
54+
- Align cli-completion spec with implementation
55+
- Remove hardcoded agent field from slash commands
56+
57+
### Documentation
58+
59+
- Alphabetize AI tools list in README and make it collapsible
60+
2361
## 0.16.0
2462

2563
### Minor Changes

0 commit comments

Comments
 (0)