smart-commit-copilot-cli 0.1.5 → 0.1.7

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.
Files changed (168) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +55 -7
  3. package/docs/configuration.md +55 -2
  4. package/docs/contracts.md +15 -2
  5. package/docs/getting-started.md +18 -4
  6. package/docs/publish.md +1 -1
  7. package/docs/releases/0.1.6-draft.md +72 -0
  8. package/docs/releases/0.1.7-draft.md +55 -0
  9. package/docs/roadmap.md +1 -1
  10. package/docs/verification.md +15 -0
  11. package/examples/config/smart-commit.json +10 -1
  12. package/out/cliApp.js +11 -1
  13. package/out/cliApp.js.map +1 -1
  14. package/out/commands/bridge.js +160 -17
  15. package/out/commands/bridge.js.map +1 -1
  16. package/out/commitMessage/index.js +30 -9
  17. package/out/commitMessage/index.js.map +1 -1
  18. package/out/commitMessage/prompt.js +60 -10
  19. package/out/commitMessage/prompt.js.map +1 -1
  20. package/out/commitMessage/protocol.js +283 -22
  21. package/out/commitMessage/protocol.js.map +1 -1
  22. package/out/config/cliArgs.js +33 -0
  23. package/out/config/cliArgs.js.map +1 -1
  24. package/out/config/constants.js +9 -0
  25. package/out/config/constants.js.map +1 -1
  26. package/out/config/env.js +30 -0
  27. package/out/config/env.js.map +1 -1
  28. package/out/config/file.js +36 -0
  29. package/out/config/file.js.map +1 -1
  30. package/out/config/legacySmartCommit.js +41 -1
  31. package/out/config/legacySmartCommit.js.map +1 -1
  32. package/out/config/merge.js +4 -0
  33. package/out/config/merge.js.map +1 -1
  34. package/out/config/schema.js +35 -1
  35. package/out/config/schema.js.map +1 -1
  36. package/out/contracts.js +44 -9
  37. package/out/contracts.js.map +1 -1
  38. package/out/llm/responseCorrection.js +32 -0
  39. package/out/llm/responseCorrection.js.map +1 -0
  40. package/out/passHistory/index.js +51 -22
  41. package/out/passHistory/index.js.map +1 -1
  42. package/out/passHistory/store.js +29 -1
  43. package/out/passHistory/store.js.map +1 -1
  44. package/out/passHistory/types.js +23 -1
  45. package/out/passHistory/types.js.map +1 -1
  46. package/out/promptContext.js +19 -3
  47. package/out/promptContext.js.map +1 -1
  48. package/out/pullRequestSummary/index.js +53 -0
  49. package/out/pullRequestSummary/index.js.map +1 -0
  50. package/out/pullRequestSummary/mockProvider.js +24 -0
  51. package/out/pullRequestSummary/mockProvider.js.map +1 -0
  52. package/out/pullRequestSummary/openaiProvider.js +19 -0
  53. package/out/pullRequestSummary/openaiProvider.js.map +1 -0
  54. package/out/pullRequestSummary/prompt.js +122 -0
  55. package/out/pullRequestSummary/prompt.js.map +1 -0
  56. package/out/pullRequestSummary/provider.js +3 -0
  57. package/out/pullRequestSummary/provider.js.map +1 -0
  58. package/out/pullRequestSummary/render.js +74 -0
  59. package/out/pullRequestSummary/render.js.map +1 -0
  60. package/out/renderOutput.js +8 -1
  61. package/out/renderOutput.js.map +1 -1
  62. package/out/reporting/prompt.js +13 -1
  63. package/out/reporting/prompt.js.map +1 -1
  64. package/out/reporting/timeWindow.js +7 -0
  65. package/out/reporting/timeWindow.js.map +1 -1
  66. package/out/reporting/types.js +1 -0
  67. package/out/reporting/types.js.map +1 -1
  68. package/out/review/diffClassifier.js +535 -0
  69. package/out/review/diffClassifier.js.map +1 -0
  70. package/out/review/index.js +27 -11
  71. package/out/review/index.js.map +1 -1
  72. package/out/review/mockProvider.js +157 -8
  73. package/out/review/mockProvider.js.map +1 -1
  74. package/out/review/openaiProvider.js +10 -4
  75. package/out/review/openaiProvider.js.map +1 -1
  76. package/out/review/parser.js +13 -0
  77. package/out/review/parser.js.map +1 -1
  78. package/out/review/prompt.js +76 -4
  79. package/out/review/prompt.js.map +1 -1
  80. package/out/skills/types.js +3 -0
  81. package/out/skills/types.js.map +1 -0
  82. package/package.json +2 -1
  83. package/src/code-review-skills/c-code-review/SKILL.md +165 -0
  84. package/src/code-review-skills/c-code-review/references/build-and-tooling.md +16 -0
  85. package/src/code-review-skills/c-code-review/references/concurrency-and-signals.md +16 -0
  86. package/src/code-review-skills/c-code-review/references/error-handling-and-cleanup.md +16 -0
  87. package/src/code-review-skills/c-code-review/references/macros-headers-and-build-boundaries.md +16 -0
  88. package/src/code-review-skills/c-code-review/references/performance-and-data-movement.md +16 -0
  89. package/src/code-review-skills/c-code-review/references/pointers-memory-and-resource-lifecycle.md +18 -0
  90. package/src/code-review-skills/c-code-review/references/scoring-guide.md +40 -0
  91. package/src/code-review-skills/c-code-review/references/undefined-behavior-and-safety.md +17 -0
  92. package/src/code-review-skills/code-review/SKILL.md +150 -0
  93. package/src/code-review-skills/code-review/references/code-quality-checklist.md +53 -0
  94. package/src/code-review-skills/code-review/references/removal-plan.md +45 -0
  95. package/src/code-review-skills/code-review/references/scoring-guide.md +38 -0
  96. package/src/code-review-skills/code-review/references/security-checklist.md +53 -0
  97. package/src/code-review-skills/code-review/references/solid-checklist.md +55 -0
  98. package/src/code-review-skills/cpp-code-review/SKILL.md +165 -0
  99. package/src/code-review-skills/cpp-code-review/references/build-and-tooling.md +12 -0
  100. package/src/code-review-skills/cpp-code-review/references/concurrency-and-atomics.md +14 -0
  101. package/src/code-review-skills/cpp-code-review/references/exceptions-and-error-model.md +16 -0
  102. package/src/code-review-skills/cpp-code-review/references/memory-raii-and-lifetimes.md +19 -0
  103. package/src/code-review-skills/cpp-code-review/references/performance-and-hot-paths.md +16 -0
  104. package/src/code-review-skills/cpp-code-review/references/scoring-guide.md +41 -0
  105. package/src/code-review-skills/cpp-code-review/references/templates-api-and-abi.md +13 -0
  106. package/src/code-review-skills/cpp-code-review/references/undefined-behavior-and-safety.md +18 -0
  107. package/src/code-review-skills/csharp-code-review/SKILL.md +159 -0
  108. package/src/code-review-skills/csharp-code-review/references/async-and-cancellation.md +16 -0
  109. package/src/code-review-skills/csharp-code-review/references/concurrency.md +15 -0
  110. package/src/code-review-skills/csharp-code-review/references/exceptions-and-api-contracts.md +16 -0
  111. package/src/code-review-skills/csharp-code-review/references/memory-resources-and-interop.md +16 -0
  112. package/src/code-review-skills/csharp-code-review/references/nullable-types-and-patterns.md +15 -0
  113. package/src/code-review-skills/csharp-code-review/references/scoring-guide.md +41 -0
  114. package/src/code-review-skills/csharp-code-review/references/web-data-and-security.md +15 -0
  115. package/src/code-review-skills/frontend-code-review/SKILL.md +143 -0
  116. package/src/code-review-skills/frontend-code-review/references/accessibility-and-semantic-ux.md +33 -0
  117. package/src/code-review-skills/frontend-code-review/references/interaction-and-state-lifecycle.md +39 -0
  118. package/src/code-review-skills/frontend-code-review/references/rendering-performance-and-resource-loading.md +34 -0
  119. package/src/code-review-skills/frontend-code-review/references/scoring-guide.md +38 -0
  120. package/src/code-review-skills/frontend-code-review/references/security-and-data-boundary.md +34 -0
  121. package/src/code-review-skills/golang-code-review/SKILL.md +153 -0
  122. package/src/code-review-skills/golang-code-review/references/api-contract-and-maintainability.md +25 -0
  123. package/src/code-review-skills/golang-code-review/references/concurrency-and-lifecycle.md +25 -0
  124. package/src/code-review-skills/golang-code-review/references/error-handling-and-reliability.md +24 -0
  125. package/src/code-review-skills/golang-code-review/references/performance-and-allocation.md +25 -0
  126. package/src/code-review-skills/golang-code-review/references/scoring-guide.md +40 -0
  127. package/src/code-review-skills/golang-code-review/references/security-and-trust-boundary.md +20 -0
  128. package/src/code-review-skills/java-code-review/SKILL.md +153 -0
  129. package/src/code-review-skills/java-code-review/references/api-contract-and-maintainability.md +22 -0
  130. package/src/code-review-skills/java-code-review/references/concurrency-and-lifecycle.md +27 -0
  131. package/src/code-review-skills/java-code-review/references/error-handling-and-reliability.md +25 -0
  132. package/src/code-review-skills/java-code-review/references/performance-and-resource-usage.md +23 -0
  133. package/src/code-review-skills/java-code-review/references/scoring-guide.md +40 -0
  134. package/src/code-review-skills/java-code-review/references/security-and-trust-boundary.md +20 -0
  135. package/src/code-review-skills/mobile-code-review/SKILL.md +171 -0
  136. package/src/code-review-skills/mobile-code-review/references/async-state-and-side-effects.md +19 -0
  137. package/src/code-review-skills/mobile-code-review/references/lifecycle-and-navigation.md +19 -0
  138. package/src/code-review-skills/mobile-code-review/references/performance-and-resource-management.md +19 -0
  139. package/src/code-review-skills/mobile-code-review/references/resilience-and-device-conditions.md +19 -0
  140. package/src/code-review-skills/mobile-code-review/references/scoring-guide.md +38 -0
  141. package/src/code-review-skills/mobile-code-review/references/storage-permissions-and-security.md +19 -0
  142. package/src/code-review-skills/mobile-code-review/references/testing-and-regression-coverage.md +21 -0
  143. package/src/code-review-skills/php-code-review/SKILL.md +159 -0
  144. package/src/code-review-skills/php-code-review/references/inclusion-superglobals-and-scope.md +21 -0
  145. package/src/code-review-skills/php-code-review/references/language-types-and-autoload.md +19 -0
  146. package/src/code-review-skills/php-code-review/references/oop-magic-and-errors.md +17 -0
  147. package/src/code-review-skills/php-code-review/references/performance-data-access-and-testing.md +16 -0
  148. package/src/code-review-skills/php-code-review/references/request-lifecycle-and-runtime.md +15 -0
  149. package/src/code-review-skills/php-code-review/references/scoring-guide.md +39 -0
  150. package/src/code-review-skills/php-code-review/references/security-and-io-boundary.md +24 -0
  151. package/src/code-review-skills/python-code-review/SKILL.md +147 -0
  152. package/src/code-review-skills/python-code-review/references/exception-and-lifecycle.md +15 -0
  153. package/src/code-review-skills/python-code-review/references/input-and-data-security.md +20 -0
  154. package/src/code-review-skills/python-code-review/references/maintainability-and-testing.md +21 -0
  155. package/src/code-review-skills/python-code-review/references/performance-and-resource-usage.md +21 -0
  156. package/src/code-review-skills/python-code-review/references/scoring-guide.md +38 -0
  157. package/src/code-review-skills/rust-code-review/SKILL.md +165 -0
  158. package/src/code-review-skills/rust-code-review/references/api-traits-and-evolution.md +16 -0
  159. package/src/code-review-skills/rust-code-review/references/cargo-features-and-test-coverage.md +16 -0
  160. package/src/code-review-skills/rust-code-review/references/concurrency-async-and-sync.md +17 -0
  161. package/src/code-review-skills/rust-code-review/references/error-handling-and-reliability.md +17 -0
  162. package/src/code-review-skills/rust-code-review/references/macros-ffi-and-embedded.md +19 -0
  163. package/src/code-review-skills/rust-code-review/references/ownership-borrowing-and-unsafe.md +20 -0
  164. package/src/code-review-skills/rust-code-review/references/performance-and-allocations.md +18 -0
  165. package/src/code-review-skills/rust-code-review/references/scoring-guide.md +41 -0
  166. package/src/git-commit-message-skills/conventional/SKILL.md +3 -3
  167. package/src/git-commit-message-skills/gitmoji/SKILL.md +3 -3
  168. package/src/git-commit-message-skills/semantic/SKILL.md +3 -3
