@kodus/cli 0.4.4 → 0.4.5

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 (163) hide show
  1. package/README.md +110 -7
  2. package/dist/agents/agent.interface.d.ts.map +1 -1
  3. package/dist/agents/claude-code.agent.d.ts.map +1 -1
  4. package/dist/agents/claude-code.agent.js +12 -4
  5. package/dist/agents/claude-code.agent.js.map +1 -1
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +8 -1
  8. package/dist/cli.js.map +1 -1
  9. package/dist/commands/config.d.ts +8 -0
  10. package/dist/commands/config.d.ts.map +1 -0
  11. package/dist/commands/config.js +84 -0
  12. package/dist/commands/config.js.map +1 -0
  13. package/dist/commands/hook/index.js +4 -2
  14. package/dist/commands/hook/index.js.map +1 -1
  15. package/dist/commands/hook/install.d.ts +3 -1
  16. package/dist/commands/hook/install.d.ts.map +1 -1
  17. package/dist/commands/hook/install.js +76 -37
  18. package/dist/commands/hook/install.js.map +1 -1
  19. package/dist/commands/hook/uninstall.d.ts +4 -1
  20. package/dist/commands/hook/uninstall.d.ts.map +1 -1
  21. package/dist/commands/hook/uninstall.js +54 -19
  22. package/dist/commands/hook/uninstall.js.map +1 -1
  23. package/dist/commands/memory/capture.d.ts.map +1 -1
  24. package/dist/commands/memory/capture.js +3 -36
  25. package/dist/commands/memory/capture.js.map +1 -1
  26. package/dist/commands/memory/disable.d.ts +4 -1
  27. package/dist/commands/memory/disable.d.ts.map +1 -1
  28. package/dist/commands/memory/disable.js +53 -15
  29. package/dist/commands/memory/disable.js.map +1 -1
  30. package/dist/commands/memory/hooks.d.ts +2 -1
  31. package/dist/commands/memory/hooks.d.ts.map +1 -1
  32. package/dist/commands/memory/hooks.js +13 -5
  33. package/dist/commands/memory/hooks.js.map +1 -1
  34. package/dist/commands/memory/index.d.ts.map +1 -1
  35. package/dist/commands/memory/index.js +13 -3
  36. package/dist/commands/memory/index.js.map +1 -1
  37. package/dist/commands/memory/session-hooks/claude-code.js.map +1 -1
  38. package/dist/commands/memory/session-hooks/cursor.js.map +1 -1
  39. package/dist/commands/memory/session-hooks/index.d.ts.map +1 -1
  40. package/dist/commands/memory/session-hooks/index.js +1 -2
  41. package/dist/commands/memory/session-hooks/index.js.map +1 -1
  42. package/dist/commands/memory/session-hooks/shared.d.ts.map +1 -1
  43. package/dist/commands/memory/session-hooks/shared.js +7 -31
  44. package/dist/commands/memory/session-hooks/shared.js.map +1 -1
  45. package/dist/commands/memory/session-hooks-install.d.ts.map +1 -1
  46. package/dist/commands/memory/session-hooks-install.js +60 -27
  47. package/dist/commands/memory/session-hooks-install.js.map +1 -1
  48. package/dist/commands/pr.d.ts.map +1 -1
  49. package/dist/commands/pr.js +71 -20
  50. package/dist/commands/pr.js.map +1 -1
  51. package/dist/commands/review.d.ts.map +1 -1
  52. package/dist/commands/review.js +76 -24
  53. package/dist/commands/review.js.map +1 -1
  54. package/dist/commands/schema.d.ts +3 -0
  55. package/dist/commands/schema.d.ts.map +1 -0
  56. package/dist/commands/schema.js +62 -0
  57. package/dist/commands/schema.js.map +1 -0
  58. package/dist/commands/skills.d.ts +3 -0
  59. package/dist/commands/skills.d.ts.map +1 -0
  60. package/dist/commands/skills.js +85 -0
  61. package/dist/commands/skills.js.map +1 -0
  62. package/dist/commands/status.d.ts.map +1 -1
  63. package/dist/commands/status.js +3 -1
  64. package/dist/commands/status.js.map +1 -1
  65. package/dist/commands/update.d.ts.map +1 -1
  66. package/dist/commands/update.js +17 -2
  67. package/dist/commands/update.js.map +1 -1
  68. package/dist/index.js +18 -1
  69. package/dist/index.js.map +1 -1
  70. package/dist/services/api/api.interface.d.ts +7 -4
  71. package/dist/services/api/api.interface.d.ts.map +1 -1
  72. package/dist/services/api/api.real.d.ts +2 -1
  73. package/dist/services/api/api.real.d.ts.map +1 -1
  74. package/dist/services/api/api.real.js +36 -10
  75. package/dist/services/api/api.real.js.map +1 -1
  76. package/dist/services/api/sessions.api.d.ts.map +1 -1
  77. package/dist/services/api/sessions.api.js +12 -6
  78. package/dist/services/api/sessions.api.js.map +1 -1
  79. package/dist/services/git-hooks.service.d.ts.map +1 -1
  80. package/dist/services/git-hooks.service.js +14 -6
  81. package/dist/services/git-hooks.service.js.map +1 -1
  82. package/dist/services/git.service.d.ts.map +1 -1
  83. package/dist/services/git.service.js +6 -2
  84. package/dist/services/git.service.js.map +1 -1
  85. package/dist/services/hook-logger.service.d.ts.map +1 -1
  86. package/dist/services/hook-logger.service.js +2 -1
  87. package/dist/services/hook-logger.service.js.map +1 -1
  88. package/dist/services/lifecycle.service.d.ts.map +1 -1
  89. package/dist/services/lifecycle.service.js +25 -14
  90. package/dist/services/lifecycle.service.js.map +1 -1
  91. package/dist/services/repo-config.service.d.ts +22 -0
  92. package/dist/services/repo-config.service.d.ts.map +1 -0
  93. package/dist/services/repo-config.service.js +87 -0
  94. package/dist/services/repo-config.service.js.map +1 -0
  95. package/dist/services/review.service.d.ts +0 -3
  96. package/dist/services/review.service.d.ts.map +1 -1
  97. package/dist/services/review.service.js.map +1 -1
  98. package/dist/services/session-local.service.d.ts.map +1 -1
  99. package/dist/services/session-local.service.js.map +1 -1
  100. package/dist/services/transcript.service.d.ts.map +1 -1
  101. package/dist/services/transcript.service.js +44 -13
  102. package/dist/services/transcript.service.js.map +1 -1
  103. package/dist/types/command-output.d.ts +29 -0
  104. package/dist/types/command-output.d.ts.map +1 -0
  105. package/dist/types/command-output.js +2 -0
  106. package/dist/types/command-output.js.map +1 -0
  107. package/dist/types/index.d.ts +18 -4
  108. package/dist/types/index.d.ts.map +1 -1
  109. package/dist/types/index.js.map +1 -1
  110. package/dist/types/session-events.d.ts.map +1 -1
  111. package/dist/types/session.d.ts.map +1 -1
  112. package/dist/types/session.js +5 -1
  113. package/dist/types/session.js.map +1 -1
  114. package/dist/utils/banner.d.ts.map +1 -1
  115. package/dist/utils/banner.js +2 -0
  116. package/dist/utils/banner.js.map +1 -1
  117. package/dist/utils/command-context.d.ts +12 -0
  118. package/dist/utils/command-context.d.ts.map +1 -0
  119. package/dist/utils/command-context.js +15 -0
  120. package/dist/utils/command-context.js.map +1 -0
  121. package/dist/utils/command-errors.d.ts +12 -0
  122. package/dist/utils/command-errors.d.ts.map +1 -0
  123. package/dist/utils/command-errors.js +88 -0
  124. package/dist/utils/command-errors.js.map +1 -0
  125. package/dist/utils/command-output.d.ts +5 -0
  126. package/dist/utils/command-output.d.ts.map +1 -0
  127. package/dist/utils/command-output.js +46 -0
  128. package/dist/utils/command-output.js.map +1 -0
  129. package/dist/utils/command-schema.d.ts +29 -0
  130. package/dist/utils/command-schema.d.ts.map +1 -0
  131. package/dist/utils/command-schema.js +74 -0
  132. package/dist/utils/command-schema.js.map +1 -0
  133. package/dist/utils/field-mask.d.ts +2 -0
  134. package/dist/utils/field-mask.d.ts.map +1 -0
  135. package/dist/utils/field-mask.js +93 -0
  136. package/dist/utils/field-mask.js.map +1 -0
  137. package/dist/utils/input-validation.d.ts +11 -0
  138. package/dist/utils/input-validation.d.ts.map +1 -0
  139. package/dist/utils/input-validation.js +73 -0
  140. package/dist/utils/input-validation.js.map +1 -0
  141. package/dist/utils/install-instructions.d.ts +6 -0
  142. package/dist/utils/install-instructions.d.ts.map +1 -0
  143. package/dist/utils/install-instructions.js +18 -0
  144. package/dist/utils/install-instructions.js.map +1 -0
  145. package/dist/utils/skills-sync.d.ts +39 -0
  146. package/dist/utils/skills-sync.d.ts.map +1 -0
  147. package/dist/utils/skills-sync.js +396 -0
  148. package/dist/utils/skills-sync.js.map +1 -0
  149. package/dist/utils/skills.d.ts +7 -0
  150. package/dist/utils/skills.d.ts.map +1 -1
  151. package/dist/utils/skills.js +61 -22
  152. package/dist/utils/skills.js.map +1 -1
  153. package/dist/utils/stream-input.d.ts +13 -0
  154. package/dist/utils/stream-input.d.ts.map +1 -0
  155. package/dist/utils/stream-input.js +36 -0
  156. package/dist/utils/stream-input.js.map +1 -0
  157. package/package.json +11 -9
  158. package/skills/README.md +12 -5
  159. package/skills/kodus-business-rules-validation/SKILL.md +65 -0
  160. package/skills/kodus-pr-suggestions-resolver/SKILL.md +6 -6
  161. package/skills/kodus-review/SKILL.md +20 -7
  162. package/skills/kodus-review-dev/SKILL.md +22 -8
  163. package/skills/business-rules-validation/SKILL.md +0 -43
