@martinffx/atelier 1.3.0 → 1.4.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@martinffx/atelier",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Personal development toolkit - spec-driven development, code quality, deep thinking, and ecosystem patterns",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,6 +11,7 @@
11
11
  "cli",
12
12
  "claude-code",
13
13
  "opencode",
14
+ "codex",
14
15
  "ai-agents",
15
16
  "spec-driven-development"
16
17
  ],
@@ -19,6 +20,7 @@
19
20
  "dist/",
20
21
  "skills/",
21
22
  "agents/",
23
+ ".codex-plugin/",
22
24
  "README.md",
23
25
  "LICENSE",
24
26
  "CHANGELOG.md"
@@ -28,6 +30,8 @@
28
30
  },
29
31
  "scripts": {
30
32
  "build": "bun build ./src/atelier.ts --outdir ./dist --target bun",
33
+ "clean": "rm -rf dist .agents .claude .codex .opencode hooks && rm -f *.log .DS_Store",
34
+ "cli": "bun src/atelier.ts",
31
35
  "typecheck": "tsgo --noEmit",
32
36
  "test": "bun test",
33
37
  "prepare": "simple-git-hooks"
@@ -39,6 +43,7 @@
39
43
  "commander": "^13.1.0",
40
44
  "gray-matter": "^4.0.3",
41
45
  "inquirer": "^12.5.2",
46
+ "smol-toml": "^1.7.0",
42
47
  "zod": "^3.25.0"
43
48
  },