package/CHANGELOG.md CHANGED
@@ -6,6 +6,43 @@ The format is based on Keep a Changelog, and this project follows Semantic Versi
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.1.7] - 2026-04-26
10
+
11
+ ### Added
12
+
13
+ - optional AI pull request summary generation after successful `bridge` runs, writing timestamped Markdown under a configurable directory or the default `.smart-commit-cli/pr-summaries`
14
+ - `pullRequestSummary.*` settings (`enabled`, `language`, `outputDirPath`, `prompt`) across CLI flags, environment variables, config files, JSON schema output, and legacy `smartCommit.*` mappings
15
+ - structured `pullRequestSummary` in bridge output (`generated`, `outputFilePath`, `provider`, `error`) plus user-facing text render lines and non-fatal warnings when generation fails after an otherwise successful run
16
+ - regression coverage for pull request summary plumbing and configuration resolution
17
+ - a dedicated `0.1.7` draft release note for the current publish target
18
+
19
+ ### Changed
20
+
21
+ - public config and bridge JSON contracts now include `pullRequestSummary` fields; `schema print --target bridge` reflects the updated shape
22
+ - built-in `conventional` and `semantic` commit-message skill docs now note extracting a Jira or work item id from the branch name when prepending to the subject
23
+ - publish guidance now points to the `0.1.7` release draft during pre-publish review
24
+
25
+ ## [0.1.6] - 2026-04-18
26
+
27
+ ### Added
28
+
29
+ - bundled built-in review skill assets for generic and domain-specific profiles, including `c-code-review`
30
+ - `report generate --period yesterday` with previous-natural-day time window handling
31
+ - configurable `connection.llmResponseCorrectionRetryCount` and `passHistory.writeStage` across CLI args, environment variables, config files, schema output, and legacy `smartCommit.*` mappings
32
+ - a dedicated `0.1.6` draft release note for the current publish target
33
+
34
+ ### Changed
35
+
36
+ - review prompt augmentation now loads bundled review-skill instructions and references, and adds diff-domain guidance with generic fallback when a specialized skill does not match the staged diff
37
+ - review repair and commit-message regeneration now use the configurable response-correction retry budget and enforce the requested output language during retryable validation
38
+ - pass-history writes now upsert a single record across review, commit, and push success stages so `eventType` reflects the furthest successful stage reached by the run
39
+ - publish guidance now points to the `0.1.6` release draft during pre-publish review
40
+
41
+ ### Fixed
42
+
43
+ - successful local commits are now preserved in pass history when a later push cannot start, is rejected, or times out, unless `passHistory.writeStage` explicitly requires push completion
44
+ - machine-facing contracts, docs, and regression coverage now match the new correction-retry bounds, built-in review skill exposure, and `yesterday` reporting support
45
+
9
46
  ## [0.1.5] - 2026-04-15
