Skip to content

Commit d695bcb

Browse files
committed
Merge v0.17.2 code
2 parents d16fc72 + c08a53c commit d695bcb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+8590
-35
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: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ 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 }}
@@ -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)

CHANGELOG.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,43 @@
11
# @fission-ai/openspec
22

3+
## 0.17.2
4+
5+
### Patch Changes
6+
7+
- 455c65f: Fix `--no-interactive` flag in validate command to properly disable spinner, preventing hangs in pre-commit hooks and CI environments
8+
9+
## 0.17.1
10+
11+
### Patch Changes
12+
13+
- a2757e7: Fix pre-commit hook hang issue in config command by using dynamic import for @inquirer/prompts
14+
15+
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.
16+
17+
Also adds ESLint with a rule to prevent static @inquirer imports, avoiding future regressions.
18+
19+
## 0.17.0
20+
21+
### Minor Changes
22+
23+
- 2e71835: ### New Features
24+
25+
- Add `openspec config` command for managing global configuration settings
26+
- Implement global config directory with XDG Base Directory specification support
27+
- Add Oh-my-zsh shell completions support for enhanced CLI experience
28+
29+
### Bug Fixes
30+
31+
- Fix hang in pre-commit hooks by using dynamic imports
32+
- Respect XDG_CONFIG_HOME environment variable on all platforms
33+
- Resolve Windows compatibility issues in zsh-installer tests
34+
- Align cli-completion spec with implementation
35+
- Remove hardcoded agent field from slash commands
36+
37+
### Documentation
38+
39+
- Alphabetize AI tools list in README and make it collapsible
40+
341
## 0.16.0
442

543
### Minor Changes

eslint.config.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import tseslint from 'typescript-eslint';
2+
3+
export default tseslint.config(
4+
{
5+
files: ['src/**/*.ts'],
6+
extends: [...tseslint.configs.recommended],
7+
rules: {
8+
// Prevent static imports of @inquirer modules to avoid pre-commit hook hangs.
9+
// These modules have side effects that can keep the Node.js event loop alive
10+
// when stdin is piped. Use dynamic import() instead.
11+
// See: https://github.com/Fission-AI/OpenSpec/issues/367
12+
'no-restricted-imports': [
13+
'error',
14+
{
15+
patterns: [
16+
{
17+
group: ['@inquirer/*'],
18+
message:
19+
'Use dynamic import() for @inquirer modules to prevent pre-commit hook hangs. See #367.',
20+
},
21+
],
22+
},
23+
],
24+
// Disable rules that need broader cleanup - focus on critical issues only
25+
'@typescript-eslint/no-explicit-any': 'off',
26+
'@typescript-eslint/no-unused-vars': 'off',
27+
'no-empty': 'off',
28+
'prefer-const': 'off',
29+
},
30+
},
31+
{
32+
// init.ts is dynamically imported from cli/index.ts, so static @inquirer
33+
// imports there are safe - they won't be loaded at CLI startup
34+
files: ['src/core/init.ts'],
35+
rules: {
36+
'no-restricted-imports': 'off',
37+
},
38+
},
39+
{
40+
ignores: ['dist/**', 'node_modules/**', '*.js', '*.mjs'],
41+
}
42+
);

0 commit comments

Comments
 (0)