@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/.codex-plugin/plugin.json +27 -0
- package/CHANGELOG.md +14 -0
- package/README.md +35 -41
- package/dist/atelier.js +14180 -12956
- package/package.json +6 -1
- package/skills/code-commit/SKILL.md +74 -66
- package/skills/code-handoff/SKILL.md +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@martinffx/atelier",
|
|
3
|
-
"version": "1.
|
|
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
|
-
|
|
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
|
-
##
|
|
13
|
+
## Message Format
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
<type>(<scope>): <subject>
|
|
15
|
+
Every generated commit has a title and body:
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
```
|
|
18
|
+
<type>(<scope>): <imperative title>
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
<1-5 lines describing the change and, when useful, its reason or effect>
|
|
19
21
|
```
|
|
20
22
|
|
|
21
|
-
|
|
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 |
|
|
24
|
-
|
|
25
|
-
| `feat` | New
|
|
26
|
-
| `fix` |
|
|
27
|
+
| Type | Use for |
|
|
28
|
+
|------|---------|
|
|
29
|
+
| `feat` | New user-facing capability |
|
|
30
|
+
| `fix` | Corrected behavior |
|
|
27
31
|
| `docs` | Documentation only |
|
|
28
|
-
| `style` |
|
|
29
|
-
| `refactor` |
|
|
30
|
-
| `test` |
|
|
31
|
-
| `chore` |
|
|
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` |
|
|
37
|
+
| `ci` | Continuous integration configuration |
|
|
34
38
|
| `build` | Build system or dependencies |
|
|
35
|
-
| `revert` | Reverting a
|
|
39
|
+
| `revert` | Reverting a prior commit |
|
|
36
40
|
|
|
37
|
-
|
|
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
|
-
|
|
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
|
-
|
|
46
|
+
When the user asks to commit, first inspect the complete worktree:
|
|
45
47
|
|
|
46
|
-
|
|
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
|
-
|
|
54
|
+
### Decide Whether to Split
|
|
49
55
|
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
60
|
-
```
|
|
61
|
-
feat(auth): add JWT token refresh
|
|
59
|
+
Keep these together:
|
|
62
60
|
|
|
63
|
-
|
|
64
|
-
|
|
61
|
+
- Implementation and its tests.
|
|
62
|
+
- Documentation that describes the same change.
|
|
63
|
+
- Dependency manifests and their lockfiles.
|
|
65
64
|
|
|
66
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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" |
|
|
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
|
|
106
|
-
- If
|
|
107
|
-
- If commit fails:
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
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
|
|