10
47
 
11
48
  ### Added
package/README.md CHANGED
@@ -15,10 +15,12 @@ It can:
15
15
  - inspect staged changes
16
16
  - run AI review and gate on the result
17
17
  - generate or validate commit messages
18
+ - retry malformed review or commit-message responses with configurable correction passes
19
+ - use bundled review skills, including `c-code-review`, with diff-aware generic fallback
18
20
  - optionally create a commit
19
21
  - optionally push the current branch
20
22
  - persist successful run history
21
- - generate Markdown work reports
23
+ - generate daily, yesterday, weekly, monthly, quarterly, or yearly Markdown work reports
22
24
 
23
25
  ## Who This Is For
24
26
 
@@ -276,7 +278,8 @@ Use this when you want a more realistic team default without enabling automatic
276
278
  "connection": {
277
279
  "baseUrl": "https://api.openai.com/v1",
278
280
  "apiKey": "env:SMART_COMMIT_API_KEY",
279
- "model": "gpt-5"
281
+ "model": "gpt-5",
282
+ "llmResponseCorrectionRetryCount": 1
280
283
  },
281
284
  "review": {
282
285
  "threshold": 6,
@@ -289,6 +292,7 @@ Use this when you want a more realistic team default without enabling automatic
289
292
  },
290
293
  "passHistory": {
291
294
  "enabled": true,
295
+ "writeStage": "review_passed",
292
296
  "dirPath": ".smart-commit-cli",
293
297
  "maxEntries": 3000
294
298
  },
@@ -306,6 +310,14 @@ This is usually the best starting point for teams because it:
306
310
  - allows local history for reporting
307
311
  - stays safe for hooks and automation
308
312
 
313
+ ### Review skills and correction retries
314
+
315
+ Built-in review skills are bundled with the CLI. The default `code-review` skill stays generic, while domain skills such as `frontend-code-review`, `python-code-review`, `c-code-review`, `cpp-code-review`, and `csharp-code-review` add domain-focused guidance. These built-in review skills share a lightweight diff classifier: if the staged diff does not match the selected domain, the CLI falls back to generic review rules automatically without changing your configured skill id.
316
+
317
+ If you set `review.skill.path`, the CLI keeps the current file-based custom-skill behavior and loads that file as custom prompt input instead of the bundled built-in skill assets.
318
+
319
+ `connection.llmResponseCorrectionRetryCount` controls how many extra repair or regeneration attempts the CLI may request when a review result or generated commit message fails protocol, JSON-shape, or language validation. The default is `1`, the supported range is `0..5`, and network, HTTP, timeout, or provider failures are not retried by this setting.
320
+
309
321
  ### About the example config in this repo
310
322
 
311
323
  This repository ships a fuller example at `examples/config/smart-commit.json`.
@@ -387,12 +399,13 @@ smart-commit report generate --repo . --config ./smart-commit.json --period week
387
399
  Supported `--period` values:
388
400
 
389
401
  - `daily`
402
+ - `yesterday`
390
403
  - `weekly`
391
404
  - `monthly`
392
405
  - `quarterly`
393
406
  - `yearly`
394
407
 