44
49
  "devDependencies": {
@@ -6,75 +6,95 @@ user-invocable: true
6
6
 
7
7
  # Conventional Commit Skill
8
8
 
9
- Generate and validate commit messages following the [Conventional Commits](https://www.conventionalcommits.org/) specification.
9
+ Create coherent, reviewable commits that follow the
10
+ [Conventional Commits](https://www.conventionalcommits.org/) specification.
11
+ Message syntax matters, but the selected changes must tell one clear story too.
10
12
 
11
- ## Conventional Commit Format
13
+ ## Message Format
12
14
 
13
- ```
14
- <type>(<scope>): <subject>
15
+ Every generated commit has a title and body:
15
16
 
16
- [optional body]
17
+ ```
18
+ <type>(<scope>): <imperative title>
17
19
 
18
- [optional footer(s)]
20
+ <1-5 lines describing the change and, when useful, its reason or effect>
19
21
  ```
20
22
 
21
- ### Types
23
+ Use a lowercase scope that identifies the affected component. The title is concise,
24
+ imperative, lowercase, and has no trailing period. The body is concrete: explain the
25
+ behavior, motivation, or important implementation decision rather than restating the title.
22
26
 
23
- | Type | Description |
24
- |------|-------------|
25
- | `feat` | New feature |
26
- | `fix` | Bug fix |
27
+ | Type | Use for |
28
+ |------|---------|
29
+ | `feat` | New user-facing capability |
30
+ | `fix` | Corrected behavior |
27
31
  | `docs` | Documentation only |
28
- | `style` | Code style (formatting, semicolons, etc.) |
29
- | `refactor` | Code change that neither fixes nor adds |
30
- | `test` | Adding or updating tests |
31
- | `chore` | Build, tooling, dependencies |
32
+ | `style` | Formatting only |
33
+ | `refactor` | Restructuring without behavior change |
34
+ | `test` | Tests only |
35
+ | `chore` | Maintenance or tooling |
32
36
  | `perf` | Performance improvement |
33
- | `ci` | CI configuration changes |
37
+ | `ci` | Continuous integration configuration |
34
38
  | `build` | Build system or dependencies |
35
- | `revert` | Reverting a previous commit |
39
+ | `revert` | Reverting a prior commit |
36
40
 
37
- ### Rules
41
+ For breaking changes, add `!` after the scope and include a `BREAKING CHANGE:` footer.
42
+ Include issue footers such as `Closes #123` only when the issue is known.
38
43
 
39
- - **Subject**: Short description, imperative mood, lowercase, no period at end
40
- - **Scope**: Optional, lowercase, describes what was changed (e.g., `auth`, `api`, `ui`)
41
- - **Breaking changes**: Add `!` after type/scope: `feat(auth)!: change API`
42
- - **Footer**: For breaking changes (`BREAKING CHANGE:`) or issue references (`Closes #123`)
44
+ ## Create a Commit
43
45
 
44
- ## Operations
46
+ When the user asks to commit, first inspect the complete worktree:
45
47
 
46
- ### 1. Generate Commit from Diff
48
+ 1. Run `git status --short`.
49
+ 2. Read both `git diff --cached` and `git diff` so pre-staged work is not mistaken for the entire change.
50
+ 3. List untracked files with `git ls-files --others --exclude-standard` and inspect relevant ones.
51
+ 4. Read recent subjects with `git log --oneline -10` to match established scopes and wording.
52
+ 5. Flag likely secrets, credentials, local configuration, or generated output. Do not stage them without explicit direction.
47
53
 
48
- When user wants to commit changes:
54
+ ### Decide Whether to Split
49
55
 
50
- 1. Run `git status` to see changed files
51
- 2. Run `git diff --staged` for staged changes
52
- 3. Analyze what changed to determine:
53
- - **Type**: Which type best describes the changes?
54
- - **Scope**: What area was affected? (optional)
55
- - **Subject**: What was done? (imperative: "add" not "added")
56
- 4. Create a conventional commit message
57
- 5. Run `git commit -m "<message>"`
56
+ Default to one commit containing all intended, related changes. Look for an obvious
57
+ file-level split only when changes are independent and each group can stand alone.
58
58
 
59
- **Example:**
60
- ```
61
- feat(auth): add JWT token refresh
59
+ Keep these together:
62
60
 
63
- Implements token refresh endpoint to extend sessions
64
- without requiring re-authentication.
61
+ - Implementation and its tests.
62
+ - Documentation that describes the same change.
63
+ - Dependency manifests and their lockfiles.
65
64
 
66
- Closes #142
67
- ```
65
+ Do not invent a split for adjacent work, use hunk-level staging, or force the user
66
+ to reorganize a coherent change. If an obvious split exists, propose each commit with
67
+ its files and full message, then ask once for approval. If not, propose one commit.
68
+
69
+ ### Approve, Stage, Commit
70
+
71
+ Before making any write, show:
72
+
73
+ - The files in each proposed commit.
74
+ - The full title and 1-5 line body for each commit.
75
+ - Any excluded files and why they are excluded.
68
76
 
69
- ### 2. Validate Commit Message
77
+ Ask for approval unless the user explicitly authorizes committing immediately. After
78
+ approval, stage only the files for the approved commit with `git add -- <paths>` and
79
+ commit with the proposed title and body. Do not amend, rebase, push, or include
80
+ unapproved files.
70
81
 
71
- When user asks to validate or check a commit message:
82
+ Repository commit hooks are the final message validation when configured. Never bypass
83
+ a failing hook. Report the commit hash on success; report the error and leave changes
84
+ intact on failure.
72
85
 
73
- 1. Parse the commit message
74
- 2. Check format: `<type>(<scope>): <subject>`
75
- 3. Validate type is from the allowed list
76
- 4. Check subject follows rules (lowercase, imperative, no period)
77
- 5. Flag any issues found
86
+ ## Validate a Commit Message
87
+
88
+ When the user asks to validate a message, check:
89
+
90
+ 1. It follows `type(scope): imperative title`.
91
+ 2. The type is listed above and the scope is lowercase.
92
+ 3. The title is lowercase, imperative, concise, and has no trailing period.
93
+ 4. A body follows after a blank line and contains 1-5 meaningful lines.
94
+ 5. Breaking changes use both `!` and a `BREAKING CHANGE:` footer.
95
+
96
+ Return specific corrections and a revised message. When the repository configures
97
+ commitlint, use it as the authoritative validation rule.
78
98
 
79
99
  ### Delegated: Pull Request Creation
80
100
 
@@ -87,24 +107,15 @@ or `glab`.
87
107
 
88
108
  | Input | Action |
89
109
  |-------|--------|
90
- | User says "commit" or "git commit" | Generate from git diff, then commit |
110
+ | User says "commit" or "git commit" | Inspect the worktree, propose coherent commit(s), then commit after approval |
91
111
  | User says "validate commit" | Check the commit message format |
92
112
  | User pastes commit message | Validate the provided message |
93
113
 
94
- ## Auto-Commit Workflow
95
-
96
- When generating a commit:
97
-
98
- 1. Show the user the commit message first
99
- 2. Ask for confirmation before committing (unless user explicitly says "just do it")
100
- 3. Execute `git commit -m "<message>"` after confirmation
101
- 4. Show the result of the commit
102
-
103
114
  ## Error Handling
104
115
 
105
- - If no staged changes: `git status` shows nothing → warn user nothing to commit
106
- - If git not initialized: Initialize repo or warn user
107
- - If commit fails: Show error and offer to retry
116
+ - If there are no changes: report that there is nothing to commit.
117
+ - If Git is not initialized: report it; do not initialize a repository unless asked.
118
+ - If a commit fails: show the error, preserve the worktree, and do not bypass hooks.
108
119
 
109
120
  ## Examples
110
121
 
@@ -113,8 +124,7 @@ When generating a commit:
113
124
  ```
114
125
  fix(auth): resolve login timeout issue
115
126
 
116
- Users were logged out after 5 minutes due to
117
- incorrect token expiry calculation.
127
+ Correct token expiry calculation so active users are not logged out after five minutes.
118
128
  ```
119
129
 
120
130
  **Input:** "I added a new API endpoint for users"
@@ -122,8 +132,7 @@ incorrect token expiry calculation.
122
132
  ```
123
133
  feat(api): add user profile endpoint
124
134
 
125
- GET /users/:id returns user profile data including
126
- name, email, and avatar URL.
135
+ Expose name, email, and avatar URL from `GET /users/:id`.
127
136
 
128
137
  Closes #89
129
138
  ```
@@ -133,8 +142,7 @@ Closes #89
133
142
  ```
134
143
  feat(auth)!: change token validation endpoint
135
144
 
136
- The /auth/verify endpoint now requires Bearer token
137
- instead of query parameter.
145
+ Require a Bearer token on `/auth/verify` instead of a query parameter.
138
146
 
139
147
  BREAKING CHANGE: Clients must update to send
140
148
  Authorization header with Bearer token.
@@ -5,7 +5,7 @@ argument-hint: "What will the next session be used for?"
5
5
  user-invocable: true
6
6
  ---
7
7
 
8
- Write a handoff document summarising the current conversation so a fresh agent can continue the work. Save to the temporary directory of the user's OS - not the current workspace.
8
+ Write a handoff document summarising the current conversation so a fresh agent can continue the work. Create `<project-root>/.handoff/` if needed and save the document there with a descriptive `.md` filename.
9
9
 
10
10
  Include a "suggested skills" section in the document, which suggests skills that the agent should invoke.
11
11