package/README.md CHANGED
@@ -109,14 +109,22 @@ Stored in `.kody/pr/by-sha/<head-sha>.md` — versioned with your code, readable
109
109
 
110
110
  Kodus is designed to work **inside AI coding agents**. While you can use it standalone, the real power comes when your agent runs reviews automatically and fixes issues in a loop — no manual intervention needed.
111
111
 
112
- **Works with:** Claude Code, Cursor, Windsurf, GitHub Copilot, Gemini CLI, and [20+ more environments](https://review-skill.com/).
112
+ **Works with:** Claude Code, Cursor, Windsurf, GitHub Copilot, Gemini CLI, and 20+ more environments.
113
113
 
114
114
  ### Install the Skill (recommended)
115
115
 
116
116
  The fastest way to get started. Auto-detects your installed IDEs and sets everything up:
117
117
 
118
+ macOS/Linux:
119
+
118
120
  ```bash
119
- curl -fsSL https://review-skill.com/install | bash
121
+ curl -fsSL https://raw.githubusercontent.com/kodustech/cli/main/install.sh | bash
122
+ ```
123
+
124
+ Windows PowerShell:
125
+
126
+ ```powershell
127
+ powershell -NoProfile -ExecutionPolicy Bypass -Command "$tmp = Join-Path $env:TEMP 'kodus-install.ps1'; Invoke-WebRequest https://raw.githubusercontent.com/kodustech/cli/main/install.ps1 -OutFile $tmp; & $tmp"
120
128
  ```
121
129
 
122
130
  This installs the Kodus CLI globally and deploys the review skill into every supported agent on your machine — Claude Code, Cursor, Windsurf, and others. One command, all environments.
@@ -187,30 +195,63 @@ The copied prompt includes file path, line numbers, severity, and detailed sugge
187
195
 
188
196
  ### Skill installer (recommended — CLI + all your agents)
189
197
 
198
+ macOS/Linux:
199
+
190
200
  ```bash
191
- curl -fsSL https://review-skill.com/install | bash
201
+ curl -fsSL https://raw.githubusercontent.com/kodustech/cli/main/install.sh | bash
202
+ ```
203
+
204
+ Windows PowerShell:
205
+
206
+ ```powershell
207
+ powershell -NoProfile -ExecutionPolicy Bypass -Command "$tmp = Join-Path $env:TEMP 'kodus-install.ps1'; Invoke-WebRequest https://raw.githubusercontent.com/kodustech/cli/main/install.ps1 -OutFile $tmp; & $tmp"
192
208
  ```
193
209
 
194
210
  Installs the CLI and deploys the review skill to all detected agents in one step.
195
211
 
196
212
  ### Keep everything updated
197
213
 
198
- `kodus update` updates the CLI package only.
214
+ `kodus update` updates the CLI package.
199
215
 
200
- To sync/refresh skills and commands in supported agents (Claude Code, Cursor, Codex, etc.), run:
216
+ For end users, the recommended way to refresh skills and agent integrations is:
217
+
218
+ macOS/Linux:
201
219
 
202
220
  ```bash
203
- curl -fsSL https://review-skill.com/install | bash
221
+ curl -fsSL https://raw.githubusercontent.com/kodustech/cli/main/install.sh | bash
222
+ ```
223
+
224
+ Windows PowerShell:
225
+
226
+ ```powershell
227
+ powershell -NoProfile -ExecutionPolicy Bypass -Command "$tmp = Join-Path $env:TEMP 'kodus-install.ps1'; Invoke-WebRequest https://raw.githubusercontent.com/kodustech/cli/main/install.ps1 -OutFile $tmp; & $tmp"
228
+ ```
229
+
230
+ Fallback via CLI for common local agent roots:
231
+
232
+ ```bash
233
+ kodus skills install # install into detected local agent roots
234
+ kodus skills resync # re-sync/refresh managed skills
235
+ kodus skills uninstall # remove managed skills from detected targets
204
236
  ```
205
237
 
206
238
  If you want to inspect the script before execution:
207
239
 
240
+ macOS/Linux:
241
+
208
242
  ```bash
209
- curl -fsSL https://review-skill.com/install -o /tmp/kodus-install.sh
243
+ curl -fsSL https://raw.githubusercontent.com/kodustech/cli/main/install.sh -o /tmp/kodus-install.sh
210
244
  less /tmp/kodus-install.sh
211
245
  bash /tmp/kodus-install.sh
212
246
  ```
213
247
 
248
+ Windows PowerShell:
249
+
250
+ ```powershell
251
+ powershell -NoProfile -ExecutionPolicy Bypass -Command "Invoke-WebRequest https://raw.githubusercontent.com/kodustech/cli/main/install.ps1 -OutFile install.ps1"
252
+ powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1
253
+ ```
254
+
214
255
  ### CLI only
215
256
 
216
257
  <details>
@@ -240,6 +281,15 @@ curl -fsSL https://raw.githubusercontent.com/kodustech/cli/main/install.sh | bas
240
281
 
241
282
  </details>
242
283
 
284
+ <details>
285
+ <summary><strong>PowerShell</strong></summary>
286
+
287
+ ```powershell
288
+ powershell -NoProfile -ExecutionPolicy Bypass -Command "$tmp = Join-Path $env:TEMP 'kodus-install.ps1'; Invoke-WebRequest https://raw.githubusercontent.com/kodustech/cli/main/install.ps1 -OutFile $tmp; & $tmp"
289
+ ```
290
+
291
+ </details>
292
+
243
293
  <details>
244
294
  <summary><strong>Homebrew (coming soon)</strong></summary>
245
295
 
@@ -249,6 +299,59 @@ brew install kodus/tap/kodus
249
299
 
250
300
  </details>
251
301
 
302
+ ## Agent Mode
303
+
304
+ Kodus now supports an explicit **agent mode** for deterministic automation output.
305
+
306
+ ### Global flag
307
+
308
+ Use `--agent` on any command to return a stable JSON envelope:
309
+
310
+ ```json
311
+ {
312
+ "ok": true,
313
+ "command": "review",
314
+ "data": {},
315
+ "error": null,
316
+ "meta": {
317
+ "schemaVersion": "1.0",
318
+ "cliVersion": "x.y.z",
319
+ "mode": "agent",
320
+ "durationMs": 123
321
+ }
322
+ }
323
+ ```
324
+
325
+ ### Command schema introspection
326
+
327
+ ```bash
328
+ kodus schema
329
+ kodus schema --command "pr suggestions"
330
+ ```
331
+
332
+ ### Field selection for smaller payloads
333
+
334
+ Available on `review` and `pr suggestions`:
335
+
336
+ ```bash
337
+ kodus review --agent --fields summary,issues.file,issues.line
338
+ kodus pr suggestions --agent --pr-url https://github.com/org/repo/pull/42 --fields summary,issues.file
339
+ ```
340
+
341
+ `--fields` requires `--agent` or `--format json`.
342
+
343
+ ### Dry-run for mutable commands
344
+
345
+ ```bash
346
+ kodus hook install --dry-run
347
+ kodus hook uninstall --dry-run
348
+ kodus decisions enable --dry-run
349
+ kodus decisions disable --dry-run
350
+ kodus decisions promote --dry-run
351
+ ```
352
+
353
+ Dry-run prints the planned actions and does not mutate local hooks/config/files.
354
+
252
355
  ## Review Modes
253
356
 
254
357
  ### Interactive (default)
@@ -1 +1 @@
1
- {"version":3,"file":"agent.interface.d.ts","sourceRoot":"","sources":["../../src/agents/agent.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,UAAU,EACV,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAE7B;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAAC;IAE1E;;;;OAIG;IACH,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAE5F;;OAEG;IACH,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE1D;;OAEG;IACH,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAExD;;OAEG;IACH,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEhE;;OAEG;IACH,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEjE;;;OAGG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtF"}
1
+ {"version":3,"file":"agent.interface.d.ts","sourceRoot":"","sources":["../../src/agents/agent.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,cAAc,EACd,SAAS,EACT,UAAU,EACV,qBAAqB,EACxB,MAAM,qBAAqB,CAAC;AAE7B;;;;GAIG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAAC;IAE1E;;;;OAIG;IACH,cAAc,CACV,cAAc,EAAE,MAAM,EACtB,UAAU,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAElC;;OAEG;IACH,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE1D;;OAEG;IACH,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAExD;;OAEG;IACH,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEhE;;OAEG;IACH,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEjE;;;OAGG;IACH,sBAAsB,CAClB,cAAc,EAAE,MAAM,EACtB,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.agent.d.ts","sourceRoot":"","sources":["../../src/agents/claude-code.agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EAEd,UAAU,EACV,qBAAqB,EAEtB,MAAM,qBAAqB,CAAC;AAY7B,qBAAa,eAAgB,YAAW,YAAY;IAClD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAiB;IAE9C,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI;IAqCnE,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAItF,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIzD,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvD,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAI/D,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIhE,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAGzF;AAgBD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
1
+ {"version":3,"file":"claude-code.agent.d.ts","sourceRoot":"","sources":["../../src/agents/claude-code.agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,KAAK,EACR,SAAS,EACT,cAAc,EAEd,UAAU,EACV,qBAAqB,EAExB,MAAM,qBAAqB,CAAC;AAY7B,qBAAa,eAAgB,YAAW,YAAY;IAChD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAiB;IAE9C,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI;IAgDnE,cAAc,CAChB,cAAc,EAAE,MAAM,EACtB,UAAU,SAAI,GACf,OAAO,CAAC,qBAAqB,CAAC;IAI3B,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIzD,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvD,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAI/D,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIhE,sBAAsB,CACxB,cAAc,EAAE,MAAM,EACtB,SAAS,SAAO,GACjB,OAAO,CAAC,OAAO,CAAC;CAGtB;AAmBD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
@@ -12,18 +12,26 @@ export class ClaudeCodeAgent {
12
12
  agentType = 'claude-code';
13
13
  parseHookEvent(hookName, payload) {
14
14
  const eventType = HOOK_TO_EVENT_TYPE[hookName];
15
- if (!eventType)
15
+ if (!eventType) {
16
16
  return null;
17
- const obj = (payload && typeof payload === 'object' && !Array.isArray(payload))
17
+ }
18
+ const obj = payload && typeof payload === 'object' && !Array.isArray(payload)
18
19
  ? payload
19
20
  : {};
20
21
  const sessionId = pickString(obj, ['session_id', 'sessionId']) ?? '';
21
- const sessionRef = pickString(obj, ['transcript_path', 'transcriptPath', 'session_ref']) ?? '';
22
+ const sessionRef = pickString(obj, [
23
+ 'transcript_path',
24
+ 'transcriptPath',
25
+ 'session_ref',
26
+ ]) ?? '';
22
27
  const prompt = pickString(obj, ['prompt', 'user_message']);
23
28
  const toolUseId = pickString(obj, ['tool_use_id', 'toolUseId']);
24
29
  const subagentId = pickString(obj, ['subagent_id', 'subagentId']);
25
30
  const subagentType = pickString(obj, ['subagent_type', 'subagentType']);
26
- const taskDescription = pickString(obj, ['task_description', 'taskDescription']);
31
+ const taskDescription = pickString(obj, [
32
+ 'task_description',
33
+ 'taskDescription',
34
+ ]);
27
35
  let toolInput;
28
36
  if (obj['tool_input'] !== undefined) {
29
37
  toolInput = obj['tool_input'];
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.agent.js","sourceRoot":"","sources":["../../src/agents/claude-code.agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-code.agent.js","sourceRoot":"","sources":["../../src/agents/claude-code.agent.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AA2C9B,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AA+C9B,OAAO,EAAE,OAAO,EAAE,CAAC"}
package/dist/cli.js CHANGED
@@ -8,6 +8,9 @@ import { prCommand } from './commands/pr.js';
8
8
  import { hookCommand } from './commands/hook/index.js';
9
9
  import { decisionsCommand } from './commands/memory/index.js';
10
10
  import { statusCommand } from './commands/status.js';
11
+ import { skillsCommand } from './commands/skills.js';
12
+ import { createSchemaCommand } from './commands/schema.js';
13
+ import { configCommand } from './commands/config.js';
11
14
  import { checkForUpdates } from './utils/update-check.js';
12
15
  import { setCliOutputMode } from './utils/logger.js';
13
16
  import { recordRecentActivity } from './utils/recent-activity.js';
@@ -22,7 +25,8 @@ program
22
25
  .option('-f, --format <format>', 'Output format: terminal, json, markdown', 'terminal')
23
26
  .option('-o, --output <file>', 'Output file (for json/markdown)')
24
27
  .option('-v, --verbose', 'Verbose output', false)
25
- .option('-q, --quiet', 'Quiet mode (errors only)', false);
28
+ .option('-q, --quiet', 'Quiet mode (errors only)', false)
29
+ .option('--agent', 'Agent mode: deterministic machine-readable output');
26
30
  program.addCommand(reviewCommand);
27
31
  program.addCommand(authCommand);
28
32
  program.addCommand(subscribeCommand);
@@ -31,6 +35,9 @@ program.addCommand(prCommand);
31
35
  program.addCommand(hookCommand);
32
36
  program.addCommand(decisionsCommand);
33
37
  program.addCommand(statusCommand);
38
+ program.addCommand(skillsCommand);
39
+ program.addCommand(configCommand);
40
+ program.addCommand(createSchemaCommand(() => program));
34
41
  program.hook('preAction', (_thisCommand, actionCommand) => {
35
42
  const opts = actionCommand.optsWithGlobals();
36
43
  setCliOutputMode({
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO,CAAC,YAAY,EAAE,CAAC;AAEvB,OAAO;KACF,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,uDAAuD,CAAC;KACpE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,MAAM,CACH,uBAAuB,EACvB,yCAAyC,EACzC,UAAU,CACb;KACA,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KAChE,MAAM,CAAC,eAAe,EAAE,gBAAgB,EAAE,KAAK,CAAC;KAChD,MAAM,CAAC,aAAa,EAAE,0BAA0B,EAAE,KAAK,CAAC,CAAC;AAE9D,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC9B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,EAAE;IACtD,MAAM,IAAI,GAAG,aAAa,CAAC,eAAe,EAGzC,CAAC;IACF,gBAAgB,CAAC;QACb,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK;QACnB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO;KAC1B,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;IAClC,MAAM,OAAO,CAAC,GAAG,CAAC;QACd,eAAe,EAAE;QACjB,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;KAC9D,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Command } from 'commander';
2
+ export declare function configRepoAction(repository?: string): Promise<void>;
3
+ export declare function configRepoAddAction(repository?: string): Promise<void>;
4
+ export declare function configRemoteAction(repository?: string): Promise<void>;
5
+ export declare function configRemoteAddAction(repository?: string): Promise<void>;
6
+ export declare function configRepoListAction(): Promise<void>;
7
+ export declare const configCommand: Command;
8
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAsB,gBAAgB,CAAC,UAAU,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBtE;AAED,wBAAsB,mBAAmB,CAAC,UAAU,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzE;AAED,wBAAsB,kBAAkB,CAAC,UAAU,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAExE;AAED,wBAAsB,qBAAqB,CAAC,UAAU,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3E;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkB1D;AAED,eAAO,MAAM,aAAa,SAEzB,CAAC"}
@@ -0,0 +1,84 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { repoConfigService } from '../services/repo-config.service.js';
4
+ import { exitWithCode } from '../utils/cli-exit.js';
5
+ import { cliError, cliInfo } from '../utils/logger.js';
6
+ import { normalizeCommandError } from '../utils/command-errors.js';
7
+ export async function configRepoAction(repository = '.') {
8
+ try {
9
+ const result = await repoConfigService.addRepository(repository);
10
+ if (result.status === 'already-added') {
11
+ cliInfo(chalk.yellow(`Repository '${result.repositoryFullName}' is already added to Kodus.`));
12
+ return;
13
+ }
14
+ cliInfo(chalk.green(`Repository '${result.repositoryFullName}' was added to Kodus successfully.`));
15
+ }
16
+ catch (error) {
17
+ const normalized = normalizeCommandError(error);
18
+ cliError(chalk.red(normalized.message));
19
+ exitWithCode(normalized.exitCode);
20
+ }
21
+ }
22
+ export async function configRepoAddAction(repository = '.') {
23
+ await configRepoAction(repository);
24
+ }
25
+ export async function configRemoteAction(repository = '.') {
26
+ await configRepoAction(repository);
27
+ }
28
+ export async function configRemoteAddAction(repository = '.') {
29
+ await configRepoAction(repository);
30
+ }
31
+ export async function configRepoListAction() {
32
+ try {
33
+ const repositories = await repoConfigService.listRepositories();
34
+ if (repositories.length === 0) {
35
+ cliInfo(chalk.yellow('No repositories are currently configured.'));
36
+ return;
37
+ }
38
+ cliInfo('Configured repositories:');
39
+ for (const repository of repositories) {
40
+ cliInfo(`- ${repository.fullName}`);
41
+ }
42
+ }
43
+ catch (error) {
44
+ const normalized = normalizeCommandError(error);
45
+ cliError(chalk.red(normalized.message));
46
+ exitWithCode(normalized.exitCode);
47
+ }
48
+ }
49
+ export const configCommand = new Command('config').description('Configuration commands');
50
+ configCommand
51
+ .option('-r, --remote [repository]', "Add remote repository config. Use '.' for the current repo.")
52
+ .action(async (options, command) => {
53
+ if (options.remote !== undefined) {
54
+ const repository = typeof options.remote === 'string' ? options.remote : '.';
55
+ await configRemoteAction(repository);
56
+ return;
57
+ }
58
+ command.help();
59
+ });
60
+ function registerRemoteRepositoryConfig(command, description, handlers) {
61
+ command
62
+ .description(description)
63
+ .argument('[repository]', "Repository to add. Use '.' for the current repo.", '.')
64
+ .action(handlers.action);
65
+ command
66
+ .command('add [repository]')
67
+ .description("Add a repository to Kodus. Use '.' for the current repo.")
68
+ .action(handlers.addAction);
69
+ command
70
+ .command('list')
71
+ .description('List repositories already configured in Kodus.')
72
+ .action(configRepoListAction);
73
+ }
74
+ registerRemoteRepositoryConfig(configCommand.command('remote'), 'Manage remote repository configuration in Kodus.', {
75
+ action: configRemoteAction,
76
+ addAction: configRemoteAddAction,
77
+ });
78
+ const repoAliasCommand = configCommand.command('repo');
79
+ repoAliasCommand._hidden = true;
80
+ registerRemoteRepositoryConfig(repoAliasCommand, 'Manage remote repository configuration in Kodus.', {
81
+ action: configRepoAction,
82
+ addAction: configRepoAddAction,
83
+ });
84
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -10,11 +10,13 @@ hookCommand
10
10
  .option('--fast', 'Use fast mode for review (default: true)', true)
11
11
  .option('--no-fast', 'Disable fast mode for review')
12
12
  .option('--force', 'Overwrite existing hook without prompting')
13
- .action(installAction);
13
+ .option('--dry-run', 'Print planned changes without writing files', false)
14
+ .action((options, cmd) => installAction(options, cmd.optsWithGlobals()));
14
15
  hookCommand
15
16
  .command('uninstall')
16
17
  .description('Remove pre-push hook installed by kodus')
17
- .action(uninstallAction);
18
+ .option('--dry-run', 'Print planned changes without writing files', false)
19
+ .action((options, cmd) => uninstallAction(options, cmd.optsWithGlobals()));
18
20
  hookCommand
19
21
  .command('status')
20
22
  .description('Show pre-push hook status')
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/hook/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CACtD,gDAAgD,CACnD,CAAC;AAEF,WAAW;KACN,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CACH,sBAAsB,EACtB,iEAAiE,EACjE,UAAU,CACb;KACA,MAAM,CAAC,QAAQ,EAAE,0CAA0C,EAAE,IAAI,CAAC;KAClE,MAAM,CAAC,WAAW,EAAE,8BAA8B,CAAC;KACnD,MAAM,CAAC,SAAS,EAAE,2CAA2C,CAAC;KAC9D,MAAM,CAAC,aAAa,CAAC,CAAC;AAE3B,WAAW;KACN,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,eAAe,CAAC,CAAC;AAE7B,WAAW;KACN,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,YAAY,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/hook/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CACtD,gDAAgD,CACnD,CAAC;AAEF,WAAW;KACN,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CACH,sBAAsB,EACtB,iEAAiE,EACjE,UAAU,CACb;KACA,MAAM,CAAC,QAAQ,EAAE,0CAA0C,EAAE,IAAI,CAAC;KAClE,MAAM,CAAC,WAAW,EAAE,8BAA8B,CAAC;KACnD,MAAM,CAAC,SAAS,EAAE,2CAA2C,CAAC;KAC9D,MAAM,CAAC,WAAW,EAAE,6CAA6C,EAAE,KAAK,CAAC;KACzE,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;AAE7E,WAAW;KACN,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,WAAW,EAAE,6CAA6C,EAAE,KAAK,CAAC;KACzE,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;AAE/E,WAAW;KACN,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,YAAY,CAAC,CAAC"}
@@ -1,9 +1,11 @@
1
+ import type { GlobalOptions } from '../../types/index.js';
1
2
  declare const KODUS_MARKER = "# kodus-hook";
2
3
  declare function generateHookScript(failOn: string, fast: boolean): string;
3
4
  export declare function installAction(options: {
4
5
  failOn?: string;
5
6
  fast?: boolean;
6
7
  force?: boolean;
7
- }): Promise<void>;
8
+ dryRun?: boolean;
9
+ }, globalOpts?: GlobalOptions): Promise<void>;
8
10
  export { KODUS_MARKER, generateHookScript };
9
11
  //# sourceMappingURL=install.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/hook/install.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,YAAY,iBAAiB,CAAC;AAEpC,iBAAS,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAwDjE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDhB;AAED,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/hook/install.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAY1D,QAAA,MAAM,YAAY,iBAAiB,CAAC;AAEpC,iBAAS,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAwDjE;AAED,wBAAsB,aAAa,CAC/B,OAAO,EAAE;IACL,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB,EACD,UAAU,CAAC,EAAE,aAAa,GAC3B,OAAO,CAAC,IAAI,CAAC,CAsGf;AAED,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
@@ -5,6 +5,9 @@ import { confirm } from '@inquirer/prompts';
5
5
  import { gitService } from '../../services/git.service.js';
6
6
  import { exitWithCode } from '../../utils/cli-exit.js';
7
7
  import { cliError, cliInfo } from '../../utils/logger.js';
8
+ import { createCommandContext } from '../../utils/command-context.js';
9
+ import { buildAgentErrorEnvelope, buildAgentSuccessEnvelope, emitAgentEnvelope, } from '../../utils/command-output.js';
10
+ import { CommandError, normalizeCommandError, } from '../../utils/command-errors.js';
8
11
  const KODUS_MARKER = '# kodus-hook';
9
12
  function generateHookScript(failOn, fast) {
10
13
  const flags = [];
@@ -61,50 +64,86 @@ while read local_ref local_sha remote_ref remote_sha; do
61
64
  done
62
65
  `;
63
66
  }
64
- export async function installAction(options) {
67
+ export async function installAction(options, globalOpts) {
68
+ const ctx = createCommandContext('hook install', {
69
+ format: globalOpts?.format ?? 'terminal',
70
+ output: globalOpts?.output,
71
+ verbose: globalOpts?.verbose ?? false,
72
+ quiet: globalOpts?.quiet ?? false,
73
+ agent: globalOpts?.agent ?? false,
74
+ });
65
75
  const failOn = options.failOn ?? 'critical';
66
76
  const fast = options.fast !== false; // default true
67
- const isRepo = await gitService.isGitRepository();
68
- if (!isRepo) {
69
- cliError(chalk.red('Error: Not a git repository.'));
70
- exitWithCode(1);
71
- }
72
- const gitRoot = await gitService.getGitRoot();
73
- const hooksDir = path.join(gitRoot.trim(), '.git', 'hooks');
74
- const hookPath = path.join(hooksDir, 'pre-push');
75
- // Check if hook already exists
76
- let existingContent = null;
77
77
  try {
78
- existingContent = await fs.readFile(hookPath, 'utf-8');
79
- }
80
- catch {
81
- // File doesn't exist
82
- }
83
- if (existingContent) {
84
- const isKodusHook = existingContent.includes(KODUS_MARKER);
85
- if (!isKodusHook && !options.force) {
86
- const overwrite = await confirm({
87
- message: 'A pre-push hook already exists. Overwrite it?',
88
- default: false,
89
- });
90
- if (!overwrite) {
91
- cliInfo(chalk.yellow('Installation cancelled.'));
78
+ const isRepo = await gitService.isGitRepository();
79
+ if (!isRepo) {
80
+ throw new CommandError('NOT_IN_GIT_REPO', 'Not a git repository.');
81
+ }
82
+ const gitRoot = await gitService.getGitRoot();
83
+ const hooksDir = path.join(gitRoot.trim(), '.git', 'hooks');
84
+ const hookPath = path.join(hooksDir, 'pre-push');
85
+ // Check if hook already exists
86
+ let existingContent = null;
87
+ try {
88
+ existingContent = await fs.readFile(hookPath, 'utf-8');
89
+ }
90
+ catch {
91
+ // File doesn't exist
92
+ }
93
+ const isKodusHook = existingContent
94
+ ? existingContent.includes(KODUS_MARKER)
95
+ : false;
96
+ if (options.dryRun) {
97
+ const payload = {
98
+ action: 'hook install',
99
+ path: hookPath,
100
+ failOn,
101
+ fast,
102
+ hasExistingHook: !!existingContent,
103
+ wouldPromptForOverwrite: !!existingContent && !isKodusHook && !options.force,
104
+ };
105
+ if (ctx.isAgent) {
106
+ await emitAgentEnvelope(buildAgentSuccessEnvelope(ctx.command, payload, ctx.startedAt), ctx.outputFile);
92
107
  return;
93
108
  }
109
+ cliInfo(chalk.cyan('Dry run: no changes were made.'));
110
+ cliInfo(JSON.stringify(payload, null, 2));
111
+ return;
112
+ }
113
+ if (existingContent) {
114
+ if (!isKodusHook && !options.force) {
115
+ const overwrite = await confirm({
116
+ message: 'A pre-push hook already exists. Overwrite it?',
117
+ default: false,
118
+ });
119
+ if (!overwrite) {
120
+ cliInfo(chalk.yellow('Installation cancelled.'));
121
+ return;
122
+ }
123
+ }
124
+ }
125
+ // Ensure hooks directory exists
126
+ await fs.mkdir(hooksDir, { recursive: true });
127
+ // Write hook script
128
+ const script = generateHookScript(failOn, fast);
129
+ await fs.writeFile(hookPath, script, { mode: 0o755 });
130
+ cliInfo(chalk.green('✓ Pre-push hook installed successfully!'));
131
+ cliInfo(chalk.dim(` Path: ${hookPath}`));
132
+ cliInfo(chalk.dim(` Fail on: ${failOn}`));
133
+ cliInfo(chalk.dim(` Fast mode: ${fast ? 'yes' : 'no'}`));
134
+ cliInfo('');
135
+ cliInfo(chalk.dim('Skip with: KODUS_SKIP_HOOK=1 git push'));
136
+ cliInfo(chalk.dim('Remove with: kodus hook uninstall'));
137
+ }
138
+ catch (error) {
139
+ const normalized = normalizeCommandError(error);
140
+ if (ctx.isAgent) {
141
+ await emitAgentEnvelope(buildAgentErrorEnvelope(ctx.command, normalized, ctx.startedAt), ctx.outputFile);
142
+ exitWithCode(normalized.exitCode);
94
143
  }
144
+ cliError(chalk.red(`Error: ${normalized.message}`));
145
+ exitWithCode(normalized.exitCode);
95
146
  }
96
- // Ensure hooks directory exists
97
- await fs.mkdir(hooksDir, { recursive: true });
98
- // Write hook script
99
- const script = generateHookScript(failOn, fast);
100
- await fs.writeFile(hookPath, script, { mode: 0o755 });
101
- cliInfo(chalk.green('✓ Pre-push hook installed successfully!'));
102
- cliInfo(chalk.dim(` Path: ${hookPath}`));
103
- cliInfo(chalk.dim(` Fail on: ${failOn}`));
104
- cliInfo(chalk.dim(` Fast mode: ${fast ? 'yes' : 'no'}`));
105
- cliInfo('');
106
- cliInfo(chalk.dim('Skip with: KODUS_SKIP_HOOK=1 git push'));
107
- cliInfo(chalk.dim('Remove with: kodus hook uninstall'));
108
147
  }
109
148
  export { KODUS_MARKER, generateHookScript };
110
149
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/hook/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/hook/install.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,5 @@
1
- export declare function uninstallAction(): Promise<void>;
1
+ import type { GlobalOptions } from '../../types/index.js';
2
+ export declare function uninstallAction(options?: {
3
+ dryRun?: boolean;
4
+ }, globalOpts?: GlobalOptions): Promise<void>;
2
5
  //# sourceMappingURL=uninstall.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/commands/hook/uninstall.ts"],"names":[],"mappings":"AAQA,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CA6BrD"}
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/commands/hook/uninstall.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAY1D,wBAAsB,eAAe,CACjC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,EAClC,UAAU,CAAC,EAAE,aAAa,GAC3B,OAAO,CAAC,IAAI,CAAC,CA0Ef"}