395
- If you omit `--period`, it defaults to `weekly`.
408
+ If you omit `--period`, it defaults to `weekly`. `yesterday` always means the previous natural local day.
396
409
 
397
410
  If `passHistory.enabled=true`, successful bridge runs are written locally and later summarized into a Markdown report.
398
411
 
@@ -404,6 +417,14 @@ smart-commit report generate --repo . --config ./smart-commit.json --period week
404
417
 
405
418
  If AI report generation fails, the CLI falls back to local Markdown generation automatically.
406
419
 
420
+ ### I want a pull request summary after a passing review
421
+
422
+ ```bash
423
+ smart-commit bridge --repo . --config ./smart-commit.json --no-commit --enable-pull-request-summary
424
+ ```
425
+
426
+ When enabled, `bridge` writes a Markdown PR description after the reviewed action succeeds. It runs after review-only success, after local commit success when `--no-push` is used, or after push success when auto-push is enabled. Review blocks, dry runs, and commit/push failures do not generate a PR summary.
427
+
407
428
  ### I want machine-readable schemas
408
429
 
409
430
  ```bash
@@ -553,9 +574,17 @@ Most practical flags for daily use:
553
574
  --api-key
554
575
  --model
555
576
  --threshold
577
+ --llm-response-correction-retry-count
556
578
  --review-language
579
+ --code-review-skill-id
557
580
  --commit-language
581
+ --commit-message-structure
558
582
  --commit-message
583
+ --pass-history-write-stage
584
+ --enable-pull-request-summary
585
+ --pull-request-summary-language
586
+ --pull-request-summary-output-dir
587
+ --pull-request-summary-prompt
559
588
  --no-commit
560
589
  --no-push
561
590
  --dry-run
@@ -579,12 +608,20 @@ SMART_COMMIT_API_KEY
579
608
  SMART_COMMIT_BASE_URL
580
609
  SMART_COMMIT_MODEL
581
610
  SMART_COMMIT_THRESHOLD
611
+ SMART_COMMIT_LLM_RESPONSE_CORRECTION_RETRY_COUNT
582
612
  SMART_COMMIT_REVIEW_LANGUAGE
613
+ SMART_COMMIT_CODE_REVIEW_SKILL_ID
583
614
  SMART_COMMIT_COMMIT_LANGUAGE
615
+ SMART_COMMIT_COMMIT_MESSAGE_STRUCTURE
584
616
  SMART_COMMIT_AUTO_COMMIT
585
617
  SMART_COMMIT_AUTO_PUSH
618
+ SMART_COMMIT_PASS_HISTORY_WRITE_STAGE
586
619
  SMART_COMMIT_REPORT_LANGUAGE
587
620
  SMART_COMMIT_REPORT_OUTPUT_DIR
621
+ SMART_COMMIT_ENABLE_PULL_REQUEST_SUMMARY
622
+ SMART_COMMIT_PULL_REQUEST_SUMMARY_LANGUAGE
623
+ SMART_COMMIT_PULL_REQUEST_SUMMARY_OUTPUT_DIR
624
+ SMART_COMMIT_PULL_REQUEST_SUMMARY_PROMPT
588
625
  ```
589
626
 
590
627
  ## Reporting
@@ -595,11 +632,22 @@ If `passHistory.enabled=true`, successful bridge runs are written to local histo
595
632
  smart-commit report generate --repo . --config ./smart-commit.json --period weekly
