Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@

## Testing

- [ ] `npm test` passes (0 failures)
- [ ] `npm run lint:agents` outputs `agent-lint: ok`
- [ ] `pnpm test` passes (0 failures)
- [ ] `pnpm run lint:agents` outputs `agent-lint: ok`
- [ ] New tests added for new behaviour (if applicable)

## Checklist
Expand Down
10 changes: 6 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@ jobs:
node-version: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: npm
- run: npm ci
- run: npm run lint:agents
- run: npm test
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm run lint:agents
- run: pnpm run lint
- run: pnpm test
3 changes: 3 additions & 0 deletions .husky/commit-msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/usr/bin/env sh

pnpm dlx commitlint --edit "$1"
2 changes: 1 addition & 1 deletion .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#!/usr/bin/env sh

npm run lint:agents
pnpm run lint:agents
7 changes: 7 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"semi": true,
"singleQuote": false,
"trailingComma": "all",
"printWidth": 120,
"tabWidth": 2
}
25 changes: 20 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,29 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm

---

## [Unreleased]
## [0.9.1] — 2026-03-12

## [0.1.0] — 2026-03-12
### Fixed

- Backup on replace now only applies when the existing target is a real file; symlinks pointing
elsewhere are removed without creating a backup copy

### Changed

- Backup policy limited to one copy per target (`.bak.<timestamp>`); no backup is created when
replacing a symlink

### Added

- commitlint with `@commitlint/config-conventional` enforces conventional commit messages
- Husky `commit-msg` hook wires commitlint into every commit
- Migrated package manager from npm to pnpm; `pnpm-lock.yaml` replaces `package-lock.json`
- CI workflow updated to use `pnpm/action-setup` and pnpm commands

## [0.9.0] — 2026-03-12

### Added

- Interactive Ink TUI with per-profile selection, diff overlay, and path editing
- Non-interactive plain-text installer for CI/headless use
- `--dry-run` flag — preview all changes without writing to disk
Expand All @@ -34,6 +52,3 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
- `scripts/agent-lint.sh` structural validator; runs on every commit via Husky pre-commit hook
- GitHub Actions CI: Node 18, 20, 22 matrix on push and pull_request to main
- 171 unit tests covering config loading, installation logic, and TUI formatting utilities

[Unreleased]: https://github.com/ndizazzo/saddle/compare/v0.1.0...HEAD
[0.1.0]: https://github.com/ndizazzo/saddle/releases/tag/v0.1.0
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
```bash
# Clone and set up
git clone https://github.com/ndizazzo/saddle-cli.git ~/dev/ai
cd ~/dev/ai && npm install
cd ~/dev/ai && pnpm install

# Launch the interactive installer
npx saddle-cli
Expand Down Expand Up @@ -253,8 +253,8 @@ Links to official documentation for each supported AI coding tool.
## Validation

```bash
npm install
npm run lint:agents
pnpm install
pnpm run lint:agents
```

The same validator runs from the Husky pre-commit hook.
Expand Down
1 change: 1 addition & 0 deletions commitlint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = { extends: ["@commitlint/config-conventional"] };
47 changes: 47 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import nPlugin from "eslint-plugin-n";
import prettierConfig from "eslint-config-prettier";

export default [
{
ignores: ["node_modules/**", "pnpm-lock.yaml"],
},
{
files: ["**/*.js", "**/*.mjs"],
plugins: { n: nPlugin },
languageOptions: {
ecmaVersion: 2022,
sourceType: "module",
globals: {
process: "readonly",
console: "readonly",
require: "readonly",
module: "readonly",
__dirname: "readonly",
__filename: "readonly",
exports: "writable",
Buffer: "readonly",
URL: "readonly",
setTimeout: "readonly",
setImmediate: "readonly",
clearTimeout: "readonly",
},
},
rules: {
"no-unused-vars": ["error", { argsIgnorePattern: "^_", caughtErrors: "none" }],
"no-undef": "error",
"no-console": "off",
"prefer-const": "error",
"no-var": "error",
eqeqeq: ["error", "always"],
"n/no-missing-require": "off",
"n/no-missing-import": "off",
},
},
{
files: ["**/*.js"],
languageOptions: {
sourceType: "commonjs",
},
},
prettierConfig,
];
Loading
Loading