596
633
  ```
597
634
 
598
- Successful bridge runs are categorized in pass history as:
635
+ `passHistory.writeStage` controls the earliest successful stage that can create a record. Once a record exists, later successful stages update the same pass-history entry, so `eventType` always reflects the furthest successful stage reached by that run.
636
+
637
+ - `review_passed` writes as soon as review passes. If that same run later reaches a local commit or push, the existing record is upgraded instead of duplicated.
638
+ - `commit_completed` waits until the local commit succeeds. If a later push succeeds, that same record is upgraded to `commit_push_completed`.
639
+ - `commit_push_completed` writes only after both the local commit and the push succeed.
640
+
641
+ If a run never reaches the configured write stage, no pass-history record is written. For example:
642
+
643
+ - with `passHistory.writeStage=commit_completed`, a successful local commit is still preserved even if the later push cannot start, fails, or times out
644
+ - with `passHistory.writeStage=commit_push_completed`, those same push failures produce no pass-history record
645
+
646
+ Stored pass-history `eventType` values mean:
599
647
 
600
- - `review_passed`: review passed, but automatic commit is disabled
601
- - `commit_completed`: a local commit was created, but automatic push is disabled
602
- - `commit_push_completed`: a local commit was created and the current branch was pushed
648
+ - `review_passed`: review passed, and no later success stage was reached
649
+ - `commit_completed`: a local commit succeeded, and no later push success stage was reached
650
+ - `commit_push_completed`: both the local commit and the remote push succeeded
603
651
 
604
652
  Report summaries use these records to show:
605
653
 
@@ -142,7 +142,8 @@ Recommended early team setup:
142
142
  "connection": {
143
143
  "baseUrl": "https://api.openai.com/v1",
144
144
  "apiKey": "env:SMART_COMMIT_API_KEY",
145
- "model": "gpt-5"
145
+ "model": "gpt-5",
146
+ "llmResponseCorrectionRetryCount": 1
146
147
  },
147
148
  "review": {
148
149
  "threshold": 6,
@@ -155,6 +156,7 @@ Recommended early team setup:
155
156
  },
156
157
  "passHistory": {
157
158
  "enabled": true,
159
+ "writeStage": "review_passed",
158
160
  "dirPath": ".smart-commit-cli",
159
161
  "maxEntries": 3000
160
162
  },
@@ -186,12 +188,14 @@ These settings tell the CLI how to reach your AI endpoint. `bridge` requires all
186
188
  | `connection.apiKey` | empty string | `env:SMART_COMMIT_API_KEY` | Change it only if you intentionally inject secrets another way | Putting raw secrets into committed config files |
187
189
  | `connection.model` | empty string | A model name that your chosen `baseUrl` actually serves | Change it when you switch cost, quality, or provider capabilities | Using a model name unsupported by your gateway |
188
190
  | `connection.requestTimeoutMs` | `1000000` | Leave default first | Change it only if your provider is too slow or your requests time out unexpectedly | Setting it below `5000`, which fails validation |
191
+ | `connection.llmResponseCorrectionRetryCount` | `1` | `1` | Change it when you want `0..5` repair or regeneration retries for protocol, format, or language validation failures | Expecting it to retry provider, network, HTTP, or timeout failures |
189
192
  | `connection.extraHeaders` | `{}` | Leave empty first | Add values only if your proxy or API gateway requires custom headers | Adding provider-specific headers that your endpoint does not expect |
190
193
 
191
194
  Practical guidance:
192
195
 
193
196
  - if you do not know what to choose, ask one question first: "What OpenAI-compatible base URL and model name does our environment support?"
194
197
  - if you use an internal gateway, use the gateway's supported model list instead of guessing
198
+ - `connection.llmResponseCorrectionRetryCount` applies to review-response repair and commit-message regeneration only when the model output fails local protocol validation; it does not hide transport or provider errors
195
199
 
196
200
  ### `review.*`
197
201
 
@@ -211,6 +215,7 @@ Supported built-in review skill ids:
211
215
  - `code-review`
212
216
  - `frontend-code-review`
213
217
  - `mobile-code-review`
218
+ - `c-code-review`
214
219
  - `python-code-review`
215
220
  - `golang-code-review`
216
221
  - `java-code-review`
@@ -219,6 +224,8 @@ Supported built-in review skill ids:
219
224
  - `rust-code-review`
220
225
  - `php-code-review`
221
226
 
227
+ Built-in review skills load bundled guidance and references from the CLI package. They also share a diff-domain classifier that can fall back to generic review rules when the staged diff does not match the selected domain. If you set `review.skill.path`, the CLI keeps the current file-based custom-skill behavior and does not switch to the bundled built-in skill assets for that run.
228
+
222
229
  When to choose a custom skill path:
223
230
 
224
231
  - your team has a fixed review checklist
@@ -233,6 +240,7 @@ These settings control where the commit message comes from and how it is validat
233
240
  | --- | --- | --- | --- | --- |
234
241
  | `commitMessage.input` | empty string | Leave empty first | Set it when you already know the exact message you want | Setting it and expecting auto-generation to replace it |
235
242
  | `commitMessage.language` | `zh` | `zh` or `en` | Change it to match your team's commit language | Mixing a team English convention with a non-English expectation |
243
+ | `commitMessage.structure` | `subjectOnly` | `subjectOnly` | Change it when your team wants optional commit bodies or footers | Expecting body/footer to be allowed while the default single-line mode is still active |
236
244
  | `commitMessage.autoGenerate` | `true` | `true` | Set `false` only if users always provide a message themselves | Turning it off with no provided message, which causes a commit-message-required error |
237
245
  | `commitMessage.hybridGenerate` | `false` | `false` | Set `true` when users provide a draft and want AI to refine it | Enabling it without understanding that it uses `commitMessage.input` as a draft |
238
246
  | `commitMessage.validation.protocol` | `none` | `none` first, then `conventional` if your team standardizes on it | Change it when your team enforces a commit style | Enabling validation before the team is ready |
@@ -250,6 +258,14 @@ How `hybridGenerate` actually works:
250
258
  - if `commitMessage.input` is empty and `autoGenerate=true`, the CLI generates from the diff
251
259
  - if `commitMessage.input` is empty and `autoGenerate=false`, the CLI errors because no message source exists
252
260
 
261
+ Supported commit message structures:
262
+
263
+ - `subjectOnly`: exactly one non-empty subject line
264
+ - `subjectBody`: a subject plus optional body separated by one blank line
265
+ - `subjectBodyFooter`: a subject plus optional body and optional footer/trailer lines
266
+
267
+ Protocol, language, ticket, and regex validation apply to the subject. Ticket injection from the branch preserves any accepted body or footer.
268
+
253
269
  Supported validation protocols:
254
270
 
255
271
  - `none`
@@ -286,11 +302,18 @@ These settings control local storage for successful run history.
286
302
  | Field | Built-in default | Recommended first value | When to change it | Common mistake |
287
303
  | --- | --- | --- | --- | --- |
288
304
  | `passHistory.enabled` | `false` | `true` if you want reporting later | Turn it on when you want local historical reporting | Forgetting to enable it and then expecting `report generate` to summarize past work |
305
+ | `passHistory.writeStage` | `review_passed` | `review_passed` | Change it when you want pass-history records to start only after commit or push success | Assuming it changes the stored `eventType`, when it actually changes the earliest write point |
289
306
  | `passHistory.dirPath` | empty string | Leave empty first or set `.smart-commit-cli` explicitly | Change it only if you want a custom location | Thinking empty means broken, when it actually falls back to the repo-local default directory |
290
307
  | `passHistory.maxEntries` | `3000` | `3000` | Change it only if you need much shorter or longer retention | Setting it to `0` or a non-integer, which fails validation |
291
308
 
292
309
  If `passHistory.dirPath` is empty, the CLI automatically stores pass history under the repository's `.smart-commit-cli` directory.
293
310
 
311
+ `passHistory.writeStage` means "the earliest successful stage that is allowed to create a record." After a record exists, later successful stages update the same record instead of appending duplicates, so the stored `eventType` always shows the furthest successful stage reached by that run.
312
+
313
+ - `review_passed` writes immediately after review success and can later upgrade to `commit_completed` or `commit_push_completed`
314
+ - `commit_completed` waits for a successful local commit and still preserves that record if a later push cannot start, fails, or times out
315
+ - `commit_push_completed` waits for both commit and push success; if push never succeeds, no record is written
316
+
294
317
  ### `reporting.*`
295
318
 
296
319
  These settings control report generation behavior.
@@ -305,6 +328,19 @@ These settings control report generation behavior.
305
328
 
306
329
  If `reporting.outputDirPath` is empty, the CLI writes reports to `.smart-commit-cli/reports` under the repository root.
307
330
 
331
+ ### `pullRequestSummary.*`
332
+
333
+ These settings control optional Markdown PR summary generation after a passing `bridge` run.
334
+
335
+ | Field | Built-in default | Recommended first value | When to change it | Common mistake |
336
+ | --- | --- | --- | --- | --- |
337
+ | `pullRequestSummary.enabled` | `false` | `false` first | Set `true` when you want a PR description after review success | Expecting it to run for dry-run, blocked review, or failed commit/push paths |
338
+ | `pullRequestSummary.language` | `zh` | Match your reviewer language | Change it independently from review and commit-message language | Assuming it changes review output language |
339
+ | `pullRequestSummary.outputDirPath` | empty string | Leave empty first | Set it when your automation needs a specific artifact location | Thinking empty means invalid; it writes under `.smart-commit-cli/pr-summaries` |
340
+ | `pullRequestSummary.prompt` | empty string | Leave empty first | Add concise team PR template guidance | Asking it to invent tests, reviewers, links, or review findings |
341
+
342
+ The generated summary uses only the reviewed staged diff, commit message, branch, changed files, and run facts. Review scores, thresholds, findings, and suggestions are treated as internal gate data and are not included in the PR description.
343
+
308
344
  ### `output.*`
309
345
 
310
346
  These settings control how results are presented.
@@ -372,9 +408,17 @@ Most practical flags:
372
408
  --api-key
373
409
  --model
374
410
  --threshold
411
+ --llm-response-correction-retry-count
375
412
  --review-language
413
+ --code-review-skill-id
376
414
  --commit-language
415
+ --commit-message-structure
377
416
  --commit-message
417
+ --pass-history-write-stage
418
+ --enable-pull-request-summary
419
+ --pull-request-summary-language
420
+ --pull-request-summary-output-dir
421
+ --pull-request-summary-prompt
378
422
  --no-commit
379
423
  --no-push
380
424
  --dry-run
@@ -398,12 +442,20 @@ SMART_COMMIT_API_KEY
398
442
  SMART_COMMIT_BASE_URL
399
443
  SMART_COMMIT_MODEL
400
444
  SMART_COMMIT_THRESHOLD
445
+ SMART_COMMIT_LLM_RESPONSE_CORRECTION_RETRY_COUNT
401
446
  SMART_COMMIT_REVIEW_LANGUAGE
447
+ SMART_COMMIT_CODE_REVIEW_SKILL_ID
402
448
  SMART_COMMIT_COMMIT_LANGUAGE
449
+ SMART_COMMIT_COMMIT_MESSAGE_STRUCTURE
403
450
  SMART_COMMIT_AUTO_COMMIT
404
451
  SMART_COMMIT_AUTO_PUSH
452
+ SMART_COMMIT_PASS_HISTORY_WRITE_STAGE
405
453
  SMART_COMMIT_REPORT_LANGUAGE
406
454
  SMART_COMMIT_REPORT_OUTPUT_DIR
455
+ SMART_COMMIT_ENABLE_PULL_REQUEST_SUMMARY
456
+ SMART_COMMIT_PULL_REQUEST_SUMMARY_LANGUAGE
457
+ SMART_COMMIT_PULL_REQUEST_SUMMARY_OUTPUT_DIR
458
+ SMART_COMMIT_PULL_REQUEST_SUMMARY_PROMPT
407
459
  ```
408
460
 
409
461
  Useful boolean environment variables accept:
@@ -456,12 +508,13 @@ smart-commit bridge --repo . --config ./smart-commit.json --no-commit --no-push
456
508
  Supported periods:
457
509
 
458
510
  - `daily`
511
+ - `yesterday`
459
512
  - `weekly`
460
513
  - `monthly`
461
514
  - `quarterly`
462
515
  - `yearly`
463
516
 
464
- If `--period` is omitted, it defaults to `weekly`.
517
+ If `--period` is omitted, it defaults to `weekly`. `yesterday` always uses the previous natural local day.
465
518
 
466
519
  ## Validation Workflow
467
520
 
package/docs/contracts.md CHANGED
@@ -36,6 +36,8 @@ Stable top-level fields:
36
36
 
37
37
  Use it to validate merged config before wiring `bridge` or `report generate` into automation.
38
38
 
39
+ Contract consumers can safely read newly added resolved settings such as `config.connection.llmResponseCorrectionRetryCount`, `config.passHistory.writeStage`, `config.review.skill.id`, `config.commitMessage.structure`, and `config.pullRequestSummary.enabled` from the returned `config` object.
40
+
39
41
  ## `bridge`
40
42
 
41
43
  Command:
@@ -55,6 +57,7 @@ Stable top-level fields:
55
57
  - `didPush`
56
58
  - `commitSha`
57
59
  - `passHistory`
60
+ - `pullRequestSummary`
58
61
  - `reviewDecision`
59
62
  - `score`
60
63
  - `summary`
@@ -63,19 +66,27 @@ Stable top-level fields:
63
66
  Stable nested fields often used by automations:
64
67
 
65
68
  - `passHistory.eventType`
69
+ - `pullRequestSummary.generated`
70
+ - `pullRequestSummary.outputFilePath`
66
71
  - `reviewDetails`
67
72
 
73
+ `passHistory.writeStage` controls when a pass-history record is first allowed to exist. Once a record exists, later successful stages update that same record, so `passHistory.eventType` always reflects the furthest successful stage reached by the run.
74
+
68
75
  `passHistory.eventType` semantics:
69
76
 
70
77
  - `review_passed`
71
- Review passed, but no local commit was created because automatic commit is disabled.
78
+ Review passed, and no later success stage was reached.
72
79
  - `commit_completed`
73
- Review passed and a local commit was created, but no remote push was performed.
80
+ Review passed and a local commit was created, but no later push success stage was reached.
74
81
  - `commit_push_completed`
75
82
  Review passed, a local commit was created, and the current branch was pushed.
76
83
  - `null`
77
84
  Pass history is disabled or no pass-history record was written.
78
85
 
86
+ For example, when `passHistory.writeStage = "commit_completed"`, a successful local commit can still leave `passHistory.eventType = "commit_completed"` if the later push cannot start, fails, or times out. When `passHistory.writeStage = "commit_push_completed"`, those same push failures keep `passHistory.eventType = null` because no record is written.
87
+
88
+ `pullRequestSummary` is always present in bridge output. When `pullRequestSummary.enabled = true`, the CLI attempts generation only after the review/commit/push action for that run succeeds. Generation failures are reported in `pullRequestSummary.error` and do not change the already successful bridge exit code.
89
+
79
90
  Status semantics:
80
91
 
81
92
  - `ready`
@@ -112,6 +123,8 @@ Command:
112
123
  smart-commit report generate --repo /path/to/repo --period weekly
113
124
  ```
114
125
 
126
+ Supported `periodType` values are `daily`, `yesterday`, `weekly`, `monthly`, `quarterly`, and `yearly`.
127
+
115
128
  Stable top-level fields:
116
129
 
117
130
  - `schemaVersion`
@@ -129,6 +129,8 @@ This config is intentionally conservative:
129
129
  - `autoCommit=false` prevents creating a local commit
130
130
  - `autoPush=false` prevents pushing to remote
131
131
 
132
+ The built-in default for `connection.llmResponseCorrectionRetryCount` is already `1`, which means the CLI will allow one extra repair or regeneration pass when a review result or generated commit message fails local protocol validation. Set it to `0` later if you want to disable that behavior.
133
+
132
134
  If you want a fuller example, see `examples/config/smart-commit.json`, but do not copy its side-effect settings blindly for first use.
133
135
 
134
136
  ## Step 3: Validate The Final Config
@@ -213,6 +215,8 @@ without creating a commit or pushing to remote.
213
215
 
214
216
  When the review returns a numeric score, the final pass or block result is determined by comparing that score with the configured `review.threshold`.
215
217
 
218
+ If your repository is mainly C code, you can switch the built-in review skill with `--code-review-skill-id c-code-review` or `review.skill.id = "c-code-review"`. Built-in `*-code-review` skills load bundled guidance and automatically fall back to generic review rules when the staged diff does not actually match the selected domain.
219
+
216
220
  ## Step 7: Enable Pass History When You Are Ready
217
221
 
218
222
  If you want reporting later, enable pass history in config or with flags.
@@ -224,16 +228,25 @@ smart-commit bridge \
224
228
  --repo . \
225
229
  --config ./smart-commit.json \
226
230
  --enable-pass-history=true \
231
+ --pass-history-write-stage=review_passed \
227
232
  --no-commit \
228
233
  --no-push
229
234
  ```
230
235
 
231
236
  This writes local JSONL history for successful bridge runs.
232
237
 
233
- The stored event type depends on what the bridge actually completed:
238
+ `passHistory.writeStage` controls the earliest successful stage that is allowed to create a record. After that point, the same run updates the same record if it later reaches commit or push success, so the stored `eventType` always reflects the furthest successful stage reached by that run.
239
+
240
+ - `review_passed` writes as soon as review succeeds
241
+ - `commit_completed` waits until the local commit succeeds
242
+ - `commit_push_completed` waits until both the local commit and push succeed
243
+
244
+ If you set `commit_completed`, a successful local commit is still preserved even if a later push cannot start, fails, or times out. If you set `commit_push_completed`, those same push failures write nothing.
245
+
246
+ Stored event types mean:
234
247
 
235
- - `review_passed` when review succeeds but automatic commit is disabled
236
- - `commit_completed` when a local commit succeeds but automatic push is disabled
248
+ - `review_passed` when review succeeds and no later success stage is reached
249
+ - `commit_completed` when a local commit succeeds and no later push success stage is reached
237
250
  - `commit_push_completed` when both local commit and push succeed
238
251
 
239
252
  ## Step 8: Generate A Report
@@ -245,12 +258,13 @@ smart-commit report generate --repo . --config ./smart-commit.json --period week
245
258
  Supported periods:
246
259
 
247
260
  - `daily`
261
+ - `yesterday`
248
262
  - `weekly`
249
263
  - `monthly`
250
264
  - `quarterly`
251
265
  - `yearly`
252
266
 
253
- If `--period` is omitted, the CLI defaults to `weekly`.
267
+ If `--period` is omitted, the CLI defaults to `weekly`. `yesterday` always uses the previous natural local day in local time.
254
268
 
255
269
  Useful follow-up checks:
256
270
 
package/docs/publish.md CHANGED
@@ -21,7 +21,7 @@ Current package name:
21
21
  3. Run `npm run pack:dry-run`
22
22
  4. Review [`CHANGELOG.md`](../CHANGELOG.md)
23
23
  5. Review [`docs/release-checklist.md`](./release-checklist.md)
24
- 6. Review the matching release draft in [`docs/releases/0.1.5-draft.md`](./releases/0.1.5-draft.md)
24
+ 6. Review the matching release draft in [`docs/releases/0.1.7-draft.md`](./releases/0.1.7-draft.md)
25
25
 
26
26
  ## Recommended Release Order
27
27
 
@@ -0,0 +1,72 @@
1
+ # `smart-commit-copilot-cli` 0.1.6 Draft Release Notes
2
+
3
+ ## Summary
4
+
5
+ `smart-commit-copilot-cli` 0.1.6 is a Smart Commit behavior-alignment release for the standalone CLI.
6
+
7
+ This release focuses on bringing the CLI closer to the Smart Commit plugin across review-skill loading, response-correction retries, pass-history lifecycle updates, and reporting windows.
8
+
9
+ ## Highlights
10
+
11
+ - bundled built-in review skill assets now ship for generic and specialized review profiles, including `c-code-review`
12
+ - specialized review prompts now include diff-domain detection and generic fallback guidance when the selected skill does not match the staged diff
13
+ - `connection.llmResponseCorrectionRetryCount` now controls repair or regeneration retries for review and generated commit-message responses
14
+ - retryable validation now includes requested output-language checks for review summaries, review details, and generated commit-message subjects
15
+ - pass-history writes now upsert a single record across review, commit, and push milestones, gated by configurable `passHistory.writeStage`
16
+ - `report generate` now supports `--period yesterday`
17
+
18
+ ## Why This Release Matters
19
+
20
+ This version improves real automation reliability and parity with the Smart Commit plugin:
21
+
22
+ - built-in review skills now behave like real bundled capabilities rather than config-only ids
23
+ - malformed or wrong-language model responses can be retried predictably with an explicit retry budget
24
+ - pass-history consumers now see one upgraded record per successful run instead of duplicate entries across phases
25
+ - local-commit success is preserved correctly even when a later push cannot complete
26
+ - daily reporting workflows can target the previous natural local day directly
27
+
28
+ ## Notable Behavior Updates
29
+
30
+ ### Review skills and prompt guidance
31
+
32
+ - built-in review skills now load bundled `SKILL.md` instructions and reference material
33
+ - the generic `code-review` skill is available as a bundled asset alongside domain-specific skills
34
+ - `c-code-review` is now part of the supported built-in review skill set
35
+ - specialized review skills use diff-domain classification and fall back to generic review guidance when the staged diff does not match the selected domain
36
+
37
+ ### Response correction and validation
38
+
39
+ - review-response repair and generated commit-message regeneration now share the same configurable retry budget
40
+ - a retry is triggered only for local protocol, JSON-shape, format, or language validation failures
41
+ - transport, provider, HTTP, and timeout failures still surface directly instead of being retried by this setting
42
+
43
+ ### Pass history and reporting
44
+
45
+ - `passHistory.writeStage` now controls the earliest successful phase allowed to create a pass-history record
46
+ - once created, the same pass-history record is updated in place as the run advances from review to commit to push success
47
+ - `eventType` now represents the furthest successful stage reached by the run
48
+ - `report generate --period yesterday` now uses the previous natural local day, including cross-month and cross-year boundaries
49
+
50
+ ## Verification Coverage Added Or Strengthened
51
+
52
+ The project now has stronger regression protection for:
53
+
54
+ 1. review-response repair when the provider returns the wrong language
55
+ 2. generated commit-message regeneration when the summary uses the wrong language
56
+ 3. schema output for correction retry bounds and built-in review skill exposure
57
+ 4. pass-history upsert behavior across review, commit, push-success, push-rejected, and push-timeout branches
58
+ 5. CLI-level `report generate --period yesterday`
59
+
60
+ ## Suggested Upgrade Path
61
+
62
+ 1. update to `0.1.6`
63
+ 2. run `npm test`
64
+ 3. run `npm run smoke:test`
65
+ 4. run `npm run pack:dry-run`
66
+ 5. publish only after all three checks pass
67
+
68
+ ## Known Follow-Up Areas
69
+
70
+ - schema-versioning or compatibility strategy if later releases need to evolve the pass-history contract again
71
+ - richer custom local review-skill protocols if CLI-side file-based custom skills need to converge further with the plugin
72
+ - broader remote-aware release validation if publish-time verification grows beyond the current local and test-controlled flows
@@ -0,0 +1,55 @@
1
+ # `smart-commit-copilot-cli` 0.1.7 Draft Release Notes
2
+
3
+ ## Summary
4
+
5
+ `smart-commit-copilot-cli` 0.1.7 adds optional pull request description generation to the `bridge` workflow, alongside full configuration and contract support for automation consumers.
6
+
7
+ This release focuses on turning a successful review-and-commit run into a ready-to-paste PR summary artifact without changing the bridge exit code when summary generation fails.
8
+
9
+ ## Highlights
10
+
11
+ - opt-in `pullRequestSummary.enabled` with independent `language`, optional `outputDirPath`, and optional free-form `prompt` template guidance
12
+ - generation runs only after the applicable successful `bridge` outcome (review-only, commit, or push, depending on your flow); failures surface in `pullRequestSummary.error` and optional stderr warnings
13
+ - Markdown files use a stable `smart-commit-pr-summary-*.md` naming pattern under the chosen or default output directory
14
+ - legacy `smartCommit.pullRequestSummary*` keys map into the same resolved `pullRequestSummary` object as other Smart Commit settings
15
+
16
+ ## Why This Release Matters
17
+
18
+ This version closes the loop for teams that open pull requests immediately after local automation:
19
+
20
+ - hooks and agents can enable one setting and receive a file path in structured JSON output
21
+ - consumers can treat summary failure as telemetry without losing a green bridge result
22
+ - configuration remains consistent with the rest of the CLI resolution order (args, env, file, defaults)
23
+
24
+ ## Notable Behavior Updates
25
+
26
+ ### Pull request summary
27
+
28
+ - when disabled, bridge output still includes `pullRequestSummary` with `generated: false` and null file or provider fields as appropriate
29
+ - when enabled, the CLI uses the same AI connection as review and commit-message generation; empty or invalid model output is reported without failing the bridge
30
+ - text output includes whether a file was written and any error string for operator visibility
31
+
32
+ ### Commit message skills
33
+
34
+ - bundled `conventional` and `semantic` skill documentation now explicitly calls out extracting Jira or work item identifiers from the branch when present
35
+
36
+ ## Verification Coverage Added Or Strengthened
37
+
38
+ The project now has stronger regression protection for:
39
+
40
+ 1. `pullRequestSummary` defaults and legacy key mapping in config resolution
41
+ 2. bridge JSON shape and schema output for the new fields
42
+ 3. mock-provider success and empty-output failure paths for pull request summary generation
43
+
44
+ ## Suggested Upgrade Path
45
+
46
+ 1. update to `0.1.7`
47
+ 2. run `npm test`
48
+ 3. run `npm run smoke:test`
49
+ 4. run `npm run pack:dry-run`
50
+ 5. publish only after all three checks pass
51
+
52
+ ## Known Follow-Up Areas
53
+
54
+ - richer provider options or templates if teams need multiple PR formats per repository
55
+ - deeper integration tests against real OpenAI-compatible endpoints if mock coverage is not enough for your release bar
package/docs/roadmap.md CHANGED
@@ -27,7 +27,7 @@ Focus:
27
27
 
28
28
  Expected stability:
29
29
 
30
- - `schemaVersion: "1.0.0"` machine contracts should remain stable unless there is a strong reason to break them
30
+ - `schemaVersion: "1.1.0"` machine contracts should remain stable unless there is a strong reason to break them
31
31
  - `smartCommitCli` remains the canonical config namespace
32
32
  - legacy `smartCommit.*` remains compatibility-only
33
33
 
@@ -48,3 +48,18 @@ The smoke test checks these command shapes:
48
48
  - The smoke test does not push to a remote
49
49
  - The smoke test does not require a real API key value
50
50
  - Temporary repositories are created under the system temp directory
51
+
52
+ ## Broader Unit Coverage
53
+
54
+ For the full regression suite, run:
55
+
56
+ ```bash
57
+ npm test
58
+ ```
59
+
60
+ That suite additionally covers:
61
+
62
+ - configurable review and commit-message correction retries, including `0` retries and retry exhaustion
63
+ - bundled review-skill loading, including `c-code-review` and diff-domain fallback to generic review
64
+ - pass-history `writeStage` thresholds and same-record `upsert` behavior across review, commit, and push stages
65
+ - `report generate --period yesterday`, including previous-day windows across month and year boundaries